@getopenpay/openpay-js-react 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/.tsbuildinfo +1 -1
- package/dist/{Resource-CfKErfec-DlpGuztb.js → Resource-RDv_OYD--DOVnTQf8.js} +2 -2
- package/dist/{SimpleSpanProcessor-CXw-ziu3-QGCG84SQ.js → SimpleSpanProcessor-Bd-6B4X9-a_QNmJDG.js} +7 -7
- package/dist/{detect-resources-4bbJ7WPf-CYdFSFRa.js → detect-resources-DMhxBMbn-CFwz6AUc.js} +6 -6
- package/dist/{diag-api-BOobQ8x1-2TWGcU43.js → diag-api-D2LkPxpn-DzR6SHCy.js} +2 -2
- package/dist/{index-Dlwh9VF3-D0R4QXGa.js → index-52xvCCmQ-BCriUhy8.js} +2 -2
- package/dist/{index-Br9HFfCG-vtzqlJCB.js → index-BLOR260n-DBg_rw_q.js} +2 -2
- package/dist/{index-CQN2Mbb7-Cfawh33s.js → index-Bv4btlG--BgXZ8It_.js} +2 -2
- package/dist/{index-BOpQSX_J-Qw54e101.js → index-C0Xt-V6u-DKR4MQKn.js} +5 -5
- package/dist/{index-C10lsOiB-Cle1_Zli.js → index-CO9X9rD6-DMEmfuB6.js} +5 -5
- package/dist/{index-B1Y0ZN9p-C45aIcGD.js → index-CdfoeJAp-DGy9f5LV.js} +3 -3
- package/dist/{index-DiEv5xGW-BSgmjgC8.js → index-CfJbMSyU-DwTBDANB.js} +6 -6
- package/dist/{index-CWT2geZa-C3EZn8OZ.js → index-CyHGGg8O-B-FjeveS.js} +5 -5
- package/dist/{index-BGRANkJ2.js → index-VZYud60f.js} +10 -8
- package/dist/{index-BUFonG_6-D2RqL-qS.js → index-qx6PYu51-ffvgBpdC.js} +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/{metrics-api-CcfUhf8A-jo9swtW3.js → metrics-api-BE_EH1nB-CMvMqYuL.js} +2 -2
- package/dist/{suppress-tracing-DKPqeCeC-CAVRFCn3.js → suppress-tracing-DC92UyIm-DTVYi1he.js} +2 -2
- package/dist/{url-DYlrHgqQ-Ck2w5idr.js → url-D5ihpicR-nwwImGw7.js} +2 -2
- package/dist/{utils-DMlBLSDy-DC69TLv4.js → utils-BsYV6OtD-BJDXHCRo.js} +2 -2
- package/dist/{utils-BXJ8S2DO-fEN1IVi0.js → utils-cnUBBxg7-CQDXrQZ_.js} +4 -4
- package/package.json +1 -1
|
@@ -7975,7 +7975,8 @@ const vm = Y(
|
|
|
7975
7975
|
processor_specific_metadata: {
|
|
7976
7976
|
loop_customer: a.customer,
|
|
7977
7977
|
loop_payment_method: a.paymentMethod,
|
|
7978
|
-
loop_success: a.success
|
|
7978
|
+
loop_success: a.success,
|
|
7979
|
+
loop_payin_id: a.payinId
|
|
7979
7980
|
}
|
|
7980
7981
|
});
|
|
7981
7982
|
if (ie(`Confirm result: ${h}`), i.mode === "setup") {
|
|
@@ -8539,7 +8540,6 @@ const Rm = async ({ context: e, formCallbacks: t }) => {
|
|
|
8539
8540
|
Q("Stripe instance created", _);
|
|
8540
8541
|
const p = Ue(s), f = `${s[m.FIRST_NAME]} ${s[m.LAST_NAME]}`, y = {
|
|
8541
8542
|
return_url: new URL("/app/3ds/success/", e.baseUrl).toString(),
|
|
8542
|
-
setup_future_usage: "off_session",
|
|
8543
8543
|
payment_method: {
|
|
8544
8544
|
billing_details: {
|
|
8545
8545
|
email: s[m.EMAIL],
|
|
@@ -8821,12 +8821,14 @@ const Rm = async ({ context: e, formCallbacks: t }) => {
|
|
|
8821
8821
|
const y = typeof f.applePayPaymentRequest == "function" ? f.applePayPaymentRequest({}) : f.applePayPaymentRequest;
|
|
8822
8822
|
Wn(c, f.amount, f.pending, y, f.label);
|
|
8823
8823
|
}
|
|
8824
|
-
se("Showing PR dialog..."), c.show();
|
|
8825
8824
|
const l = await O(s);
|
|
8826
8825
|
if (!a.overridePaymentRequest) {
|
|
8827
|
-
const f = l.mode === "setup"
|
|
8828
|
-
|
|
8826
|
+
const f = l.mode === "setup";
|
|
8827
|
+
oe(s, l.token, f, void 0).then((y) => {
|
|
8828
|
+
c.isShowing() || Wn(c, y, !1, void 0, "Total");
|
|
8829
|
+
});
|
|
8829
8830
|
}
|
|
8831
|
+
se("Showing PR dialog..."), c.show();
|
|
8830
8832
|
const u = await Ku(c);
|
|
8831
8833
|
se("Stripe PM added event:", u), se("Merging PM fields with form fields...");
|
|
8832
8834
|
const d = Qm(r, u), h = B(d, o.get.onValidationError);
|
|
@@ -9302,7 +9304,7 @@ let no;
|
|
|
9302
9304
|
const gf = async (e, t) => {
|
|
9303
9305
|
if (typeof window > "u")
|
|
9304
9306
|
return;
|
|
9305
|
-
const r = await import("./index-
|
|
9307
|
+
const r = await import("./index-C0Xt-V6u-DKR4MQKn.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: a, WebTracerProvider: i } = r, s = await import("./index-CfJbMSyU-DwTBDANB.js"), { FetchInstrumentation: c } = s, l = await import("./index-qx6PYu51-ffvgBpdC.js"), { ZoneContextManager: u } = l, d = await import("./index-CyHGGg8O-B-FjeveS.js"), { registerInstrumentations: h } = d, _ = await import("./index-52xvCCmQ-BCriUhy8.js"), { Resource: p } = _, f = await import("./detect-resources-DMhxBMbn-CFwz6AUc.js").then((ft) => ft.d), { detectResourcesSync: y } = f, w = await import("./index-Bv4btlG--BgXZ8It_.js"), { OTLPTraceExporter: g } = w, v = await import("./index-CdfoeJAp-DGy9f5LV.js"), { B3Propagator: C, B3InjectEncoding: A } = v, x = await import("./index-BLOR260n-DBg_rw_q.js"), { BatchSpanProcessor: j } = x;
|
|
9306
9308
|
Fr(`Initializing tracer with version ${e} and baseUrl ${t}`);
|
|
9307
9309
|
const me = wf(t);
|
|
9308
9310
|
Fr(`Using collector URL ${me}`);
|
|
@@ -9915,7 +9917,7 @@ const Pf = (e, t, r) => {
|
|
|
9915
9917
|
W()?.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Vu(), this.registeredElements = null, delete window.ojs, b("form_destroyed");
|
|
9916
9918
|
}, this.updateCallbacks = (a) => {
|
|
9917
9919
|
this.formCallbacks.setCallbacks(a);
|
|
9918
|
-
}, Wt.assignAsSingleton(this), this.ojsVersion = "0.5.
|
|
9920
|
+
}, Wt.assignAsSingleton(this), this.ojsVersion = "0.5.22", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = af.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ke()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Ef(), this.deviceToken = ua(), qu();
|
|
9919
9921
|
const { framework: r, version: o } = lf();
|
|
9920
9922
|
zo(this.baseUrl).then((a) => {
|
|
9921
9923
|
if (!Br.current.isSuccess) {
|
|
@@ -10118,4 +10120,4 @@ export {
|
|
|
10118
10120
|
et as x,
|
|
10119
10121
|
ld as y
|
|
10120
10122
|
};
|
|
10121
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA3fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgRmllbGROYW1lMltcIklTX0JVU0lORVNTX1BVUkNIQVNFXCJdID0gXCJpc0J1c2luZXNzUHVyY2hhc2VcIjtcbiAgRmllbGROYW1lMltcIkJVU0lORVNTX05BTUVcIl0gPSBcImJ1c2luZXNzTmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiVEFYX0lEXCJdID0gXCJ0YXhJZFwiO1xuICBGaWVsZE5hbWUyW1wiVEFYX0lEX1RZUEVcIl0gPSBcInRheElkVHlwZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5lbnVtKFtcImNhcmRcIiwgXCJjYXJkLW51bWJlclwiLCBcImNhcmQtZXhwaXJ5XCIsIFwiY2FyZC1jdmNcIiwgXCJjZGUtYnJpZGdlXCJdKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyU3R5bGU6IHokMS5vYmplY3Qoe1xuICAgIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogeiQxLm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogVGhlIGNhcmQgaWNvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNhcmQgbnVtYmVyIGlucHV0IGZpZWxkXG4gICAqIEl0IHdvbid0IGFmZmVjdCBhZnRlciB0aGUgaWNvbiBjaGFuZ2VkIHRvIGNhcmQgYnJhbmQgYWZ0ZXIgdGhlIHVzZXIgaW5wdXQgdGhlIGNhcmQgbnVtYmVyXG4gICAqL1xuICBpY29uOiB6JDEub2JqZWN0KHtcbiAgICBjb2xvcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYnVzaW5lc3NOYW1lXCIgLyogQlVTSU5FU1NfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFwiIC8qIFRBWF9JRCAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFR5cGVcIiAvKiBUQVhfSURfVFlQRSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBzb3J0X2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogeiQxLnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHokMS5vYmplY3QoeyBlcnJvcjogeiQxLnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHokMS5vYmplY3Qoe1xuICBsaW5lMTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX3RheF9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX3RheF9pZF90eXBlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBidXNpbmVzc19uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRheF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0YXhfaWRfdHlwZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7fSk7XG56JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKCguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWR9O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH19O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyQxKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbm5ldyBNZXRyaWNzUXVldWUoKTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IHsgbG9nX18sIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IGNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gIHBheW1lbnRfbWV0aG9kLFxuICBpc0J1c2luZXNzUHVyY2hhc2Vcbn0sIG5vbkNkZUZvcm1JbnB1dHMpID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX0JVU0lORVNTX1BVUkNIQVNFXSA/PyBpc0J1c2luZXNzUHVyY2hhc2UpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQlVTSU5FU1NfTkFNRV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kMShcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGV9KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7fSkubnVsbGlzaCgpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogeiQxLnN0cmluZygpLFxuICBkZF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBkZF90b2tlbjogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhZmZpcm1cIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhZnRlcnBheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImtsYXJuYVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiY2FyZFwiXSA9IFwiY2FyZFwiO1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wia2xhcm5hXCJdID0gXCJrbGFybmFcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZmZpcm1cIl0gPSBcImFmZmlybVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFmdGVycGF5XCJdID0gXCJhZnRlcnBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcInN0cmlwZUxpbmtcIl0gPSBcInN0cmlwZS1saW5rXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0S2xhcm5hUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3Qga2xhcm5hSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3QgYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5haXJ3YWxsZXhLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlS2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAga2xhcm5hSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGtsYXJuYUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZToga2xhcm5hSW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0S2xhcm5hRmxvdyhrbGFybmFJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRLbGFybmFGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgS2xhcm5hIHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBLbGFybmEgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IGdldEFmZmlybVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFmZmlybUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmZmlybUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlQWZmaXJtLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUFmZmlybUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZmaXJtSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUFmZmlybUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFmZmlybUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZmaXJtSW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QWZmaXJtRmxvdyhhZmZpcm1Jbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBZmZpcm1GbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQWZmaXJtIHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBZmZpcm0gcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IGdldEFmdGVycGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYWZ0ZXJwYXlJbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlQWZ0ZXJwYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGFmdGVycGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZ0ZXJwYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFmdGVycGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QWZ0ZXJwYXlGbG93KGFmdGVycGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWZ0ZXJwYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQWZ0ZXJwYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmdGVycGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBFbGVtZW50c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgZm9ybUlkOiBcIlwiLFxuICBmb3JtSGVpZ2h0OiBcIlwiLFxuICByZWZlcnJlcjogdm9pZCAwLFxuICBjaGVja291dFNlY3VyZVRva2VuOiB2b2lkIDAsXG4gIHJlZ2lzdGVySWZyYW1lOiAoKSA9PiB7XG4gIH0sXG4gIGJhc2VVcmw6IFwiXCJcbn0pO1xuXG5jb25zdCB1c2VPcGVuUGF5RWxlbWVudHMgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEVsZW1lbnRzQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVzZU9wZW5QYXlFbGVtZW50cyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIE9wZW5QYXlFbGVtZW50c1Byb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC9gLCBiYXNlVXJsKTtcbiAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IHVybC50b1N0cmluZygpLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZnVuY3Rpb24gRm8oZSwgdCkge1xuICB2YXIgciA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgciA/IHIoZSwgdCkgOiBlLl9fcHJvdG9fXyA9IHQ7XG59XG5mdW5jdGlvbiBUbyhlLCB0KSB7XG4gIHQgPT09IHZvaWQgMCAmJiAodCA9IGUuY29uc3RydWN0b3IpO1xuICB2YXIgciA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICByICYmIHIoZSwgdCk7XG59XG52YXIgTm8gPSAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGEuX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChhW3NdID0gaVtzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0pKCksIExvID0gKGZ1bmN0aW9uKGUpIHtcbiAgTm8odCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBhID0gdGhpcy5jb25zdHJ1Y3RvciwgaSA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBhLm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pLCBGbyhpLCBhLnByb3RvdHlwZSksIFRvKGkpLCBpO1xuICB9XG4gIHJldHVybiB0O1xufSkoRXJyb3IpO1xuY29uc3QgVCA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkXCIgfSksIFAgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIEQgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG52YXIgcCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCBlLkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgZS5QSE9ORSA9IFwicGhvbmVcIiwgZS5FTUFJTCA9IFwiZW1haWxcIiwgZS5MSU5FMSA9IFwibGluZTFcIiwgZS5MSU5FMiA9IFwibGluZTJcIiwgZS5MSU5FMyA9IFwibGluZTNcIiwgZS5DSVRZID0gXCJjaXR5XCIsIGUuU1RBVEUgPSBcInN0YXRlXCIsIGUuQ09VTlRSWSA9IFwiY291bnRyeVwiLCBlLlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIGUuU0hJUFBJTkdfTElORTEgPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIsIGUuU0hJUFBJTkdfTElORTIgPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIsIGUuU0hJUFBJTkdfTElORTMgPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIsIGUuU0hJUFBJTkdfQ0lUWSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiLCBlLlNISVBQSU5HX1NUQVRFID0gXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiLCBlLlNISVBQSU5HX0NPVU5UUlkgPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiwgZS5TSElQUElOR19aSVBfQ09ERSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiLCBlLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyA9IFwiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiwgZS5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCBlLklTX0JVU0lORVNTX1BVUkNIQVNFID0gXCJpc0J1c2luZXNzUHVyY2hhc2VcIiwgZS5CVVNJTkVTU19OQU1FID0gXCJidXNpbmVzc05hbWVcIiwgZS5UQVhfSUQgPSBcInRheElkXCIsIGUuVEFYX0lEX1RZUEUgPSBcInRheElkVHlwZVwiLCBlKSkocCB8fCB7fSk7XG5jb25zdCBvbiA9IHokMS5uYXRpdmVFbnVtKHApO1xudmFyIGFuID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShhbiB8fCB7fSk7XG5jb25zdCBzbiA9IHokMS5uYXRpdmVFbnVtKGFuKSwgY24gPSB6JDEudW5pb24oW29uLCBzbl0pO1xudmFyIGdlID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRCA9IFwiY2FyZFwiLCBlLkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCBlLkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgZSkpKGdlIHx8IHt9KTtcbmNvbnN0IE1vID0geiQxLmVudW0oW1wiY2FyZFwiLCBcImNhcmQtbnVtYmVyXCIsIFwiY2FyZC1leHBpcnlcIiwgXCJjYXJkLWN2Y1wiLCBcImNkZS1icmlkZ2VcIl0pLCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogRCh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB4byA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KSwgVHQgPSB6JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBQLFxuICBjb2xvcjogUCxcbiAgZm9udEZhbWlseTogUCxcbiAgZm9udFNpemU6IFAsXG4gIGZvbnRXZWlnaHQ6IFAsXG4gIG1hcmdpbjogUCxcbiAgcGFkZGluZzogUCxcbiAgbGV0dGVyU3BhY2luZzogUCxcbiAgbGluZUhlaWdodDogUCxcbiAgaGlkZUljb246IFAsXG4gIHBsYWNlaG9sZGVyU3R5bGU6IHokMS5vYmplY3Qoe1xuICAgIGNvbG9yOiBQLFxuICAgIGZvbnRTaXplOiBQLFxuICAgIGZvbnRXZWlnaHQ6IFAsXG4gICAgZm9udEZhbWlseTogUCxcbiAgICBsZXR0ZXJTcGFjaW5nOiBQLFxuICAgIGxpbmVIZWlnaHQ6IFBcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5UdC5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IFAsXG4gIHBsYWNlaG9sZGVyOiB6JDEub2JqZWN0KHtcbiAgICBjYXJkTnVtYmVyOiBQLFxuICAgIGV4cGlyeTogUCxcbiAgICBjdmM6IFBcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5UdC5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IFAsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogeiQxLm9iamVjdCh7XG4gICAgY29sb3I6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuVHQuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBQLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuVHQuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBQLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgcGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgRG8gPSBwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgVW8gPSB6JDEub2JqZWN0KHsgdHlwZTogRG8gfSksIE9vID0gcGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBqbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBPbyxcbiAgZWxlbWVudFR5cGU6IHNuLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCAkbyA9IHBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBHbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiAkbyxcbiAgbWVzc2FnZTogVCxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIHFvID0gcGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgVm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogcW8sXG4gIGVsZW1lbnRUeXBlOiBjbixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBUXG59KSwgQm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFQsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFAsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShGdClcbn0pLCBIbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEtvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgVWUgPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IFQuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBULFxuICBsYXN0TmFtZTogVCxcbiAgcHJvbW90aW9uQ29kZTogUCxcbiAgbGluZTE6IFAsXG4gIGxpbmUyOiBQLFxuICBsaW5lMzogUCxcbiAgY2l0eTogUCxcbiAgc3RhdGU6IFAsXG4gIGNvdW50cnk6IFQsXG4gIHppcENvZGU6IFAsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IFAsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBQLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBQLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogUCxcbiAgYnVzaW5lc3NOYW1lOiBQLFxuICB0YXhJZDogUCxcbiAgdGF4SWRUeXBlOiBQXG59KSwgWW8gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IFQuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBQLFxuICBsYXN0TmFtZTogUCxcbiAgcHJvbW90aW9uQ29kZTogUCxcbiAgbGluZTE6IFAsXG4gIGxpbmUyOiBQLFxuICBsaW5lMzogUCxcbiAgY2l0eTogUCxcbiAgc3RhdGU6IFAsXG4gIGNvdW50cnk6IFQsXG4gIHppcENvZGU6IFAsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IFAsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBQLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBQLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogUCxcbiAgYnVzaW5lc3NOYW1lOiBQLFxuICB0YXhJZDogUCxcbiAgdGF4SWRUeXBlOiBQXG59KTtcbnokMS5vYmplY3Qoe1xuICBsaW5lMTogVCxcbiAgY2l0eTogVCxcbiAgc3RhdGU6IFQsXG4gIGNvdW50cnk6IFRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IFQsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IFRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBULFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBULFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogVCxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogVCxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogVFxufSk7XG5jb25zdCBXbyA9IHBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIEpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFdvLFxuICBzZXNzaW9uSWQ6IFQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRnQsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogUCxcbiAgcGF5bWVudFJvdXRlSWQ6IFBcbn0pLmV4dGVuZChVZS5zaGFwZSksIFpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIFFvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpLFxuICBwYXltZW50TWV0aG9kSWQ6IFBcbn0pLCBYbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgVW8sXG4gIGpvLFxuICBHbyxcbiAgVm8sXG4gIHpvLFxuICBCbyxcbiAgSm8sXG4gIFpvLFxuICBRbyxcbiAgSG8sXG4gIEtvXG5dKSwgZWEgPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogWG8sXG4gIG5vbmNlOiBULFxuICBmb3JtSWQ6IFQsXG4gIGVsZW1lbnRJZDogVFxufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBUXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgdHQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3NvcnNfdXNlZDogRCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCB0YSA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgcmEgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KHRhKVxufSksIG5hID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIHJhXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBGdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogVWUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBEKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEZ0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBVZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoeiQxLnN0cmluZygpKVxufSk7XG52YXIgRiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgZS5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIGUuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgZSkpKEYgfHwge30pO1xuY29uc3QgbG4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBvYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGFhID0geiQxLm9iamVjdCh7XG4gIGJhbmtfbmFtZTogeiQxLnN0cmluZygpLFxuICBkaXNwbGF5X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6JDEub2JqZWN0KHtcbiAgICBsb2dvX3VybDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbn0pLCB1biA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogRCh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGF2YWlsYWJsZV9iYW5rczogRCh6JDEuYXJyYXkoYWEpKVxufSksIGlhID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSksIHNhID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KHhvKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IEQodHQpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IEQoeiQxLmFycmF5KHVuKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IEQoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogRCh0dClcbn0pLCBjYSA9IHokMS5vYmplY3Qoe1xuICBpbnN0aXR1dGlvbk51bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogY2Eub3B0aW9uYWwoKVxufSk7XG5jb25zdCBsYSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IGxhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgdWEgPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB1YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IGRhID0geiQxLm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogeiQxLnN0cmluZygpXG59KSwgcGEgPSB6JDEub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKClcbn0pLCBtYSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBzb3J0X2NvZGU6IHokMS5zdHJpbmcoKVxufSksIGZhID0geiQxLm9iamVjdCh7XG4gIGliYW46IHokMS5zdHJpbmcoKVxufSksIF9hID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6JDEudW5pb24oW1xuICAgIGRhLFxuICAgIHBhLFxuICAgIG1hLFxuICAgIGZhLFxuICAgIHokMS5vYmplY3QoeyBlcnJvcjogeiQxLnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pLCBFID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgeWEgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgZG4gPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IEUoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IEUoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IEUoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBFKHokMS5udW1iZXIoKSlcbn0pLCBwbiA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogRSh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBFKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IEUoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGhhID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGdhID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IEUoaGEpXG59KSwgcWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IEUoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IEUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgd2EgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIHZhID0geiQxLm9iamVjdCh7XG4gIGlkOiBFKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IEUoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogRSh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheSh3YSksXG4gIHRyaWFsX3N0YXJ0OiBFKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogRSh6JDEuc3RyaW5nKCkpXG59KSwgbW4gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIGJhID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkobW4pLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgUGEgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBkblxufSksIEVhID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KFBhKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBFKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoYmEpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KG1uKVxufSksIEFyID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheSh2YSksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoRWEpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IEUoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpLFxuICBwYXltZW50X21ldGhvZF9pZDogRSh6JDEuc3RyaW5nKCkpXG59KSwgZm4gPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQXIsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogRShBciksXG4gIGNvdXBvbnM6IHokMS5hcnJheShkbilcbn0pLCBTciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBFKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBFKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHBuKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IGdhLFxuICBzdWJzX3ByZXZpZXc6IEUoZm4pLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShxZSksXG4gIHJldHVybl91cmw6IEUoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IEUoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBFKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIF9uID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoU3Iuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChTci5zaGFwZSlcbl0pLCBDYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBBYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW19uLCBDYSwgQWFdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHQgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBQdCxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUHQub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHBuKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogRSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBFKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgeW4gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFNhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShTYSk7XG5jb25zdCBrYSA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkX3R5cGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogUHQsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBQdC5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBJYSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgaG4gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KElhKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSksIFJhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogRSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFlLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaG4ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQoa2Euc2hhcGUpLmV4dGVuZChSYS5zaGFwZSk7XG5jb25zdCBnbiA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IEUoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBZbyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBxZSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFVlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IEUoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaG4ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBFKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgRmEgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBFKHR0KSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogRSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBFKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogRSh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogRSh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogRSh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogRSh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBFKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBFKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IEUoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IEUoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IEUoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogRSh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IEUoeiQxLnN0cmluZygpKSxcbiAgYnVzaW5lc3NfbmFtZTogRSh6JDEuc3RyaW5nKCkpLFxuICB0YXhfaWQ6IEUoeiQxLnN0cmluZygpKSxcbiAgdGF4X2lkX3R5cGU6IEUoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogRSh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IEUoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogRSh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IEUoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBFKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IEUoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogRSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUYSA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IE5hID0geiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBFKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IExhID0geiQxLm9iamVjdCh7fSksIE1hID0geiQxLm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHokMS5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoeiQxLmFueSgpKSwgeGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBEYSA9IHokMS5hcnJheSh4YSksIFVhID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIE9hID0geiQxLmFycmF5KFVhKSwgamEgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFp0ID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBqYVt0XSA/PyBlO1xufSwgJGEgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0sIEdhID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gWnQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBg4oCiICR7WnQoci5tc2cpfWApLmpvaW4oYFxuYCl9YCwgcWEgPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYC0gJHtyLnBhdGguam9pbihcIi9cIil9OiAke3IubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIGFlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICBpZiAoJGEoZS5tZXNzYWdlKSkge1xuICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBEYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IEdhKHQpIDogT2Euc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBxYSh0KSA6IChjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIHVua25vd24gc3RyaW5naWZpZWQgSlNPTiBvYmplY3Q6XG4ke2UubWVzc2FnZX1gKSwgZS5tZXNzYWdlKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBadChlLm1lc3NhZ2UpO1xuICBpZiAodHlwZW9mIGUgPT0gXCJvYmplY3RcIilcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB0ICsgXCJcIjtcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gZSArIFwiXCI7XG59LCBWYSA9IChlLCB0LCByKSA9PiAoKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdCguLi5uKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIHIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2V9KTpgLCBhKTtcbiAgICByZXR1cm47XG4gIH1cbn0pLCB6YSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCB3biA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9IHRydWU7XG59LCBCYSA9ICgpID0+IHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgd24pO1xufSwgSGEgPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHduKTtcbn0sIFYgPSAoZSkgPT4ge1xuICBsZXQgdCA9IGZhbHNlO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIEJhKCksIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpLCB2KFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbiA9IGF3YWl0IGUocik7XG4gICAgICBpZiAodihcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5uXG4gICAgICB9KSwgSGkoKSwgbi5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKG4ucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKG4ubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIG4ucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBuLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIG4ucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIG4ucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXSxcbiAgICAgICAgICBuLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCA/PyBcIlwiXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7bn1gKTtcbiAgICB9IGNhdGNoIChuKSB7XG4gICAgICB0ID0gZmFsc2U7XG4gICAgICBjb25zdCBhID0gYWUobiksIGkgPSBhd2FpdCBqbihyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihhLCBpKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlOiBhLCBlcnJvckNvZGU6IGksIGVycm9yOiBuIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ID0gZmFsc2UsIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgSGEoKTtcbiAgICB9XG4gIH07XG59LCBjZSA9IChlKSA9PiBhc3luYyAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gayhcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IGFlKHIpLCBpID0gYXdhaXQgam4odC5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGEpO1xuICAgIHJldHVybiBuKGksIGEsIHIpLCB2KFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBhLCBlcnJvckNvZGU6IGksIGVycm9yOiByIH0pLCB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBhLCBlcnJvckNvZGU6IGksIGlzTG9hZGluZzogZmFsc2UgfTtcbiAgfVxufSwgayA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH0sIHIgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IHQsXG4gICAgZXJyOiByLFxuICAgIGxvZ19fOiB0LFxuICAgIGVycl9fOiByXG4gIH07XG59O1xudmFyIFF0ID0gZnVuY3Rpb24oZSwgdCkge1xuICByZXR1cm4gUXQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihyLCBuKSB7XG4gICAgci5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBmb3IgKHZhciBhIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBhKSAmJiAoclthXSA9IG5bYV0pO1xuICB9LCBRdChlLCB0KTtcbn07XG5mdW5jdGlvbiBFZShlLCB0KSB7XG4gIGlmICh0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCIgJiYgdCAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyh0KSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIFF0KGUsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBlO1xuICB9XG4gIGUucHJvdG90eXBlID0gdCA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUodCkgOiAoci5wcm90b3R5cGUgPSB0LnByb3RvdHlwZSwgbmV3IHIoKSk7XG59XG5mdW5jdGlvbiBLYShlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIGEoaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihzKSB7XG4gICAgICBzKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgcykge1xuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBzKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIHMobSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gaShkLnZhbHVlKSA6IGEoZC52YWx1ZSkudGhlbihsLCBjKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHZuKGUsIHQpIHtcbiAgdmFyIHIgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoaVswXSAmIDEpIHRocm93IGlbMV07XG4gICAgcmV0dXJuIGlbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGEsIGksIHMgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBzLm5leHQgPSBsKDApLCBzLnRocm93ID0gbCgxKSwgcy5yZXR1cm4gPSBsKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoc1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBzO1xuICBmdW5jdGlvbiBsKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGMoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgcyAmJiAocyA9IDAsIHVbMF0gJiYgKHIgPSAwKSksIHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgYSAmJiAoaSA9IHVbMF0gJiAyID8gYS5yZXR1cm4gOiB1WzBdID8gYS50aHJvdyB8fCAoKGkgPSBhLnJldHVybikgJiYgaS5jYWxsKGEpLCAwKSA6IGEubmV4dCkgJiYgIShpID0gaS5jYWxsKGEsIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAoYSA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIGEgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIGEgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuZnVuY3Rpb24gT2UoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIEV0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gQ3QoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgaTsgbiA8IGE7IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBNZShlKTtcbn1cbmZ1bmN0aW9uIFlhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBhLCBpID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgbChcIm5leHRcIiksIGwoXCJ0aHJvd1wiKSwgbChcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXykudGhlbih5LCBtKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwoeSwgXykge1xuICAgIG5beV0gJiYgKGFbeV0gPSBmdW5jdGlvbihnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odywgaCkge1xuICAgICAgICBpLnB1c2goW3ksIGcsIHcsIGhdKSA+IDEgfHwgYyh5LCBnKTtcbiAgICAgIH0pO1xuICAgIH0sIF8gJiYgKGFbeV0gPSBfKGFbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gYyh5LCBfKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblt5XShfKSk7XG4gICAgfSBjYXRjaCAoZykge1xuICAgICAgZihpWzBdWzNdLCBnKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIE1lID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBtKSA6IGYoaVswXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgYyhcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gbSh5KSB7XG4gICAgYyhcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIGYoeSwgXykge1xuICAgIHkoXyksIGkuc2hpZnQoKSwgaS5sZW5ndGggJiYgYyhpWzBdWzBdLCBpWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gV2EoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIE9lID09IFwiZnVuY3Rpb25cIiA/IE9lKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4oaSkge1xuICAgIHJbaV0gPSBlW2ldICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihsLCBjKSB7XG4gICAgICAgIHMgPSBlW2ldKHMpLCBhKGwsIGMsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEoaSwgcywgbCwgYykge1xuICAgIFByb21pc2UucmVzb2x2ZShjKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGkoeyB2YWx1ZTogdSwgZG9uZTogbCB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gWShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBOdChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIHp0ID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gQXQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIHN0ID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHQsIHRoaXMuY2xvc2VkID0gZmFsc2UsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByLCBuLCBhLCBpO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gT2UocyksIGMgPSBsLm5leHQoKTsgIWMuZG9uZTsgYyA9IGwubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gYy52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGcgfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChyID0gbC5yZXR1cm4pICYmIHIuY2FsbChsKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChZKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgIGkgPSBnIGluc3RhbmNlb2YgenQgPyBnLmVycm9ycyA6IFtnXTtcbiAgICAgICAgfVxuICAgICAgdmFyIG0gPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgZiA9IE9lKG0pLCB5ID0gZi5uZXh0KCk7ICF5LmRvbmU7IHkgPSBmLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIF8gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga3IoXyk7XG4gICAgICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgICAgIGkgPSBpID8/IFtdLCBnIGluc3RhbmNlb2YgenQgPyBpID0gQ3QoQ3QoW10sIEV0KGkpKSwgRXQoZy5lcnJvcnMpKSA6IGkucHVzaChnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGcpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogZyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGEgPSBmLnJldHVybikgJiYgYS5jYWxsKGYpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpKVxuICAgICAgICB0aHJvdyBuZXcgenQoaSk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAga3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIEF0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgQXQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHQuY2xvc2VkID0gdHJ1ZSwgdDtcbiAgfSkoKSwgZTtcbn0pKCksIGJuID0gc3QuRU1QVFk7XG5mdW5jdGlvbiBQbihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2Ygc3QgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgWShlLnJlbW92ZSkgJiYgWShlLmFkZCkgJiYgWShlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIGtyKGUpIHtcbiAgWShlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBKYSA9IHtcbiAgUHJvbWlzZTogdm9pZCAwXG59LCBaYSA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIEN0KFtlLCB0XSwgRXQocikpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFyVGltZW91dChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIEVuKGUpIHtcbiAgWmEuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIElyKCkge1xufVxuZnVuY3Rpb24gZ3QoZSkge1xuICBlKCk7XG59XG52YXIgaXIgPSAoZnVuY3Rpb24oZSkge1xuICBFZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdmFyIG4gPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSBmYWxzZSwgciA/IChuLmRlc3RpbmF0aW9uID0gciwgUG4ocikgJiYgci5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGVpLCBuO1xuICB9XG4gIHJldHVybiB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICByZXR1cm4gbmV3IFh0KHIsIG4sIGEpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQocik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9IHRydWUsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSB0cnVlLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSB0cnVlLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHQucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0O1xufSkoc3QpLCBRYSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgcHQobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBwdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBwdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBwdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0pKCksIFh0ID0gKGZ1bmN0aW9uKGUpIHtcbiAgRWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgYSkge1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgcmV0dXJuIFkocikgfHwgIXIgPyBzID0ge1xuICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICB9IDogcyA9IHIsIGkuZGVzdGluYXRpb24gPSBuZXcgUWEocyksIGk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KShpcik7XG5mdW5jdGlvbiBwdChlKSB7XG4gIEVuKGUpO1xufVxuZnVuY3Rpb24gWGEoZSkge1xuICB0aHJvdyBlO1xufVxudmFyIGVpID0ge1xuICBjbG9zZWQ6IHRydWUsXG4gIG5leHQ6IElyLFxuICBlcnJvcjogWGEsXG4gIGNvbXBsZXRlOiBJclxufSwgc3IgPSAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSkoKTtcbmZ1bmN0aW9uIHRpKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiByaShlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IHRpIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYShuKTtcbiAgICB9LCByKTtcbiAgfTtcbn1cbnZhciB3ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBpID0gb2kodCkgPyB0IDogbmV3IFh0KHQsIHIsIG4pO1xuICAgIHJldHVybiBndChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgbCA9IHMub3BlcmF0b3IsIGMgPSBzLnNvdXJjZTtcbiAgICAgIGkuYWRkKGwgPyBsLmNhbGwoaSwgYykgOiBjID8gYS5fc3Vic2NyaWJlKGkpIDogYS5fdHJ5U3Vic2NyaWJlKGkpKTtcbiAgICB9KSwgaTtcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBScihyKSwgbmV3IHIoZnVuY3Rpb24oYSwgaSkge1xuICAgICAgdmFyIHMgPSBuZXcgWHQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQobCk7XG4gICAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgICAgaShjKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGksXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbc3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gcmkodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBScih0KSwgbmV3IHQoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIGk7XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBpID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4oaSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSkoKTtcbmZ1bmN0aW9uIFJyKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IGUgPz8gSmEuUHJvbWlzZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBuaShlKSB7XG4gIHJldHVybiBlICYmIFkoZS5uZXh0KSAmJiBZKGUuZXJyb3IpICYmIFkoZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBvaShlKSB7XG4gIHJldHVybiBlICYmIGUgaW5zdGFuY2VvZiBpciB8fCBuaShlKSAmJiBQbihlKTtcbn1cbmZ1bmN0aW9uIGFpKGUpIHtcbiAgcmV0dXJuIFkoZT8ubGlmdCk7XG59XG5mdW5jdGlvbiBpaShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgaWYgKGFpKHQpKVxuICAgICAgcmV0dXJuIHQubGlmdChmdW5jdGlvbihyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUociwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBzaShlLCB0LCByLCBuLCBhKSB7XG4gIHJldHVybiBuZXcgY2koZSwgdCwgciwgbiwgYSk7XG59XG52YXIgY2kgPSAoZnVuY3Rpb24oZSkge1xuICBFZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBhLCBpLCBzLCBsKSB7XG4gICAgdmFyIGMgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYy5vbkZpbmFsaXplID0gcywgYy5zaG91bGRVbnN1YnNjcmliZSA9IGwsIGMuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGMuX2Vycm9yID0gaSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkodSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgYy5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgYztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KShpciksIGxpID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBDbiA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gZmFsc2UsIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHIub2JzZXJ2ZXJzID0gW10sIHIuaXNTdG9wcGVkID0gZmFsc2UsIHIuaGFzRXJyb3IgPSBmYWxzZSwgci50aHJvd25FcnJvciA9IG51bGwsIHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSBuZXcgRnIodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSByLCBuO1xuICB9LCB0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBsaSgpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBndChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBpO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSBPZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBsID0gcy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGMgPSBsLnZhbHVlO1xuICAgICAgICAgICAgYy5uZXh0KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAoaSA9IHMucmV0dXJuKSAmJiBpLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZ3QoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gdHJ1ZSwgbi50aHJvd25FcnJvciA9IHI7XG4gICAgICAgIGZvciAodmFyIGEgPSBuLm9ic2VydmVyczsgYS5sZW5ndGg7IClcbiAgICAgICAgICBhLnNoaWZ0KCkuZXJyb3Iocik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGd0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHIpLCB0aGlzLl9pbm5lclN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgYSA9IHRoaXMsIGkgPSBhLmhhc0Vycm9yLCBzID0gYS5pc1N0b3BwZWQsIGwgPSBhLm9ic2VydmVycztcbiAgICByZXR1cm4gaSB8fCBzID8gYm4gOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgbC5wdXNoKHIpLCBuZXcgc3QoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBBdChsLCByKTtcbiAgICB9KSk7XG4gIH0sIHQucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgYSA9IG4uaGFzRXJyb3IsIGkgPSBuLnRocm93bkVycm9yLCBzID0gbi5pc1N0b3BwZWQ7XG4gICAgYSA/IHIuZXJyb3IoaSkgOiBzICYmIHIuY29tcGxldGUoKTtcbiAgfSwgdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgd2UoKTtcbiAgICByZXR1cm4gci5zb3VyY2UgPSB0aGlzLCByO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gbmV3IEZyKHIsIG4pO1xuICB9LCB0O1xufSkod2UpLCBGciA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gciwgYS5zb3VyY2UgPSBuLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIHJldHVybiAoYSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogYm47XG4gIH0sIHQ7XG59KShDbiksIHVpID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9XG59LCBkaSA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0O1xufSkoc3QpLCBUciA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgQ3QoW2UsIHRdLCBFdChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHBpID0gKGZ1bmN0aW9uKGUpIHtcbiAgRWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuc2NoZWR1bGVyID0gciwgYS53b3JrID0gbiwgYS5wZW5kaW5nID0gZmFsc2UsIGE7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBhO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gcjtcbiAgICB2YXIgaSA9IHRoaXMuaWQsIHMgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gaSAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzLCBpLCBuKSksIHRoaXMucGVuZGluZyA9IHRydWUsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBUci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIGEpO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgVHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGEgPSBmYWxzZSwgaTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSB0cnVlLCBpID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIGk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gci5pZCwgYSA9IHIuc2NoZWR1bGVyLCBpID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gZmFsc2UsIEF0KGksIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB0O1xufSkoZGkpLCBOciA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0LCByKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gZS5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSB0LCB0aGlzLm5vdyA9IHI7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIHJldHVybiByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB0KS5zY2hlZHVsZShuLCByKTtcbiAgfSwgZS5ub3cgPSB1aS5ub3csIGU7XG59KSgpLCBtaSA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBOci5ub3cpO1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSBmYWxzZSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IHIuZXhlY3V0ZShyLnN0YXRlLCByLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHIgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSBmYWxzZSwgYSkge1xuICAgICAgZm9yICg7IHIgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIHQ7XG59KShOciksIGZpID0gbmV3IG1pKHBpKSwgX2kgPSAoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCI7XG59KTtcbmZ1bmN0aW9uIHlpKGUpIHtcbiAgcmV0dXJuIFkoZT8udGhlbik7XG59XG5mdW5jdGlvbiBoaShlKSB7XG4gIHJldHVybiBZKGVbc3JdKTtcbn1cbmZ1bmN0aW9uIGdpKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIFkoZT8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiB3aShlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gdmkoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgYmkgPSB2aSgpO1xuZnVuY3Rpb24gUGkoZSkge1xuICByZXR1cm4gWShlPy5bYmldKTtcbn1cbmZ1bmN0aW9uIEVpKGUpIHtcbiAgcmV0dXJuIFlhKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG4sIGEsIGk7XG4gICAgcmV0dXJuIHZuKHRoaXMsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHN3aXRjaCAocy5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgciA9IGUuZ2V0UmVhZGVyKCksIHMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcy50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgcy5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIE1lKHIucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IHMuc2VudCgpLCBhID0gbi52YWx1ZSwgaSA9IG4uZG9uZSwgaSA/IFs0LCBNZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBNZShhKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBzLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gci5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBDaShlKSB7XG4gIHJldHVybiBZKGU/LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBBaShlKSB7XG4gIGlmIChlIGluc3RhbmNlb2Ygd2UpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAoaGkoZSkpXG4gICAgICByZXR1cm4gU2koZSk7XG4gICAgaWYgKF9pKGUpKVxuICAgICAgcmV0dXJuIGtpKGUpO1xuICAgIGlmICh5aShlKSlcbiAgICAgIHJldHVybiBJaShlKTtcbiAgICBpZiAoZ2koZSkpXG4gICAgICByZXR1cm4gQW4oZSk7XG4gICAgaWYgKFBpKGUpKVxuICAgICAgcmV0dXJuIFJpKGUpO1xuICAgIGlmIChDaShlKSlcbiAgICAgIHJldHVybiBGaShlKTtcbiAgfVxuICB0aHJvdyB3aShlKTtcbn1cbmZ1bmN0aW9uIFNpKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBlW3NyXSgpO1xuICAgIGlmIChZKHIuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiByLnN1YnNjcmliZSh0KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24ga2koZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGVuZ3RoICYmICF0LmNsb3NlZDsgcisrKVxuICAgICAgdC5uZXh0KGVbcl0pO1xuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBJaShlKSB7XG4gIHJldHVybiBuZXcgd2UoZnVuY3Rpb24odCkge1xuICAgIGUudGhlbihmdW5jdGlvbihyKSB7XG4gICAgICB0LmNsb3NlZCB8fCAodC5uZXh0KHIpLCB0LmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pLnRoZW4obnVsbCwgRW4pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFJpKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGEgPSBPZShlKSwgaSA9IGEubmV4dCgpOyAhaS5kb25lOyBpID0gYS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIHMgPSBpLnZhbHVlO1xuICAgICAgICBpZiAodC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAobCkge1xuICAgICAgciA9IHsgZXJyb3I6IGwgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gYS5yZXR1cm4pICYmIG4uY2FsbChhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gQW4oZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBUaShlLCB0KS5jYXRjaChmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBGaShlKSB7XG4gIHJldHVybiBBbihFaShlKSk7XG59XG5mdW5jdGlvbiBUaShlLCB0KSB7XG4gIHZhciByLCBuLCBhLCBpO1xuICByZXR1cm4gS2EodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBsO1xuICAgIHJldHVybiB2bih0aGlzLCBmdW5jdGlvbihjKSB7XG4gICAgICBzd2l0Y2ggKGMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGMudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCByID0gV2EoZSksIGMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCByLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGMuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IG4udmFsdWUsIHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGMubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGwgPSBjLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGwgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBjLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKGkgPSByLnJldHVybikgPyBbNCwgaS5jYWxsKHIpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGMuc2VudCgpLCBjLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBOaShlLCB0LCByLCBuLCBhKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSBmYWxzZSk7XG4gIHZhciBpID0gdC5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICByKCksIGEgPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmIChlLmFkZChpKSwgIWEpXG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMaShlLCB0KSB7XG4gIHZhciByID0gWShlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcihyKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IHdlKG4pO1xufVxudmFyIE1pID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24geGkoZSwgdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBhID0gZmFsc2UsIGk7XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBpID0gcywgYSA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGEgPyByKGkpIDogbihuZXcgTWkoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gRGkoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGUpO1xufVxudmFyIFVpID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IG51bGwpLCBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IHI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIE9pKGUsIHQpIHtcbiAgdmFyIHIgPSBEaShlKSA/IHsgZmlyc3Q6IGUgfSA6IHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IGUgfSA6IGUsIG4gPSByLmZpcnN0LCBhID0gci5lYWNoLCBpID0gci53aXRoLCBzID0gaSA9PT0gdm9pZCAwID8gamkgOiBpLCBsID0gci5zY2hlZHVsZXIsIGMgPSBsID09PSB2b2lkIDAgPyBmaSA6IGwsIHUgPSByLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBhID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gaWkoZnVuY3Rpb24obSwgZikge1xuICAgIHZhciB5LCBfLCBnID0gbnVsbCwgdyA9IDAsIGggPSBmdW5jdGlvbihiKSB7XG4gICAgICBfID0gTmkoZiwgYywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgeS51bnN1YnNjcmliZSgpLCBBaShzKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGcsXG4gICAgICAgICAgICBzZWVuOiB3XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShmKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIGYuZXJyb3IoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGIpO1xuICAgIH07XG4gICAgeSA9IG0uc3Vic2NyaWJlKHNpKGYsIGZ1bmN0aW9uKGIpIHtcbiAgICAgIF8/LnVuc3Vic2NyaWJlKCksIHcrKywgZi5uZXh0KGcgPSBiKSwgYSA+IDAgJiYgaChhKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBfPy5jbG9zZWQgfHwgXz8udW5zdWJzY3JpYmUoKSwgZyA9IG51bGw7XG4gICAgfSkpLCAhdyAmJiBoKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBjLm5vdygpIDogYSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gamkoZSkge1xuICB0aHJvdyBuZXcgVWkoZSk7XG59XG5jbGFzcyBYZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGN0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gTGkoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHhpKHRoaXMuX3N1YmplY3QucGlwZShPaShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBDbigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBMciA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCAkaSA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgR2kgPSAoZSkgPT4gJGlbZV0sIEJ0ID0ge30sIFNuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKEJ0W2VdKVxuICAgIHJldHVybiBCdFtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKG4pID0+IG4uanNvbigpKSwgciA9IExyLnBhcnNlKHQuZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBCdFtlXSA9IHIsIHI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBMci5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIGN0KGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgTHQgPSAoZSwgdCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3JdKSA9PiAhdC5pbmNsdWRlcyhyKSkpLCBCID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBlciA9IG5ldyBYZSgpLCBNciA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBxaSA9IDMsIFZpID0gMywgemkgPSAxZTMsIHsgbG9nX186IG10IH0gPSBrKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIEJpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBtdChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbXQoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgQigpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIEIoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudCh0LCByLCBuKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIGV2ZW50TmFtZTogdCxcbiAgICAgIHByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogbiB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBhLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGEpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHQgPSBCKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNcik7XG4gICAgICB0ICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZSh0KSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBCKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1yLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9IEIoKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB6aSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoQigpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHQgPSBlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghdCkge1xuICAgICAgbXQoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMucXVldWUuc2xpY2UoMCwgVmkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0ge1xuICAgICAgICBldmVudHM6IHIubWFwKChsKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGwuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogdC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAuLi5sLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogbC5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBsLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBsLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBsLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmwucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBhID0gR2kodC5lbnZpcm9ubWVudCksIGkgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgYSk7XG4gICAgICAoYXdhaXQgZmV0Y2goaS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuKSxcbiAgICAgICAga2VlcGFsaXZlOiAhMFxuICAgICAgICAvLyBUbyBzZW5kIGV2ZW50cyBldmVuIGlmIHRoZSBwYWdlIGlzIHVubG9hZGVkXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uoci5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgbXQoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIG4pLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaCh0KSB7XG4gICAgdC5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHIgPSB0LmZpbHRlcigobikgPT4gbi5hdHRlbXB0Q291bnQgPCBxaSk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnIsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgQigpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIEIoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgY3IgPSBuZXcgQmkoKSwgdiA9IChlLCB0LCByKSA9PiB7XG4gIGNyLmFkZEV2ZW50KGUsIHQsIHIpO1xufSwgSGkgPSAoKSA9PiB7XG4gIGNyLnByb2Nlc3NRdWV1ZSgpO1xufSwga24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gYWUoZS5yZWFzb24pO1xuICB2KFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIEluID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGFlKGUuZXJyb3IpO1xuICB2KFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZS5lcnJvcj8uc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBlLmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBlLmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBlLmNvbG5vXG4gIH0pO1xufTtcbmxldCBTdCA9IG51bGw7XG5jb25zdCBLaSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFN0ID0gKGF3YWl0IGltcG9ydCgnLi9saWZlY3ljbGUtRDFCZEViWnMtIX57MDA1fX4uanMnKSkuZGVmYXVsdCwgU3Q7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGUpLCBudWxsO1xuICB9XG59LCBSbiA9IChlKSA9PiB7XG4gIHYoXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZS5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGUubmV3U3RhdGVcbiAgfSksIChlLm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGUubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSAmJiBjci5wcm9jZXNzUXVldWUoKTtcbn0sIFlpID0gYXN5bmMgKCkgPT4ge1xuICBCKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBJbiksIEIoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBrbik7XG4gIGNvbnN0IGUgPSBhd2FpdCBLaSgpO1xuICBlICYmIGUuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIFJuKTtcbn0sIFdpID0gYXN5bmMgKCkgPT4ge1xuICBCKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBJbiksIEIoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBrbiksIEIoKSAmJiBTdCAmJiBTdC5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgUm4pO1xufSwgSmkgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBaaSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBRaSA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIE10ID0gYXN5bmMgKGUpID0+IHtcbiAgZm9yIChsZXQgciA9IDA7IHIgPCAxMDsgcisrKVxuICAgIHhyKCkgfHwgYXdhaXQgRHQoNTAwKTtcbiAgaWYgKCF4cigpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZShlKTtcbn0sIHh0ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IE10KGUpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByLmVsZW1lbnRzKHQpLFxuICAgIHN0cmlwZTogclxuICB9O1xufSwgWGkgPSBhc3luYyAoZSwgdCwgciwgbiwgYSkgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgTXQoZSksIHMgPSBRaVtyLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0LFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgRHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCB4ciA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBlcyA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCB0cyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IE10KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIHJzID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IChhd2FpdCBNdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IGUuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gci5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAke3IuZXJyb3I/Lm1lc3NhZ2UgPz8gci5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59O1xudmFyIG5zID0gdHlwZW9mIGdsb2JhbFRoaXMgPT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA9PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHt9LCBSZSA9IFwiMS45LjBcIiwgRHIgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG5mdW5jdGlvbiBvcyhlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2VdKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBlLm1hdGNoKERyKTtcbiAgaWYgKCFuKVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB2YXIgYSA9IHtcbiAgICBtYWpvcjogK25bMV0sXG4gICAgbWlub3I6ICtuWzJdLFxuICAgIHBhdGNoOiArblszXSxcbiAgICBwcmVyZWxlYXNlOiBuWzRdXG4gIH07XG4gIGlmIChhLnByZXJlbGVhc2UgIT0gbnVsbClcbiAgICByZXR1cm4gZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGMgPT09IGU7XG4gICAgfTtcbiAgZnVuY3Rpb24gaShsKSB7XG4gICAgcmV0dXJuIHIuYWRkKGwpLCBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiBzKGwpIHtcbiAgICByZXR1cm4gdC5hZGQobCksIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAodC5oYXMoYykpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoci5oYXMoYykpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHUgPSBjLm1hdGNoKERyKTtcbiAgICBpZiAoIXUpXG4gICAgICByZXR1cm4gaShjKTtcbiAgICB2YXIgZCA9IHtcbiAgICAgIG1ham9yOiArdVsxXSxcbiAgICAgIG1pbm9yOiArdVsyXSxcbiAgICAgIHBhdGNoOiArdVszXSxcbiAgICAgIHByZXJlbGVhc2U6IHVbNF1cbiAgICB9O1xuICAgIHJldHVybiBkLnByZXJlbGVhc2UgIT0gbnVsbCB8fCBhLm1ham9yICE9PSBkLm1ham9yID8gaShjKSA6IGEubWFqb3IgPT09IDAgPyBhLm1pbm9yID09PSBkLm1pbm9yICYmIGEucGF0Y2ggPD0gZC5wYXRjaCA/IHMoYykgOiBpKGMpIDogYS5taW5vciA8PSBkLm1pbm9yID8gcyhjKSA6IGkoYyk7XG4gIH07XG59XG52YXIgYXMgPSBvcyhSZSksIGlzID0gUmUuc3BsaXQoXCIuXCIpWzBdLCBydCA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIGlzKSwgbnQgPSBucztcbmZ1bmN0aW9uIGxyKGUsIHQsIHIsIG4pIHtcbiAgdmFyIGE7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IGZhbHNlKTtcbiAgdmFyIGkgPSBudFtydF0gPSAoYSA9IG50W3J0XSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHtcbiAgICB2ZXJzaW9uOiBSZVxuICB9O1xuICBpZiAoIW4gJiYgaVtlXSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCBmYWxzZTtcbiAgfVxuICBpZiAoaS52ZXJzaW9uICE9PSBSZSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBpLnZlcnNpb24gKyBcIiBmb3IgXCIgKyBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBSZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCBmYWxzZTtcbiAgfVxuICByZXR1cm4gaVtlXSA9IHQsIHIuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFJlICsgXCIuXCIpLCB0cnVlO1xufVxuZnVuY3Rpb24gb3QoZSkge1xuICB2YXIgdCwgciwgbiA9ICh0ID0gbnRbcnRdKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnZlcnNpb247XG4gIGlmICghKCFuIHx8ICFhcyhuKSkpXG4gICAgcmV0dXJuIChyID0gbnRbcnRdKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByW2VdO1xufVxuZnVuY3Rpb24gdXIoZSwgdCkge1xuICB0LmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBSZSArIFwiLlwiKTtcbiAgdmFyIHIgPSBudFtydF07XG4gIHIgJiYgZGVsZXRlIHJbZV07XG59XG52YXIgc3MgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAobCkge1xuICAgIHMgPSB7IGVycm9yOiBsIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIGNzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgaTsgbiA8IGE7IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIGxzID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHQubmFtZXNwYWNlIHx8IFwiRGlhZ0NvbXBvbmVudExvZ2dlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gSGUoXCJkZWJ1Z1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIEhlKFwiZXJyb3JcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIEhlKFwiaW5mb1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gSGUoXCJ3YXJuXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBIZShcInZlcmJvc2VcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlO1xuICB9KSgpXG4pO1xuZnVuY3Rpb24gSGUoZSwgdCwgcikge1xuICB2YXIgbiA9IG90KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBjcyhbXSwgc3MociksIGZhbHNlKSk7XG59XG52YXIgb2U7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5FUlJPUiA9IDMwXSA9IFwiRVJST1JcIiwgZVtlLldBUk4gPSA1MF0gPSBcIldBUk5cIiwgZVtlLklORk8gPSA2MF0gPSBcIklORk9cIiwgZVtlLkRFQlVHID0gNzBdID0gXCJERUJVR1wiLCBlW2UuVkVSQk9TRSA9IDgwXSA9IFwiVkVSQk9TRVwiLCBlW2UuQUxMID0gOTk5OV0gPSBcIkFMTFwiO1xufSkob2UgfHwgKG9lID0ge30pKTtcbmZ1bmN0aW9uIHVzKGUsIHQpIHtcbiAgZSA8IG9lLk5PTkUgPyBlID0gb2UuTk9ORSA6IGUgPiBvZS5BTEwgJiYgKGUgPSBvZS5BTEwpLCB0ID0gdCB8fCB7fTtcbiAgZnVuY3Rpb24gcihuLCBhKSB7XG4gICAgdmFyIGkgPSB0W25dO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgZSA+PSBhID8gaS5iaW5kKHQpIDogZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiByKFwiZXJyb3JcIiwgb2UuRVJST1IpLFxuICAgIHdhcm46IHIoXCJ3YXJuXCIsIG9lLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIG9lLklORk8pLFxuICAgIGRlYnVnOiByKFwiZGVidWdcIiwgb2UuREVCVUcpLFxuICAgIHZlcmJvc2U6IHIoXCJ2ZXJib3NlXCIsIG9lLlZFUkJPU0UpXG4gIH07XG59XG52YXIgZHMgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAobCkge1xuICAgIHMgPSB7IGVycm9yOiBsIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIHBzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgaTsgbiA8IGE7IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIG1zID0gXCJkaWFnXCIsIGt0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgZnVuY3Rpb24gdChhKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgbCA9IG90KFwiZGlhZ1wiKTtcbiAgICAgICAgICBpZiAobClcbiAgICAgICAgICAgIHJldHVybiBsW2FdLmFwcGx5KGwsIHBzKFtdLCBkcyhpKSwgZmFsc2UpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByID0gdGhpcywgbiA9IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgICAgdmFyIHMsIGwsIGM7XG4gICAgICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSB7IGxvZ0xldmVsOiBvZS5JTkZPIH0pLCBhID09PSByKSB7XG4gICAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiByLmVycm9yKChzID0gdS5zdGFjaykgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHUubWVzc2FnZSksIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVvZiBpID09IFwibnVtYmVyXCIgJiYgKGkgPSB7XG4gICAgICAgICAgbG9nTGV2ZWw6IGlcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkID0gb3QoXCJkaWFnXCIpLCBtID0gdXMoKGwgPSBpLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogb2UuSU5GTywgYSk7XG4gICAgICAgIGlmIChkICYmICFpLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIGYgPSAoYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgZC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgZiksIG0ud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIGYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBscihcImRpYWdcIiwgbSwgciwgdHJ1ZSk7XG4gICAgICB9O1xuICAgICAgci5zZXRMb2dnZXIgPSBuLCByLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdXIobXMsIHIpO1xuICAgICAgfSwgci5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBuZXcgbHMoYSk7XG4gICAgICB9LCByLnZlcmJvc2UgPSB0KFwidmVyYm9zZVwiKSwgci5kZWJ1ZyA9IHQoXCJkZWJ1Z1wiKSwgci5pbmZvID0gdChcImluZm9cIiksIHIud2FybiA9IHQoXCJ3YXJuXCIpLCByLmVycm9yID0gdChcImVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlO1xuICB9KSgpXG4pO1xuZnVuY3Rpb24gZnMoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBfcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgci5fY3VycmVudENvbnRleHQgPSB0ID8gbmV3IE1hcCh0KSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIuZ2V0VmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiByLl9jdXJyZW50Q29udGV4dC5nZXQobik7XG4gICAgICB9LCByLnNldFZhbHVlID0gZnVuY3Rpb24obiwgYSkge1xuICAgICAgICB2YXIgaSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGkuX2N1cnJlbnRDb250ZXh0LnNldChuLCBhKSwgaTtcbiAgICAgIH0sIHIuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBhID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gYS5fY3VycmVudENvbnRleHQuZGVsZXRlKG4pLCBhO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0pKClcbiksIHlzID0gbmV3IF9zKCksIGhzID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBzID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBncyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIGk7IG4gPCBhOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCB3cyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHlzO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhID0gW10sIGkgPSAzOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICBhW2kgLSAzXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgZ3MoW25dLCBocyhhKSwgZmFsc2UpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KSgpXG4pLCB2cyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgYnMgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBpOyBuIDwgYTsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgSHQgPSBcImNvbnRleHRcIiwgUHMgPSBuZXcgd3MoKSwgZHIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIGxyKEh0LCB0LCBrdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhLCBpID0gW10sIHMgPSAzOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICBpW3MgLSAzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoYSwgYnMoW3QsIHIsIG5dLCB2cyhpKSwgZmFsc2UpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZCh0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBvdChIdCkgfHwgUHM7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCksIHVyKEh0LCBrdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCB0cjtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkodHIgfHwgKHRyID0ge30pKTtcbnZhciBGbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBUbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgRXMgPSB7XG4gIHRyYWNlSWQ6IFRuLFxuICBzcGFuSWQ6IEZuLFxuICB0cmFjZUZsYWdzOiB0ci5OT05FXG59LCBldCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBFcyksIHRoaXMuX3NwYW5Db250ZXh0ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCBwciA9IGZzKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO1xuZnVuY3Rpb24gbXIoZSkge1xuICByZXR1cm4gZS5nZXRWYWx1ZShwcikgfHwgdm9pZCAwO1xufVxuZnVuY3Rpb24gQ3MoKSB7XG4gIHJldHVybiBtcihkci5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmZ1bmN0aW9uIGZyKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0VmFsdWUocHIsIHQpO1xufVxuZnVuY3Rpb24gQXMoZSkge1xuICByZXR1cm4gZS5kZWxldGVWYWx1ZShwcik7XG59XG5mdW5jdGlvbiBTcyhlLCB0KSB7XG4gIHJldHVybiBmcihlLCBuZXcgZXQodCkpO1xufVxuZnVuY3Rpb24gTm4oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gbXIoZSkpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3BhbkNvbnRleHQoKTtcbn1cbnZhciBrcyA9IC9eKFswLTlhLWZdezMyfSkkL2ksIElzID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiBScyhlKSB7XG4gIHJldHVybiBrcy50ZXN0KGUpICYmIGUgIT09IFRuO1xufVxuZnVuY3Rpb24gRnMoZSkge1xuICByZXR1cm4gSXMudGVzdChlKSAmJiBlICE9PSBGbjtcbn1cbmZ1bmN0aW9uIExuKGUpIHtcbiAgcmV0dXJuIFJzKGUudHJhY2VJZCkgJiYgRnMoZS5zcGFuSWQpO1xufVxuZnVuY3Rpb24gVHMoZSkge1xuICByZXR1cm4gbmV3IGV0KGUpO1xufVxudmFyIEt0ID0gZHIuZ2V0SW5zdGFuY2UoKSwgTW4gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBLdC5hY3RpdmUoKSk7XG4gICAgICB2YXIgYSA9ICEhcj8ucm9vdDtcbiAgICAgIGlmIChhKVxuICAgICAgICByZXR1cm4gbmV3IGV0KCk7XG4gICAgICB2YXIgaSA9IG4gJiYgTm4obik7XG4gICAgICByZXR1cm4gTnMoaSkgJiYgTG4oaSkgPyBuZXcgZXQoaSkgOiBuZXcgZXQoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBhKSB7XG4gICAgICB2YXIgaSwgcywgbDtcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gbCA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBsID0gbikgOiAoaSA9IHIsIHMgPSBuLCBsID0gYSk7XG4gICAgICAgIHZhciBjID0gcyA/PyBLdC5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGMpLCBkID0gZnIoYywgdSk7XG4gICAgICAgIHJldHVybiBLdC53aXRoKGQsIGwsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgZTtcbiAgfSkoKVxuKTtcbmZ1bmN0aW9uIE5zKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGUuc3BhbklkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlRmxhZ3MgPT0gXCJudW1iZXJcIjtcbn1cbnZhciBMcyA9IG5ldyBNbigpLCBNcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBhKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IGE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIGEpIHtcbiAgICAgIHZhciBpID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShpLnN0YXJ0QWN0aXZlU3BhbiwgaSwgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IExzO1xuICAgIH0sIGU7XG4gIH0pKClcbiksIHhzID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIG5ldyBNbigpO1xuICAgIH0sIGU7XG4gIH0pKClcbiksIERzID0gbmV3IHhzKCksIFVyID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIGE7XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKHQsIHIsIG4pKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogbmV3IE1zKHRoaXMsIHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAodCA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogRHM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgYTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLmdldFRyYWNlcih0LCByLCBuKTtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCBhdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5JTlRFUk5BTCA9IDBdID0gXCJJTlRFUk5BTFwiLCBlW2UuU0VSVkVSID0gMV0gPSBcIlNFUlZFUlwiLCBlW2UuQ0xJRU5UID0gMl0gPSBcIkNMSUVOVFwiLCBlW2UuUFJPRFVDRVIgPSAzXSA9IFwiUFJPRFVDRVJcIiwgZVtlLkNPTlNVTUVSID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShhdCB8fCAoYXQgPSB7fSkpO1xudmFyIFBlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLlVOU0VUID0gMF0gPSBcIlVOU0VUXCIsIGVbZS5PSyA9IDFdID0gXCJPS1wiLCBlW2UuRVJST1IgPSAyXSA9IFwiRVJST1JcIjtcbn0pKFBlIHx8IChQZSA9IHt9KSk7XG52YXIgeGUgPSBkci5nZXRJbnN0YW5jZSgpLCBZdCA9IFwidHJhY2VcIiwgVXMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFVyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gVHMsIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gTG4sIHRoaXMuZGVsZXRlU3BhbiA9IEFzLCB0aGlzLmdldFNwYW4gPSBtciwgdGhpcy5nZXRBY3RpdmVTcGFuID0gQ3MsIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSBObiwgdGhpcy5zZXRTcGFuID0gZnIsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBTcztcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IGxyKFl0LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBrdC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBvdChZdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB1cihZdCwga3QuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgVXIoKTtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCBqZSA9IFVzLmdldEluc3RhbmNlKCk7XG5jb25zdCBPcyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBhID0geGUuYWN0aXZlKCksIGkgPSBuLnN0YXJ0U3BhbihcbiAgICBgY2RlLiR7dC50eXBlfWAsXG4gICAge1xuICAgICAga2luZDogYXQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIC4uLmUudHJhY2luZ0NvbnRleHQgJiYge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUudHJhY2luZ0NvbnRleHQuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC52ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUudHJhY2luZ0NvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnRyYWNpbmdDb250ZXh0LnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UucGF5bG9hZFwiOiBKU09OLnN0cmluZ2lmeSh0LnBheWxvYWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBhXG4gICk7XG4gIHJldHVybiB4ZS53aXRoKGplLnNldFNwYW4oYSwgaSksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IHIoKTtcbiAgICAgIHJldHVybiBpLnNldFN0YXR1cyh7IGNvZGU6IFBlLk9LIH0pLCBzO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIHRocm93IGkuc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogUGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IHMgaW5zdGFuY2VvZiBFcnJvciA/IHMubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiXG4gICAgICB9KSwgcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaS5lbmQoKTtcbiAgICB9XG4gIH0pO1xufSwgZnQgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgbiA9IHhlLmFjdGl2ZSgpLCBhID0gci5zdGFydFNwYW4oXG4gICAgYGZvcm0uJHtlLnNwYW5OYW1lfWAsXG4gICAge1xuICAgICAga2luZDogYXQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS5kZXZpY2VUb2tlbixcbiAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUuZm9ybUlkLFxuICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudmVyc2lvbixcbiAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUucmVsZWFzZVZlcnNpb24sXG4gICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUuYmFzZVVybCxcbiAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS5yZWZlcnJlcixcbiAgICAgICAgLi4uZS5wYXltZW50Um91dGVJZCAmJiB7IFwicGF5bWVudC5yb3V0ZV9pZFwiOiBlLnBheW1lbnRSb3V0ZUlkIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG5cbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBpID0gYXdhaXQgdCgpO1xuICAgIHJldHVybiBhLnNldFN0YXR1cyh7IGNvZGU6IFBlLk9LIH0pLCBpO1xuICB9IGNhdGNoIChpKSB7XG4gICAgY29uc3QgcyA9IGkgaW5zdGFuY2VvZiBFcnJvciA/IGkubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IGEuc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFBlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogc1xuICAgIH0pLCBpO1xuICB9IGZpbmFsbHkge1xuICAgIGEuZW5kKCk7XG4gIH1cbn07XG5jbGFzcyB4biBleHRlbmRzIExvIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIGNvbnN0IHIgPSBgJHt0Lm1lc3NhZ2V9YDtcbiAgICBzdXBlcihyKSwgdGhpcy5yZXNwb25zZSA9IHQ7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEogPSBhc3luYyAoZSwgdCwgciwgbikgPT4gT3MoZSwgdCwgYXN5bmMgKCkgPT4ge1xuICBuICYmIHYobiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IGEgPSBhd2FpdCBlLnNlbmQodCk7XG4gIGlmICgkcyhhKSkge1xuICAgIGNvbnN0IGkgPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICB0aHJvdyB2KFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgIGVycm9yX21lc3NhZ2U6IGEubWVzc2FnZSxcbiAgICAgIG1lc3NhZ2VfdHlwZTogdC50eXBlLFxuICAgICAgdXNlcl9hZ2VudDogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgIG9ubGluZTogbmF2aWdhdG9yLm9uTGluZSxcbiAgICAgIGhhc19mb2N1czogZG9jdW1lbnQuaGFzRm9jdXMoKSxcbiAgICAgIGhyZWY6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgZG9jdW1lbnRfdmlzaWJpbGl0eV9zdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuICAgICAgY29ubmVjdGlvbl9kb3dubGluazogaT8uZG93bmxpbmssXG4gICAgICBjb25uZWN0aW9uX2VmZmVjdGl2ZV90eXBlOiBpPy5lZmZlY3RpdmVUeXBlLFxuICAgICAgY29ubmVjdGlvbl9ydHQ6IGk/LnJ0dCxcbiAgICAgIGNvbm5lY3Rpb25fc2F2ZV9kYXRhOiBpPy5zYXZlRGF0YVxuICAgIH0pLCBuZXcgeG4oYSk7XG4gIH1cbiAgaWYgKCFqcyhhLCByKSkge1xuICAgIGNvbnN0IGkgPSByLnNhZmVQYXJzZShhKTtcbiAgICB0aHJvdyBpLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHIsIFwiQWN0dWFsOlwiLCBhKSwgaS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG4gJiYgdihuLCB7XG4gICAgLi4uYVxuICB9KSwgYTtcbn0pLCBqcyA9IChlLCB0KSA9PiB0LnNhZmVQYXJzZShlKS5zdWNjZXNzLCAkcyA9IChlKSA9PiB5YS5zYWZlUGFyc2UoZSkuc3VjY2VzcywgR3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihlLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogdCB9LCBmbiksIE4gPSBhc3luYyAoZSkgPT4gYXdhaXQgSihlLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgX24pLCBaID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEooXG4gIGUsXG4gIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBnbixcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuKSwgRG4gPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihcbiAgZSxcbiAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogdCB9LFxuICBGYSxcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiksIHFzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgdihcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IHIgPSBhd2FpdCBKKGUsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IHQgfSwgZ24pO1xuICByZXR1cm4gdihcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yXG4gIH0pLCByO1xufSwgeCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBzYSxcbiAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4pLCBWcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LFxuICB5bixcbiAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4pLCB6cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IHQgfSxcbiAgaWEsXG4gIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiksIEJzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IEdzKGUsIHtcbiAgICBzZWN1cmVfdG9rZW46IHQsXG4gICAgcHJvbW90aW9uX2NvZGU6IHJcbiAgfSksIGEgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGwpID0+IGwuY3VycmVuY3kpKTtcbiAgaWYgKGEuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHthLnNpemV9YCk7XG4gIGNvbnN0IGkgPSBhLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBzID0gemEobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgobCkgPT4gbC5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogaSxcbiAgICBhbW91bnRBdG9tOiBzXG4gIH07XG59LCBRID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBCcyhlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIFVuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBKKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgbmEpXG4gICAgKVxuICApO1xufSwgT3IgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICB0dCxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIEhzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEooZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgeW4sIFwic2V0dXBfY2hlY2tvdXRcIiksIF9yID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEooZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgdHQsIFwicGVyZm9ybV9jaGVja291dFwiKSwgT24gPSAxZTMsIEtzID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IGkgPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IE9uLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBzID0gYXdhaXQgSihpLCB7IHR5cGU6IHIgfSwgbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgVXQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgTmEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgam4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgSihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBUYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBhZShyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCBZcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgTGFcbiksIFdzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksIGZhbHNlO1xuICB9XG59LCBKcyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgJG4gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIEduID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBJdCA9IDMyLCBacyA9IDE2LCBxbiA9IDEwLCBqciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBGZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKEZlIHx8IChGZSA9IHt9KSk7XG5jbGFzcyBXZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBRcyhlKSB7XG4gIGNvbnN0IHQgPSBNYXRoLmZsb29yKGUoKSAqIEl0KSAlIEl0O1xuICByZXR1cm4gR24uY2hhckF0KHQpO1xufVxuZnVuY3Rpb24gWHMoZSkge1xuICBjb25zdCB0ID0gZWMoKSwgciA9IHQgJiYgKHQuY3J5cHRvIHx8IHQubXNDcnlwdG8pIHx8IG51bGw7XG4gIGlmICh0eXBlb2Ygcj8uZ2V0UmFuZG9tVmFsdWVzID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2Ygcj8ucmFuZG9tQnl0ZXMgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgV2UoRmUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZWMoKSB7XG4gIHJldHVybiBuYygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHRjKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gUXModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIHJjKGUsIHQgPSBxbikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IFdlKEZlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IGpyKVxuICAgIHRocm93IG5ldyBXZShGZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtqcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBXZShGZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09IGZhbHNlKVxuICAgIHRocm93IG5ldyBXZShGZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IGEgPSB0OyBhID4gMDsgYS0tKVxuICAgIHIgPSBlICUgSXQsIG4gPSBHbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIEl0O1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIG5jKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gb2MoZSwgdCkge1xuICBjb25zdCByID0gWHMoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiByYyhuLCBxbikgKyB0Yyhacywgcik7XG59XG5jb25zdCBWbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCB6biA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhWbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBvYygpO1xuICByZXR1cm4gYWModCksIHQ7XG59LCBhYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7Vm59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgaWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IG9uLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbYV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W2FdID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgaiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICBpZiAoIXMpIHJldHVybiBhO1xuICBjb25zdCBsID0gaS50eXBlID09PSBcImNoZWNrYm94XCIgPyBpLmNoZWNrZWQgOiBpLnZhbHVlO1xuICByZXR1cm4geyAuLi5hLCBbc106IGwgfTtcbn0sIHt9KSwgc2MgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBlYS5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59LCBCbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgQ2UgPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbcC5MSU5FMV0sXG4gIGxpbmUyOiBlW3AuTElORTJdLFxuICBsaW5lMzogZVtwLkxJTkUzXSxcbiAgY2l0eTogZVtwLkNJVFldLFxuICBzdGF0ZTogZVtwLlNUQVRFXSxcbiAgY291bnRyeTogZVtwLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtwLlpJUF9DT0RFXVxufSksIE90ID0gKGUsIHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmUxOiBlW3AuU0hJUFBJTkdfTElORTFdLFxuICAgICAgbGluZTI6IGVbcC5TSElQUElOR19MSU5FMl0sXG4gICAgICBsaW5lMzogZVtwLlNISVBQSU5HX0xJTkUzXSxcbiAgICAgIGNpdHk6IGVbcC5TSElQUElOR19DSVRZXSxcbiAgICAgIHN0YXRlOiBlW3AuU0hJUFBJTkdfU1RBVEVdLFxuICAgICAgY291bnRyeTogZVtwLlNISVBQSU5HX0NPVU5UUlldLFxuICAgICAgemlwX2NvZGU6IGVbcC5TSElQUElOR19aSVBfQ09ERV1cbiAgICB9O1xufSwganQgPSAoZSwgdCkgPT4gW2UsIHRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwgY2MgPSAoeyB3aWR0aDogZSwgaGVpZ2h0OiB0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG59XG4uZnJhbWUsICNhZHllbi1jb250YWluZXIsICNhZHllbi1jb250YWluZXIgPiAqIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gLCBsYyA9ICh7IHdpZHRoOiBlLCBoZWlnaHQ6IHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7ZSA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke3QgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHt0ID8/IFwiNjAwcHhcIn0gLSA0OHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5iYW5rLXNlbGVjdG9yLWhlYWRlciB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5iYW5rLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG4uYmFuay1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYm9yZGVyOiAycHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4uYmFuay1pdGVtOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstaXRlbTphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG4uYmFuay1sb2dvIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XG59XG4uYmFuay1sb2dvLXBsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBjb2xvcjogIzZjNzU3ZDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5iYW5rLWluZm8ge1xuICBmbGV4OiAxO1xufVxuLmJhbmstZGlzcGxheS1uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzFhMWExYTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuLmJhbmstbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNmM3NTdkO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmAsICR0ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyBpZDogciwgdGl0bGU6IG4sIHdpZHRoOiBhLCBoZWlnaHQ6IGksIG5hbWU6IHMgfSA9IHQgPz8ge30sIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIGwuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7Y2MoeyB3aWR0aDogYSwgaGVpZ2h0OiBpIH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwiJHtyID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke24gPz8gXCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCJ9XCIgYWxsb3c9XCJwYXltZW50XCIgbmFtZT1cIiR7cyA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB1ID0gYy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgdS5hcHBlbmRDaGlsZChsLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgZCA9IHUucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIG0gPSB1LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksIHsgaG9zdDogYywgaWZyYW1lOiBkLCBjYW5jZWxCdXR0b246IG0gfTtcbn0sIEhuID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCB0aXRsZTogYSB9ID0gdCA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpLCBzKSA9PiB7XG4gICAgY29uc3QgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKSwgYyA9IGUubWFwKChfLCBnKSA9PiB7XG4gICAgICBjb25zdCB3ID0gXy5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke18ucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7Xy5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7Xy5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2d9XCI+XG4gICAgICAgICAgJHt3fVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7Xy5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHtfLmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgbC5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7bGMoeyB3aWR0aDogciwgaGVpZ2h0OiBuIH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7YSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtjfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCB1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgZCA9IHUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgZC5hcHBlbmRDaGlsZChsLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBtID0gZC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIiksIGYgPSBkLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFuay1pdGVtXCIpLCB5ID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh1KTtcbiAgICB9O1xuICAgIG0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHkoKSwgcyhuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIikpO1xuICAgIH0pLCBmLmZvckVhY2goKF8sIGcpID0+IHtcbiAgICAgIF8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgeSgpLCBpKGVbZ10pO1xuICAgICAgfSk7XG4gICAgfSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodSk7XG4gIH0pO1xufSwgR3QgPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IHdpZHRoOiByLCBoZWlnaHQ6IG4sIGJhc2VVcmw6IGEgfSA9IHQgPz8ge30sIGkgPSBuZXcgVVJMKGBhcHAvZGlyZWN0X2RlYml0L21pY3JvX2RlcG9zaXQvP3R5cGU9JHtlfWAsIGEpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocywgbCkgPT4ge1xuICAgIGNvbnN0IGMgPSAkdChpLCB7IHdpZHRoOiByLCBoZWlnaHQ6IG4sIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pLCB1ID0gKCkgPT4ge1xuICAgICAgYy5ob3N0LnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoKSA9PiB7XG4gICAgICB1KCksIGwobmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSk7XG4gICAgfSwgbSA9ICh3KSA9PiB7XG4gICAgICB1KCksIHcuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiB3LnBheWxvYWQgPyBcImVycm9yXCIgaW4gdy5wYXlsb2FkID8gbChuZXcgRXJyb3Iody5wYXlsb2FkLmVycm9yKSkgOiBzKHcucGF5bG9hZCkgOiBsKG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBmYWlsZWRcIikpO1xuICAgIH07XG4gICAgYy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpO1xuICAgIGNvbnN0IGYgPSB5cihcbiAgICAgIGMuaWZyYW1lLFxuICAgICAgbSxcbiAgICAgIG5ldyBVUkwoYSkub3JpZ2luLFxuICAgICAgXCJtaWNyby1kZXBvc2l0LXN0YXR1c1wiLFxuICAgICAgX2FcbiAgICApLCB5ID0gKCkgPT4ge1xuICAgICAgYy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCBjbGVhckludGVydmFsKGYpO1xuICAgIH0sIF8gPSBkLCBnID0gKCkgPT4ge1xuICAgICAgeSgpLCBfKCk7XG4gICAgfTtcbiAgICBjLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZCksIGMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBnKTtcbiAgfSk7XG59O1xuZnVuY3Rpb24geXIoZSwgdCwgciwgbiwgYSkge1xuICBjb25zdCBpID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsID0gYXdhaXQgS3MoZSwgciwgbiwgYSk7XG4gICAgICBsICYmIChjbGVhckludGVydmFsKHMpLCB0KGwpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIGkoKTtcbiAgY29uc3QgcyA9IHNldEludGVydmFsKGksIE9uKTtcbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBLbih7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gbGUoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciwgZnJhbWVXaWR0aDogbiwgZnJhbWVIZWlnaHQ6IGEsIGZyYW1lVGl0bGU6IGkgfSA9IGUsIHMgPSAkdCh0LCB7IHdpZHRoOiBuLCBoZWlnaHQ6IGEsIHRpdGxlOiBpIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCBjID0gKG0pID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBsKG0pLCBkPy4oKTtcbiAgICB9LCB1ID0geXIoXG4gICAgICBzLmlmcmFtZSxcbiAgICAgIGMsXG4gICAgICBuZXcgVVJMKHIpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBsblxuICAgICksIGQgPSBLbih7XG4gICAgICBlbGVtZW50czogcyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogdSxcbiAgICAgIHJlc29sdmU6IGxcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBZbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBsZShlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRi5TVUNDRVNTICYmIGN0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgdWMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBXbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IGsoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGwgPSB1YyhlLCBuKSwgYyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCB6cyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGMpLCBsLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGwuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKGFlKHUpKSwgY2xlYXJJbnRlcnZhbChjKSwgcyhhZSh1KSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59LCBpZSA9ICgpID0+IHtcbiAgbGV0IHQgPSAobmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXSk/LlswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBkYywgZXJyX186IHBjIH0gPSBrKFwiY29tbW9uLWNjXCIpLCBtYyA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGU6IGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3M6IHQsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzOiByLFxuICBwYXltZW50X21ldGhvZDogbixcbiAgaXNCdXNpbmVzc1B1cmNoYXNlOiBhXG59LCBpKSA9PiB7XG4gIGNvbnN0IHMgPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKHNbcC5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgc1twLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSkpLCBlICYmIChzW3AuWklQX0NPREVdID0gVCksIHQgJiYgKHNbcC5MSU5FMV0gPSBULCBzW3AuQ0lUWV0gPSBULCBzW3AuU1RBVEVdID0gVCwgc1twLkNPVU5UUlldID0gVCwgc1twLlpJUF9DT0RFXSA9IFQpLCByICYmIChzW3AuU0hJUFBJTkdfTElORTFdID0gVCwgc1twLlNISVBQSU5HX0NJVFldID0gVCwgc1twLlNISVBQSU5HX1NUQVRFXSA9IFQsIHNbcC5TSElQUElOR19DT1VOVFJZXSA9IFQsIHNbcC5TSElQUElOR19aSVBfQ09ERV0gPSBUKSwgKGlbcC5JU19CVVNJTkVTU19QVVJDSEFTRV0gPz8gYSkgJiYgKHNbcC5CVVNJTkVTU19OQU1FXSA9IFQpLCBPYmplY3Qua2V5cyhzKS5sZW5ndGggPT09IDAgPyBVZSA6IFVlLmV4dGVuZChzKTtcbn0sIGZjID0gKGUsIHQsIHIgPSB7fSkgPT4ge1xuICBpZiAocikge1xuICAgIGRjKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICBjb25zdCBpID0gT2JqZWN0LmtleXMocik7XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBpLmxlbmd0aDsgcysrKSB7XG4gICAgICBjb25zdCBsID0gaVtzXSwgYyA9IHJbbF07XG4gICAgICBlW2xdIHx8IChlW2xdID0gYyk7XG4gICAgfVxuICB9XG4gIGVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSwgZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gJiYgKGVbcC5TSElQUElOR19MSU5FMV0gPSBlW3AuTElORTFdLCBlW3AuU0hJUFBJTkdfTElORTJdID0gZVtwLkxJTkUyXSwgZVtwLlNISVBQSU5HX0xJTkUzXSA9IGVbcC5MSU5FM10sIGVbcC5TSElQUElOR19DSVRZXSA9IGVbcC5DSVRZXSwgZVtwLlNISVBQSU5HX1NUQVRFXSA9IGVbcC5TVEFURV0sIGVbcC5TSElQUElOR19DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSwgZVtwLlNISVBQSU5HX1pJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0pO1xuICBjb25zdCBhID0gbWMociwgZSkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIWEuc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBhLmVycm9yLmZvcm1hdCgpLCBzID0gaWMoaSksIGwgPSBPYmplY3Qua2V5cyhzKTtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGwubGVuZ3RoOyBjKyspIHtcbiAgICAgIGNvbnN0IHUgPSBsW2NdLCBkID0gc1t1XTtcbiAgICAgIHQodSwgZCwgdSk7XG4gICAgfVxuICAgIHRocm93IHBjKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkFsbW9zdCB0aGVyZSEgSnVzdCBhIGZldyB0aGluZ3MgaGlnaGxpZ2h0ZWQgYWJvdmUgdG8gZml4IGJlZm9yZSB5b3UgY2FuIHN1Ym1pdC5cIik7XG4gIH1cbiAgcmV0dXJuIGEuZGF0YTtcbn0sIHsgbG9nX186IF9jLCBlcnJfXzogeWMgfSA9IGsoXCJjb21tb24tY2NcIiksIEcgPSBmYywgSm4gPSAoZSwgdCkgPT4ge1xuICBmb3IgKGNvbnN0IHIgb2YgZSlcbiAgICBpZiAoci5zdWNjZXNzID09PSBmYWxzZSlcbiAgICAgIHRocm93IHIuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IGNuLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgeWMoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gYS5kYXRhO1xuICAgICAgICAgIHQoaSwgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgX2MoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHIuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgZXJyX186IFpuIH0gPSBrKFwiY29tbW9uXCIpLCBsdCA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIE8gPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maW5kKChuKSA9PiB0LnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IFpuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHQucGFyc2Uocik7XG59LCBxID0gKGUsIHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZS5sYXN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGUuZmlyc3ROYW1lLFxuICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiBlLmJ1c2luZXNzTmFtZSxcbiAgY3VzdG9tZXJfdGF4X2lkOiBlLnRheElkLFxuICBjdXN0b21lcl90YXhfaWRfdHlwZTogZS50YXhJZFR5cGUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDZShlKSxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IE90KGUsIHQpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxufSksIHJlID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogdCB9ID0gayhlLmxvZ1ByZWZpeCksIHIgPSBhd2FpdCBOKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSBsdChlLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAoci5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHQoXCJTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uXCIpLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhd2FpdCBWcyhlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBtX2lkOiBuLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSkgfTtcbiAge1xuICAgIGlmIChlLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgaWYgKHQoXCJVc2luZyBwYXktZmlyc3QgZmxvdy4uLlwiKSwgIWUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgWm4oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBlLmNvbmZpcm1SZXN1bHQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBDZShlLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBPdChlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHQoXCJEb2luZyBjaGVja291dC4uLlwiLCBhKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgX3IoZS5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCBVID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5VLkVudW0uc3RyaXBlO1xuY29uc3QgUW4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgaSkgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gdHJ1ZTtcbiAgICBjb25zdCBsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgcigpID8gYSgpIDogbCA/IHMgPSBsIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgYSgpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGkoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59LCBWZSA9ICh7XG4gIGdhdGV3YXk6IGUsXG4gIGdhdGV3YXlNZXJjaGFudElkOiB0LFxuICBtZXJjaGFudE5hbWU6IHIsXG4gIG1lcmNoYW50SWQ6IG4sXG4gIGluaXRpYWxQcmV2aWV3OiBhLFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpLFxuICBwcmVmaWxsOiBzXG59KSA9PiB7XG4gIGNvbnN0IGwgPSBpPy5hbW91bnQ/LmFtb3VudEF0b20gPz8gYT8uYW1vdW50QXRvbSA/PyAwLCBjID0gTWF0aC5tYXgobCAvIDEwMCwgMCksIHUgPSAoaT8uYW1vdW50Py5jdXJyZW5jeSA/PyBzPy5jdXJyZW5jeSA/PyBhLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBkID0ge1xuICAgIGFwaVZlcnNpb246IDIsXG4gICAgYXBpVmVyc2lvbk1pbm9yOiAwLFxuICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNBUkRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRBdXRoTWV0aG9kczogW1wiUEFOX09OTFlcIiwgXCJDUllQVE9HUkFNXzNEU1wiXSxcbiAgICAgICAgICBhbGxvd2VkQ2FyZE5ldHdvcmtzOiBbXCJBTUVYXCIsIFwiRElTQ09WRVJcIiwgXCJJTlRFUkFDXCIsIFwiSkNCXCIsIFwiTUFTVEVSQ0FSRFwiLCBcIlZJU0FcIl0sXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6IHRydWUsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW5pemF0aW9uU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHR5cGU6IFwiUEFZTUVOVF9HQVRFV0FZXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZ2F0ZXdheTogZSxcbiAgICAgICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiB0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBlbWFpbFJlcXVpcmVkOiB0cnVlLFxuICAgIHNoaXBwaW5nQWRkcmVzc1JlcXVpcmVkOiBzLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGk/LnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogYy50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gaT8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2YgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLmkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIGhyID0gKCkgPT4gUW4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxufSk7XG5sZXQgV3QgPSBudWxsO1xuY29uc3QgZ3IgPSBhc3luYyAoZSkgPT4gYXdhaXQgU24oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgemUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgZ3IoZSk7XG4gIHJldHVybiBXdCA9PT0gbnVsbCAmJiAoV3QgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBXdDtcbn0sIEJlID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/IHVuLnBhcnNlKHQpIDogbnVsbDtcbn0sIHdyID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gdC5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3MsIGEgPSB0LnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbaSwgLi4uc10gPSBuLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXSwgbCA9IHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IHQuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuTElORTFdID0gcltwLkxJTkUxXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIHJbcC5MSU5FMl0gPSByW3AuTElORTJdIHx8IG4uYWRkcmVzczIgfHwgXCJcIiwgcltwLkxJTkUzXSA9IHJbcC5MSU5FM10gfHwgbi5hZGRyZXNzMyB8fCBcIlwiLCByW3AuQ0lUWV0gPSByW3AuQ0lUWV0gfHwgbi5sb2NhbGl0eSB8fCBcIlwiLCByW3AuU1RBVEVdID0gcltwLlNUQVRFXSB8fCBuLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIHJbcC5aSVBfQ09ERV0gPSByW3AuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgYyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBpIHx8IFwiXCIsIHUgPSByW3AuTEFTVF9OQU1FXSB8fCBsIHx8IFwiXCI7XG4gICAgYyB8fCB1ID8gKHJbcC5GSVJTVF9OQU1FXSA9IGMsIHJbcC5MQVNUX05BTUVdID0gdSkgOiAocltwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBhICYmIChyW3AuU0hJUFBJTkdfTElORTFdID0gcltwLlNISVBQSU5HX0xJTkUxXSB8fCBhLmFkZHJlc3MxIHx8IFwiXCIsIHJbcC5TSElQUElOR19MSU5FMl0gPSByW3AuU0hJUFBJTkdfTElORTJdIHx8IGEuYWRkcmVzczIgfHwgXCJcIiwgcltwLlNISVBQSU5HX0xJTkUzXSA9IHJbcC5TSElQUElOR19MSU5FM10gfHwgYS5hZGRyZXNzMyB8fCBcIlwiLCByW3AuU0hJUFBJTkdfQ0lUWV0gPSByW3AuU0hJUFBJTkdfQ0lUWV0gfHwgYS5sb2NhbGl0eSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfWklQX0NPREVdID0gcltwLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBhLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCByW3AuU0hJUFBJTkdfU1RBVEVdID0gcltwLlNISVBQSU5HX1NUQVRFXSB8fCBhLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSByW3AuU0hJUFBJTkdfQ09VTlRSWV0gfHwgYS5jb3VudHJ5Q29kZSB8fCBcIlVTXCIpLCByO1xufSwgeyBsb2dfXzogdmUsIGVycl9fOiBoYyB9ID0gayhcImF3eC1iYWNzXCIpLCBnYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgaSA9IEcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTihzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IHUgPSBudWxsO1xuICAgIGlmIChjID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgdmUoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdSA9IGF3YWl0IEd0KFwiYmFjc19kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjM1MHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pLCB2ZShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgdmUoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkID0gYXdhaXQgWihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAuLi5xKGksIGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KSwgbSA9IEJlKGQpLCBmID0gbT8uY29uc2VudF9pZCwgeSA9IG0/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgXztcbiAgICBpZiAoYyA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiB5ICYmIHkubGVuZ3RoID49IDEpIHtcbiAgICAgIHZlKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBfID0gYXdhaXQgSG4oeSwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KSwgdmUoYEJhbmsgc2VsZWN0ZWQ6ICR7Xy5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgdmUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZyA9IENlKGkpLCB3ID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogXz8uYmFua19uYW1lLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgb3duZXJfbmFtZToganQoaVtwLkZJUlNUX05BTUVdLCBpW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBpW3AuRU1BSUxdLFxuICAgICAgICBjb3VudHJ5X2NvZGU6IGlbcC5DT1VOVFJZXSxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IHU/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICBzb3J0X2NvZGU6IHU/LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5nLCB0b3duOiBnLmNpdHksIHBvc3Rjb2RlOiBnLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9LCBiID0gKGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogd1xuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoQykgPT4gQy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoYikge1xuICAgICAgdmUoXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEMgfSA9IGF3YWl0IGxlKHtcbiAgICAgICAgdXJsOiBiLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJCQUNTIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmICh2ZShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke0N9XWApLCBDID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKEMgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBTID0gYXdhaXQgeChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1iYWNzXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBpLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBTLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChDKSB7XG4gICAgICB0aHJvdyBoYyhcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBDKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoQz8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBLZSwgZXJyX186IHdjIH0gPSBrKFwiYXd4LWVmdFwiKSwgdmMgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGkgPSBHKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCI7XG4gICAgbGV0IHUgPSBudWxsO1xuICAgIGlmIChjID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgS2UoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdSA9IGF3YWl0IEd0KFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSksIEtlKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBLZShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGQgPSBhd2FpdCBaKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIC4uLnEoaSwgbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxuICAgIH0pLCBmID0gQmUoZCk/LmNvbnNlbnRfaWQsIHkgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZToganQoaVtwLkZJUlNUX05BTUVdLCBpW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBpW3AuRU1BSUxdLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgaW5zdGl0dXRpb25fbnVtYmVyOiB1Py5pbnN0aXR1dGlvbl9udW1iZXIsXG4gICAgICAgIHRyYW5zaXRfbnVtYmVyOiB1Py50cmFuc2l0X251bWJlcixcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IHU/LmFjY291bnRfbnVtYmVyXG4gICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIH1cbiAgICB9LCBnID0gKGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogeVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoaCkgPT4gaC50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoZykge1xuICAgICAgS2UoXCJFRlQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogaCB9ID0gYXdhaXQgbGUoe1xuICAgICAgICB1cmw6IGcsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoS2UoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2h9XWApLCBoID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAoaCA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgdyA9IGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBpLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB3LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICB0aHJvdyB3YyhcIkVGVCBwYXltZW50IGVycm9yXCIsIGgpLCB2KFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIG5ldyBFcnJvcihoPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGJlLCBlcnJfXzogYmMgfSA9IGsoXCJhd3gtc2VwYVwiKSwgUGMgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGkgPSBHKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCB1ID0gbnVsbDtcbiAgICBpZiAoYyA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGJlKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUgPSBhd2FpdCBHdChcInNlcGFfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIzMDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KSwgYmUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGJlKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZCA9IGF3YWl0IFoocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgLi4ucShpLCBsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgfSksIG0gPSBCZShkKSwgZiA9IG0/LmNvbnNlbnRfaWQsIHkgPSBtPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IF87XG4gICAgaWYgKGMgPT09IFwidHJ1ZWxheWVyXCIgJiYgeSAmJiB5Lmxlbmd0aCA+PSAxKSB7XG4gICAgICBiZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgXyA9IGF3YWl0IEhuKHksIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIGJlKGBCYW5rIHNlbGVjdGVkOiAke18uZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGJlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHcgPSAoYXdhaXQgeChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGYsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IGMsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIHNlcGFfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvLyB0cnVlbGF5ZXJcbiAgICAgICAgICAgIGJhbmtfbmFtZTogXz8uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBpW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGp0KGlbcC5GSVJTVF9OQU1FXSwgaVtwLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IGlbcC5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiB1Py5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChiKSA9PiBiLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmICh3KSB7XG4gICAgICBiZShcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogYiB9ID0gYXdhaXQgbGUoe1xuICAgICAgICB1cmw6IHcsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIlNFUEEgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKGJlKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7Yn1dYCksIGIgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAoYiA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGggPSBhd2FpdCB4KHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZlxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LXNlcGFcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGksXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGgsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgIHRocm93IGJjKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGIpLCB2KFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcihiPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEVjLCBlcnJfXzogdnIgfSA9IGsoXCJhaXJ3YWxsZXgtY2NcIiksIENjID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgQWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gQ2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyB2cihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBYbiA9IChlKSA9PiBlPy5bXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSAhPT0gdm9pZCAwLCBTYyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gRWMoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IHZyKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7YWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgZW8gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gQWModCksIG4gPSBhd2FpdCBZbih7IHVybDogcltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pLCBhID0gU2Mobi5ocmVmID8/IFwiXCIpLCBpID0gcltcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGkgIT09IGEpIHtcbiAgICBjb25zdCBsID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBjID0gYEludGVudCBJRCBmcm9tIGNhbGxiYWNrICgke2F9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aX0pLmA7XG4gICAgdGhyb3cgdnIoYyksIG5ldyBFcnJvcihsKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICBpbml0aWFsX2ludGVudF9pZDogYSxcbiAgICAgIGNvbnNlbnRfaWQ6IHJbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbn0sIHRvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBybyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgYnIgPSAoKSA9PiBRbih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4gISF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uXG59KSwgUHIgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gdC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0LCBuID0gdC5iaWxsaW5nQ29udGFjdCwgYSA9IHQuc2hpcHBpbmdDb250YWN0LCBpID0geyAuLi5lIH07XG4gIGlmIChyIHx8IG4gfHwgYSkge1xuICAgIGlbcC5FTUFJTF0gPSBpW3AuRU1BSUxdIHx8IHI/LmVtYWlsQWRkcmVzcyB8fCBuPy5lbWFpbEFkZHJlc3MgfHwgYT8uZW1haWxBZGRyZXNzIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIGlbcC5DT1VOVFJZXSA9IGlbcC5DT1VOVFJZXSB8fCByPy5jb3VudHJ5Q29kZSB8fCBuPy5jb3VudHJ5Q29kZSB8fCBhPy5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIGlbcC5aSVBfQ09ERV0gPSBpW3AuWklQX0NPREVdIHx8IHI/LnBvc3RhbENvZGUgfHwgbj8ucG9zdGFsQ29kZSB8fCBhPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBzID0gaVtwLkZJUlNUX05BTUVdIHx8IHI/LmdpdmVuTmFtZSB8fCBuPy5naXZlbk5hbWUgfHwgYT8uZ2l2ZW5OYW1lIHx8IFwiXCIsIGwgPSBpW3AuTEFTVF9OQU1FXSB8fCByPy5mYW1pbHlOYW1lIHx8IG4/LmZhbWlseU5hbWUgfHwgYT8uZmFtaWx5TmFtZSB8fCBcIlwiO1xuICAgIHMgfHwgbCA/IChpW3AuRklSU1RfTkFNRV0gPSBzLCBpW3AuTEFTVF9OQU1FXSA9IGwpIDogKGlbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgaVtwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gaTtcbn07XG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3Qga2MgPSAoe1xuICB0b3RhbDogZSxcbiAgcHJlZmlsbDogdFxufSkgPT4ge1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgJG4pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gdC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IHI/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogcj8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogcj8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IHI/LmJpbGxpbmdfaW50ZXJ2YWxfY291bnQgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIHF0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBhID0gKGU/LmFtb3VudD8uY3VycmVuY3kgPz8gcj8uY3VycmVuY3kgPz8gdC5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcyA9ICgoZT8uYW1vdW50Py5hbW91bnRBdG9tID8/IHQ/LmFtb3VudEF0b20gPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogZT8ubGFiZWwgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlPy5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCBFciA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IGEsIHRvdGFsOiBpIH0gPSBxdCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1xuICAgICAgXCJlbWFpbFwiLFxuICAgICAgLi4uci5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyA/IFtcInBvc3RhbEFkZHJlc3NcIl0gOiBbXVxuICAgIF0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCIsIFwiamNiXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXCJzdXBwb3J0czNEU1wiLCBcInN1cHBvcnRzQ3JlZGl0XCIsIFwic3VwcG9ydHNEZWJpdFwiXSxcbiAgICB0b3RhbDogaVxuICB9O1xuICByZXR1cm4gci5saW5lX2l0ZW1zLmV2ZXJ5KChjKSA9PiBjLmJpbGxpbmdfaW50ZXJ2YWwgJiYgYy5iaWxsaW5nX2ludGVydmFsX2NvdW50KSAmJiAocy5yZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9IGtjKHtcbiAgICB0b3RhbDogaSxcbiAgICBwcmVmaWxsOiByXG4gIH0pKSwgZT8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBJYyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgUmMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogJGUsIGVycl9fOiBpdCB9ID0gayhcImFkeWVuLWNjXCIpLCBGYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEljLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBubyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgVGMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRmMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBpdChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKG5vKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIE5jID0gKGUpID0+IEpTT04ucGFyc2UoZSksICRyID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIExjID0gYXN5bmMgKCkgPT4ge1xuICAkZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgJHIoKSB8fCBhd2FpdCBEdCg1MDApO1xuICBpZiAoISRyKCkpXG4gICAgdGhyb3cgaXQoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKG5vKTtcbiAgcmV0dXJuICRlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgTWMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogYSwgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBsID0gTmModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiAkZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7bC50eXBlfWApLCBuZXcgUHJvbWlzZSgoYykgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICAkZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKF8pID0+IHtcbiAgICAgIGl0KFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIF8pLCBjKHsgc3RhdHVzOiBGLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgbSA9IChfKSA9PiB7XG4gICAgICBpdChcIkFkeWVuIGVycm9yOlwiLCBfKSwgYyh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGYgPSAoKSA9PiB7XG4gICAgICBjKHsgc3RhdHVzOiBGLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGYpO1xuICAgIGNvbnN0IHkgPSAoXywgZywgdykgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgYyh7IHN0YXR1czogRi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogXywgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIExjKCkudGhlbihcbiAgICAgIChfKSA9PiBfKHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBtXG4gICAgICB9KVxuICAgICkudGhlbigoXykgPT4ge1xuICAgICAgXy5jcmVhdGVGcm9tQWN0aW9uKGwsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIHhjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0gUmMuc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKCRlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKGl0KGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIG9vID0gKGUpID0+IGU/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwLCBhbyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBUYyh0KSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBsIH0gPSAkdChcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgYyA9IGF3YWl0IE1jKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogeGMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBsXG4gIH0pO1xuICBpZiAoYy5jbGVhbnVwKCksIGMuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChjLnN0YXR1cyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChjLnN0YXR1cyA9PT0gRi5TVUNDRVNTKSB7XG4gICAgaWYgKCFjLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiAkZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGMuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGN0KGMuc3RhdHVzKTtcbn0sIGlvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHNvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IERjIH0gPSBrKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIFVjKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gKGF3YWl0IFV0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YT8uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgdihcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBPYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IGUucGF5bWVudCwgbiA9IFByKHQubm9uQ2RlRm9ybUlucHV0cywgciksIGEgPSBHKFxuICAgICAgbixcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIGF3YWl0IFoodC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLnEoYSwgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pO1xuICAgIGNvbnN0IGkgPSBhd2FpdCB4KHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGJyb3dzZXJfaW5mbzogUm8oKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoci50b2tlbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChEYyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGkpLCAhaS5wYXltZW50X21ldGhvZHM/LlswXT8uaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCByZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGEsXG4gICAgICBjb25maXJtUmVzdWx0OiBpLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgbiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG4pLCByO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBKZSwgZXJyX186IGNvIH0gPSBrKFwiYWR5ZW4tYXBwbGUtcGF5XCIpLCBqYyA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBpbyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKEplKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBicigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEplKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoSmUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEplKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IFEocywgbC50b2tlbiwgYywgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFkeWVuQXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBjbyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoZj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgJGMgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGkgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgaW8pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBsIH0gPSBuLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gRXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBsLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiBpPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBmID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBtKSwgeSA9IHtcbiAgICAgIHNlc3Npb246IGYsXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogaS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGEsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIHYoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogTHQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoXywgZykgPT4ge1xuICAgICAgY29uc3QgdyA9ICgpID0+IHtcbiAgICAgICAgSmUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBnKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIGYub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBVYyhoLCB5KTtcbiAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgIGcoYik7XG4gICAgICAgIH1cbiAgICAgIH0sIGYub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGggPSBhd2FpdCBRKGMsIHUudG9rZW4sIGQsIHZvaWQgMCksIGIgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHF0KHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBoLFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBpPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGw6IHVcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBmLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihiKTtcbiAgICAgIH0sIGYub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChoKSA9PiB7XG4gICAgICAgIHYoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBPYyhoLCB5KTtcbiAgICAgICAgICBfKGIpO1xuICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgZyhiKTtcbiAgICAgICAgfVxuICAgICAgfSwgZi5vbmNhbmNlbCA9IHcsIGYuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoXykgPT4ge1xuICAgICAgdGhyb3cgY28oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdihcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IF9cbiAgICAgIH0pLCBfO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBkZSwgZXJyX186IE5lIH0gPSBrKFwiYWR5ZW4tZ29vZ2xlLXBheVwiKSwgR2MgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgc28pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGRlKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgYSA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIE5lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoZGUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBocigpLCAhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSlcbiAgICAgIHJldHVybiBOZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGdyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIGRlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gbC5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBRKHMsIGwudG9rZW4sIGMsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBWZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgIH0pLCBmID0gYXdhaXQgemUoZS5iYXNlVXJsLCBtKSwgeyByZXN1bHQ6IHkgfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KG0pO1xuICAgICAgaWYgKCF5KVxuICAgICAgICByZXR1cm4gZGUoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgcjtcbiAgICB9IGNhdGNoIChtKSB7XG4gICAgICByZXR1cm4gTmUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBtKSwgcjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgTmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBxYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgZGUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBzbyksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IGkubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gYXdhaXQgUShjLCB1LnRva2VuLCBkLCB2b2lkIDApLCBmID0gVmUoe1xuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBtLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIHYoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogaS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEx0KHUsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gYXdhaXQgemUoZS5iYXNlVXJsLCBmKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9IGF3YWl0IHkubG9hZFBheW1lbnREYXRhKGYpO1xuICAgICAgZGUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBfKTtcbiAgICAgIGNvbnN0IGcgPSB3cihyLCBfKSwgdyA9IEcoXG4gICAgICAgIGcsXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBhPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLndcbiAgICAgIH0pLCAhXy5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgYiA9IGF3YWl0IFooYywge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgLi4ucSh3LCB1LmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSksIFMgPSBCZShiKTtcbiAgICAgIGRlKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgUyk7XG4gICAgICBsZXQgQyA9IGF3YWl0IHgoYywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHUudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBSbygpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogXy5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBDKTtcbiAgICAgIGxldCBMID0gQy5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBBID0gQy5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoKCQpID0+ICQudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoQSAmJiBBLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBkZShcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIEEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogJCB9ID0gYXdhaXQgbGUoe1xuICAgICAgICAgIHVybDogQS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGUoYOKVsCBBZHllbiAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAkeyR9XWApLCAkID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKCQgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChBICYmICFMICYmIChDID0gYXdhaXQgeChjLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdS50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IEEudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXJcbiAgICAgICAgfVxuICAgICAgfSksIGRlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2UgYWZ0ZXIgM0RTXCIsIEMpLCBMID0gQy5wYXltZW50X21ldGhvZHM/LlswXT8uaWQpLCAhTClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCBtZXRob2QgSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gcmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB3LFxuICAgICAgICBjb25maXJtUmVzdWx0OiBDLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0aHJvdyBOZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdihcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBfXG4gICAgICB9KSwgbmV3IEVycm9yKF8/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogWWUsIGVycl9fOiBWYyB9ID0gayhcImF3eC1hY2hcIiksIHpjID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBjb25zdCBpID0gRyhyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCB1ID0gbnVsbDtcbiAgICBpZiAoYyA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIFllKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUgPSBhd2FpdCBHdChcImFjaF9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjQwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pLCBZZShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgWWUoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkID0gYXdhaXQgWihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAuLi5xKGksIGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KSwgZiA9IEJlKGQpPy5jb25zZW50X2lkLCBfID0gKGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGp0KGlbcC5GSVJTVF9OQU1FXSwgaVtwLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IGlbcC5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiB1Py5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogdT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoXykge1xuICAgICAgWWUoXCJQbGFpZCB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiB3IH0gPSBhd2FpdCBsZSh7XG4gICAgICAgIHVybDogXyxcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQUNIIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmIChZZShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHt3fV1gKSwgdyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAodyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBnID0gYXdhaXQgeChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1hY2hcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGksXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGcsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHcpIHtcbiAgICAgIHRocm93IFZjKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgdyksIHYoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB3XG4gICAgICB9KSwgbmV3IEVycm9yKHc/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogd3QgfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gQmMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSAoYXdhaXQgVXQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGE/LmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSksIHYoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5hXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gSGMoZSwgdCkge1xuICBpZiAoIWUucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgd3QoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBlKTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IGxlKHtcbiAgICB1cmw6IGUucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHQuYmFzZVVybFxuICB9KTtcbiAgaWYgKHd0KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtyfV1gKSwgciA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCB4KHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IGUudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gd3QoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgbjtcbn1cbmFzeW5jIGZ1bmN0aW9uIEtjKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gZS5wYXltZW50LCBuID0gUHIodC5ub25DZGVGb3JtSW5wdXRzLCByKSwgYSA9IEcoXG4gICAgICBuLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgICBjb25zdCBsID0gKGF3YWl0IFoodC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLnEoYSwgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIWwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBjID0gYXdhaXQgeCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoci50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB3dChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpO1xuICAgIGxldCB1ID0gYy5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgZCA9IGMucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGYpID0+IGYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChkPy5yZWRpcmVjdF91cmwgJiYgZC5jb25zZW50X2lkICYmIGQudGhlaXJfcG1faWQgJiYgKGMgPSBhd2FpdCBIYyhkLCB0KSwgdSA9IGMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKSwgIXUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBtID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG0pLCByZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBhLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IG4gPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChuKSwgcjtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogWmUsIGVycl9fOiBsbyB9ID0gayhcImF3eC1hcHBsZS1wYXlcIiksIFljID0gY2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0byk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKFplKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBicigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFplKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoWmUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFplKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IFEocywgbC50b2tlbiwgYywgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgbG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKGY/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBXYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgaSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0byksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4obCksIHUgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgZCA9IEVyKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogbi5pbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4uY1xuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogaT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZCksIGYgPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGkubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiBjLFxuICAgICAgaXNTZXR1cE1vZGU6IHUsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiB2KFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEx0KGMsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgbmV3IFByb21pc2UoKHksIF8pID0+IHtcbiAgICAgIGNvbnN0IGcgPSAoKSA9PiB7XG4gICAgICAgIFplKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgXyhuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBtLm9uY2FuY2VsID0gZywgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEJjKHcsIGYpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgXyhoKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdyA9IGF3YWl0IFEobCwgYy50b2tlbiwgdSwgdm9pZCAwKSwgaCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogcXQoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHcsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGk/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbDogY1xuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKGgpO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgdihcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaCA9IGF3YWl0IEtjKHcsIGYpO1xuICAgICAgICAgIHkoaCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBfKGgpO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHkpID0+IHtcbiAgICAgIHRocm93IGxvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgeSksIHYoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB5XG4gICAgICB9KSwgeTtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogc2UsIGVycl9fOiBMZSB9ID0gayhcImF3eC1nb29nbGUtcGF5XCIpLCBKYyA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcm8pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIHNlKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgYSA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIExlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoc2UoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBocigpLCAhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSlcbiAgICAgIHJldHVybiBMZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGdyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIHNlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gbC5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBRKHMsIGwudG9rZW4sIGMsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBWZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICB9KSwgZiA9IGF3YWl0IHplKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBmLmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIHNlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIExlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgUi5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBMZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKGY/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBaYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgc2UoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBybyksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IGkubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gYXdhaXQgUShjLCB1LnRva2VuLCBkLCB2b2lkIDApLCBmID0gVmUoe1xuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICB2KFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGkucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBMdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgeSA9IGF3YWl0IHplKGUuYmFzZVVybCwgZik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCB5LmxvYWRQYXltZW50RGF0YShmKTtcbiAgICAgIHNlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgXyk7XG4gICAgICBjb25zdCBnID0gd3IociwgXyksIHcgPSBHKFxuICAgICAgICBnLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYT8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgc2UoXCJfX19cIiwgdyksIHYoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi53XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGggPSBfLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghaClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBiID0gYXdhaXQgWihjLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICAuLi5xKHcsIHUuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgUyA9IEJlKGIpO1xuICAgICAgc2UoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBTKTtcbiAgICAgIGxldCBDID0gYXdhaXQgeChjLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdS50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogUz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogaFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEMpO1xuICAgICAgbGV0IEwgPSBDLnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IEEgPSBDLnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKCQpID0+ICQudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoQSAmJiBBLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBzZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIEEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogJCB9ID0gYXdhaXQgbGUoe1xuICAgICAgICAgIHVybDogQS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2UoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAkeyR9XWApLCAkID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKCQgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChBICYmICFMICYmIChDID0gYXdhaXQgeChjLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdS50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IEEudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IEEuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgc2UoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBDKSwgTCA9IEMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKSwgIUwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHcsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEMsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHRocm93IExlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB2KFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IF9cbiAgICAgIH0pLCBuZXcgRXJyb3IoXz8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBfdCwgZXJyX186IFFjIH0gPSBrKFwia2xhcm5hXCIpLCB1byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJrbGFybmFcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHt9KS5udWxsaXNoKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKVxufSksIFhjID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdW8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IFIuYWlyd2FsbGV4S2xhcm5hLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogYSA/PyB7fVxuICAgIH0pXG4gIH07XG59LCBlbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIF90KFwiUnVubmluZyBLbGFybmEgZmxvdy4uLlwiLCBhKTtcbiAgICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBOKGkpLCBsID0gITE7XG4gICAgICBfdChcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCBjID0gdW8ucGFyc2Uocik7XG4gICAgICBfdChcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCB1ID0gRyh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5sID8gQm4oKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIGQgPSBxKHUsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgX3QoXCJOZXcgY3VzdG9tZXIgZmllbGRzXCIsIGQpO1xuICAgICAgY29uc3QgbSA9IGF3YWl0IFooaSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgLi4ucSh1LCBzLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coXCJzdGFydFBheW1lbnRGbG93UmVzcG9uc2VcIiwgbSksIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImtsYXJuYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGMsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgICAgY29uZmlybVJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kczogW11cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgdGhyb3cgUWMoXCJLbGFybmEgcGF5bWVudCBlcnJvclwiLCBpKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwia2xhcm5hXCIsIGVycm9yOiBpIH0pLCBuZXcgRXJyb3IoaT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBwbyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIG1vID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmFzeW5jIGZ1bmN0aW9uIHRsKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gKGF3YWl0IFV0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGE/LmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSksIHYoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5hXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmwoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBlLnBheW1lbnQsIG4gPSBQcih0Lm5vbkNkZUZvcm1JbnB1dHMsIHIpLCBhID0gRyhuLCB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KSwgYXdhaXQgWih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4ucShhLCB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KTtcbiAgICBjb25zdCBpID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoci50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgcyA9IGF3YWl0IHgodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGlcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChjKSwgcmUoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGEsXG4gICAgICBjb25maXJtUmVzdWx0OiBzLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgbiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG4pLCByO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB2dCwgZXJyX186IGZvIH0gPSBrKFwiYXV0aG5ldC1hcHBsZXBheVwiKSwgbmwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBwbyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKHZ0KFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBicigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHZ0KFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB2dChcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gbC5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBRKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGZvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHYoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGZcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIG9sID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzIH0gPSBuLCBsID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHBvKSwgYyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE4oYyksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgbSA9IEVyKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBkZWZhdWx0TGFiZWw6IGw/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgdihcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IGYgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIG0pLCB5ID0ge1xuICAgICAgc2Vzc2lvbjogZixcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiB0Lm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCBnKSA9PiB7XG4gICAgICBmLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICB2dChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIGcobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBmLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGwodywgeSk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBnKGgpO1xuICAgICAgICB9XG4gICAgICB9LCBmLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0gYXdhaXQgUShjLCB1LnRva2VuLCBkLCB2b2lkIDApLCBoID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBxdCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBuLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdyxcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogbD8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsOiB1XG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgZi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oaCk7XG4gICAgICB9LCBmLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICB2KFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoID0gYXdhaXQgcmwodywgeSk7XG4gICAgICAgICAgXyhoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIGcoaCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGYuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoXykgPT4ge1xuICAgICAgdGhyb3cgZm8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdihcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IF9cbiAgICAgIH0pLCBfO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IFFlIH0gPSBrKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIGFsID0gY2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEllKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBtbyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChJZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhyKCksICF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKVxuICAgICAgcmV0dXJuIFFlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBJZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihpKSwgbCA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBjID0gYXdhaXQgUShpLCBzLnRva2VuLCBsLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkID0gVmUoe1xuICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzogY1xuICAgICAgfSksIG0gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGQpLCB7IHJlc3VsdDogZiB9ID0gYXdhaXQgbS5pc1JlYWR5VG9QYXkoZCk7XG4gICAgICBpZiAoIWYpXG4gICAgICAgIHJldHVybiBJZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHJldHVybiBRZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGQpLCByO1xuICAgIH1cbiAgICBjb25zdCB1ID0gYXN5bmMgKGQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBjXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgUWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIHYoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBtXG4gICAgICAgIH0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IobT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBpbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpIH0gPSBhLCBsID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIG1vKS5tZXRhZGF0YSwgYyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE4oYyksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgbSA9IGF3YWl0IFEoYywgdS50b2tlbiwgZCwgdm9pZCAwKSwgZiA9IFZlKHtcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG0sXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSk7XG4gICAgdihcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiByLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGlcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gYXdhaXQgemUoZS5iYXNlVXJsLCBmKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9IGF3YWl0IHkubG9hZFBheW1lbnREYXRhKGYpO1xuICAgICAgSWUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBfKTtcbiAgICAgIGNvbnN0IGcgPSB3cih0LCBfKSwgdyA9IEcoZywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLndcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaCA9IF8ucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBaKGMsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgIC4uLnEodywgdS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgICB9KTtcbiAgICAgIEllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IHgoYywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHUudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIVMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiByZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBjLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogUyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhyb3cgUWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIHYoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogX1xuICAgICAgfSksIG5ldyBFcnJvcihfPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IHl0LCBlcnJfXzogc2wgfSA9IGsoXCJjeWJzLWZyYW1lXCIpLCBjbCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICByLm5hbWUgPSBcImNhcmRpbmFsX2NvbGxlY3Rpb25faWZyYW1lXCIsIHIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiLCByLnN0eWxlLndpZHRoID0gXCIxMHB4XCIsIHIuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gIGNvbnN0IG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgbi5hY3Rpb24gPSBlLCBuLm1ldGhvZCA9IFwiUE9TVFwiLCBuLnRhcmdldCA9IHIubmFtZTtcbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgcmV0dXJuIGEudHlwZSA9IFwiaGlkZGVuXCIsIGEubmFtZSA9IFwiSldUXCIsIGEudmFsdWUgPSB0LCBuLmFwcGVuZENoaWxkKGEpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLCB7IGZvcm06IG4sIGRldGFjaDogKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobik7XG4gIH0gfTtcbn0sIGxsID0gYXN5bmMgKGUpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIGNvbnN0IHsgcG9zdFVybDogbiwgYWNjZXNzVG9rZW46IGEgfSA9IGUsIGkgPSBuZXcgVVJMKG4pLm9yaWdpbiwgeyBmb3JtOiBzLCBkZXRhY2g6IGwgfSA9IGNsKG4sIGEpO1xuICB5dChcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgY29uc3QgYyA9IChkKSA9PiB7XG4gICAgaWYgKGQub3JpZ2luICE9PSBpKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG0gPSBKU09OLnBhcnNlKGQuZGF0YSk7XG4gICAgaWYgKHl0KFwiUmVjZWl2ZWQgZXZlbnQgZnJvbSBkZXZpY2UgZGF0YSBjb2xsZWN0b3I6XCIsIG0pLCBtLk1lc3NhZ2VUeXBlID09PSBcInByb2ZpbGUuY29tcGxldGVkXCIpIHtcbiAgICAgIHQobSksIHUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0sIHUgPSAoKSA9PiB7XG4gICAgbCgpLCB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgYyk7XG4gIH07XG4gIHRyeSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGMpLCB5dChcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKSwgcy5zdWJtaXQoKSwgeXQoXCJTdWJtaXR0ZWQgZm9ybVwiKTtcbiAgfSBjYXRjaCAoZCkge1xuICAgIHNsKFwiRXJyb3Igc3VibWl0dGluZyBmb3JtOlwiLCBkKSwgdSgpLCByKGQpO1xuICB9XG59KSwgdWwgPSAoZSkgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybDogdCwgYWNjZXNzVG9rZW46IHIsIG1lcmNoYW50RGF0YTogbiwgaWZyYW1lOiBhLCBob3N0OiBpIH0gPSBlLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIHMuYWN0aW9uID0gdCwgcy5tZXRob2QgPSBcIlBPU1RcIiwgcy50YXJnZXQgPSBhLm5hbWU7XG4gIGNvbnN0IGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGwudHlwZSA9IFwiaGlkZGVuXCIsIGwubmFtZSA9IFwiSldUXCIsIGwudmFsdWUgPSByO1xuICBjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICByZXR1cm4gYy50eXBlID0gXCJoaWRkZW5cIiwgYy5uYW1lID0gXCJNRFwiLCBjLnZhbHVlID0gbiwgcy5hcHBlbmRDaGlsZChsKSwgcy5hcHBlbmRDaGlsZChjKSwgaS5hcHBlbmRDaGlsZChzKSwgcztcbn0sIHsgbG9nX186IERlLCBlcnJfXzogX28gfSA9IGsoXCJjeWJzXCIpLCB5byA9IHokMS5vYmplY3Qoe1xuICBzdGVwX3VwX3VybDogeiQxLnN0cmluZygpLFxuICBhY2Nlc3NfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZGRfdXJsOiBEKHokMS5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBEKHokMS5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHokMS5zdHJpbmcoKVxufSksIGRsID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBwbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSB5by5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IF9vKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoZGwpO1xuICByZXR1cm4gdC5kYXRhO1xufSwgbWwgPSAoZSkgPT4gZS50eXBlID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIiwgZmwgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybDogdCwgYWNjZXNzVG9rZW46IHIsIG1lcmNoYW50RGF0YTogbiwgaWZyYW1lOiBhLCBob3N0OiBpLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGwgPSBuZXcgVVJMKHQpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChjKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIERlKFwiQ2xlYW5pbmcgdXAgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCBpLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoKSA9PiB7XG4gICAgICBEZShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIiksIGMoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGYgPSB5cihhLCAoZykgPT4ge1xuICAgICAgRGUoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBnKSwgYyh7IHN0YXR1czogZy5zdGF0dXMsIGNsZWFudXA6IHUgfSksIHkoKTtcbiAgICB9LCBsLCBcInBpbmctM2RzLXN0YXR1c1wiLCBsbiksIHkgPSBLbih7XG4gICAgICBlbGVtZW50czogeyBob3N0OiBpLCBjYW5jZWxCdXR0b246IHMgfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogZixcbiAgICAgIHJlc29sdmU6IChnKSA9PiB7XG4gICAgICAgIGMoeyBzdGF0dXM6IGcuc3RhdHVzLCBjbGVhbnVwOiB1IH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCB1bCh7XG4gICAgICBzdGVwVXBVcmw6IHQsXG4gICAgICBhY2Nlc3NUb2tlbjogcixcbiAgICAgIG1lcmNoYW50RGF0YTogbixcbiAgICAgIGlmcmFtZTogYSxcbiAgICAgIGhvc3Q6IGlcbiAgICB9KS5zdWJtaXQoKTtcbiAgfSk7XG59LCBobyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBwbChlKSwgeyBzdGVwX3VwX3VybDogciwgYWNjZXNzX3Rva2VuOiBuLCBkZF91cmw6IGEsIGRkX3Rva2VuOiBpLCBtZXJjaGFudF9kYXRhOiBzIH0gPSB0O1xuICBpZiAoYSAmJiBpKSB7XG4gICAgY29uc3QgbSA9IGF3YWl0IGxsKHtcbiAgICAgIHBvc3RVcmw6IGEsXG4gICAgICBhY2Nlc3NUb2tlbjogaVxuICAgIH0pO1xuICAgIERlKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIG0uU3RhdHVzKTtcbiAgfSBlbHNlXG4gICAgX28oXCJObyBkZXZpY2UgZGF0YSBjb2xsZWN0aW9uIFVSTCBvciB0b2tlbiBwcm92aWRlZFwiKTtcbiAgY29uc3QgeyBob3N0OiBsLCBpZnJhbWU6IGMsIGNhbmNlbEJ1dHRvbjogdSB9ID0gJHQoXCJcIiwgeyBuYW1lOiBcImNhcmRpbmFsX2F1dGhfaWZyYW1lXCIgfSk7XG4gIERlKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgZCA9IGF3YWl0IGZsKHtcbiAgICBzdGVwVXBVcmw6IHIsXG4gICAgYWNjZXNzVG9rZW46IG4sXG4gICAgbWVyY2hhbnREYXRhOiBzLFxuICAgIGlmcmFtZTogYyxcbiAgICBob3N0OiBsLFxuICAgIGNhbmNlbEJ1dHRvbjogdVxuICB9KTtcbiAgaWYgKGQuY2xlYW51cCgpLCBkLnN0YXR1cyA9PT0gRi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAoZC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoZC5zdGF0dXMgPT09IEYuU1VDQ0VTUykge1xuICAgIERlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2VcbiAgICBjdChkLnN0YXR1cyk7XG59LCB7IGxvZ19fOiBfbCwgZXJyX186IGdvIH0gPSBrKFwicG9ja3l0LWNjXCIpLCB5bCA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIGhsID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHlsLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgZ28obiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgd28gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIF9sKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBnbyhyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke2FlKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIHJyID0gKGUsIHQpID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldCh0KSwgZ2wgPSAoZSkgPT4gZT8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMCwgd2wgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gaGwodCksIG4gPSBhd2FpdCBZbih7IHVybDogcltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogd28obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHJbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiByW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IEdyIH0gPSBrKFwic3RyaXBlLWNjXCIpLCB2bCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIHZvID0gYXN5bmMgKGUpID0+IHtcbiAgdihcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLmVcbiAgfSksIEdyKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke2UuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBycyhlKSwgdihcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIEdyKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgYmwgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gdmwuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogdC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiB0LmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59LCBQbCA9IDQsIHsgbG9nX186IFRlLCBlcnJfXzogUnQgfSA9IGsoXCJ1bmlmaWVkLWNjXCIpLCBFbCA9IGFzeW5jICh7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiBhXG59KSA9PiB7XG4gIFRlKFwi4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihpKTtcbiAgVGUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgY29uc3QgbCA9IEcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBjID0ge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbCxcbiAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpbiB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBsb2dzXG4gICAgICBkZXZpY2VUb2tlbjogem4oKVxuICAgIH0sXG4gICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogdHJ1ZSxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBSdChhLCBjKSwgVGUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IFVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgSm4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgRG4oaSwgYyk7XG4gIGlmIChUZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBibyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gQ2woe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBjLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IGksXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgQ2wgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBsXG4gIH0gPSBlO1xuICBsZXQgYyA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgUGw7IHUrKykge1xuICAgIFRlKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgdihcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IGtsKGMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gYXdhaXQgQWwodC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLm0ubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgVGUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIGNvbnN0IGYgPSBhZShtKTtcbiAgICAgIFJ0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBmKSwgdihcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBmLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChjID0gYXdhaXQgeChpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIFRlKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgYyksIGMuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBibyhyLm1vZGUsIGMpO1xuICB9XG4gIHRocm93IHYoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogY1xuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIEFsID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCB2byhibCh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoWG4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgZW8oZSwgdCkgfSB9O1xuICAgIGlmIChvbyh0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IGFvKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAobWwodCkpXG4gICAgICByZXR1cm4gYXdhaXQgaG8odCksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoU2wodCkpXG4gICAgICByZXR1cm4gYXdhaXQgRW8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgU2wgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBQbyhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59LCBrbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBNYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBSdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgUnQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBibyA9IChlLCB0KSA9PiB7XG4gIGlmIChlID09PSBcInNldHVwXCIpIHtcbiAgICBjb25zdCByID0gdC5jY19wbV9pZCA/PyB0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIENDIFBNIElEIG9yIHBheW1lbnRfbWV0aG9kcyBmb3VuZCBpbiBQRiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBwYXltZW50X21ldGhvZF9pZDogclxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBzdWNjZXNzIHJlc3BvbnNlIGZyb20gc3RhcnRQRlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiB0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59LCB7IGxvZ19fOiBNLCBlcnJfXzogcXIgfSA9IGsoXCJjb21tb24tY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IElsID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBNKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oaSk7XG4gICAgdihcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4udCxcbiAgICAgIHByZWZpbGw6IHNcbiAgICB9KTtcbiAgICBjb25zdCBsID0gcy5maW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M/LnVuaWZpZWRfY2MgPz8gMDtcbiAgICBNKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQobCAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGMgPSBNYXRoLnJhbmRvbSgpLCB1ID0gYyA8IGwsIGQgPSB7XG4gICAgICByb2xsOiBjLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBsLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gTShg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7Y30gdnMgJHtsfSlgKSwgdihcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgZCksIEVsKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgTShg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtjfSB2cyAke2x9KWApLCB2KFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIGQpLCBNKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgbSA9IEcoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBzLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm1cbiAgICB9KTtcbiAgICBjb25zdCBmID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbSxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICExLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpLFxuICAgICAgLi4ucShtLCBzLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIE0oYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgVW4oYS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoSm4oeSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBNKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCBfID0gYXdhaXQgSHMoaSwgZik7XG4gICAgICAgIHJldHVybiBNKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE0oYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBfID0gYXdhaXQgT3IoaSwgZik7XG4gICAgICAgIHJldHVybiBNKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBfIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoeSkge1xuICAgICAgaWYgKHkgaW5zdGFuY2VvZiB4biAmJiB5Lm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIE0oXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBNKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIHkucmVzcG9uc2UuaGVhZGVycyksIHYoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgLi4ueS5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBfID0geS5yZXNwb25zZS5oZWFkZXJzID8/IHt9O1xuICAgICAgICBcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCIgaW4gXyAmJiAoZi5leGlzdGluZ19jY19wbV9pZCA9IF9bXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXSwgTShg4pScIEV4aXN0aW5nIENDIFBNIElEOiAke2YuZXhpc3RpbmdfY2NfcG1faWR9YCkpO1xuICAgICAgICBjb25zdCBnID0gZ2woeS5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICBNKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEEgPSBhd2FpdCB3bChlLmJhc2VVcmwsIHkucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgZi5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBBO1xuICAgICAgICB9XG4gICAgICAgIGlmIChYbih5LnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgTShcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBBID0gYXdhaXQgZW8oZS5iYXNlVXJsLCB5LnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGYuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gQTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob28oeS5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIE0oXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEEgPSBhd2FpdCBhbyhcbiAgICAgICAgICAgIHJbcC5DT1VOVFJZXSxcbiAgICAgICAgICAgIHkucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHMubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gQTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiID0gYXdhaXQgRG4oaSwgZik7XG4gICAgICAgIE0oXCLilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpcIiwgYik7XG4gICAgICAgIGNvbnN0IFMgPSBiLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgIChBKSA9PiBBLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICk7XG4gICAgICAgIGlmIChTKSB7XG4gICAgICAgICAgTShcIuKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgQSA9IHlvLnBhcnNlKFMpLCAkID0gYXdhaXQgaG8oe1xuICAgICAgICAgICAgLi4uQSxcbiAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgX3VuaWZpZWRfY2NfcGNjc19pZDogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGYuZXh0cmFfbWV0YWRhdGEuY3liZXJzb3VyY2UgPSAkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEMgPSB5LnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAhZyAmJiAhUyA/IEMgPyAoTShcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IHZvKFJsKGIpKSkgOiAoTShcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IEVvKGIsIGUuYmFzZVVybCkpIDogTShcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpO1xuICAgICAgICBjb25zdCBMID0gYi5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgTShg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtMfV1gKTtcbiAgICAgICAgICBjb25zdCBBID0gYXdhaXQgeChpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogTFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE0oXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgQSk7XG4gICAgICAgICAgY29uc3QgJCA9IGx0KEEpO1xuICAgICAgICAgIHJldHVybiBNKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7JC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6ICQgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBNKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke0MgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgQSA9IGF3YWl0IE9yKGksIHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogTCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IENcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gTShcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogQSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBxcihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgcXIoeSksIHk7XG4gICAgfVxuICB9XG4pLCBSbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gSmkucGFyc2UodCk7XG59LCBGbCA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgUG8gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBGbC5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gb2EucGFyc2UodCk7XG59LCBFbyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBQbyhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIE0oXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgdihcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgTShg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgdihcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGxlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKE0oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyB2KFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgdihcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgdihcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgVGwgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IGVlLCBlcnJfXzogTmwgfSA9IGsoXCJsb29wLWNyeXB0b1wiKSwgTGwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSB9KSA9PiB7XG4gICAgZWUoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVGwpO1xuICAgIGVlKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIGVlKFwiU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLlwiKTtcbiAgICBjb25zdCByID0gYXdhaXQgTihlLmFueUNkZUNvbm5lY3Rpb24pLCBuID0gci5tb2RlID09PSBcInNldHVwXCIsIGEgPSBhd2FpdCBVdChlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgfSksIGkgPSBhd2FpdCBRKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgbCA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGMgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBsID0gTWF0aC5tYXgobCwgYykpIDogKGQgPSAoaSA/IGkuYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgYyA9IE1hdGgubWF4KGMsIGQpLCBsID0gTWF0aC5tYXgobCwgYykpO1xuICAgIGNvbnN0IG0gPSBkLCBmID0gdjQoKSwgeSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IG0sXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBsLFxuICAgICAgY3VzdG9tZXJSZWZJZDogZixcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgXyA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB5LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IF9cbiAgICB9O1xuICB9XG4pLCBNbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgZWUoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgZWUoXCJjb250ZXh0XCIsIGUpLCBlZShcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgZWUoXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBlZShcImZsb3dDYWxsYmFja3NcIiwgbiksIGVlKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBOKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgZWUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7aS5tb2RlfV1gKTtcbiAgICBjb25zdCBzID0gRyhcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGkuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gaS5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBxKHMsIGkuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgdihcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgWihlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIC4uLnUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGMsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGMgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogc1twLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgfSksIG0gPSBhd2FpdCB4KGwsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBhLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjID8gZC5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGEuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5bWVudF9tZXRob2Q6IGEucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBhLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZWUoYENvbmZpcm0gcmVzdWx0OiAke219YCksIGkubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBlZShcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIiksIGVlKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIG0pO1xuICAgICAgY29uc3QgZiA9IGx0KG0pO1xuICAgICAgcmV0dXJuIGVlKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Zi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGYgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVlKFwiRG9pbmcgY2hlY2tvdXQuLi5cIiksICFtLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBObChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIG0pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBtLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogU2UsIGVycl9fOiB4bCB9ID0gayhcInBheXBhbFwiKSwgQ28gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBEbCA9IGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICBjb25zdCByID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIENvKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3c6ICgpID0+IFIucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBVbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIFNlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBOKGkpLCB7IGlzQW5vbnltb3VzOiBsLCB1c2VSZWRpcmVjdEZsb3c6IGMgfSA9IGEuc2V0dGluZ3MgPz8ge307XG4gICAgICBTZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gQ28ucGFyc2Uocik7XG4gICAgICBTZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gRyh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5sID8gQm4oKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIG0gPSBxKGQsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgU2UoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICAgIGNvbnN0IGYgPSB2NCgpLCB5ID0gITEsIF8gPSB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHUucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1LFxuICAgICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHksXG4gICAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogeSA/IHtcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogYyxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZlxuICAgICAgICB9LFxuICAgICAgICAuLi5tXG4gICAgICB9LCBnID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCB3ID0gYnRvYShKU09OLnN0cmluZ2lmeShfKSksIGggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IHdcbiAgICAgIH0pLCBiID0gYCR7Z30/JHtoLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChjKVxuICAgICAgICB0aHJvdyBTZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiLCBhd2FpdCBEdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IFduKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBpLFxuICAgICAgICBmLFxuICAgICAgICBiXG4gICAgICApO1xuICAgICAgU2UoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUyk7XG4gICAgICBjb25zdCBDID0gcnIoUy5ocmVmLCBcImNhdHRcIiksIEwgPSBycihTLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgQSA9IGF3YWl0IHgoaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHkgPyBDIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogeSA/IEwgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFNlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEEpLCByZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEEsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogeVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgdGhyb3cgeGwoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBpKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBpIH0pLCBuZXcgRXJyb3IoaT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBtZSwgZXJyX186IFZyIH0gPSBrKFwicG9ja3l0LXBheXBhbFwiKSwgQW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IE9sID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQW8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9ja3l0IFBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBzdGFydEZsb3c6ICgpID0+IFIucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBqbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgbWUoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihpKTtcbiAgICBtZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgbCA9IEFvLnBhcnNlKHQpO1xuICAgIG1lKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBjID0gYT8uc2V0dGluZ3MsIHUgPSBHKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgYz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IHEodSwgcy5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgbWUoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCBtID0gdjQoKSwgZiA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBsLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBmLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBmID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhYT8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdyxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IG1cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgXyA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgZyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoeSkpLCB3ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcy50b2tlbixcbiAgICAgIHI6IGdcbiAgICB9KSwgaCA9IGAke199PyR7dy50b1N0cmluZygpfWA7XG4gICAgaWYgKGE/LnNldHRpbmdzPy51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBtZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBoLCBhd2FpdCBEdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIG1lKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBtZShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBiID0gYXdhaXQgV24oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgaSxcbiAgICAgIG0sXG4gICAgICBoXG4gICAgKTtcbiAgICBtZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBiKTtcbiAgICBjb25zdCBTID0gd28oYi5ocmVmKSwgQyA9IHJyKGIuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghQylcbiAgICAgIHRocm93IFZyKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCBiLmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgbWUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7U31gKTtcbiAgICBjb25zdCBMID0gYXdhaXQgeChpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogUyxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGYgPyBDIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKG1lKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEwpLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEwucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgVnIoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBMKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIHsgbG9nX186IFcsIGVycl9fOiBidCB9ID0gayhcInN0cmlwZS1hZmZpcm1cIiksIFNvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFmZmlybVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCAkbCA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEdsID0gY2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIFcoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBBZmZpcm0uLi5cIik7XG4gICAgY29uc3QgciA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBTbyk7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIFcoXCJObyBTdHJpcGUgQWZmaXJtIENQTSBmb3VuZFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIFcoXCJTdGFydGluZyBzdHJpcGUgYWZmaXJtIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbiA9IGUuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICByZXR1cm4gKGF3YWl0IE4obikpLm1vZGUgPT09IFwic2V0dXBcIiA/IChXKFwiU2V0dXAgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBTdHJpcGUgQWZmaXJtIGZsb3dcIiksIHsgaXNBdmFpbGFibGU6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICB9IH0pIDoge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBSLnN0cmlwZUFmZmlybS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IGwgPz8ge30sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICB0aHJvdyBidChcIkVycm9yIHN0YXJ0aW5nIEFmZmlybSBmbG93OlwiLCBjKSwgYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHFsID0gVihcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LCBub25DZGVGb3JtSW5wdXRzOiByLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBXKFwiUnVubmluZyBTdHJpcGUgQWZmaXJtIHBheS1maXJzdCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKGEpO1xuICAgIFcoXCJWYWxpZGF0aW5nIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHMgPSBHKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnNcbiAgICB9KSwgVyhcIkNyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcy5tYXAoKGgpID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBoLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaC5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHNbcC5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfTtcbiAgICBXKFwiU3RhcnRpbmcgcGF5LWZpcnN0IHBheW1lbnQgZmxvdyBmb3IgQWZmaXJtLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBaKGEsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogITAsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGwsXG4gICAgICAuLi5xKHMsIGkuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KTtcbiAgICBXKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpO1xuICAgIGNvbnN0IHUgPSAkbC5wYXJzZShjLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyksIHsgY2xpZW50X3NlY3JldDogZCB9ID0gdVswXTtcbiAgICBXKFwiQ2xpZW50IHNlY3JldCBmb3IgcGF5bWVudCBpbnRlbnRcIiwgZCk7XG4gICAgY29uc3QgbSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBTbyk7XG4gICAgaWYgKCFtKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaXBlIEFmZmlybSBDUE0gbm90IGZvdW5kXCIpO1xuICAgIGNvbnN0IHsgc3RyaXBlOiBmIH0gPSBhd2FpdCB4dChtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAvLyBVc2UgcGF5bWVudCBtb2RlIGZvciBwYXktZmlyc3QgZmxvd1xuICAgICAgY3VycmVuY3k6IGkuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgIGFtb3VudDogaS5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0pO1xuICAgIFcoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBmKTtcbiAgICBjb25zdCB5ID0gQ2UocyksIF8gPSBgJHtzW3AuRklSU1RfTkFNRV19ICR7c1twLkxBU1RfTkFNRV19YCwgZyA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogc1twLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBfLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIGxpbmUxOiB5LmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IHkubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogeS5jaXR5LFxuICAgICAgICAgICAgc3RhdGU6IHkuc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiB5LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogeS56aXBfY29kZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHcgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiAhMVxuICAgIH07XG4gICAgVyhgQ29uZmlybWluZyBBZmZpcm0gcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7ZH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBlcnJvcjogaCwgcGF5bWVudEludGVudDogYiB9ID0gYXdhaXQgZi5jb25maXJtQWZmaXJtUGF5bWVudChcbiAgICAgICAgZCxcbiAgICAgICAgZyxcbiAgICAgICAgd1xuICAgICAgKTtcbiAgICAgIGlmIChoKVxuICAgICAgICB0aHJvdyBidChcIkFmZmlybSBwYXltZW50IGNvbmZpcm1hdGlvbiBlcnJvcjpcIiwgaCksIG5ldyBFcnJvcihgQWZmaXJtIHBheW1lbnQgZmFpbGVkOiAke2gubWVzc2FnZX1gKTtcbiAgICAgIFcoXCJBZmZpcm0gcGF5bWVudCBjb25maXJtZWQgc3VjY2Vzc2Z1bGx5XCIsIGIpO1xuICAgICAgY29uc3QgUyA9IGI/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgIGlmICghUylcbiAgICAgICAgcmV0dXJuIGJ0KFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEtsYXJuYSBwYXltZW50IGNvbmZpcm1hdGlvblwiKSwgbi5nZXQub25DaGVja291dEVycm9yKFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCIpLCB7XG4gICAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICAgIHJlc3VsdDogeyBpbnZvaWNlX3VybHM6IFtdLCBzdWJzY3JpcHRpb25faWRzOiBbXSwgY3VzdG9tZXJfaWQ6IFwiXCIsIHBheW1lbnRfbWV0aG9kX2lkOiBcIlwiIH1cbiAgICAgICAgfTtcbiAgICAgIFcoXCJQYXltZW50IHJlcXVpcmVzIGFkZGl0aW9uYWwgYWN0aW9uLCBzdGFydGluZyAzRFMgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEMgfSA9IGF3YWl0IGxlKHtcbiAgICAgICAgdXJsOiBTLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJBZmZpcm0gdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKEMgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIGlmIChDID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIFcoXCIzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICBjb25zdCBMID0gYj8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwLCBBID0gYXdhaXQgeChhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgICAgICB0aGVpcl9wbV9pZDogTFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gVyhcIlBheW1lbnQgZmxvdyBjb25maXJtZWRcIiwgQSksIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1hZmZpcm1cIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEEsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITBcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHRocm93IGJ0KFwiRXJyb3IgaW4gQWZmaXJtIHBheW1lbnQgZmxvdzpcIiwgaCksIGg7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBILCBlcnJfXzogbnIgfSA9IGsoXCJzdHJpcGUtYWZ0ZXJwYXlcIiksIGtvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFmdGVycGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIFZsID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgemwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgSChcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEFmdGVycGF5Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywga28pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiBIKFwiTm8gU3RyaXBlIEFmdGVycGF5IENQTSBmb3VuZFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIEgoXCJTdGFydGluZyBzdHJpcGUgYWZ0ZXJwYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gZS5hbnlDZGVDb25uZWN0aW9uO1xuICAgIHJldHVybiAoYXdhaXQgTihuKSkubW9kZSA9PT0gXCJzZXR1cFwiID8gKEgoXCJTZXR1cCBtb2RlIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZnRlcnBheSBmbG93XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgfSB9KSA6IHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gUi5zdHJpcGVBZnRlcnBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IGwgPz8ge30sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICB0aHJvdyBucihcIkVycm9yIHN0YXJ0aW5nIEFmdGVycGF5IGZsb3c6XCIsIGMpLCBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgQmwgPSBWKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsIG5vbkNkZUZvcm1JbnB1dHM6IHIsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIEgoXCJSdW5uaW5nIFN0cmlwZSBBZnRlcnBheSBwYXktZmlyc3QgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgTihhKTtcbiAgICBIKFwiVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBzID0gRyhyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIEgoXCJDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMubWFwKChoKSA9PiAoe1xuICAgICAgICBwcmljZV9pZDogaC5wcmljZV9pZCxcbiAgICAgICAgcXVhbnRpdHk6IGgucXVhbnRpdHlcbiAgICAgIH0pKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBzW3AuUFJPTU9USU9OX0NPREVdIHx8IHZvaWQgMCxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogaS5hbW91bnRfdG90YWxfYXRvbVxuICAgIH07XG4gICAgSChcIlN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEFmdGVycGF5Li4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBaKGEsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogITAsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGwsXG4gICAgICAuLi5xKHMsIGkuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KTtcbiAgICBIKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpO1xuICAgIGNvbnN0IHUgPSBWbC5wYXJzZShcbiAgICAgIGMucmVxdWlyZWRfdXNlcl9hY3Rpb25zXG4gICAgKSwgeyBjbGllbnRfc2VjcmV0OiBkIH0gPSB1WzBdO1xuICAgIEgoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBkKTtcbiAgICBjb25zdCBtID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGtvKTtcbiAgICBpZiAoIW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZ0ZXJwYXkgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICBjb25zdCB7IHN0cmlwZTogZiB9ID0gYXdhaXQgeHQobS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwicGF5bWVudFwiLFxuICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgIGN1cnJlbmN5OiBpLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICBhbW91bnQ6IGkuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9KTtcbiAgICBIKFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgZik7XG4gICAgY29uc3QgeSA9IENlKHMpLCBfID0gYCR7c1twLkZJUlNUX05BTUVdfSAke3NbcC5MQVNUX05BTUVdfWAsIGcgPSB7XG4gICAgICByZXR1cm5fdXJsOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IHNbcC5FTUFJTF0sXG4gICAgICAgICAgbmFtZTogXyxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogeS5saW5lMSxcbiAgICAgICAgICAgIGxpbmUyOiB5LmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IHkuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiB5LnN0YXRlLFxuICAgICAgICAgICAgY291bnRyeTogeS5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IHkuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB3ID0ge1xuICAgICAgaGFuZGxlQWN0aW9uczogITFcbiAgICB9O1xuICAgIEgoYENvbmZpcm1pbmcgQWZ0ZXJwYXkgcGF5bWVudCB3aXRoIGNsaWVudCBzZWNyZXQ6ICR7ZH1gKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaCA9IGF3YWl0IGYuY29uZmlybUFmdGVycGF5Q2xlYXJwYXlQYXltZW50KFxuICAgICAgICBkLFxuICAgICAgICBnLFxuICAgICAgICB3XG4gICAgICApO1xuICAgICAgaWYgKEgoXCJBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvbiByZXN1bHQ6XCIsIGgpLCBoLnBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy50eXBlID09PSBcInJlZGlyZWN0X3RvX3VybFwiKSB7XG4gICAgICAgIGNvbnN0IGIgPSBoLnBheW1lbnRJbnRlbnQ/Lm5leHRfYWN0aW9uPy5yZWRpcmVjdF90b191cmw/LnVybDtcbiAgICAgICAgaWYgKCFiKVxuICAgICAgICAgIHJldHVybiBucihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvblwiKSwgbi5nZXQub25DaGVja291dEVycm9yKFwiQWZ0ZXJwYXkgcGF5bWVudCBmYWlsZWRcIiksIHtcbiAgICAgICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHJlc3VsdDogeyBpbnZvaWNlX3VybHM6IFtdLCBzdWJzY3JpcHRpb25faWRzOiBbXSwgY3VzdG9tZXJfaWQ6IFwiXCIsIHBheW1lbnRfbWV0aG9kX2lkOiBcIlwiIH1cbiAgICAgICAgICB9O1xuICAgICAgICBIKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBTIH0gPSBhd2FpdCBsZSh7XG4gICAgICAgICAgdXJsOiBiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgICBmcmFtZVRpdGxlOiBcIkFmdGVycGF5IHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoSChg4pWwIEFmdGVycGF5IHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtTfV1gKSwgUyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKFMgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICBIKFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IEMgPSBoLnBheW1lbnRJbnRlbnQ/LnBheW1lbnRfbWV0aG9kPy50b1N0cmluZygpID8/IHZvaWQgMCwgTCA9IGF3YWl0IHgoYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IENcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZSh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1hZnRlcnBheVwiLFxuICAgICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGEsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgICAgICBjb25maXJtUmVzdWx0OiBMLFxuICAgICAgICAgIHVzZVBheUZpcnN0RmxvdzogITBcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhyb3cgSChcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZCBpbiBBZnRlcnBheSBwYXltZW50IGNvbmZpcm1hdGlvblwiKSwgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIG5yKFwiRXJyb3IgaW4gQWZ0ZXJwYXkgY2hlY2tvdXQgZmxvdzpcIiwgaCk7XG4gICAgICBjb25zdCBiID0gaCBpbnN0YW5jZW9mIEVycm9yID8gaC5tZXNzYWdlIDogXCJBZnRlcnBheSBwYXltZW50IGZhaWxlZFwiO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogSywgZXJyX186IG9yIH0gPSBrKFwic3RyaXBlLWtsYXJuYVwiKSwgSW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEhsID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgS2wgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgSyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEtsYXJuYS4uLlwiKTtcbiAgICBjb25zdCByID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIElvKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gSyhcIk5vIFN0cmlwZSBLbGFybmEgQ1BNIGZvdW5kXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgSyhcIlN0YXJ0aW5nIHN0cmlwZSBrbGFybmEgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gZS5hbnlDZGVDb25uZWN0aW9uO1xuICAgIHJldHVybiAoYXdhaXQgTihuKSkubW9kZSA9PT0gXCJzZXR1cFwiID8gKEsoXCJTZXR1cCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBLbGFybmEgZmxvd1wiKSwgeyBpc0F2YWlsYWJsZTogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIH0gfSkgOiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jIChsKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIFIuc3RyaXBlS2xhcm5hLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogbCA/PyB7fSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgIHRocm93IG9yKFwiRXJyb3Igc3RhcnRpbmcgS2xhcm5hIGZsb3c6XCIsIGMpLCBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgWWwgPSBWKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsIG5vbkNkZUZvcm1JbnB1dHM6IHIsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIEsoXCJSdW5uaW5nIFN0cmlwZSBLbGFybmEgcGF5LWZpcnN0IGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE4oYSk7XG4gICAgSyhcIlZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgcyA9IEcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHYoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBLKFwiQ3JlYXRpbmcgY2FydCBpbmZvIGZvciBwYXktZmlyc3QgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgbGluZV9pdGVtczogaS5saW5lX2l0ZW1zLm1hcCgoaCkgPT4gKHtcbiAgICAgICAgcHJpY2VfaWQ6IGgucHJpY2VfaWQsXG4gICAgICAgIHF1YW50aXR5OiBoLnF1YW50aXR5XG4gICAgICB9KSksXG4gICAgICBwcm9tb3Rpb25fY29kZTogc1twLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGkuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIEsoXCJTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBLbGFybmEuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IFooYSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiAhMCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCxcbiAgICAgIC4uLnEocywgaS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxuICAgIH0pO1xuICAgIEsoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyk7XG4gICAgY29uc3QgdSA9IEhsLnBhcnNlKGMucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSwgeyBjbGllbnRfc2VjcmV0OiBkIH0gPSB1WzBdO1xuICAgIEsoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBkKTtcbiAgICBjb25zdCBtID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIElvKTtcbiAgICBpZiAoIW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgS2xhcm5hIENQTSBub3QgZm91bmRcIik7XG4gICAgY29uc3QgeyBzdHJpcGU6IGYgfSA9IGF3YWl0IHh0KG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICBjdXJyZW5jeTogaS5jdXJyZW5jeSA/PyBcInVzZFwiLFxuICAgICAgYW1vdW50OiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSk7XG4gICAgSyhcIlN0cmlwZSBpbnN0YW5jZSBjcmVhdGVkXCIsIGYpO1xuICAgIGNvbnN0IHkgPSBDZShzKSwgXyA9IGAke3NbcC5GSVJTVF9OQU1FXX0gJHtzW3AuTEFTVF9OQU1FXX1gLCBnID0ge1xuICAgICAgcmV0dXJuX3VybDogbmV3IFVSTChcIi9hcHAvM2RzL3N1Y2Nlc3MvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IHNbcC5FTUFJTF0sXG4gICAgICAgICAgbmFtZTogXyxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogeS5saW5lMSxcbiAgICAgICAgICAgIGxpbmUyOiB5LmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IHkuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiB5LnN0YXRlLFxuICAgICAgICAgICAgY291bnRyeTogeS5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IHkuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB3ID0ge1xuICAgICAgaGFuZGxlQWN0aW9uczogITFcbiAgICB9O1xuICAgIEsoYENvbmZpcm1pbmcgS2xhcm5hIHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2R9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCBmLmNvbmZpcm1LbGFybmFQYXltZW50KGQsIGcsIHcpO1xuICAgICAgaWYgKEsoXCJLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb24gcmVzdWx0OlwiLCBoKSwgaC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSA9PT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICBjb25zdCBiID0gaC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8ucmVkaXJlY3RfdG9fdXJsPy51cmw7XG4gICAgICAgIGlmICghYilcbiAgICAgICAgICByZXR1cm4gb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJLbGFybmEgcGF5bWVudCBmYWlsZWRcIiksIHtcbiAgICAgICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHJlc3VsdDogeyBpbnZvaWNlX3VybHM6IFtdLCBzdWJzY3JpcHRpb25faWRzOiBbXSwgY3VzdG9tZXJfaWQ6IFwiXCIsIHBheW1lbnRfbWV0aG9kX2lkOiBcIlwiIH1cbiAgICAgICAgICB9O1xuICAgICAgICBLKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogUyB9ID0gYXdhaXQgbGUoe1xuICAgICAgICAgIHVybDogYixcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgICAgZnJhbWVUaXRsZTogXCJLbGFybmEgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChLKGDilbAgS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtTfV1gKSwgUyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChTID09PSBGLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIEsoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IEMgPSBoLnBheW1lbnRJbnRlbnQ/LnBheW1lbnRfbWV0aG9kPy50b1N0cmluZygpID8/IHZvaWQgMCwgTCA9IGF3YWl0IHgoYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IENcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZSh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1rbGFybmFcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdDogTCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICEwXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHRocm93IEsoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIG9yKFwiRXJyb3IgaW4gS2xhcm5hIGNoZWNrb3V0IGZsb3c6XCIsIGgpO1xuICAgICAgY29uc3QgYiA9IGggaW5zdGFuY2VvZiBFcnJvciA/IGgubWVzc2FnZSA6IFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYik7XG4gICAgfVxuICB9XG4pLCBodCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiB6LCBlcnJfXzogenIgfSA9IGsoXCJzdHJpcGUtbGlua1wiKSwgV2wgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSmwgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgWmwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIHooXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IG4gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgV2wpO1xuICAgIHooXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKGEpLCBzID0gaS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgeihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgUShhLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBjLCBzdHJpcGU6IHUgfSA9IGF3YWl0IHh0KG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogbC5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSksIGQgPSBjLmNyZWF0ZShcImxpbmtBdXRoZW50aWNhdGlvblwiKTtcbiAgICB6KFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBtID0gYy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoZywgdykgPT4ge1xuICAgICAgbGV0IGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGcpO1xuICAgICAgaCB8fCAoenIoYFJlY29tbWFuZGVkIHRvIHJlbmRlciBhIGNvbnRhaW5lciB3aXRoICR7Z30gdG8gYXZvaWQgcmVuZGVyaW5nIGluIHRoZSBib2R5YCksIGggPSBkb2N1bWVudC5ib2R5KTtcbiAgICAgIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaD8uYXBwZW5kQ2hpbGQoYiksIGQubW91bnQoYik7XG4gICAgICBsZXQgUyA9ICExLCBDID0gITE7XG4gICAgICBpZiAoZC5vbmNlKFwicmVhZHlcIiwgKCkgPT4ge1xuICAgICAgICBDID0gITAsIHI/Lm9uQXV0aGVudGljYXRpb25FbGVtZW50UmVhZHk/LigpO1xuICAgICAgfSksIHcpIHtcbiAgICAgICAgYi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIiwgYi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIiwgYi5zdHlsZS50b3AgPSBcIi0xMDAwcHhcIiwgYi5zdHlsZS5sZWZ0ID0gXCItMTAwMHB4XCIsIGIuc3R5bGUuekluZGV4ID0gXCItMVwiLCBkLm9uKFwiY2hhbmdlXCIsIChBKSA9PiB7XG4gICAgICAgICAgUyA9IEEuY29tcGxldGUgfHwgISFBLnZhbHVlLmVtYWlsLCBDICYmIHI/Lm9uQXV0aGVudGljYXRpb25TdGF0dXNDaGFuZ2U/LihTKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IEwgPSBiLnF1ZXJ5U2VsZWN0b3IoXCJpZnJhbWVcIik7XG4gICAgICAgIEwgJiYgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHV0ID0gTC5vZmZzZXRIZWlnaHQgPiAxNjA7XG4gICAgICAgICAgQyAmJiByPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oUyB8fCB1dCk7XG4gICAgICAgIH0pLm9ic2VydmUoTCwgeyBhdHRyaWJ1dGVzOiAhMCwgYXR0cmlidXRlRmlsdGVyOiBbXCJzdHlsZVwiXSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkO1xuICAgIH0sIHkgPSAoZykgPT4ge1xuICAgICAgbS5tb3VudChnIHx8IGAjJHtodH1gKTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgbS51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gcj8uZG9Ob3RNb3VudE9uSW5pdCA/IHooXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKHooXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIHkoKSksIHI/LnNpbGVudGx5Q2hlY2tBdXRoZW50aWNhdGlvbiAmJiAoeihgU2lsZW50bHkgbW91bnRpbmcgbGluayBhdXRoZW50aWNhdGlvbiBlbGVtZW50IGF0ICMke2h0fS4uLmApLCBmKGAjJHtodH1gLCAhMCkpLCBtLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGcpID0+IHtcbiAgICAgIGlmICh6KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHI/Lm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgci5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB6KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBnLnJlc29sdmUoKTtcbiAgICB9KSwgbS5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGcpID0+IHtcbiAgICAgIHooXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGcpO1xuICAgICAgY29uc3QgdyA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBjLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGcuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB3LmVycm9yID8gKHpyKFwiZXJyb3JcIiwgdy5lcnJvciksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcih3LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh6KFwicGF5bWVudE1ldGhvZFwiLCB3LnBheW1lbnRNZXRob2QpLCBSLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogdy5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogeSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIG1vdW50TGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDogKGcpID0+IGYoZywgITEpLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZXUoaHQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgUWwgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHooXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oaSk7XG4gICAgeihcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IFhsKHIsIGEuc3RyaXBlUE0pLCBjID0gRyhsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIHooXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgdSA9IGF3YWl0IFooaSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGEuc3RyaXBlUE0uaWQsXG4gICAgICAuLi5xKGMsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KTtcbiAgICB6KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHUpO1xuICAgIGNvbnN0IG0gPSBKbC5wYXJzZSh1LnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgeihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBmID0gYXdhaXQgeChpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGx0KGYpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHooXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogQ2UoYyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IE90KGMsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IF9yKGksIGYpIH07XG4gICAgfVxuICB9XG4pLCBYbCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gdC5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdLCBpID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHQubGluaz8uZW1haWwgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGwgPSByW3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGwgPyAocltwLkZJUlNUX05BTUVdID0gcywgcltwLkxBU1RfTkFNRV0gPSBsKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIiksIHooXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBldSA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IHRlLCBlcnJfXzogdHUgfSA9IGsoXCJzdHJpcGUtcHJcIiksIHJ1ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBudSA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB0ZShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcnUpO1xuICAgIHRlKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBOKG4pLCBpID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdGUoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IFEobiwgYS50b2tlbiwgaSwgdm9pZCAwKSwgbCA9IGF3YWl0IFhpKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgdGUoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBsLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGMgPT09IG51bGwpXG4gICAgICByZXR1cm4gdHUoXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIHRlKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGMpO1xuICAgIGNvbnN0IHUgPSAoZCwgbSkgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG0/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogbCxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGMuYXBwbGVQYXksIGdvb2dsZVBheTogYy5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBsLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgb3UgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgaW5pdFJlc3VsdDogaVxuICB9KSA9PiB7XG4gICAgaWYgKHRlKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGkucHI7XG4gICAgaWYgKGE/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IF8gPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICB0ZShcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgXyk7XG4gICAgICBjb25zdCBnID0gdHlwZW9mIF8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBfLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogXy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQnIobCwgXy5hbW91bnQsIF8ucGVuZGluZywgZywgXy5sYWJlbCk7XG4gICAgfVxuICAgIHRlKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGwuc2hvdygpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBOKHMpO1xuICAgIGlmICghYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBfID0gYy5tb2RlID09PSBcInNldHVwXCIsIGcgPSBhd2FpdCBRKHMsIGMudG9rZW4sIF8sIHZvaWQgMCk7XG4gICAgICBCcihsLCBnLCAhMSwgdm9pZCAwLCBcIlRvdGFsXCIpO1xuICAgIH1cbiAgICBjb25zdCB1ID0gYXdhaXQgZXMobCk7XG4gICAgdGUoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIHUpLCB0ZShcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgZCA9IGF1KHIsIHUpLCBtID0gRyhkLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5tXG4gICAgfSksIHRlKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwIGF5bWVudCBmbG93Li4uXCIsIG0pO1xuICAgIGNvbnN0IGYgPSBhd2FpdCBxcyhzLCB7XG4gICAgICBmaWVsZHM6IG0sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHRcbiAgICB9KSwgeSA9IGl1KGYpO1xuICAgIGlmICh0ZShcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IHRzKHksIHUpLCBjLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgdGUoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBfID0gYXdhaXQgeChzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogbHQoXykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGUoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgXyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBtW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbVtwLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBtW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBDZShtKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogT3QobSwgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBtW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgX3IocywgXykgfTtcbiAgICB9XG4gIH1cbiksIGF1ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4uYV0gPSB0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdLCBpID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIHMgPSB0LnBheW1lbnRNZXRob2Q/LmJpbGxpbmdfZGV0YWlscz8uYWRkcmVzcywgbCA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCBzPy5wb3N0YWxfY29kZSB8fCBsPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8IHM/LmNvdW50cnkgfHwgbD8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGNvbnN0IGMgPSByW3AuRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCB1ID0gcltwLkxBU1RfTkFNRV0gfHwgaSB8fCBcIlwiO1xuICByZXR1cm4gYyB8fCB1ID8gKHJbcC5GSVJTVF9OQU1FXSA9IGMsIHJbcC5MQVNUX05BTUVdID0gdSkgOiAocltwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW3AuTEFTVF9OQU1FXSA9IFwiXCIpLCB0ZShcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIEJyID0gKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB0ID8ge1xuICAgICAgYW1vdW50OiB0LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogYSA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiByXG4gICAgfSA6IHZvaWQgMCxcbiAgICBjdXJyZW5jeTogdD8uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogblxuICB9KTtcbn0sIGl1ID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIFppLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIF9lID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGUuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgaSA9IHIgPT09IHZvaWQgMCA/IHRydWUgOiBhLnByb2Nlc3Nvcl9uYW1lID09PSByLCBzID0gYS5wcm92aWRlciA9PT0gdDtcbiAgICByZXR1cm4gaSAmJiBzO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCk7XG4gIHJldHVybiBuLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCksIHYoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IHQsXG4gICAgcHJvY2Vzc29yOiByLFxuICAgIGNwbXM6IGVcbiAgfSkpLCBuWzBdO1xufSwgUiA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBJbFxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBudSxcbiAgICBydW46IG91XG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBabCxcbiAgICBydW46IFFsXG4gIH0sXG4gIHN0cmlwZUtsYXJuYToge1xuICAgIGluaXQ6IEtsLFxuICAgIHJ1bjogWWxcbiAgfSxcbiAgc3RyaXBlQWZmaXJtOiB7XG4gICAgaW5pdDogR2wsXG4gICAgcnVuOiBxbFxuICB9LFxuICBzdHJpcGVBZnRlcnBheToge1xuICAgIGluaXQ6IHpsLFxuICAgIHJ1bjogQmxcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IE9sLFxuICAgIHJ1bjogamxcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IERsLFxuICAgIHJ1bjogVWxcbiAgfSxcbiAgLy8gS2xhcm5hXG4gIGFpcndhbGxleEtsYXJuYToge1xuICAgIGluaXQ6IFhjLFxuICAgIHJ1bjogZWxcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IEpjLFxuICAgIHJ1bjogWmNcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBZYyxcbiAgICBydW46IFdjXG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogemNcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiB2Y1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBnY1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBQY1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBMbCxcbiAgICBydW46IE1sXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogbmwsXG4gICAgcnVuOiBvbFxuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBhbCxcbiAgICBydW46IGlsXG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogR2MsXG4gICAgcnVuOiBxY1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogamMsXG4gICAgcnVuOiAkY1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogc3UsIGVycl9fOiBjdSB9ID0gayhcImluaXQtZmxvd3NcIiksIFggPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IFhlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCB0KG4pO1xuICAgICAgICBzdShg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBhKSwgci5zZXQoYSk7XG4gICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgIGN1KGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGFlKGEpLCBcIkRldGFpbHM6XCIsIGEpLCByLnRocm93KGEsIGFlKGEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBsdSA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZSkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pKSk7XG59LCB1dSA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBYKFwiU3RyaXBlIFBSXCIsIFIuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IFgoXCJTdHJpcGUgTGlua1wiLCBSLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIFN0cmlwZSBLbGFybmFcbiAgc3RyaXBlS2xhcm5hOiBYKFwiU3RyaXBlIEtsYXJuYVwiLCBSLnN0cmlwZUtsYXJuYS5pbml0KSxcbiAgLy8gU3RyaXBlIEFmZmlybVxuICBzdHJpcGVBZmZpcm06IFgoXCJTdHJpcGUgQWZmaXJtXCIsIFIuc3RyaXBlQWZmaXJtLmluaXQpLFxuICAvLyBTdHJpcGUgQWZ0ZXJwYXlcbiAgc3RyaXBlQWZ0ZXJwYXk6IFgoXCJTdHJpcGUgQWZ0ZXJwYXlcIiwgUi5zdHJpcGVBZnRlcnBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IFgoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIFIuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IFgoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgUi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBYKFwiTG9vcFwiLCBSLmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IFgoXCJQYXlQYWxcIiwgUi5wYXlwYWwuaW5pdCksXG4gIC8vIEtsYXJuYVxuICBhaXJ3YWxsZXhLbGFybmE6IFgoXCJLbGFybmFcIiwgUi5haXJ3YWxsZXhLbGFybmEuaW5pdCksXG4gIC8vIFBvY2t5dCBQYXlQYWxcbiAgcG9ja3l0UGF5cGFsOiBYKFwiUG9ja3l0IFBheVBhbFwiLCBSLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBYKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgUi5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFgoXCJBdXRobmV0IEFwcGxlUGF5XCIsIFIuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdCksXG4gIC8vIEFkeWVuIEdvb2dsZVBheVxuICBhZHllbkdvb2dsZVBheTogWChcIkFkeWVuIEdvb2dsZVBheVwiLCBSLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiBYKFwiQWR5ZW4gQXBwbGVQYXlcIiwgUi5hZHllbkFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogZHUgfSA9IGsoXCJmb3JtLWNhbGxiYWNrc1wiKSwgdWUgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBIciA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiB1ZSxcbiAgb25CbHVyOiB1ZSxcbiAgb25DaGFuZ2U6IHVlLFxuICBvbkxvYWQ6IHVlLFxuICBvbkxvYWRFcnJvcjogdWUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiB1ZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IHVlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogdWUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogdWUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogdWUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiB1ZVxufSksIHllID0gY2xhc3MgeWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSB5ZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IFZhKHIsIG4gPz8geWUuTk9PUCwgZHUpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBhO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0geWUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbnllLk5PT1AgPSAoKSA9PiB7XG59LCB5ZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoSHIua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IHllLk5PT1A7XG4gIH0pLCB0O1xufSwgeWUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgeWUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKEhyLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQgYXIgPSB5ZTtcbmZ1bmN0aW9uIHB1KCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSBCKCksIHQgPSBlO1xuICAgIGlmICh0Py5uZXh0IHx8IHQ/Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBpZiAoZT8uX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChhKSA9PiBhLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAoYSkgPT4gYS5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4/LlZ1ZSB8fCBuPy5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIG11KGUpIHtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKGUpIHtcbiAgICAgIGNhc2UgXCJyZWFjdFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJuZXh0anNcIjoge1xuICAgICAgICBjb25zdCByID0gQigpO1xuICAgICAgICByZXR1cm4gcj8ubmV4dD8udmVyc2lvbiB8fCByPy5fX05FWFRfREFUQV9fPy5idWlsZElkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibnV4dFwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJ2dWVcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwiYW5ndWxhclwiOiB7XG4gICAgICAgIGNvbnN0IHIgPSBCKCk/LmRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gciA/IHIuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBmdSgpIHtcbiAgY29uc3QgZSA9IHB1KCksIHQgPSBtdShlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBSbyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogZmFsc2UsIGEgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgaSA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgcyA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChzID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGwgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogdHJ1ZSxcbiAgICBsYW5ndWFnZTogcyxcbiAgICBzY3JlZW5faGVpZ2h0OiBlLFxuICAgIHNjcmVlbl93aWR0aDogdCxcbiAgICB0aW1lX3pvbmVfb2Zmc2V0OiBsLFxuICAgIHVzZXJfYWdlbnQ6IGEsXG4gICAgYWNjZXB0X2hlYWRlcjogaVxuICB9O1xufTtcbnZhciBJID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuY2FyZCA9IFwiY2FyZFwiLCBlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFwcGxlUGF5ID0gXCJhcHBsZS1wYXlcIiwgZS5nb29nbGVQYXkgPSBcImdvb2dsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUua2xhcm5hID0gXCJrbGFybmFcIiwgZS5hZmZpcm0gPSBcImFmZmlybVwiLCBlLmFmdGVycGF5ID0gXCJhZnRlcnBheVwiLCBlLnN0cmlwZUxpbmsgPSBcInN0cmlwZS1saW5rXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZS5haXJ3YWxsZXhBQ0ggPSBcImFpcndhbGxleC1hY2hcIiwgZS5haXJ3YWxsZXhFRlQgPSBcImFpcndhbGxleC1lZnRcIiwgZS5haXJ3YWxsZXhCQUNTID0gXCJhaXJ3YWxsZXgtYmFjc1wiLCBlLmFpcndhbGxleFNFUEEgPSBcImFpcndhbGxleC1zZXBhXCIsIGUpKShJIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEkpO1xudmFyIGtlID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQUNIID0gXCJhY2hcIiwgZS5FRlQgPSBcImVmdFwiLCBlLkJBQ1MgPSBcImJhY3NcIiwgZS5TRVBBID0gXCJzZXBhXCIsIGUuQVBQTEVfUEFZID0gXCJhcHBsZV9wYXlcIiwgZS5DUkVESVRfQ0FSRCA9IFwiY3JlZGl0X2NhcmRcIiwgZS5HT09HTEVfUEFZID0gXCJnb29nbGVfcGF5XCIsIGUuU1RSSVBFX0xJTksgPSBcInN0cmlwZV9saW5rXCIsIGUuQ1JZUFRPID0gXCJjcnlwdG9cIiwgZS5QQVlQQUwgPSBcInBheXBhbFwiLCBlKSkoa2UgfHwge30pO1xuY29uc3QgS3IgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4QXBwbGVQYXksIGUuYXV0aG9yaXplTmV0QXBwbGVQYXksIGUuYWR5ZW5BcHBsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgY29uc3QgaSA9IGEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGk/LmlzQXZhaWxhYmxlICYmIHIucHVzaChpKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4/LmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAoaSkgPT4gbi5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaT8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogci5tYXAoKGEpID0+IGEucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogci5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gX3UociwgYSlcbiAgfTtcbn0sIFlyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEdvb2dsZVBheSwgZS5hdXRob3JpemVOZXRHb29nbGVQYXksIGUuYWR5ZW5Hb29nbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgoYSkgPT4ge1xuICAgIGNvbnN0IGkgPSBhLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpPy5pc0F2YWlsYWJsZSAmJiByLnB1c2goaSk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuPy5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChpKSA9PiBuLnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaT8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogci5tYXAoKGEpID0+IGEucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogci5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4geXUociwgYSlcbiAgfTtcbn0sIF91ID0gKGUsIHQpID0+IHtcbiAgaWYgKHQ/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKGEpID0+IGEucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4/LmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufSwgeXUgPSAoZSwgdCkgPT4ge1xuICBpZiAodD8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobj8uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIFdyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtdLCByID0gZS5haXJ3YWxsZXhLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByPy5pc0F2YWlsYWJsZSAmJiB0LnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IHIuc3RhcnRGbG93KGEpXG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbj8uaXNBdmFpbGFibGUgJiYgdC5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBuLnN0YXJ0RmxvdyhhKVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHQubWFwKChhKSA9PiBhLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHQubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IGh1KHQsIGEpXG4gIH07XG59LCBodSA9IChlLCB0KSA9PiB7XG4gIGlmICh0Py5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuPy5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBLbGFybmEgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgS2xhcm5hIHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIEpyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtdLCByID0gZS5zdHJpcGVBZmZpcm0ucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gcj8uaXNBdmFpbGFibGUgJiYgdC5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChuKSA9PiByLnN0YXJ0RmxvdyhuKVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHQubWFwKChuKSA9PiBuLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHQubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKG4pID0+IGd1KHQsIG4pXG4gIH07XG59LCBndSA9IChlLCB0KSA9PiB7XG4gIGlmICh0Py5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuPy5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZmZpcm0gcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQWZmaXJtIHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIFpyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtdLCByID0gZS5zdHJpcGVBZnRlcnBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiByPy5pc0F2YWlsYWJsZSAmJiB0LnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKG4pID0+IHIuc3RhcnRGbG93KG4pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogdC5tYXAoKG4pID0+IG4ucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogdC5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAobikgPT4gd3UodCwgbilcbiAgfTtcbn0sIHd1ID0gKGUsIHQpID0+IHtcbiAgaWYgKHQ/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKGEpID0+IGEucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4/LmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFmdGVycGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmdGVycGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIHZ1ID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCB7IGxvZ19fOiBKdCwgZXJyX186IGJ1IH0gPSBrKFwidHJhY2VyXCIpLCBQdSA9IChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgRXUoZSwgdCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBidShgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtyfWApO1xuICB9XG59O1xubGV0IFFyO1xuY29uc3QgRXUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybjtcbiAgY29uc3QgciA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CT3BRU1hfSi0hfnswMDZ9fi5qcycpLCB7IENvbnNvbGVTcGFuRXhwb3J0ZXI6IG4sIFNpbXBsZVNwYW5Qcm9jZXNzb3I6IGEsIFdlYlRyYWNlclByb3ZpZGVyOiBpIH0gPSByLCBzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURpRXY1eEdXLSF+ezAwOX1+LmpzJyksIHsgRmV0Y2hJbnN0cnVtZW50YXRpb246IGwgfSA9IHMsIGMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQlVGb25HXzYtIX57MDBkfX4uanMnKSwgeyBab25lQ29udGV4dE1hbmFnZXI6IHUgfSA9IGMsIGQgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ1dUMmdlWmEtIX57MDBlfX4uanMnKSwgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM6IG0gfSA9IGQsIGYgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRGx3aDlWRjMtIX57MDAxfX4uanMnKSwgeyBSZXNvdXJjZTogeSB9ID0gZiwgXyA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLTRiYko3V1BmLSF+ezAwZ31+LmpzJykudGhlbigoVnQpID0+IFZ0LmQpLCB7IGRldGVjdFJlc291cmNlc1N5bmM6IGcgfSA9IF8sIHcgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ1FOMk1iYjctIX57MDBrfX4uanMnKSwgeyBPVExQVHJhY2VFeHBvcnRlcjogaCB9ID0gdywgYiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CMVkwWk45cC0hfnswMG19fi5qcycpLCB7IEIzUHJvcGFnYXRvcjogUywgQjNJbmplY3RFbmNvZGluZzogQyB9ID0gYiwgTCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CcjlIRmZDRy0hfnswMDN9fi5qcycpLCB7IEJhdGNoU3BhblByb2Nlc3NvcjogQSB9ID0gTDtcbiAgSnQoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7ZX0gYW5kIGJhc2VVcmwgJHt0fWApO1xuICBjb25zdCAkID0gQ3UodCk7XG4gIEp0KGBVc2luZyBjb2xsZWN0b3IgVVJMICR7JH1gKTtcbiAgY29uc3QgdXQgPSBuZXcgaCh7IHVybDogJCB9KSwgQWUgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogZSxcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIHJldHVybiBuZXcgaSh7XG4gICAgcmVzb3VyY2U6IG5ldyB5KEFlKS5tZXJnZShnKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgYShuZXcgbigpKSxcbiAgICAgIG5ldyBBKHV0LCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IFMoeyBpbmplY3RFbmNvZGluZzogQy5NVUxUSV9IRUFERVIgfSlcbiAgfSksIG0oe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBsKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgUXIgPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBKdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgUXI7XG59LCBDdSA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5jbGFzcyBBdSB7XG4gIGNvbnN0cnVjdG9yKHQsIHIsIG4sIGEpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoaSkgPT4ge1xuICAgICAgaWYgKCFpLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChYcihpLm9yaWdpbikgIT09IFhyKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5wZW5wYWwgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5zb3VyY2UgJiYgaS5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IHNjKEpTT04ucGFyc2UoaS5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBjLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhjLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihjLCB1LmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHUub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGMsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2NdID0gaS5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGkpID0+IGkuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhaS5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGkuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGkpLCBmYWxzZSkgOiB0aGlzLm5vbmNlcy5oYXMoaS5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgaSksIGZhbHNlKSA6ICh0aGlzLm5vbmNlcy5hZGQoaS5ub25jZSksIHRydWUpLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gdCwgdGhpcy5iYXNlVXJsID0gciwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGE7XG4gIH1cbn1cbmNvbnN0IFhyID0gKGUpID0+IG5ldyBVUkwoZSkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gU3UoZSwgdCkge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW46IHRcbiAgfSkucHJvbWlzZSwgYSA9IGF3YWl0IFdzKG4pO1xuICBpZiAoIUpzKG4sIGEpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBrdSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24odCwgcikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHQsIHIpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgdCA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBJdSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IGU7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoYSkgPT4ge1xuICAgIGlmIChhLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgaSA9IGEubG9hZGVkVmFsdWUsIHMgPSBpLmlzQXZhaWxhYmxlICYmIGkuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBsID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGMgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgcyAmJiBlbihcImFwcGxlX3BheVwiLCBpLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBsLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGwgJiYgZW4oXCJnb29nbGVfcGF5XCIsIGksIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHIuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGMpO1xuICAgIH1cbiAgfSk7XG59LCBlbiA9IChlLCB0LCByLCBuLCBhKSA9PiBSLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IHIsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2Uoci5jaGVja291dFBheW1lbnRNZXRob2RzLCBlKSxcbiAgbm9uQ2RlRm9ybUlucHV0czogaihyLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGE/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogdFxufSksIHRuID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogZmUsIGVycl9fOiBuZSB9ID0gayhcIm9wLWZvcm1cIiksIGhlID0gY2xhc3MgaGUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IGZhbHNlLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBYZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgWGUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IFhlKCksIHRoaXMuaW5pdEZsb3dzID0gdXUoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYSA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIGkgPSBhLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IGF0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4ZS53aXRoKGplLnNldFNwYW4oeGUuYWN0aXZlKCksIGkpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuY3JlYXRlRWxlbWVudChnZS5DREVfQlJJREdFKTtcbiAgICAgICAgICBzLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiLCBzLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiLCBPYmplY3QuYXNzaWduKHMubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSksIHMubW91bnQoXCJib2R5XCIpLCBmZShcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBmZShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBmZShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBsID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogdG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmZShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgaT8uYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgZmUoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgYyA9IGE/LnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgeGUuYWN0aXZlKCkpLCB1ID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IHRuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYz8uZW5kKCksIGk/LmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKSwgZmUoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGF3YWl0IFlzKHUsIHRoaXMuZGV2aWNlVG9rZW4pLCBmZShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCBkID0gaGUuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHUsXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChkKSwgSXUodGhpcy5pbml0Rmxvd3MsIGQsIHRoaXMuZm9ybUNhbGxiYWNrcyksIGZlKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCBsdSh0aGlzLmluaXRGbG93cywgZCwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQobC50b3RhbEFtb3VudEF0b21zLCBsLmN1cnJlbmN5KSwgZmUoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgaT8uc2V0U3RhdHVzKHsgY29kZTogUGUuT0sgfSksIHYoXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgIGNvbnN0IGwgPSBhZShzKTtcbiAgICAgICAgICBpPy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogUGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIG5lKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBsKSwgdihcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogbFxuICAgICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGwpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGk/LmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBhLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICFpIHx8IGkudHlwZSA9PT0gZ2UuQ0RFX0JSSURHRSB8fCAoaS5ub2RlLnN0eWxlLmhlaWdodCA9IGEpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChhKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQuc2V0KGEpLCB2KFwiY2RlX2xvYWRlZFwiKSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChhKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGEpLCBhKSwgdihcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGFcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoYSwgaSA9IHt9KSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKSwgIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgcyA9IE1vLnBhcnNlKGEpLCBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgYyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhpKTtcbiAgICAgIGwubmFtZSA9IGAke3N9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdSA9IG5ldyBVUkwoYC9hcHAvdjEvJHtsLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIHUuc2VhcmNoID0gYy50b1N0cmluZygpLCBsLnNyYyA9IHUuaHJlZiwgbC5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgbC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKHMsIGwpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoYSwgaSkgPT4ge1xuICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgdHlwZTogYSxcbiAgICAgICAgbm9kZTogaSxcbiAgICAgICAgbW91bnQ6IChsKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsKT8uYXBwZW5kQ2hpbGQoaSksIHYoXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiBhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogcy50eXBlLCBub2RlOiBzLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW2dlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtnZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW2dlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbZ2UuQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFtnZS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbYV0gPSBzLCBzO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChhKSA9PiB7XG4gICAgICBjb25zdCBpID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIGkuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgaS5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBhLnN0eWxlcyAmJiBpLmFwcGVuZChcInN0eWxlc1wiLCB2dShhLnN0eWxlcykpLCBpLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBpO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChhKSA9PiBmdChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpID0gYXdhaXQgU3UoYS5ub2RlKTtcbiAgICAgICAgaS50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oYS50eXBlLCBpKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBhLnR5cGUgPT09IGdlLkNERV9CUklER0UgJiYgdGhpcy5hbnlDZGVDb25uLnNldChpKTtcbiAgICAgIH1cbiAgICApLmNhdGNoKChpKSA9PiBuZShcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgaSkpLCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKGEpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBuZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IGZ0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBhPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdihcInN1Ym1pdF9jYXJkXCIsIHsgLi4uYSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIXMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBSLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2Uocy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKHMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGE/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgaTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZSwgaTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4gZnQoXG4gICAgICB7XG4gICAgICAgIHNwYW5OYW1lOiBcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKTtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgaWYgKCFhKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgY29uc3QgeyBwcm9jZXNzb3JzOiBpLCBpc0F2YWlsYWJsZTogcyB9ID0gS3IoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgeyBwcm9jZXNzb3JzOiBsLCBpc0F2YWlsYWJsZTogYyB9ID0gWXIoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgZCA9IHRoaXMuaW5pdEZsb3dzLnBheXBhbC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk/LmlzQXZhaWxhYmxlID8/ICExLCB7IHByb2Nlc3NvcnM6IG0sIGlzQXZhaWxhYmxlOiBmIH0gPSBXcih0aGlzLmluaXRGbG93cyksIHsgcHJvY2Vzc29yczogeSwgaXNBdmFpbGFibGU6IF8gfSA9IEpyKHRoaXMuaW5pdEZsb3dzKSwgeyBwcm9jZXNzb3JzOiBnLCBpc0F2YWlsYWJsZTogdyB9ID0gWnIoXG4gICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgKSwgaCA9IGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgIChBZSkgPT4gQWUucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgQWUucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgKSwgUyA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpPy5pc0F2YWlsYWJsZSA/PyAhMSwgQyA9IHRoaXMuaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBMID0gQz8uaXNBdmFpbGFibGUgPz8gITEsIEEgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogSS5jYXJkLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogITBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBpLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogbCxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGQgPyBbVS5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLmtsYXJuYSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IG0sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogZlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogSS5hZmZpcm0sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiB5LFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IF9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkuYWZ0ZXJwYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBnLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogaCA/IFtVLkVudW0ucG9ja3l0XSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGhcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkubG9vcENyeXB0byxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IFMgPyBbVS5FbnVtLmxvb3BdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogU1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogSS5zdHJpcGVMaW5rLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogW1UuRW51bS5zdHJpcGVdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IEwsXG4gICAgICAgICAgICBjb250cm9sbGVyOiBDPy5pc0F2YWlsYWJsZSA/IEMuY29udHJvbGxlciA6IHZvaWQgMFxuICAgICAgICAgIH1cbiAgICAgICAgXSwgJCA9IHtcbiAgICAgICAgICBwYXlwYWw6IEkucGF5cGFsLFxuICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogSS5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IEkuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBJLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogSS5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICBhZHllbkdvb2dsZVBheTogSS5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICBhZHllbkFwcGxlUGF5OiBJLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFsuLi5PYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbQWUsIENyXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFZ0ID0gQ3IucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAkW0FlXSA/PyBBZSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IFZ0Py5pc0F2YWlsYWJsZSA/PyAhMVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLCAuLi5BXTtcbiAgICAgIH1cbiAgICApLCB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAoYSwgaSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIG5lKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgZnQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHYoXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kOiBhLCBzZXR0aW5nczogaSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWwpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBzd2l0Y2ggKGEpIHtcbiAgICAgICAgICAgICAgY2FzZSBJLmNhcmQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0Q2FyZChpKTtcbiAgICAgICAgICAgICAgY2FzZSBJLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IF9lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIGtlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogaSB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgSS5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBrZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IGkgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEkua2xhcm5hOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IGMgfSA9IFdyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYWZmaXJtOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IGMgfSA9IEpyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYWZ0ZXJwYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogYyB9ID0gWnIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjKGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgSS5sb29wQ3J5cHRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IF9lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgSS5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiBjIH0gPSBLcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMoaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBJLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiBjIH0gPSBZcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMoaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gS2VlcGluZyBleGlzdGluZyBjb21tZW50ZWQgY29kZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBpbiB0aGUgZnV0dXJlIHZlcnNpb25cbiAgICAgICAgICAgICAgY2FzZSBJLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgICAgICAgbmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgICAgICAgbmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3RhcnRGbG93KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgSS5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgICAgICAgIG5lKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3RhcnRGbG93KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgSS5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICAgICAgICBuZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3RhcnRGbG93KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgSS5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICAgICAgICBuZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYy5zdGFydEZsb3coaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBJLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICAgICAgICBuZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAga2UuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgSS5haXJ3YWxsZXhFRlQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBrZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBJLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIuYWlyd2FsbGV4QkFDUy5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAga2UuQkFDUyxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEkuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBrZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgSS5zdHJpcGVMaW5rOiB7XG4gICAgICAgICAgICAgICAgbmUoXG4gICAgICAgICAgICAgICAgICBcIlN0cmlwZUxpbmsgY2Fubm90IGJlIHN1Ym1pdHRlZCBtYW51YWxseS4gUGxlYXNlIG1vdW50IHRoZSBidXR0b24gcHJvcGVybHkgYW5kIGlmIHVzZXIgY29tcGxldGVkIHRoZSBwYXltZW50IGZsb3cgdmlhIFN0cmlwZUxpbmsgYnV0dG9uLCB0aGUgcGF5bWVudCB3aWxsIGJlIHN1Ym1pdHRlZCBhdXRvbWF0aWNhbGx5LlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjdChhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlLCBzO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0V2l0aCA9IHRoaXMuZ2VuZXJhbFN1Ym1pdCwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGZlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBhIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBhICYmIGEubm9kZS5yZW1vdmUoKTtcbiAgICAgIEIoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIFdpKCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanMsIHYoXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChhKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGEpO1xuICAgIH0sIGhlLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuNS4yMVwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGFyLmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBrdSgpLCB0aGlzLmRldmljZVRva2VuID0gem4oKSwgWWkoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0gZnUoKTtcbiAgICBTbih0aGlzLmJhc2VVcmwpLnRoZW4oKGEpID0+IHtcbiAgICAgIGlmICghZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBhLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgZXIuc2V0KGkpO1xuICAgICAgfVxuICAgIH0pLCB2KFwiZm9ybV9pbml0XCIpLCBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbiksIHQuYWxsb3dUcmFjaW5nID09PSB0cnVlICYmIFB1KHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgQXUodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIEIoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UodCA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgciA9IGhlLmdldEluc3RhbmNlKCksIG4gPSB7XG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IHI/LmZvcm1JZCB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH0sIGEgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7dH1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7bi50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke24uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke24uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke24uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkID8gKG5lKGEpLCB2KFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCBmYWxzZSkgOiAhciB8fCByLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAobmUoYSksIHYoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGEgfSksIGZhbHNlKSA6IHRydWU7XG4gIH1cbn07XG5oZS5vanNGbG93cyA9IFIsIGhlLmFzc2lnbkFzU2luZ2xldG9uID0gKHQpID0+IHtcbiAgaWYgKGhlLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSB0O1xufSwgaGUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIGhlLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAodCwgciwgbiwgYSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHQuYmFzZVVybCA/PyAkbikub3JpZ2luLFxuICBmb3JtRGl2OiBhLFxuICBlbGVtZW50c1Nlc3Npb25JZDogci5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogdC5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG59KTtcbmxldCBybiA9IGhlO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKHJuLmdldEluc3RhbmNlKCkpIHtcbiAgICBybi5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwbGVQYXlSZXN1bHQsIHNldEFwcGxlUGF5UmVzdWx0XSA9IHVzZVN0YXRlKE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSk7XG4gIGNvbnN0IFtnb29nbGVQYXlSZXN1bHQsIHNldEdvb2dsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBba2xhcm5hUmVzdWx0LCBzZXRLbGFybmFSZXN1bHRdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthZmZpcm1SZXN1bHQsIHNldEFmZmlybVJlc3VsdF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2FmdGVycGF5UmVzdWx0LCBzZXRBZnRlcnBheVJlc3VsdF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBrbGFybmFSZXN1bHQyID0gZ2V0S2xhcm5hUHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0S2xhcm5hUmVzdWx0KGtsYXJuYVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBhZmZpcm1SZXN1bHQyID0gZ2V0QWZmaXJtUHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0QWZmaXJtUmVzdWx0KGFmZmlybVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBhZnRlcnBheVJlc3VsdDIgPSBnZXRBZnRlcnBheVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEFmdGVycGF5UmVzdWx0KGFmdGVycGF5UmVzdWx0Mik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IHJuLmdldEluc3RhbmNlKCkgPz8gbmV3IHJuKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgYWxsb3dUcmFjaW5nOiBwcm9wcy5hbGxvd1RyYWNpbmcgPz8gZmFsc2UsXG4gICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHByb3BzLnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbixcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmICFyZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiBudWxsLFxuICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBhcHBsZVBheVJlc3VsdCxcbiAgICBnb29nbGVQYXk6IGdvb2dsZVBheVJlc3VsdCxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAga2xhcm5hOiBrbGFybmFSZXN1bHQsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWcsXG4gICAgYWZmaXJtOiBhZmZpcm1SZXN1bHQsXG4gICAgYWZ0ZXJwYXk6IGFmdGVycGF5UmVzdWx0XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCBhcyBDLCBFcyBhcyBFLCBGcyBhcyBGLCBMbiBhcyBMLCBNcyBhcyBNLCBQZSBhcyBQLCBScyBhcyBSLCBTdWJtaXRNZXRob2RzIGFzIFMsIFRuIGFzIFQsIFVyIGFzIFUsIGF0IGFzIGEsIEZuIGFzIGIsIG90IGFzIGMsIGRyIGFzIGQsIENhcmRFbGVtZW50IGFzIGUsIGZzIGFzIGYsIENhcmRFeHBpcnlFbGVtZW50IGFzIGcsIENhcmROdW1iZXJFbGVtZW50IGFzIGgsIEVsZW1lbnRzRm9ybSBhcyBpLCBqZSBhcyBqLCBrdCBhcyBrLCBsciBhcyBsLCBGaWVsZE5hbWUgYXMgbSwgRW52aXJvbm1lbnQgYXMgbiwgb2UgYXMgbywgUGF5SW5GYWlsZWQgYXMgcCwgUGF5SW5TdGF0ZSBhcyBxLCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgciwgdHIgYXMgdCwgdXIgYXMgdSwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHYsIHhlIGFzIHgsIHlzIGFzIHkgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUtDLFNBQVc7QUFDekIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLFVBQUFDLElBQVEsV0FBQUMsSUFBUyxhQUFBQyxVQUFpQjtBQUVoRixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FB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QUNNRCxLQUEwQixDQUFDOUIsT0FDeEI7QUFBQSxFQUNMLFFBQVFBLEVBQU87QUFBQSxFQUNmLFlBQVlBLEVBQU8sZUFBZTtBQUFBLEVBQ2xDLFVBQVVBLEVBQU87QUFBQSxFQUNqQixxQkFBcUJBLEVBQU87QUFBQSxFQUM1QixnQkFBZ0JBLEVBQU87QUFBQSxFQUN2QixTQUFTQSxFQUFPO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6JDEiLCAiY2hhbGsiLCAidjQiLCAianN4IiwgIkZyYWdtZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VFZmZlY3QiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkJhc2VFbGVtZW50c1N0eWxlIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJBV1hCYW5rIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAiYSIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiZm4iLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInokMSIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyQxIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImxvZ19fIiwgImVycl9fJDEiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImlzQnVzaW5lc3NQdXJjaGFzZSIsICJub25DZGVGb3JtSW5wdXRzIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIkZpZWxkTmFtZSIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgInJlc3VsdCIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAibnVsbE9yVW5kZWZPciQxIiwgIkVudmlyb25tZW50IiwgIkVudmlyb25tZW50MiIsICJQYXlJbkZhaWxlZCIsICJQYXlJbkZhaWxlZDIiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93IiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAiY3VzdG9tUGFyYW1zIiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImdldEtsYXJuYVByb2Nlc3NvcnMiLCAia2xhcm5hSW5pdFJlc3VsdHMiLCAiYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCIsICJzdHJpcGVLbGFybmFGbG93UmVzdWx0IiwgInN0YXJ0S2xhcm5hRmxvdyIsICJnZXRBZmZpcm1Qcm9jZXNzb3JzIiwgImFmZmlybUluaXRSZXN1bHRzIiwgInN0cmlwZUFmZmlybUZsb3dSZXN1bHQiLCAic3RhcnRBZmZpcm1GbG93IiwgImdldEFmdGVycGF5UHJvY2Vzc29ycyIsICJhZnRlcnBheUluaXRSZXN1bHRzIiwgInN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCIsICJzdGFydEFmdGVycGF5RmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAidXNlU3RhdGUiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1c2VFZmZlY3QiLCAianN4IiwgInVybCIsICJDYXJkRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiLCAiRm8iLCAiVG8iLCAiTm8iLCAiciIsICJuIiwgImEiLCAicyIsICJMbyIsICJUIiwgIkQiLCAicCIsICJvbiIsICJhbiIsICJzbiIsICJjbiIsICJnZSIsICJNbyIsICJGdCIsICJ4byIsICJUdCIsICJwZSIsICJEbyIsICJVbyIsICJPbyIsICJqbyIsICIkbyIsICJHbyIsICJxbyIsICJWbyIsICJ6byIsICJCbyIsICJIbyIsICJLbyIsICJVZSIsICJZbyIsICJXbyIsICJKbyIsICJabyIsICJRbyIsICJYbyIsICJlYSIsICJ0dCIsICJ0YSIsICJyYSIsICJuYSIsICJGIiwgImxuIiwgIm9hIiwgImFhIiwgInVuIiwgImlhIiwgInNhIiwgImNhIiwgImxhIiwgInVhIiwgImRhIiwgInBhIiwgIm1hIiwgImZhIiwgIkUiLCAieWEiLCAiZG4iLCAicG4iLCAiaGEiLCAiZ2EiLCAicWUiLCAid2EiLCAidmEiLCAibW4iLCAiYmEiLCAiUGEiLCAiRWEiLCAiQXIiLCAiU3IiLCAiX24iLCAiQ2EiLCAiQWEiLCAiUHQiLCAieW4iLCAiU2EiLCAia2EiLCAiSWEiLCAiaG4iLCAiUmEiLCAiZ24iLCAiRmEiLCAiVGEiLCAiTmEiLCAiTGEiLCAiTWEiLCAieGEiLCAiRGEiLCAiVWEiLCAiT2EiLCAiamEiLCAiWnQiLCAiJGEiLCAiR2EiLCAicWEiLCAiYWUiLCAiVmEiLCAiemEiLCAid24iLCAiQmEiLCAiSGEiLCAiViIsICJ2IiwgIkhpIiwgImpuIiwgImNlIiwgImsiLCAiY2hhbGsiLCAiUXQiLCAiRWUiLCAiS2EiLCAibCIsICJtIiwgImMiLCAidm4iLCAiT2UiLCAiRXQiLCAiQ3QiLCAiTWUiLCAiWWEiLCAieSIsICJfIiwgImciLCAiaCIsICJmIiwgIldhIiwgIlkiLCAiTnQiLCAienQiLCAiQXQiLCAic3QiLCAia3IiLCAiYm4iLCAiUG4iLCAiSmEiLCAiWmEiLCAiRW4iLCAiSXIiLCAiZ3QiLCAiaXIiLCAiZWkiLCAiWHQiLCAiUWEiLCAicHQiLCAiWGEiLCAic3IiLCAidGkiLCAicmkiLCAid2UiLCAib2kiLCAiUnIiLCAibmkiLCAiYWkiLCAiaWkiLCAic2kiLCAiY2kiLCAibGkiLCAiQ24iLCAiRnIiLCAidWkiLCAiZGkiLCAiVHIiLCAicGkiLCAiTnIiLCAibWkiLCAiZmkiLCAieWkiLCAiaGkiLCAiZ2kiLCAid2kiLCAidmkiLCAiYmkiLCAiUGkiLCAiRWkiLCAiQ2kiLCAiQWkiLCAiU2kiLCAia2kiLCAiSWkiLCAiQW4iLCAiUmkiLCAiRmkiLCAiVGkiLCAiTmkiLCAiTGkiLCAiTWkiLCAieGkiLCAiRGkiLCAiVWkiLCAiT2kiLCAiamkiLCAiYiIsICJTIiwgIlhlIiwgImN0IiwgIkxyIiwgIiRpIiwgIkdpIiwgIkJ0IiwgIlNuIiwgIkx0IiwgIkIiLCAiZXIiLCAiTXIiLCAicWkiLCAiVmkiLCAiemkiLCAibXQiLCAiQmkiLCAiY3IiLCAia24iLCAiSW4iLCAiU3QiLCAiS2kiLCAiUm4iLCAiWWkiLCAiV2kiLCAiSmkiLCAiWmkiLCAiUWkiLCAiTXQiLCAieHIiLCAiRHQiLCAieHQiLCAiWGkiLCAiZXMiLCAidHMiLCAicnMiLCAibnMiLCAiUmUiLCAiRHIiLCAib3MiLCAidSIsICJkIiwgImFzIiwgImlzIiwgInJ0IiwgIm50IiwgImxyIiwgIm90IiwgInVyIiwgInNzIiwgImNzIiwgImxzIiwgIkhlIiwgIm9lIiwgInVzIiwgImRzIiwgInBzIiwgIm1zIiwgImt0IiwgImZzIiwgIl9zIiwgInlzIiwgImhzIiwgImdzIiwgIndzIiwgInZzIiwgImJzIiwgIkh0IiwgIlBzIiwgImRyIiwgInRyIiwgIkZuIiwgIlRuIiwgIkVzIiwgImV0IiwgInByIiwgIm1yIiwgIkNzIiwgImZyIiwgIkFzIiwgIlNzIiwgIk5uIiwgImtzIiwgIklzIiwgIlJzIiwgIkZzIiwgIkxuIiwgIlRzIiwgIkt0IiwgIk1uIiwgIk5zIiwgIkxzIiwgIk1zIiwgInhzIiwgIkRzIiwgIlVyIiwgImF0IiwgIlBlIiwgInhlIiwgIll0IiwgIlVzIiwgImplIiwgIk9zIiwgImZ0IiwgInhuIiwgIkoiLCAiJHMiLCAianMiLCAiR3MiLCAiTiIsICJaIiwgIkRuIiwgInFzIiwgIlZzIiwgInpzIiwgIkJzIiwgIlEiLCAiVW4iLCAiT3IiLCAiSHMiLCAiX3IiLCAiT24iLCAiS3MiLCAiY29ubmVjdFRvQ2hpbGQiLCAiVXQiLCAiWXMiLCAiV3MiLCAiSnMiLCAiJG4iLCAiR24iLCAiSXQiLCAiWnMiLCAicW4iLCAianIiLCAiRmUiLCAiV2UiLCAiUXMiLCAiWHMiLCAiZWMiLCAibmMiLCAidGMiLCAicmMiLCAib2MiLCAiVm4iLCAiem4iLCAiYWMiLCAiaWMiLCAiaiIsICJzYyIsICJCbiIsICJDZSIsICJPdCIsICJqdCIsICJjYyIsICJsYyIsICIkdCIsICJIbiIsICJHdCIsICJ5ciIsICJLbiIsICJsZSIsICJZbiIsICJ1YyIsICJXbiIsICJpZSIsICJ0IiwgImRjIiwgInBjIiwgIm1jIiwgImZjIiwgInljIiwgIkciLCAiSm4iLCAiWm4iLCAibHQiLCAiTyIsICJxIiwgInJlIiwgIlUiLCAiUW4iLCAiVmUiLCAiaHIiLCAiV3QiLCAiZ3IiLCAiemUiLCAiQmUiLCAid3IiLCAidmUiLCAiaGMiLCAiZ2MiLCAiS2UiLCAid2MiLCAidmMiLCAidyIsICJiZSIsICJiYyIsICJQYyIsICJFYyIsICJ2ciIsICJDYyIsICJBYyIsICJYbiIsICJTYyIsICJlbyIsICJ0byIsICJybyIsICJiciIsICJQciIsICJrYyIsICJxdCIsICJFciIsICJJYyIsICJSYyIsICIkZSIsICJpdCIsICJGYyIsICJubyIsICJUYyIsICJOYyIsICIkciIsICJMYyIsICJNYyIsICJ4YyIsICJvbyIsICJhbyIsICJpbyIsICJzbyIsICJEYyIsICJVYyIsICJPYyIsICJSbyIsICJKZSIsICJjbyIsICJqYyIsICIkYyIsICJkZSIsICJOZSIsICJHYyIsICJxYyIsICJMIiwgIkEiLCAiJCIsICJZZSIsICJWYyIsICJ6YyIsICJ3dCIsICJCYyIsICJIYyIsICJLYyIsICJaZSIsICJsbyIsICJZYyIsICJXYyIsICJzZSIsICJMZSIsICJKYyIsICJaYyIsICJDIiwgIl90IiwgIlFjIiwgInVvIiwgIlhjIiwgImVsIiwgInBvIiwgIm1vIiwgInRsIiwgInJsIiwgInZ0IiwgImZvIiwgIm5sIiwgIm9sIiwgIkllIiwgIlFlIiwgImFsIiwgImlsIiwgInl0IiwgInNsIiwgImNsIiwgImxsIiwgInVsIiwgIkRlIiwgIl9vIiwgInlvIiwgImRsIiwgInBsIiwgIm1sIiwgImZsIiwgImhvIiwgIl9sIiwgImdvIiwgInlsIiwgImhsIiwgIndvIiwgInJyIiwgImdsIiwgIndsIiwgIkdyIiwgInZsIiwgInZvIiwgImJsIiwgIlBsIiwgIlRlIiwgIlJ0IiwgIkVsIiwgImJvIiwgIkNsIiwgImtsIiwgIkFsIiwgIlNsIiwgIkVvIiwgIlBvIiwgIk0iLCAicXIiLCAiSWwiLCAiUmwiLCAiRmwiLCAiVGwiLCAiZWUiLCAiTmwiLCAiTGwiLCAiTWwiLCAiU2UiLCAieGwiLCAiQ28iLCAiRGwiLCAiVWwiLCAibWUiLCAiVnIiLCAiQW8iLCAiT2wiLCAiamwiLCAiVyIsICJidCIsICJTbyIsICIkbCIsICJHbCIsICJxbCIsICJIIiwgIm5yIiwgImtvIiwgIlZsIiwgInpsIiwgIkJsIiwgIksiLCAib3IiLCAiSW8iLCAiSGwiLCAiS2wiLCAiWWwiLCAiaHQiLCAieiIsICJ6ciIsICJXbCIsICJKbCIsICJabCIsICJ1dCIsICJldSIsICJRbCIsICJYbCIsICJ0ZSIsICJ0dSIsICJydSIsICJudSIsICJfZSIsICJvdSIsICJCciIsICJhdSIsICJpdSIsICJzdSIsICJjdSIsICJYIiwgImx1IiwgInV1IiwgImR1IiwgInVlIiwgIkhyIiwgInllIiwgImFyIiwgInB1IiwgIm11IiwgImZ1IiwgIkkiLCAia2UiLCAiS3IiLCAiX3UiLCAiWXIiLCAieXUiLCAiV3IiLCAiaHUiLCAiSnIiLCAiZ3UiLCAiWnIiLCAid3UiLCAidnUiLCAiSnQiLCAiYnUiLCAiUHUiLCAiRXUiLCAiUXIiLCAiVnQiLCAiQ3UiLCAiQWUiLCAiQXUiLCAiWHIiLCAiU3UiLCAia3UiLCAiSXUiLCAiZW4iLCAidG4iLCAiZmUiLCAibmUiLCAiaGUiLCAiQ3IiLCAicm4iLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgImZvcm1DYWxsYmFja3MiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJhcHBsZVBheVJlc3VsdCIsICJzZXRBcHBsZVBheVJlc3VsdCIsICJnb29nbGVQYXlSZXN1bHQiLCAic2V0R29vZ2xlUGF5UmVzdWx0IiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImtsYXJuYVJlc3VsdCIsICJzZXRLbGFybmFSZXN1bHQiLCAiYWZmaXJtUmVzdWx0IiwgInNldEFmZmlybVJlc3VsdCIsICJhZnRlcnBheVJlc3VsdCIsICJzZXRBZnRlcnBheVJlc3VsdCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImtsYXJuYVJlc3VsdDIiLCAiYWZmaXJtUmVzdWx0MiIsICJhZnRlcnBheVJlc3VsdDIiLCAiZm9ybSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIl0KfQo=
|
|
10123
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA3fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgRmllbGROYW1lMltcIklTX0JVU0lORVNTX1BVUkNIQVNFXCJdID0gXCJpc0J1c2luZXNzUHVyY2hhc2VcIjtcbiAgRmllbGROYW1lMltcIkJVU0lORVNTX05BTUVcIl0gPSBcImJ1c2luZXNzTmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiVEFYX0lEXCJdID0gXCJ0YXhJZFwiO1xuICBGaWVsZE5hbWUyW1wiVEFYX0lEX1RZUEVcIl0gPSBcInRheElkVHlwZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5lbnVtKFtcImNhcmRcIiwgXCJjYXJkLW51bWJlclwiLCBcImNhcmQtZXhwaXJ5XCIsIFwiY2FyZC1jdmNcIiwgXCJjZGUtYnJpZGdlXCJdKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBCYXNlRWxlbWVudHNTdHlsZSA9IHokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyU3R5bGU6IHokMS5vYmplY3Qoe1xuICAgIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gICAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogeiQxLm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogVGhlIGNhcmQgaWNvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNhcmQgbnVtYmVyIGlucHV0IGZpZWxkXG4gICAqIEl0IHdvbid0IGFmZmVjdCBhZnRlciB0aGUgaWNvbiBjaGFuZ2VkIHRvIGNhcmQgYnJhbmQgYWZ0ZXIgdGhlIHVzZXIgaW5wdXQgdGhlIGNhcmQgbnVtYmVyXG4gICAqL1xuICBpY29uOiB6JDEub2JqZWN0KHtcbiAgICBjb2xvcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5CYXNlRWxlbWVudHNTdHlsZS5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYnVzaW5lc3NOYW1lXCIgLyogQlVTSU5FU1NfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFwiIC8qIFRBWF9JRCAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJ0YXhJZFR5cGVcIiAvKiBUQVhfSURfVFlQRSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJidXNpbmVzc05hbWVcIiAvKiBCVVNJTkVTU19OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkXCIgLyogVEFYX0lEICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInRheElkVHlwZVwiIC8qIFRBWF9JRF9UWVBFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBzb3J0X2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogeiQxLnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHokMS5vYmplY3QoeyBlcnJvcjogeiQxLnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHokMS5vYmplY3Qoe1xuICBsaW5lMTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYnVzaW5lc3NfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX3RheF9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX3RheF9pZF90eXBlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBidXNpbmVzc19uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRheF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0YXhfaWRfdHlwZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7fSk7XG56JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKCguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWR9O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH19O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyQxKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbm5ldyBNZXRyaWNzUXVldWUoKTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IHsgbG9nX18sIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IGNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gIHBheW1lbnRfbWV0aG9kLFxuICBpc0J1c2luZXNzUHVyY2hhc2Vcbn0sIG5vbkNkZUZvcm1JbnB1dHMpID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX0JVU0lORVNTX1BVUkNIQVNFXSA/PyBpc0J1c2luZXNzUHVyY2hhc2UpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQlVTSU5FU1NfTkFNRV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kMShcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGV9KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwia2xhcm5hXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7fSkubnVsbGlzaCgpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogeiQxLnN0cmluZygpLFxuICBkZF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBkZF90b2tlbjogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhZmZpcm1cIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhZnRlcnBheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImtsYXJuYVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiY2FyZFwiXSA9IFwiY2FyZFwiO1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wia2xhcm5hXCJdID0gXCJrbGFybmFcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZmZpcm1cIl0gPSBcImFmZmlybVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFmdGVycGF5XCJdID0gXCJhZnRlcnBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcInN0cmlwZUxpbmtcIl0gPSBcInN0cmlwZS1saW5rXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3QgZ2V0S2xhcm5hUHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3Qga2xhcm5hSW5pdFJlc3VsdHMgPSBbXTtcbiAgY29uc3QgYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5haXJ3YWxsZXhLbGFybmEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBrbGFybmFJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlS2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAga2xhcm5hSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUtsYXJuYUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGtsYXJuYUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZToga2xhcm5hSW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0S2xhcm5hRmxvdyhrbGFybmFJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRLbGFybmFGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgS2xhcm5hIHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBLbGFybmEgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IGdldEFmZmlybVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFmZmlybUluaXRSZXN1bHRzID0gW107XG4gIGNvbnN0IHN0cmlwZUFmZmlybUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlQWZmaXJtLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZUFmZmlybUZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgYWZmaXJtSW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUFmZmlybUZsb3dSZXN1bHQuc3RhcnRGbG93KGN1c3RvbVBhcmFtcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFmZmlybUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYWZmaXJtSW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QWZmaXJtRmxvdyhhZmZpcm1Jbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBZmZpcm1GbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQWZmaXJtIHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBZmZpcm0gcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IGdldEFmdGVycGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYWZ0ZXJwYXlJbml0UmVzdWx0cyA9IFtdO1xuICBjb25zdCBzdHJpcGVBZnRlcnBheUZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlQWZ0ZXJwYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlQWZ0ZXJwYXlGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGFmdGVycGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdC5zdGFydEZsb3coY3VzdG9tUGFyYW1zKVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYWZ0ZXJwYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFmdGVycGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QWZ0ZXJwYXlGbG93KGFmdGVycGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QWZ0ZXJwYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQWZ0ZXJwYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmdGVycGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBFbGVtZW50c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgZm9ybUlkOiBcIlwiLFxuICBmb3JtSGVpZ2h0OiBcIlwiLFxuICByZWZlcnJlcjogdm9pZCAwLFxuICBjaGVja291dFNlY3VyZVRva2VuOiB2b2lkIDAsXG4gIHJlZ2lzdGVySWZyYW1lOiAoKSA9PiB7XG4gIH0sXG4gIGJhc2VVcmw6IFwiXCJcbn0pO1xuXG5jb25zdCB1c2VPcGVuUGF5RWxlbWVudHMgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEVsZW1lbnRzQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVzZU9wZW5QYXlFbGVtZW50cyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIE9wZW5QYXlFbGVtZW50c1Byb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC9gLCBiYXNlVXJsKTtcbiAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IHVybC50b1N0cmluZygpLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZnVuY3Rpb24gRm8oZSwgdCkge1xuICB2YXIgciA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgciA/IHIoZSwgdCkgOiBlLl9fcHJvdG9fXyA9IHQ7XG59XG5mdW5jdGlvbiBUbyhlLCB0KSB7XG4gIHQgPT09IHZvaWQgMCAmJiAodCA9IGUuY29uc3RydWN0b3IpO1xuICB2YXIgciA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICByICYmIHIoZSwgdCk7XG59XG52YXIgTm8gPSAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGEuX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChhW3NdID0gaVtzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0pKCksIExvID0gKGZ1bmN0aW9uKGUpIHtcbiAgTm8odCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBhID0gdGhpcy5jb25zdHJ1Y3RvciwgaSA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBhLm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pLCBGbyhpLCBhLnByb3RvdHlwZSksIFRvKGkpLCBpO1xuICB9XG4gIHJldHVybiB0O1xufSkoRXJyb3IpO1xuY29uc3QgVCA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkXCIgfSksIFAgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIEQgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG52YXIgcCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCBlLkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgZS5QSE9ORSA9IFwicGhvbmVcIiwgZS5FTUFJTCA9IFwiZW1haWxcIiwgZS5MSU5FMSA9IFwibGluZTFcIiwgZS5MSU5FMiA9IFwibGluZTJcIiwgZS5MSU5FMyA9IFwibGluZTNcIiwgZS5DSVRZID0gXCJjaXR5XCIsIGUuU1RBVEUgPSBcInN0YXRlXCIsIGUuQ09VTlRSWSA9IFwiY291bnRyeVwiLCBlLlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIGUuU0hJUFBJTkdfTElORTEgPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIsIGUuU0hJUFBJTkdfTElORTIgPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIsIGUuU0hJUFBJTkdfTElORTMgPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIsIGUuU0hJUFBJTkdfQ0lUWSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiLCBlLlNISVBQSU5HX1NUQVRFID0gXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiLCBlLlNISVBQSU5HX0NPVU5UUlkgPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiwgZS5TSElQUElOR19aSVBfQ09ERSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiLCBlLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyA9IFwiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiwgZS5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCBlLklTX0JVU0lORVNTX1BVUkNIQVNFID0gXCJpc0J1c2luZXNzUHVyY2hhc2VcIiwgZS5CVVNJTkVTU19OQU1FID0gXCJidXNpbmVzc05hbWVcIiwgZS5UQVhfSUQgPSBcInRheElkXCIsIGUuVEFYX0lEX1RZUEUgPSBcInRheElkVHlwZVwiLCBlKSkocCB8fCB7fSk7XG5jb25zdCBvbiA9IHokMS5uYXRpdmVFbnVtKHApO1xudmFyIGFuID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShhbiB8fCB7fSk7XG5jb25zdCBzbiA9IHokMS5uYXRpdmVFbnVtKGFuKSwgY24gPSB6JDEudW5pb24oW29uLCBzbl0pO1xudmFyIGdlID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRCA9IFwiY2FyZFwiLCBlLkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCBlLkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgZSkpKGdlIHx8IHt9KTtcbmNvbnN0IE1vID0geiQxLmVudW0oW1wiY2FyZFwiLCBcImNhcmQtbnVtYmVyXCIsIFwiY2FyZC1leHBpcnlcIiwgXCJjYXJkLWN2Y1wiLCBcImNkZS1icmlkZ2VcIl0pLCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogRCh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB4byA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KSwgVHQgPSB6JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBQLFxuICBjb2xvcjogUCxcbiAgZm9udEZhbWlseTogUCxcbiAgZm9udFNpemU6IFAsXG4gIGZvbnRXZWlnaHQ6IFAsXG4gIG1hcmdpbjogUCxcbiAgcGFkZGluZzogUCxcbiAgbGV0dGVyU3BhY2luZzogUCxcbiAgbGluZUhlaWdodDogUCxcbiAgaGlkZUljb246IFAsXG4gIHBsYWNlaG9sZGVyU3R5bGU6IHokMS5vYmplY3Qoe1xuICAgIGNvbG9yOiBQLFxuICAgIGZvbnRTaXplOiBQLFxuICAgIGZvbnRXZWlnaHQ6IFAsXG4gICAgZm9udEZhbWlseTogUCxcbiAgICBsZXR0ZXJTcGFjaW5nOiBQLFxuICAgIGxpbmVIZWlnaHQ6IFBcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5UdC5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IFAsXG4gIHBsYWNlaG9sZGVyOiB6JDEub2JqZWN0KHtcbiAgICBjYXJkTnVtYmVyOiBQLFxuICAgIGV4cGlyeTogUCxcbiAgICBjdmM6IFBcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5UdC5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IFAsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogeiQxLm9iamVjdCh7XG4gICAgY29sb3I6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuVHQuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBQLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuVHQuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBQLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgcGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgRG8gPSBwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgVW8gPSB6JDEub2JqZWN0KHsgdHlwZTogRG8gfSksIE9vID0gcGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBqbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBPbyxcbiAgZWxlbWVudFR5cGU6IHNuLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCAkbyA9IHBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBHbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiAkbyxcbiAgbWVzc2FnZTogVCxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIHFvID0gcGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgVm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogcW8sXG4gIGVsZW1lbnRUeXBlOiBjbixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBUXG59KSwgQm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFQsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFAsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShGdClcbn0pLCBIbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEtvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgVWUgPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IFQuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBULFxuICBsYXN0TmFtZTogVCxcbiAgcHJvbW90aW9uQ29kZTogUCxcbiAgbGluZTE6IFAsXG4gIGxpbmUyOiBQLFxuICBsaW5lMzogUCxcbiAgY2l0eTogUCxcbiAgc3RhdGU6IFAsXG4gIGNvdW50cnk6IFQsXG4gIHppcENvZGU6IFAsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IFAsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBQLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBQLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogUCxcbiAgYnVzaW5lc3NOYW1lOiBQLFxuICB0YXhJZDogUCxcbiAgdGF4SWRUeXBlOiBQXG59KSwgWW8gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IFQuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBQLFxuICBsYXN0TmFtZTogUCxcbiAgcHJvbW90aW9uQ29kZTogUCxcbiAgbGluZTE6IFAsXG4gIGxpbmUyOiBQLFxuICBsaW5lMzogUCxcbiAgY2l0eTogUCxcbiAgc3RhdGU6IFAsXG4gIGNvdW50cnk6IFQsXG4gIHppcENvZGU6IFAsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IFAsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBQLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBQLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogUCxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogUCxcbiAgYnVzaW5lc3NOYW1lOiBQLFxuICB0YXhJZDogUCxcbiAgdGF4SWRUeXBlOiBQXG59KTtcbnokMS5vYmplY3Qoe1xuICBsaW5lMTogVCxcbiAgY2l0eTogVCxcbiAgc3RhdGU6IFQsXG4gIGNvdW50cnk6IFRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IFQsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IFRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBULFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBULFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogVCxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogVCxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogVFxufSk7XG5jb25zdCBXbyA9IHBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIEpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFdvLFxuICBzZXNzaW9uSWQ6IFQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRnQsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogUCxcbiAgcGF5bWVudFJvdXRlSWQ6IFBcbn0pLmV4dGVuZChVZS5zaGFwZSksIFpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIFFvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpLFxuICBwYXltZW50TWV0aG9kSWQ6IFBcbn0pLCBYbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgVW8sXG4gIGpvLFxuICBHbyxcbiAgVm8sXG4gIHpvLFxuICBCbyxcbiAgSm8sXG4gIFpvLFxuICBRbyxcbiAgSG8sXG4gIEtvXG5dKSwgZWEgPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogWG8sXG4gIG5vbmNlOiBULFxuICBmb3JtSWQ6IFQsXG4gIGVsZW1lbnRJZDogVFxufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBUXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgdHQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3NvcnNfdXNlZDogRCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCB0YSA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgcmEgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KHRhKVxufSksIG5hID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIHJhXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBGdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogVWUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBEKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEZ0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBVZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoeiQxLnN0cmluZygpKVxufSk7XG52YXIgRiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgZS5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIGUuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgZSkpKEYgfHwge30pO1xuY29uc3QgbG4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBvYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGFhID0geiQxLm9iamVjdCh7XG4gIGJhbmtfbmFtZTogeiQxLnN0cmluZygpLFxuICBkaXNwbGF5X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6JDEub2JqZWN0KHtcbiAgICBsb2dvX3VybDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbn0pLCB1biA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogRCh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGF2YWlsYWJsZV9iYW5rczogRCh6JDEuYXJyYXkoYWEpKVxufSksIGlhID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSksIHNhID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KHhvKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IEQodHQpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IEQoeiQxLmFycmF5KHVuKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IEQoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogRCh0dClcbn0pLCBjYSA9IHokMS5vYmplY3Qoe1xuICBpbnN0aXR1dGlvbk51bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogY2Eub3B0aW9uYWwoKVxufSk7XG5jb25zdCBsYSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IGxhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgdWEgPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB1YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IGRhID0geiQxLm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogeiQxLnN0cmluZygpXG59KSwgcGEgPSB6JDEub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKClcbn0pLCBtYSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBzb3J0X2NvZGU6IHokMS5zdHJpbmcoKVxufSksIGZhID0geiQxLm9iamVjdCh7XG4gIGliYW46IHokMS5zdHJpbmcoKVxufSksIF9hID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6JDEudW5pb24oW1xuICAgIGRhLFxuICAgIHBhLFxuICAgIG1hLFxuICAgIGZhLFxuICAgIHokMS5vYmplY3QoeyBlcnJvcjogeiQxLnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pLCBFID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgeWEgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgZG4gPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IEUoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IEUoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IEUoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBFKHokMS5udW1iZXIoKSlcbn0pLCBwbiA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogRSh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBFKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IEUoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGhhID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGdhID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IEUoaGEpXG59KSwgcWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IEUoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IEUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgd2EgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIHZhID0geiQxLm9iamVjdCh7XG4gIGlkOiBFKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IEUoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogRSh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheSh3YSksXG4gIHRyaWFsX3N0YXJ0OiBFKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogRSh6JDEuc3RyaW5nKCkpXG59KSwgbW4gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIGJhID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkobW4pLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgUGEgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBkblxufSksIEVhID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KFBhKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBFKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoYmEpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KG1uKVxufSksIEFyID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheSh2YSksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoRWEpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IEUoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpLFxuICBwYXltZW50X21ldGhvZF9pZDogRSh6JDEuc3RyaW5nKCkpXG59KSwgZm4gPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQXIsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogRShBciksXG4gIGNvdXBvbnM6IHokMS5hcnJheShkbilcbn0pLCBTciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBFKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBFKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHBuKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IGdhLFxuICBzdWJzX3ByZXZpZXc6IEUoZm4pLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShxZSksXG4gIHJldHVybl91cmw6IEUoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IEUoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBFKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIF9uID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoU3Iuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChTci5zaGFwZSlcbl0pLCBDYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBBYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW19uLCBDYSwgQWFdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHQgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBQdCxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUHQub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHBuKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogRSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBFKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgeW4gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFNhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShTYSk7XG5jb25zdCBrYSA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfdGF4X2lkX3R5cGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogUHQsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBQdC5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBJYSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgaG4gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KElhKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSksIFJhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogRSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFlLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaG4ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQoa2Euc2hhcGUpLmV4dGVuZChSYS5zaGFwZSk7XG5jb25zdCBnbiA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IEUoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBZbyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBxZSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFVlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IEUoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaG4ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBFKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgRmEgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBFKHR0KSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogRSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBFKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogRSh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogRSh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogRSh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogRSh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBFKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBFKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IEUoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IEUoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IEUoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogRSh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IEUoeiQxLnN0cmluZygpKSxcbiAgYnVzaW5lc3NfbmFtZTogRSh6JDEuc3RyaW5nKCkpLFxuICB0YXhfaWQ6IEUoeiQxLnN0cmluZygpKSxcbiAgdGF4X2lkX3R5cGU6IEUoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogRSh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IEUoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogRSh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IEUoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBFKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IEUoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogRSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUYSA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IE5hID0geiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBFKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IExhID0geiQxLm9iamVjdCh7fSksIE1hID0geiQxLm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHokMS5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoeiQxLmFueSgpKSwgeGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBEYSA9IHokMS5hcnJheSh4YSksIFVhID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIE9hID0geiQxLmFycmF5KFVhKSwgamEgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFp0ID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBqYVt0XSA/PyBlO1xufSwgJGEgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0sIEdhID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gWnQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBg4oCiICR7WnQoci5tc2cpfWApLmpvaW4oYFxuYCl9YCwgcWEgPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYC0gJHtyLnBhdGguam9pbihcIi9cIil9OiAke3IubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIGFlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICBpZiAoJGEoZS5tZXNzYWdlKSkge1xuICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBEYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IEdhKHQpIDogT2Euc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBxYSh0KSA6IChjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIHVua25vd24gc3RyaW5naWZpZWQgSlNPTiBvYmplY3Q6XG4ke2UubWVzc2FnZX1gKSwgZS5tZXNzYWdlKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBadChlLm1lc3NhZ2UpO1xuICBpZiAodHlwZW9mIGUgPT0gXCJvYmplY3RcIilcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB0ICsgXCJcIjtcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gZSArIFwiXCI7XG59LCBWYSA9IChlLCB0LCByKSA9PiAoKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdCguLi5uKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIHIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2V9KTpgLCBhKTtcbiAgICByZXR1cm47XG4gIH1cbn0pLCB6YSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCB3biA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9IHRydWU7XG59LCBCYSA9ICgpID0+IHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgd24pO1xufSwgSGEgPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHduKTtcbn0sIFYgPSAoZSkgPT4ge1xuICBsZXQgdCA9IGZhbHNlO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIEJhKCksIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN0YXJ0ZWQ/LigpLCB2KFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbiA9IGF3YWl0IGUocik7XG4gICAgICBpZiAodihcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5uXG4gICAgICB9KSwgSGkoKSwgbi5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKG4ucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKG4ubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIG4ucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBuLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIG4ucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIG4ucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXSxcbiAgICAgICAgICBuLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCA/PyBcIlwiXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7bn1gKTtcbiAgICB9IGNhdGNoIChuKSB7XG4gICAgICB0ID0gZmFsc2U7XG4gICAgICBjb25zdCBhID0gYWUobiksIGkgPSBhd2FpdCBqbihyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihhLCBpKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlOiBhLCBlcnJvckNvZGU6IGksIGVycm9yOiBuIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ID0gZmFsc2UsIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgSGEoKTtcbiAgICB9XG4gIH07XG59LCBjZSA9IChlKSA9PiBhc3luYyAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gayhcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IGFlKHIpLCBpID0gYXdhaXQgam4odC5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGEpO1xuICAgIHJldHVybiBuKGksIGEsIHIpLCB2KFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBhLCBlcnJvckNvZGU6IGksIGVycm9yOiByIH0pLCB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBhLCBlcnJvckNvZGU6IGksIGlzTG9hZGluZzogZmFsc2UgfTtcbiAgfVxufSwgayA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH0sIHIgPSAoLi4ubikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IHQsXG4gICAgZXJyOiByLFxuICAgIGxvZ19fOiB0LFxuICAgIGVycl9fOiByXG4gIH07XG59O1xudmFyIFF0ID0gZnVuY3Rpb24oZSwgdCkge1xuICByZXR1cm4gUXQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihyLCBuKSB7XG4gICAgci5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBmb3IgKHZhciBhIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBhKSAmJiAoclthXSA9IG5bYV0pO1xuICB9LCBRdChlLCB0KTtcbn07XG5mdW5jdGlvbiBFZShlLCB0KSB7XG4gIGlmICh0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCIgJiYgdCAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyh0KSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIFF0KGUsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBlO1xuICB9XG4gIGUucHJvdG90eXBlID0gdCA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUodCkgOiAoci5wcm90b3R5cGUgPSB0LnByb3RvdHlwZSwgbmV3IHIoKSk7XG59XG5mdW5jdGlvbiBLYShlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIGEoaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihzKSB7XG4gICAgICBzKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgcykge1xuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBzKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIHMobSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gaShkLnZhbHVlKSA6IGEoZC52YWx1ZSkudGhlbihsLCBjKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHZuKGUsIHQpIHtcbiAgdmFyIHIgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoaVswXSAmIDEpIHRocm93IGlbMV07XG4gICAgcmV0dXJuIGlbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGEsIGksIHMgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBzLm5leHQgPSBsKDApLCBzLnRocm93ID0gbCgxKSwgcy5yZXR1cm4gPSBsKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoc1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBzO1xuICBmdW5jdGlvbiBsKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGMoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgcyAmJiAocyA9IDAsIHVbMF0gJiYgKHIgPSAwKSksIHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgYSAmJiAoaSA9IHVbMF0gJiAyID8gYS5yZXR1cm4gOiB1WzBdID8gYS50aHJvdyB8fCAoKGkgPSBhLnJldHVybikgJiYgaS5jYWxsKGEpLCAwKSA6IGEubmV4dCkgJiYgIShpID0gaS5jYWxsKGEsIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAoYSA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIGEgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIGEgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuZnVuY3Rpb24gT2UoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIEV0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gQ3QoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgaTsgbiA8IGE7IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBNZShlKTtcbn1cbmZ1bmN0aW9uIFlhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBhLCBpID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgbChcIm5leHRcIiksIGwoXCJ0aHJvd1wiKSwgbChcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXykudGhlbih5LCBtKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwoeSwgXykge1xuICAgIG5beV0gJiYgKGFbeV0gPSBmdW5jdGlvbihnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odywgaCkge1xuICAgICAgICBpLnB1c2goW3ksIGcsIHcsIGhdKSA+IDEgfHwgYyh5LCBnKTtcbiAgICAgIH0pO1xuICAgIH0sIF8gJiYgKGFbeV0gPSBfKGFbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gYyh5LCBfKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblt5XShfKSk7XG4gICAgfSBjYXRjaCAoZykge1xuICAgICAgZihpWzBdWzNdLCBnKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIE1lID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBtKSA6IGYoaVswXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgYyhcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gbSh5KSB7XG4gICAgYyhcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIGYoeSwgXykge1xuICAgIHkoXyksIGkuc2hpZnQoKSwgaS5sZW5ndGggJiYgYyhpWzBdWzBdLCBpWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gV2EoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIE9lID09IFwiZnVuY3Rpb25cIiA/IE9lKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4oaSkge1xuICAgIHJbaV0gPSBlW2ldICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihsLCBjKSB7XG4gICAgICAgIHMgPSBlW2ldKHMpLCBhKGwsIGMsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEoaSwgcywgbCwgYykge1xuICAgIFByb21pc2UucmVzb2x2ZShjKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGkoeyB2YWx1ZTogdSwgZG9uZTogbCB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gWShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBOdChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIHp0ID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gQXQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIHN0ID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHQsIHRoaXMuY2xvc2VkID0gZmFsc2UsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByLCBuLCBhLCBpO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gT2UocyksIGMgPSBsLm5leHQoKTsgIWMuZG9uZTsgYyA9IGwubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gYy52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGcgfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChyID0gbC5yZXR1cm4pICYmIHIuY2FsbChsKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChZKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgIGkgPSBnIGluc3RhbmNlb2YgenQgPyBnLmVycm9ycyA6IFtnXTtcbiAgICAgICAgfVxuICAgICAgdmFyIG0gPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgZiA9IE9lKG0pLCB5ID0gZi5uZXh0KCk7ICF5LmRvbmU7IHkgPSBmLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIF8gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga3IoXyk7XG4gICAgICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgICAgIGkgPSBpID8/IFtdLCBnIGluc3RhbmNlb2YgenQgPyBpID0gQ3QoQ3QoW10sIEV0KGkpKSwgRXQoZy5lcnJvcnMpKSA6IGkucHVzaChnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGcpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogZyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGEgPSBmLnJldHVybikgJiYgYS5jYWxsKGYpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpKVxuICAgICAgICB0aHJvdyBuZXcgenQoaSk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAga3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIEF0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgQXQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHQuY2xvc2VkID0gdHJ1ZSwgdDtcbiAgfSkoKSwgZTtcbn0pKCksIGJuID0gc3QuRU1QVFk7XG5mdW5jdGlvbiBQbihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2Ygc3QgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgWShlLnJlbW92ZSkgJiYgWShlLmFkZCkgJiYgWShlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIGtyKGUpIHtcbiAgWShlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBKYSA9IHtcbiAgUHJvbWlzZTogdm9pZCAwXG59LCBaYSA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIEN0KFtlLCB0XSwgRXQocikpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFyVGltZW91dChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIEVuKGUpIHtcbiAgWmEuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIElyKCkge1xufVxuZnVuY3Rpb24gZ3QoZSkge1xuICBlKCk7XG59XG52YXIgaXIgPSAoZnVuY3Rpb24oZSkge1xuICBFZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdmFyIG4gPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSBmYWxzZSwgciA/IChuLmRlc3RpbmF0aW9uID0gciwgUG4ocikgJiYgci5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGVpLCBuO1xuICB9XG4gIHJldHVybiB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICByZXR1cm4gbmV3IFh0KHIsIG4sIGEpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQocik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9IHRydWUsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSB0cnVlLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSB0cnVlLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHQucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCB0O1xufSkoc3QpLCBRYSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgcHQobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBwdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBwdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBwdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0pKCksIFh0ID0gKGZ1bmN0aW9uKGUpIHtcbiAgRWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgYSkge1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgcmV0dXJuIFkocikgfHwgIXIgPyBzID0ge1xuICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICB9IDogcyA9IHIsIGkuZGVzdGluYXRpb24gPSBuZXcgUWEocyksIGk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KShpcik7XG5mdW5jdGlvbiBwdChlKSB7XG4gIEVuKGUpO1xufVxuZnVuY3Rpb24gWGEoZSkge1xuICB0aHJvdyBlO1xufVxudmFyIGVpID0ge1xuICBjbG9zZWQ6IHRydWUsXG4gIG5leHQ6IElyLFxuICBlcnJvcjogWGEsXG4gIGNvbXBsZXRlOiBJclxufSwgc3IgPSAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSkoKTtcbmZ1bmN0aW9uIHRpKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiByaShlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IHRpIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYShuKTtcbiAgICB9LCByKTtcbiAgfTtcbn1cbnZhciB3ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBpID0gb2kodCkgPyB0IDogbmV3IFh0KHQsIHIsIG4pO1xuICAgIHJldHVybiBndChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgbCA9IHMub3BlcmF0b3IsIGMgPSBzLnNvdXJjZTtcbiAgICAgIGkuYWRkKGwgPyBsLmNhbGwoaSwgYykgOiBjID8gYS5fc3Vic2NyaWJlKGkpIDogYS5fdHJ5U3Vic2NyaWJlKGkpKTtcbiAgICB9KSwgaTtcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBScihyKSwgbmV3IHIoZnVuY3Rpb24oYSwgaSkge1xuICAgICAgdmFyIHMgPSBuZXcgWHQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQobCk7XG4gICAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgICAgaShjKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGksXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbc3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gcmkodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBScih0KSwgbmV3IHQoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIGk7XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBpID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4oaSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSkoKTtcbmZ1bmN0aW9uIFJyKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IGUgPz8gSmEuUHJvbWlzZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBuaShlKSB7XG4gIHJldHVybiBlICYmIFkoZS5uZXh0KSAmJiBZKGUuZXJyb3IpICYmIFkoZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBvaShlKSB7XG4gIHJldHVybiBlICYmIGUgaW5zdGFuY2VvZiBpciB8fCBuaShlKSAmJiBQbihlKTtcbn1cbmZ1bmN0aW9uIGFpKGUpIHtcbiAgcmV0dXJuIFkoZT8ubGlmdCk7XG59XG5mdW5jdGlvbiBpaShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgaWYgKGFpKHQpKVxuICAgICAgcmV0dXJuIHQubGlmdChmdW5jdGlvbihyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUociwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBzaShlLCB0LCByLCBuLCBhKSB7XG4gIHJldHVybiBuZXcgY2koZSwgdCwgciwgbiwgYSk7XG59XG52YXIgY2kgPSAoZnVuY3Rpb24oZSkge1xuICBFZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBhLCBpLCBzLCBsKSB7XG4gICAgdmFyIGMgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYy5vbkZpbmFsaXplID0gcywgYy5zaG91bGRVbnN1YnNjcmliZSA9IGwsIGMuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGMuX2Vycm9yID0gaSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkodSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgYy5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgYztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KShpciksIGxpID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBDbiA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gZmFsc2UsIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHIub2JzZXJ2ZXJzID0gW10sIHIuaXNTdG9wcGVkID0gZmFsc2UsIHIuaGFzRXJyb3IgPSBmYWxzZSwgci50aHJvd25FcnJvciA9IG51bGwsIHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSBuZXcgRnIodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSByLCBuO1xuICB9LCB0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBsaSgpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBndChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBpO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSBPZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBsID0gcy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGMgPSBsLnZhbHVlO1xuICAgICAgICAgICAgYy5uZXh0KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAoaSA9IHMucmV0dXJuKSAmJiBpLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZ3QoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gdHJ1ZSwgbi50aHJvd25FcnJvciA9IHI7XG4gICAgICAgIGZvciAodmFyIGEgPSBuLm9ic2VydmVyczsgYS5sZW5ndGg7IClcbiAgICAgICAgICBhLnNoaWZ0KCkuZXJyb3Iocik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGd0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHIpLCB0aGlzLl9pbm5lclN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgYSA9IHRoaXMsIGkgPSBhLmhhc0Vycm9yLCBzID0gYS5pc1N0b3BwZWQsIGwgPSBhLm9ic2VydmVycztcbiAgICByZXR1cm4gaSB8fCBzID8gYm4gOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgbC5wdXNoKHIpLCBuZXcgc3QoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBBdChsLCByKTtcbiAgICB9KSk7XG4gIH0sIHQucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcywgYSA9IG4uaGFzRXJyb3IsIGkgPSBuLnRocm93bkVycm9yLCBzID0gbi5pc1N0b3BwZWQ7XG4gICAgYSA/IHIuZXJyb3IoaSkgOiBzICYmIHIuY29tcGxldGUoKTtcbiAgfSwgdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgd2UoKTtcbiAgICByZXR1cm4gci5zb3VyY2UgPSB0aGlzLCByO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gbmV3IEZyKHIsIG4pO1xuICB9LCB0O1xufSkod2UpLCBGciA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gciwgYS5zb3VyY2UgPSBuLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIHJldHVybiAoYSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogYm47XG4gIH0sIHQ7XG59KShDbiksIHVpID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9XG59LCBkaSA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0O1xufSkoc3QpLCBUciA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgQ3QoW2UsIHRdLCBFdChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHBpID0gKGZ1bmN0aW9uKGUpIHtcbiAgRWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuc2NoZWR1bGVyID0gciwgYS53b3JrID0gbiwgYS5wZW5kaW5nID0gZmFsc2UsIGE7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBhO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gcjtcbiAgICB2YXIgaSA9IHRoaXMuaWQsIHMgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gaSAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzLCBpLCBuKSksIHRoaXMucGVuZGluZyA9IHRydWUsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBUci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIGEpO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgVHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGEgPSBmYWxzZSwgaTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSB0cnVlLCBpID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIGk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gci5pZCwgYSA9IHIuc2NoZWR1bGVyLCBpID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gZmFsc2UsIEF0KGksIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB0O1xufSkoZGkpLCBOciA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0LCByKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gZS5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSB0LCB0aGlzLm5vdyA9IHI7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgIHJldHVybiByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB0KS5zY2hlZHVsZShuLCByKTtcbiAgfSwgZS5ub3cgPSB1aS5ub3csIGU7XG59KSgpLCBtaSA9IChmdW5jdGlvbihlKSB7XG4gIEVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBOci5ub3cpO1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSBmYWxzZSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IHIuZXhlY3V0ZShyLnN0YXRlLCByLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHIgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSBmYWxzZSwgYSkge1xuICAgICAgZm9yICg7IHIgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIHQ7XG59KShOciksIGZpID0gbmV3IG1pKHBpKSwgX2kgPSAoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCI7XG59KTtcbmZ1bmN0aW9uIHlpKGUpIHtcbiAgcmV0dXJuIFkoZT8udGhlbik7XG59XG5mdW5jdGlvbiBoaShlKSB7XG4gIHJldHVybiBZKGVbc3JdKTtcbn1cbmZ1bmN0aW9uIGdpKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIFkoZT8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiB3aShlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gdmkoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgYmkgPSB2aSgpO1xuZnVuY3Rpb24gUGkoZSkge1xuICByZXR1cm4gWShlPy5bYmldKTtcbn1cbmZ1bmN0aW9uIEVpKGUpIHtcbiAgcmV0dXJuIFlhKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG4sIGEsIGk7XG4gICAgcmV0dXJuIHZuKHRoaXMsIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHN3aXRjaCAocy5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgciA9IGUuZ2V0UmVhZGVyKCksIHMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcy50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgcy5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIE1lKHIucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IHMuc2VudCgpLCBhID0gbi52YWx1ZSwgaSA9IG4uZG9uZSwgaSA/IFs0LCBNZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBNZShhKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBzLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gci5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBDaShlKSB7XG4gIHJldHVybiBZKGU/LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBBaShlKSB7XG4gIGlmIChlIGluc3RhbmNlb2Ygd2UpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAoaGkoZSkpXG4gICAgICByZXR1cm4gU2koZSk7XG4gICAgaWYgKF9pKGUpKVxuICAgICAgcmV0dXJuIGtpKGUpO1xuICAgIGlmICh5aShlKSlcbiAgICAgIHJldHVybiBJaShlKTtcbiAgICBpZiAoZ2koZSkpXG4gICAgICByZXR1cm4gQW4oZSk7XG4gICAgaWYgKFBpKGUpKVxuICAgICAgcmV0dXJuIFJpKGUpO1xuICAgIGlmIChDaShlKSlcbiAgICAgIHJldHVybiBGaShlKTtcbiAgfVxuICB0aHJvdyB3aShlKTtcbn1cbmZ1bmN0aW9uIFNpKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBlW3NyXSgpO1xuICAgIGlmIChZKHIuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiByLnN1YnNjcmliZSh0KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24ga2koZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGVuZ3RoICYmICF0LmNsb3NlZDsgcisrKVxuICAgICAgdC5uZXh0KGVbcl0pO1xuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBJaShlKSB7XG4gIHJldHVybiBuZXcgd2UoZnVuY3Rpb24odCkge1xuICAgIGUudGhlbihmdW5jdGlvbihyKSB7XG4gICAgICB0LmNsb3NlZCB8fCAodC5uZXh0KHIpLCB0LmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pLnRoZW4obnVsbCwgRW4pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFJpKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGEgPSBPZShlKSwgaSA9IGEubmV4dCgpOyAhaS5kb25lOyBpID0gYS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIHMgPSBpLnZhbHVlO1xuICAgICAgICBpZiAodC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAobCkge1xuICAgICAgciA9IHsgZXJyb3I6IGwgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gYS5yZXR1cm4pICYmIG4uY2FsbChhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gQW4oZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBUaShlLCB0KS5jYXRjaChmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBGaShlKSB7XG4gIHJldHVybiBBbihFaShlKSk7XG59XG5mdW5jdGlvbiBUaShlLCB0KSB7XG4gIHZhciByLCBuLCBhLCBpO1xuICByZXR1cm4gS2EodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBsO1xuICAgIHJldHVybiB2bih0aGlzLCBmdW5jdGlvbihjKSB7XG4gICAgICBzd2l0Y2ggKGMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGMudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCByID0gV2EoZSksIGMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCByLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGMuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IG4udmFsdWUsIHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGMubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGwgPSBjLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGwgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBjLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKGkgPSByLnJldHVybikgPyBbNCwgaS5jYWxsKHIpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGMuc2VudCgpLCBjLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBOaShlLCB0LCByLCBuLCBhKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSBmYWxzZSk7XG4gIHZhciBpID0gdC5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICByKCksIGEgPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmIChlLmFkZChpKSwgIWEpXG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMaShlLCB0KSB7XG4gIHZhciByID0gWShlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcihyKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IHdlKG4pO1xufVxudmFyIE1pID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24geGkoZSwgdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBhID0gZmFsc2UsIGk7XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBpID0gcywgYSA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGEgPyByKGkpIDogbihuZXcgTWkoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gRGkoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGUpO1xufVxudmFyIFVpID0gTnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IG51bGwpLCBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IHI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIE9pKGUsIHQpIHtcbiAgdmFyIHIgPSBEaShlKSA/IHsgZmlyc3Q6IGUgfSA6IHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IGUgfSA6IGUsIG4gPSByLmZpcnN0LCBhID0gci5lYWNoLCBpID0gci53aXRoLCBzID0gaSA9PT0gdm9pZCAwID8gamkgOiBpLCBsID0gci5zY2hlZHVsZXIsIGMgPSBsID09PSB2b2lkIDAgPyBmaSA6IGwsIHUgPSByLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBhID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gaWkoZnVuY3Rpb24obSwgZikge1xuICAgIHZhciB5LCBfLCBnID0gbnVsbCwgdyA9IDAsIGggPSBmdW5jdGlvbihiKSB7XG4gICAgICBfID0gTmkoZiwgYywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgeS51bnN1YnNjcmliZSgpLCBBaShzKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGcsXG4gICAgICAgICAgICBzZWVuOiB3XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShmKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIGYuZXJyb3IoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGIpO1xuICAgIH07XG4gICAgeSA9IG0uc3Vic2NyaWJlKHNpKGYsIGZ1bmN0aW9uKGIpIHtcbiAgICAgIF8/LnVuc3Vic2NyaWJlKCksIHcrKywgZi5uZXh0KGcgPSBiKSwgYSA+IDAgJiYgaChhKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBfPy5jbG9zZWQgfHwgXz8udW5zdWJzY3JpYmUoKSwgZyA9IG51bGw7XG4gICAgfSkpLCAhdyAmJiBoKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBjLm5vdygpIDogYSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gamkoZSkge1xuICB0aHJvdyBuZXcgVWkoZSk7XG59XG5jbGFzcyBYZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGN0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gTGkoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHhpKHRoaXMuX3N1YmplY3QucGlwZShPaShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBDbigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBMciA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCAkaSA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgR2kgPSAoZSkgPT4gJGlbZV0sIEJ0ID0ge30sIFNuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKEJ0W2VdKVxuICAgIHJldHVybiBCdFtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKG4pID0+IG4uanNvbigpKSwgciA9IExyLnBhcnNlKHQuZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBCdFtlXSA9IHIsIHI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBMci5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIGN0KGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgTHQgPSAoZSwgdCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3JdKSA9PiAhdC5pbmNsdWRlcyhyKSkpLCBCID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBlciA9IG5ldyBYZSgpLCBNciA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBxaSA9IDMsIFZpID0gMywgemkgPSAxZTMsIHsgbG9nX186IG10IH0gPSBrKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIEJpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBtdChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbXQoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgQigpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIEIoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudCh0LCByLCBuKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIGV2ZW50TmFtZTogdCxcbiAgICAgIHByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogbiB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBhLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGEpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHQgPSBCKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNcik7XG4gICAgICB0ICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZSh0KSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBCKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1yLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9IEIoKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB6aSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoQigpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHQgPSBlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghdCkge1xuICAgICAgbXQoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMucXVldWUuc2xpY2UoMCwgVmkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0ge1xuICAgICAgICBldmVudHM6IHIubWFwKChsKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGwuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogdC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAuLi5sLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogbC5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBsLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBsLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBsLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmwucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBhID0gR2kodC5lbnZpcm9ubWVudCksIGkgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgYSk7XG4gICAgICAoYXdhaXQgZmV0Y2goaS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuKSxcbiAgICAgICAga2VlcGFsaXZlOiAhMFxuICAgICAgICAvLyBUbyBzZW5kIGV2ZW50cyBldmVuIGlmIHRoZSBwYWdlIGlzIHVubG9hZGVkXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uoci5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgbXQoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIG4pLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaCh0KSB7XG4gICAgdC5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHIgPSB0LmZpbHRlcigobikgPT4gbi5hdHRlbXB0Q291bnQgPCBxaSk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnIsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgQigpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIEIoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgY3IgPSBuZXcgQmkoKSwgdiA9IChlLCB0LCByKSA9PiB7XG4gIGNyLmFkZEV2ZW50KGUsIHQsIHIpO1xufSwgSGkgPSAoKSA9PiB7XG4gIGNyLnByb2Nlc3NRdWV1ZSgpO1xufSwga24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gYWUoZS5yZWFzb24pO1xuICB2KFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIEluID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGFlKGUuZXJyb3IpO1xuICB2KFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5lcnJvcj8ubmFtZSxcbiAgICBlcnJvcl9zdGFjazogZS5lcnJvcj8uc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBlLmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBlLmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBlLmNvbG5vXG4gIH0pO1xufTtcbmxldCBTdCA9IG51bGw7XG5jb25zdCBLaSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFN0ID0gKGF3YWl0IGltcG9ydCgnLi9saWZlY3ljbGUtRDFCZEViWnMtIX57MDA1fX4uanMnKSkuZGVmYXVsdCwgU3Q7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGUpLCBudWxsO1xuICB9XG59LCBSbiA9IChlKSA9PiB7XG4gIHYoXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZS5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGUubmV3U3RhdGVcbiAgfSksIChlLm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGUubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSAmJiBjci5wcm9jZXNzUXVldWUoKTtcbn0sIFlpID0gYXN5bmMgKCkgPT4ge1xuICBCKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBJbiksIEIoKT8uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBrbik7XG4gIGNvbnN0IGUgPSBhd2FpdCBLaSgpO1xuICBlICYmIGUuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIFJuKTtcbn0sIFdpID0gYXN5bmMgKCkgPT4ge1xuICBCKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBJbiksIEIoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBrbiksIEIoKSAmJiBTdCAmJiBTdC5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgUm4pO1xufSwgSmkgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBaaSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBRaSA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIE10ID0gYXN5bmMgKGUpID0+IHtcbiAgZm9yIChsZXQgciA9IDA7IHIgPCAxMDsgcisrKVxuICAgIHhyKCkgfHwgYXdhaXQgRHQoNTAwKTtcbiAgaWYgKCF4cigpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZShlKTtcbn0sIHh0ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IE10KGUpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiByLmVsZW1lbnRzKHQpLFxuICAgIHN0cmlwZTogclxuICB9O1xufSwgWGkgPSBhc3luYyAoZSwgdCwgciwgbiwgYSkgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgTXQoZSksIHMgPSBRaVtyLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0LFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgRHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCB4ciA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBlcyA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCB0cyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IE10KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIHJzID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IChhd2FpdCBNdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IGUuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gci5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAke3IuZXJyb3I/Lm1lc3NhZ2UgPz8gci5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59O1xudmFyIG5zID0gdHlwZW9mIGdsb2JhbFRoaXMgPT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA9PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHt9LCBSZSA9IFwiMS45LjBcIiwgRHIgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG5mdW5jdGlvbiBvcyhlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2VdKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBlLm1hdGNoKERyKTtcbiAgaWYgKCFuKVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB2YXIgYSA9IHtcbiAgICBtYWpvcjogK25bMV0sXG4gICAgbWlub3I6ICtuWzJdLFxuICAgIHBhdGNoOiArblszXSxcbiAgICBwcmVyZWxlYXNlOiBuWzRdXG4gIH07XG4gIGlmIChhLnByZXJlbGVhc2UgIT0gbnVsbClcbiAgICByZXR1cm4gZnVuY3Rpb24oYykge1xuICAgICAgcmV0dXJuIGMgPT09IGU7XG4gICAgfTtcbiAgZnVuY3Rpb24gaShsKSB7XG4gICAgcmV0dXJuIHIuYWRkKGwpLCBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiBzKGwpIHtcbiAgICByZXR1cm4gdC5hZGQobCksIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAodC5oYXMoYykpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoci5oYXMoYykpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHUgPSBjLm1hdGNoKERyKTtcbiAgICBpZiAoIXUpXG4gICAgICByZXR1cm4gaShjKTtcbiAgICB2YXIgZCA9IHtcbiAgICAgIG1ham9yOiArdVsxXSxcbiAgICAgIG1pbm9yOiArdVsyXSxcbiAgICAgIHBhdGNoOiArdVszXSxcbiAgICAgIHByZXJlbGVhc2U6IHVbNF1cbiAgICB9O1xuICAgIHJldHVybiBkLnByZXJlbGVhc2UgIT0gbnVsbCB8fCBhLm1ham9yICE9PSBkLm1ham9yID8gaShjKSA6IGEubWFqb3IgPT09IDAgPyBhLm1pbm9yID09PSBkLm1pbm9yICYmIGEucGF0Y2ggPD0gZC5wYXRjaCA/IHMoYykgOiBpKGMpIDogYS5taW5vciA8PSBkLm1pbm9yID8gcyhjKSA6IGkoYyk7XG4gIH07XG59XG52YXIgYXMgPSBvcyhSZSksIGlzID0gUmUuc3BsaXQoXCIuXCIpWzBdLCBydCA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIGlzKSwgbnQgPSBucztcbmZ1bmN0aW9uIGxyKGUsIHQsIHIsIG4pIHtcbiAgdmFyIGE7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IGZhbHNlKTtcbiAgdmFyIGkgPSBudFtydF0gPSAoYSA9IG50W3J0XSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHtcbiAgICB2ZXJzaW9uOiBSZVxuICB9O1xuICBpZiAoIW4gJiYgaVtlXSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCBmYWxzZTtcbiAgfVxuICBpZiAoaS52ZXJzaW9uICE9PSBSZSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBpLnZlcnNpb24gKyBcIiBmb3IgXCIgKyBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBSZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCBmYWxzZTtcbiAgfVxuICByZXR1cm4gaVtlXSA9IHQsIHIuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFJlICsgXCIuXCIpLCB0cnVlO1xufVxuZnVuY3Rpb24gb3QoZSkge1xuICB2YXIgdCwgciwgbiA9ICh0ID0gbnRbcnRdKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnZlcnNpb247XG4gIGlmICghKCFuIHx8ICFhcyhuKSkpXG4gICAgcmV0dXJuIChyID0gbnRbcnRdKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByW2VdO1xufVxuZnVuY3Rpb24gdXIoZSwgdCkge1xuICB0LmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBSZSArIFwiLlwiKTtcbiAgdmFyIHIgPSBudFtydF07XG4gIHIgJiYgZGVsZXRlIHJbZV07XG59XG52YXIgc3MgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAobCkge1xuICAgIHMgPSB7IGVycm9yOiBsIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIGNzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgaTsgbiA8IGE7IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIGxzID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHQubmFtZXNwYWNlIHx8IFwiRGlhZ0NvbXBvbmVudExvZ2dlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gSGUoXCJkZWJ1Z1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIEhlKFwiZXJyb3JcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIEhlKFwiaW5mb1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gSGUoXCJ3YXJuXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBIZShcInZlcmJvc2VcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlO1xuICB9KSgpXG4pO1xuZnVuY3Rpb24gSGUoZSwgdCwgcikge1xuICB2YXIgbiA9IG90KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBjcyhbXSwgc3MociksIGZhbHNlKSk7XG59XG52YXIgb2U7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5FUlJPUiA9IDMwXSA9IFwiRVJST1JcIiwgZVtlLldBUk4gPSA1MF0gPSBcIldBUk5cIiwgZVtlLklORk8gPSA2MF0gPSBcIklORk9cIiwgZVtlLkRFQlVHID0gNzBdID0gXCJERUJVR1wiLCBlW2UuVkVSQk9TRSA9IDgwXSA9IFwiVkVSQk9TRVwiLCBlW2UuQUxMID0gOTk5OV0gPSBcIkFMTFwiO1xufSkob2UgfHwgKG9lID0ge30pKTtcbmZ1bmN0aW9uIHVzKGUsIHQpIHtcbiAgZSA8IG9lLk5PTkUgPyBlID0gb2UuTk9ORSA6IGUgPiBvZS5BTEwgJiYgKGUgPSBvZS5BTEwpLCB0ID0gdCB8fCB7fTtcbiAgZnVuY3Rpb24gcihuLCBhKSB7XG4gICAgdmFyIGkgPSB0W25dO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgZSA+PSBhID8gaS5iaW5kKHQpIDogZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiByKFwiZXJyb3JcIiwgb2UuRVJST1IpLFxuICAgIHdhcm46IHIoXCJ3YXJuXCIsIG9lLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIG9lLklORk8pLFxuICAgIGRlYnVnOiByKFwiZGVidWdcIiwgb2UuREVCVUcpLFxuICAgIHZlcmJvc2U6IHIoXCJ2ZXJib3NlXCIsIG9lLlZFUkJPU0UpXG4gIH07XG59XG52YXIgZHMgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAobCkge1xuICAgIHMgPSB7IGVycm9yOiBsIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIHBzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgaTsgbiA8IGE7IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIG1zID0gXCJkaWFnXCIsIGt0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgZnVuY3Rpb24gdChhKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgbCA9IG90KFwiZGlhZ1wiKTtcbiAgICAgICAgICBpZiAobClcbiAgICAgICAgICAgIHJldHVybiBsW2FdLmFwcGx5KGwsIHBzKFtdLCBkcyhpKSwgZmFsc2UpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByID0gdGhpcywgbiA9IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgICAgdmFyIHMsIGwsIGM7XG4gICAgICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSB7IGxvZ0xldmVsOiBvZS5JTkZPIH0pLCBhID09PSByKSB7XG4gICAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiByLmVycm9yKChzID0gdS5zdGFjaykgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHUubWVzc2FnZSksIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVvZiBpID09IFwibnVtYmVyXCIgJiYgKGkgPSB7XG4gICAgICAgICAgbG9nTGV2ZWw6IGlcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkID0gb3QoXCJkaWFnXCIpLCBtID0gdXMoKGwgPSBpLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogb2UuSU5GTywgYSk7XG4gICAgICAgIGlmIChkICYmICFpLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIGYgPSAoYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgZC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgZiksIG0ud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIGYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBscihcImRpYWdcIiwgbSwgciwgdHJ1ZSk7XG4gICAgICB9O1xuICAgICAgci5zZXRMb2dnZXIgPSBuLCByLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdXIobXMsIHIpO1xuICAgICAgfSwgci5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBuZXcgbHMoYSk7XG4gICAgICB9LCByLnZlcmJvc2UgPSB0KFwidmVyYm9zZVwiKSwgci5kZWJ1ZyA9IHQoXCJkZWJ1Z1wiKSwgci5pbmZvID0gdChcImluZm9cIiksIHIud2FybiA9IHQoXCJ3YXJuXCIpLCByLmVycm9yID0gdChcImVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlO1xuICB9KSgpXG4pO1xuZnVuY3Rpb24gZnMoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBfcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgci5fY3VycmVudENvbnRleHQgPSB0ID8gbmV3IE1hcCh0KSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIuZ2V0VmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiByLl9jdXJyZW50Q29udGV4dC5nZXQobik7XG4gICAgICB9LCByLnNldFZhbHVlID0gZnVuY3Rpb24obiwgYSkge1xuICAgICAgICB2YXIgaSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGkuX2N1cnJlbnRDb250ZXh0LnNldChuLCBhKSwgaTtcbiAgICAgIH0sIHIuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBhID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gYS5fY3VycmVudENvbnRleHQuZGVsZXRlKG4pLCBhO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0pKClcbiksIHlzID0gbmV3IF9zKCksIGhzID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBzID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBncyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIGk7IG4gPCBhOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCB3cyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHlzO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhID0gW10sIGkgPSAzOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgICBhW2kgLSAzXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgZ3MoW25dLCBocyhhKSwgZmFsc2UpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KSgpXG4pLCB2cyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgYnMgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBpOyBuIDwgYTsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgSHQgPSBcImNvbnRleHRcIiwgUHMgPSBuZXcgd3MoKSwgZHIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIGxyKEh0LCB0LCBrdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhLCBpID0gW10sIHMgPSAzOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICBpW3MgLSAzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoYSwgYnMoW3QsIHIsIG5dLCB2cyhpKSwgZmFsc2UpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZCh0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBvdChIdCkgfHwgUHM7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCksIHVyKEh0LCBrdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCB0cjtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkodHIgfHwgKHRyID0ge30pKTtcbnZhciBGbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBUbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgRXMgPSB7XG4gIHRyYWNlSWQ6IFRuLFxuICBzcGFuSWQ6IEZuLFxuICB0cmFjZUZsYWdzOiB0ci5OT05FXG59LCBldCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBFcyksIHRoaXMuX3NwYW5Db250ZXh0ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCBwciA9IGZzKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO1xuZnVuY3Rpb24gbXIoZSkge1xuICByZXR1cm4gZS5nZXRWYWx1ZShwcikgfHwgdm9pZCAwO1xufVxuZnVuY3Rpb24gQ3MoKSB7XG4gIHJldHVybiBtcihkci5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmZ1bmN0aW9uIGZyKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0VmFsdWUocHIsIHQpO1xufVxuZnVuY3Rpb24gQXMoZSkge1xuICByZXR1cm4gZS5kZWxldGVWYWx1ZShwcik7XG59XG5mdW5jdGlvbiBTcyhlLCB0KSB7XG4gIHJldHVybiBmcihlLCBuZXcgZXQodCkpO1xufVxuZnVuY3Rpb24gTm4oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gbXIoZSkpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3BhbkNvbnRleHQoKTtcbn1cbnZhciBrcyA9IC9eKFswLTlhLWZdezMyfSkkL2ksIElzID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiBScyhlKSB7XG4gIHJldHVybiBrcy50ZXN0KGUpICYmIGUgIT09IFRuO1xufVxuZnVuY3Rpb24gRnMoZSkge1xuICByZXR1cm4gSXMudGVzdChlKSAmJiBlICE9PSBGbjtcbn1cbmZ1bmN0aW9uIExuKGUpIHtcbiAgcmV0dXJuIFJzKGUudHJhY2VJZCkgJiYgRnMoZS5zcGFuSWQpO1xufVxuZnVuY3Rpb24gVHMoZSkge1xuICByZXR1cm4gbmV3IGV0KGUpO1xufVxudmFyIEt0ID0gZHIuZ2V0SW5zdGFuY2UoKSwgTW4gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBLdC5hY3RpdmUoKSk7XG4gICAgICB2YXIgYSA9ICEhcj8ucm9vdDtcbiAgICAgIGlmIChhKVxuICAgICAgICByZXR1cm4gbmV3IGV0KCk7XG4gICAgICB2YXIgaSA9IG4gJiYgTm4obik7XG4gICAgICByZXR1cm4gTnMoaSkgJiYgTG4oaSkgPyBuZXcgZXQoaSkgOiBuZXcgZXQoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBhKSB7XG4gICAgICB2YXIgaSwgcywgbDtcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gbCA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBsID0gbikgOiAoaSA9IHIsIHMgPSBuLCBsID0gYSk7XG4gICAgICAgIHZhciBjID0gcyA/PyBLdC5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGMpLCBkID0gZnIoYywgdSk7XG4gICAgICAgIHJldHVybiBLdC53aXRoKGQsIGwsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgZTtcbiAgfSkoKVxuKTtcbmZ1bmN0aW9uIE5zKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGUuc3BhbklkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlRmxhZ3MgPT0gXCJudW1iZXJcIjtcbn1cbnZhciBMcyA9IG5ldyBNbigpLCBNcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBhKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IGE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIGEpIHtcbiAgICAgIHZhciBpID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShpLnN0YXJ0QWN0aXZlU3BhbiwgaSwgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IExzO1xuICAgIH0sIGU7XG4gIH0pKClcbiksIHhzID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIG5ldyBNbigpO1xuICAgIH0sIGU7XG4gIH0pKClcbiksIERzID0gbmV3IHhzKCksIFVyID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIGE7XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKHQsIHIsIG4pKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogbmV3IE1zKHRoaXMsIHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAodCA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogRHM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgYTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhLmdldFRyYWNlcih0LCByLCBuKTtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCBhdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5JTlRFUk5BTCA9IDBdID0gXCJJTlRFUk5BTFwiLCBlW2UuU0VSVkVSID0gMV0gPSBcIlNFUlZFUlwiLCBlW2UuQ0xJRU5UID0gMl0gPSBcIkNMSUVOVFwiLCBlW2UuUFJPRFVDRVIgPSAzXSA9IFwiUFJPRFVDRVJcIiwgZVtlLkNPTlNVTUVSID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShhdCB8fCAoYXQgPSB7fSkpO1xudmFyIFBlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLlVOU0VUID0gMF0gPSBcIlVOU0VUXCIsIGVbZS5PSyA9IDFdID0gXCJPS1wiLCBlW2UuRVJST1IgPSAyXSA9IFwiRVJST1JcIjtcbn0pKFBlIHx8IChQZSA9IHt9KSk7XG52YXIgeGUgPSBkci5nZXRJbnN0YW5jZSgpLCBZdCA9IFwidHJhY2VcIiwgVXMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IFVyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gVHMsIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gTG4sIHRoaXMuZGVsZXRlU3BhbiA9IEFzLCB0aGlzLmdldFNwYW4gPSBtciwgdGhpcy5nZXRBY3RpdmVTcGFuID0gQ3MsIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSBObiwgdGhpcy5zZXRTcGFuID0gZnIsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBTcztcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IGxyKFl0LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBrdC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBvdChZdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB1cihZdCwga3QuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgVXIoKTtcbiAgICB9LCBlO1xuICB9KSgpXG4pLCBqZSA9IFVzLmdldEluc3RhbmNlKCk7XG5jb25zdCBPcyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBhID0geGUuYWN0aXZlKCksIGkgPSBuLnN0YXJ0U3BhbihcbiAgICBgY2RlLiR7dC50eXBlfWAsXG4gICAge1xuICAgICAga2luZDogYXQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIC4uLmUudHJhY2luZ0NvbnRleHQgJiYge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUudHJhY2luZ0NvbnRleHQuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC52ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUudHJhY2luZ0NvbnRleHQuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnRyYWNpbmdDb250ZXh0LnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UudHlwZVwiOiB0LnR5cGUsXG4gICAgICAgIFwiY2RlLm1lc3NhZ2UucGF5bG9hZFwiOiBKU09OLnN0cmluZ2lmeSh0LnBheWxvYWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBhXG4gICk7XG4gIHJldHVybiB4ZS53aXRoKGplLnNldFNwYW4oYSwgaSksIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IHIoKTtcbiAgICAgIHJldHVybiBpLnNldFN0YXR1cyh7IGNvZGU6IFBlLk9LIH0pLCBzO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIHRocm93IGkuc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogUGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IHMgaW5zdGFuY2VvZiBFcnJvciA/IHMubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiXG4gICAgICB9KSwgcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaS5lbmQoKTtcbiAgICB9XG4gIH0pO1xufSwgZnQgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgbiA9IHhlLmFjdGl2ZSgpLCBhID0gci5zdGFydFNwYW4oXG4gICAgYGZvcm0uJHtlLnNwYW5OYW1lfWAsXG4gICAge1xuICAgICAga2luZDogYXQuQ0xJRU5ULFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS5kZXZpY2VUb2tlbixcbiAgICAgICAgXCJvanMuZm9ybUlkXCI6IGUuZm9ybUlkLFxuICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudmVyc2lvbixcbiAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUucmVsZWFzZVZlcnNpb24sXG4gICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IGUuYmFzZVVybCxcbiAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS5yZWZlcnJlcixcbiAgICAgICAgLi4uZS5wYXltZW50Um91dGVJZCAmJiB7IFwicGF5bWVudC5yb3V0ZV9pZFwiOiBlLnBheW1lbnRSb3V0ZUlkIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG5cbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBpID0gYXdhaXQgdCgpO1xuICAgIHJldHVybiBhLnNldFN0YXR1cyh7IGNvZGU6IFBlLk9LIH0pLCBpO1xuICB9IGNhdGNoIChpKSB7XG4gICAgY29uc3QgcyA9IGkgaW5zdGFuY2VvZiBFcnJvciA/IGkubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IGEuc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFBlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogc1xuICAgIH0pLCBpO1xuICB9IGZpbmFsbHkge1xuICAgIGEuZW5kKCk7XG4gIH1cbn07XG5jbGFzcyB4biBleHRlbmRzIExvIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIGNvbnN0IHIgPSBgJHt0Lm1lc3NhZ2V9YDtcbiAgICBzdXBlcihyKSwgdGhpcy5yZXNwb25zZSA9IHQ7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEogPSBhc3luYyAoZSwgdCwgciwgbikgPT4gT3MoZSwgdCwgYXN5bmMgKCkgPT4ge1xuICBuICYmIHYobiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IGEgPSBhd2FpdCBlLnNlbmQodCk7XG4gIGlmICgkcyhhKSkge1xuICAgIGNvbnN0IGkgPSBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgICB0aHJvdyB2KFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgIGVycm9yX21lc3NhZ2U6IGEubWVzc2FnZSxcbiAgICAgIG1lc3NhZ2VfdHlwZTogdC50eXBlLFxuICAgICAgdXNlcl9hZ2VudDogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgIG9ubGluZTogbmF2aWdhdG9yLm9uTGluZSxcbiAgICAgIGhhc19mb2N1czogZG9jdW1lbnQuaGFzRm9jdXMoKSxcbiAgICAgIGhyZWY6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgZG9jdW1lbnRfdmlzaWJpbGl0eV9zdGF0ZTogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLFxuICAgICAgY29ubmVjdGlvbl9kb3dubGluazogaT8uZG93bmxpbmssXG4gICAgICBjb25uZWN0aW9uX2VmZmVjdGl2ZV90eXBlOiBpPy5lZmZlY3RpdmVUeXBlLFxuICAgICAgY29ubmVjdGlvbl9ydHQ6IGk/LnJ0dCxcbiAgICAgIGNvbm5lY3Rpb25fc2F2ZV9kYXRhOiBpPy5zYXZlRGF0YVxuICAgIH0pLCBuZXcgeG4oYSk7XG4gIH1cbiAgaWYgKCFqcyhhLCByKSkge1xuICAgIGNvbnN0IGkgPSByLnNhZmVQYXJzZShhKTtcbiAgICB0aHJvdyBpLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHIsIFwiQWN0dWFsOlwiLCBhKSwgaS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG4gJiYgdihuLCB7XG4gICAgLi4uYVxuICB9KSwgYTtcbn0pLCBqcyA9IChlLCB0KSA9PiB0LnNhZmVQYXJzZShlKS5zdWNjZXNzLCAkcyA9IChlKSA9PiB5YS5zYWZlUGFyc2UoZSkuc3VjY2VzcywgR3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihlLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogdCB9LCBmbiksIE4gPSBhc3luYyAoZSkgPT4gYXdhaXQgSihlLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgX24pLCBaID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEooXG4gIGUsXG4gIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBnbixcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuKSwgRG4gPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihcbiAgZSxcbiAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogdCB9LFxuICBGYSxcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiksIHFzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgdihcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IHIgPSBhd2FpdCBKKGUsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IHQgfSwgZ24pO1xuICByZXR1cm4gdihcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi5yXG4gIH0pLCByO1xufSwgeCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBzYSxcbiAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4pLCBWcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LFxuICB5bixcbiAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4pLCB6cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IHQgfSxcbiAgaWEsXG4gIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiksIEJzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IEdzKGUsIHtcbiAgICBzZWN1cmVfdG9rZW46IHQsXG4gICAgcHJvbW90aW9uX2NvZGU6IHJcbiAgfSksIGEgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGwpID0+IGwuY3VycmVuY3kpKTtcbiAgaWYgKGEuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHthLnNpemV9YCk7XG4gIGNvbnN0IGkgPSBhLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBzID0gemEobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgobCkgPT4gbC5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogaSxcbiAgICBhbW91bnRBdG9tOiBzXG4gIH07XG59LCBRID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBCcyhlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIFVuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBKKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgbmEpXG4gICAgKVxuICApO1xufSwgT3IgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICB0dCxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIEhzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEooZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgeW4sIFwic2V0dXBfY2hlY2tvdXRcIiksIF9yID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEooZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgdHQsIFwicGVyZm9ybV9jaGVja291dFwiKSwgT24gPSAxZTMsIEtzID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IGkgPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IE9uLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBzID0gYXdhaXQgSihpLCB7IHR5cGU6IHIgfSwgbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgVXQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgSihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgTmEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgam4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgSihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBUYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBhZShyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCBZcyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBKKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgTGFcbiksIFdzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksIGZhbHNlO1xuICB9XG59LCBKcyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgJG4gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIEduID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBJdCA9IDMyLCBacyA9IDE2LCBxbiA9IDEwLCBqciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBGZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKEZlIHx8IChGZSA9IHt9KSk7XG5jbGFzcyBXZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBRcyhlKSB7XG4gIGNvbnN0IHQgPSBNYXRoLmZsb29yKGUoKSAqIEl0KSAlIEl0O1xuICByZXR1cm4gR24uY2hhckF0KHQpO1xufVxuZnVuY3Rpb24gWHMoZSkge1xuICBjb25zdCB0ID0gZWMoKSwgciA9IHQgJiYgKHQuY3J5cHRvIHx8IHQubXNDcnlwdG8pIHx8IG51bGw7XG4gIGlmICh0eXBlb2Ygcj8uZ2V0UmFuZG9tVmFsdWVzID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2Ygcj8ucmFuZG9tQnl0ZXMgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgV2UoRmUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZWMoKSB7XG4gIHJldHVybiBuYygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHRjKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gUXModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIHJjKGUsIHQgPSBxbikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IFdlKEZlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IGpyKVxuICAgIHRocm93IG5ldyBXZShGZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtqcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBXZShGZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09IGZhbHNlKVxuICAgIHRocm93IG5ldyBXZShGZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IGEgPSB0OyBhID4gMDsgYS0tKVxuICAgIHIgPSBlICUgSXQsIG4gPSBHbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIEl0O1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIG5jKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gb2MoZSwgdCkge1xuICBjb25zdCByID0gWHMoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiByYyhuLCBxbikgKyB0Yyhacywgcik7XG59XG5jb25zdCBWbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCB6biA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhWbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBvYygpO1xuICByZXR1cm4gYWModCksIHQ7XG59LCBhYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7Vm59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgaWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IG9uLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbYV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W2FdID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgaiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICBpZiAoIXMpIHJldHVybiBhO1xuICBjb25zdCBsID0gaS50eXBlID09PSBcImNoZWNrYm94XCIgPyBpLmNoZWNrZWQgOiBpLnZhbHVlO1xuICByZXR1cm4geyAuLi5hLCBbc106IGwgfTtcbn0sIHt9KSwgc2MgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBlYS5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59LCBCbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgQ2UgPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbcC5MSU5FMV0sXG4gIGxpbmUyOiBlW3AuTElORTJdLFxuICBsaW5lMzogZVtwLkxJTkUzXSxcbiAgY2l0eTogZVtwLkNJVFldLFxuICBzdGF0ZTogZVtwLlNUQVRFXSxcbiAgY291bnRyeTogZVtwLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtwLlpJUF9DT0RFXVxufSksIE90ID0gKGUsIHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmUxOiBlW3AuU0hJUFBJTkdfTElORTFdLFxuICAgICAgbGluZTI6IGVbcC5TSElQUElOR19MSU5FMl0sXG4gICAgICBsaW5lMzogZVtwLlNISVBQSU5HX0xJTkUzXSxcbiAgICAgIGNpdHk6IGVbcC5TSElQUElOR19DSVRZXSxcbiAgICAgIHN0YXRlOiBlW3AuU0hJUFBJTkdfU1RBVEVdLFxuICAgICAgY291bnRyeTogZVtwLlNISVBQSU5HX0NPVU5UUlldLFxuICAgICAgemlwX2NvZGU6IGVbcC5TSElQUElOR19aSVBfQ09ERV1cbiAgICB9O1xufSwganQgPSAoZSwgdCkgPT4gW2UsIHRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSwgY2MgPSAoeyB3aWR0aDogZSwgaGVpZ2h0OiB0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG59XG4uZnJhbWUsICNhZHllbi1jb250YWluZXIsICNhZHllbi1jb250YWluZXIgPiAqIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gLCBsYyA9ICh7IHdpZHRoOiBlLCBoZWlnaHQ6IHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7ZSA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke3QgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZS1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstc2VsZWN0b3ItY29udGVudCB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoJHt0ID8/IFwiNjAwcHhcIn0gLSA0OHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5iYW5rLXNlbGVjdG9yLWhlYWRlciB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5iYW5rLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG4uYmFuay1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYm9yZGVyOiAycHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4uYmFuay1pdGVtOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstaXRlbTphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG4uYmFuay1sb2dvIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XG59XG4uYmFuay1sb2dvLXBsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBjb2xvcjogIzZjNzU3ZDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5iYW5rLWluZm8ge1xuICBmbGV4OiAxO1xufVxuLmJhbmstZGlzcGxheS1uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzFhMWExYTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuLmJhbmstbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNmM3NTdkO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmAsICR0ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyBpZDogciwgdGl0bGU6IG4sIHdpZHRoOiBhLCBoZWlnaHQ6IGksIG5hbWU6IHMgfSA9IHQgPz8ge30sIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIGwuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7Y2MoeyB3aWR0aDogYSwgaGVpZ2h0OiBpIH0pfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwiJHtyID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCIgdGl0bGU9XCIke24gPz8gXCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCJ9XCIgYWxsb3c9XCJwYXltZW50XCIgbmFtZT1cIiR7cyA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB1ID0gYy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgdS5hcHBlbmRDaGlsZChsLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgZCA9IHUucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIG0gPSB1LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksIHsgaG9zdDogYywgaWZyYW1lOiBkLCBjYW5jZWxCdXR0b246IG0gfTtcbn0sIEhuID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCB0aXRsZTogYSB9ID0gdCA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChpLCBzKSA9PiB7XG4gICAgY29uc3QgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKSwgYyA9IGUubWFwKChfLCBnKSA9PiB7XG4gICAgICBjb25zdCB3ID0gXy5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke18ucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7Xy5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7Xy5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2d9XCI+XG4gICAgICAgICAgJHt3fVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7Xy5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHtfLmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgbC5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7bGMoeyB3aWR0aDogciwgaGVpZ2h0OiBuIH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7YSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtjfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCB1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgZCA9IHUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgZC5hcHBlbmRDaGlsZChsLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBtID0gZC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIiksIGYgPSBkLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFuay1pdGVtXCIpLCB5ID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh1KTtcbiAgICB9O1xuICAgIG0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHkoKSwgcyhuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIikpO1xuICAgIH0pLCBmLmZvckVhY2goKF8sIGcpID0+IHtcbiAgICAgIF8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgeSgpLCBpKGVbZ10pO1xuICAgICAgfSk7XG4gICAgfSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodSk7XG4gIH0pO1xufSwgR3QgPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IHdpZHRoOiByLCBoZWlnaHQ6IG4sIGJhc2VVcmw6IGEgfSA9IHQgPz8ge30sIGkgPSBuZXcgVVJMKGBhcHAvZGlyZWN0X2RlYml0L21pY3JvX2RlcG9zaXQvP3R5cGU9JHtlfWAsIGEpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocywgbCkgPT4ge1xuICAgIGNvbnN0IGMgPSAkdChpLCB7IHdpZHRoOiByLCBoZWlnaHQ6IG4sIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pLCB1ID0gKCkgPT4ge1xuICAgICAgYy5ob3N0LnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoKSA9PiB7XG4gICAgICB1KCksIGwobmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSk7XG4gICAgfSwgbSA9ICh3KSA9PiB7XG4gICAgICB1KCksIHcuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiB3LnBheWxvYWQgPyBcImVycm9yXCIgaW4gdy5wYXlsb2FkID8gbChuZXcgRXJyb3Iody5wYXlsb2FkLmVycm9yKSkgOiBzKHcucGF5bG9hZCkgOiBsKG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBmYWlsZWRcIikpO1xuICAgIH07XG4gICAgYy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpO1xuICAgIGNvbnN0IGYgPSB5cihcbiAgICAgIGMuaWZyYW1lLFxuICAgICAgbSxcbiAgICAgIG5ldyBVUkwoYSkub3JpZ2luLFxuICAgICAgXCJtaWNyby1kZXBvc2l0LXN0YXR1c1wiLFxuICAgICAgX2FcbiAgICApLCB5ID0gKCkgPT4ge1xuICAgICAgYy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCBjbGVhckludGVydmFsKGYpO1xuICAgIH0sIF8gPSBkLCBnID0gKCkgPT4ge1xuICAgICAgeSgpLCBfKCk7XG4gICAgfTtcbiAgICBjLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZCksIGMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBnKTtcbiAgfSk7XG59O1xuZnVuY3Rpb24geXIoZSwgdCwgciwgbiwgYSkge1xuICBjb25zdCBpID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsID0gYXdhaXQgS3MoZSwgciwgbiwgYSk7XG4gICAgICBsICYmIChjbGVhckludGVydmFsKHMpLCB0KGwpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIGkoKTtcbiAgY29uc3QgcyA9IHNldEludGVydmFsKGksIE9uKTtcbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBLbih7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gbGUoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciwgZnJhbWVXaWR0aDogbiwgZnJhbWVIZWlnaHQ6IGEsIGZyYW1lVGl0bGU6IGkgfSA9IGUsIHMgPSAkdCh0LCB7IHdpZHRoOiBuLCBoZWlnaHQ6IGEsIHRpdGxlOiBpIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCBjID0gKG0pID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBsKG0pLCBkPy4oKTtcbiAgICB9LCB1ID0geXIoXG4gICAgICBzLmlmcmFtZSxcbiAgICAgIGMsXG4gICAgICBuZXcgVVJMKHIpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBsblxuICAgICksIGQgPSBLbih7XG4gICAgICBlbGVtZW50czogcyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogdSxcbiAgICAgIHJlc29sdmU6IGxcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBZbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBsZShlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRi5TVUNDRVNTICYmIGN0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgdWMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBXbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IGsoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGwgPSB1YyhlLCBuKSwgYyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCB6cyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGMpLCBsLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGwuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKGFlKHUpKSwgY2xlYXJJbnRlcnZhbChjKSwgcyhhZSh1KSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59LCBpZSA9ICgpID0+IHtcbiAgbGV0IHQgPSAobmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXSk/LlswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBkYywgZXJyX186IHBjIH0gPSBrKFwiY29tbW9uLWNjXCIpLCBtYyA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGU6IGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3M6IHQsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzOiByLFxuICBwYXltZW50X21ldGhvZDogbixcbiAgaXNCdXNpbmVzc1B1cmNoYXNlOiBhXG59LCBpKSA9PiB7XG4gIGNvbnN0IHMgPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKHNbcC5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgc1twLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSkpLCBlICYmIChzW3AuWklQX0NPREVdID0gVCksIHQgJiYgKHNbcC5MSU5FMV0gPSBULCBzW3AuQ0lUWV0gPSBULCBzW3AuU1RBVEVdID0gVCwgc1twLkNPVU5UUlldID0gVCwgc1twLlpJUF9DT0RFXSA9IFQpLCByICYmIChzW3AuU0hJUFBJTkdfTElORTFdID0gVCwgc1twLlNISVBQSU5HX0NJVFldID0gVCwgc1twLlNISVBQSU5HX1NUQVRFXSA9IFQsIHNbcC5TSElQUElOR19DT1VOVFJZXSA9IFQsIHNbcC5TSElQUElOR19aSVBfQ09ERV0gPSBUKSwgKGlbcC5JU19CVVNJTkVTU19QVVJDSEFTRV0gPz8gYSkgJiYgKHNbcC5CVVNJTkVTU19OQU1FXSA9IFQpLCBPYmplY3Qua2V5cyhzKS5sZW5ndGggPT09IDAgPyBVZSA6IFVlLmV4dGVuZChzKTtcbn0sIGZjID0gKGUsIHQsIHIgPSB7fSkgPT4ge1xuICBpZiAocikge1xuICAgIGRjKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICBjb25zdCBpID0gT2JqZWN0LmtleXMocik7XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBpLmxlbmd0aDsgcysrKSB7XG4gICAgICBjb25zdCBsID0gaVtzXSwgYyA9IHJbbF07XG4gICAgICBlW2xdIHx8IChlW2xdID0gYyk7XG4gICAgfVxuICB9XG4gIGVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSwgZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gJiYgKGVbcC5TSElQUElOR19MSU5FMV0gPSBlW3AuTElORTFdLCBlW3AuU0hJUFBJTkdfTElORTJdID0gZVtwLkxJTkUyXSwgZVtwLlNISVBQSU5HX0xJTkUzXSA9IGVbcC5MSU5FM10sIGVbcC5TSElQUElOR19DSVRZXSA9IGVbcC5DSVRZXSwgZVtwLlNISVBQSU5HX1NUQVRFXSA9IGVbcC5TVEFURV0sIGVbcC5TSElQUElOR19DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSwgZVtwLlNISVBQSU5HX1pJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0pO1xuICBjb25zdCBhID0gbWMociwgZSkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIWEuc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBhLmVycm9yLmZvcm1hdCgpLCBzID0gaWMoaSksIGwgPSBPYmplY3Qua2V5cyhzKTtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGwubGVuZ3RoOyBjKyspIHtcbiAgICAgIGNvbnN0IHUgPSBsW2NdLCBkID0gc1t1XTtcbiAgICAgIHQodSwgZCwgdSk7XG4gICAgfVxuICAgIHRocm93IHBjKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkFsbW9zdCB0aGVyZSEgSnVzdCBhIGZldyB0aGluZ3MgaGlnaGxpZ2h0ZWQgYWJvdmUgdG8gZml4IGJlZm9yZSB5b3UgY2FuIHN1Ym1pdC5cIik7XG4gIH1cbiAgcmV0dXJuIGEuZGF0YTtcbn0sIHsgbG9nX186IF9jLCBlcnJfXzogeWMgfSA9IGsoXCJjb21tb24tY2NcIiksIEcgPSBmYywgSm4gPSAoZSwgdCkgPT4ge1xuICBmb3IgKGNvbnN0IHIgb2YgZSlcbiAgICBpZiAoci5zdWNjZXNzID09PSBmYWxzZSlcbiAgICAgIHRocm93IHIuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IGNuLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgeWMoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gYS5kYXRhO1xuICAgICAgICAgIHQoaSwgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgX2MoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHIuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgZXJyX186IFpuIH0gPSBrKFwiY29tbW9uXCIpLCBsdCA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIE8gPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maW5kKChuKSA9PiB0LnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IFpuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHQucGFyc2Uocik7XG59LCBxID0gKGUsIHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZS5sYXN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGUuZmlyc3ROYW1lLFxuICBjdXN0b21lcl9idXNpbmVzc19uYW1lOiBlLmJ1c2luZXNzTmFtZSxcbiAgY3VzdG9tZXJfdGF4X2lkOiBlLnRheElkLFxuICBjdXN0b21lcl90YXhfaWRfdHlwZTogZS50YXhJZFR5cGUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDZShlKSxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IE90KGUsIHQpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxufSksIHJlID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogdCB9ID0gayhlLmxvZ1ByZWZpeCksIHIgPSBhd2FpdCBOKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSBsdChlLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAoci5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHQoXCJTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uXCIpLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhd2FpdCBWcyhlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBtX2lkOiBuLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSkgfTtcbiAge1xuICAgIGlmIChlLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgaWYgKHQoXCJVc2luZyBwYXktZmlyc3QgZmxvdy4uLlwiKSwgIWUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgWm4oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBlLmNvbmZpcm1SZXN1bHQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBDZShlLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBPdChlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHQoXCJEb2luZyBjaGVja291dC4uLlwiLCBhKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgX3IoZS5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCBVID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5VLkVudW0uc3RyaXBlO1xuY29uc3QgUW4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgaSkgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gdHJ1ZTtcbiAgICBjb25zdCBsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgcigpID8gYSgpIDogbCA/IHMgPSBsIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgYSgpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGkoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59LCBWZSA9ICh7XG4gIGdhdGV3YXk6IGUsXG4gIGdhdGV3YXlNZXJjaGFudElkOiB0LFxuICBtZXJjaGFudE5hbWU6IHIsXG4gIG1lcmNoYW50SWQ6IG4sXG4gIGluaXRpYWxQcmV2aWV3OiBhLFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpLFxuICBwcmVmaWxsOiBzXG59KSA9PiB7XG4gIGNvbnN0IGwgPSBpPy5hbW91bnQ/LmFtb3VudEF0b20gPz8gYT8uYW1vdW50QXRvbSA/PyAwLCBjID0gTWF0aC5tYXgobCAvIDEwMCwgMCksIHUgPSAoaT8uYW1vdW50Py5jdXJyZW5jeSA/PyBzPy5jdXJyZW5jeSA/PyBhLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBkID0ge1xuICAgIGFwaVZlcnNpb246IDIsXG4gICAgYXBpVmVyc2lvbk1pbm9yOiAwLFxuICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNBUkRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRBdXRoTWV0aG9kczogW1wiUEFOX09OTFlcIiwgXCJDUllQVE9HUkFNXzNEU1wiXSxcbiAgICAgICAgICBhbGxvd2VkQ2FyZE5ldHdvcmtzOiBbXCJBTUVYXCIsIFwiRElTQ09WRVJcIiwgXCJJTlRFUkFDXCIsIFwiSkNCXCIsIFwiTUFTVEVSQ0FSRFwiLCBcIlZJU0FcIl0sXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NSZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6IHRydWUsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW5pemF0aW9uU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHR5cGU6IFwiUEFZTUVOVF9HQVRFV0FZXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZ2F0ZXdheTogZSxcbiAgICAgICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiB0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBlbWFpbFJlcXVpcmVkOiB0cnVlLFxuICAgIHNoaXBwaW5nQWRkcmVzc1JlcXVpcmVkOiBzLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGk/LnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogYy50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gaT8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2YgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLmkuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIGhyID0gKCkgPT4gUW4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxufSk7XG5sZXQgV3QgPSBudWxsO1xuY29uc3QgZ3IgPSBhc3luYyAoZSkgPT4gYXdhaXQgU24oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgemUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgZ3IoZSk7XG4gIHJldHVybiBXdCA9PT0gbnVsbCAmJiAoV3QgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBXdDtcbn0sIEJlID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/IHVuLnBhcnNlKHQpIDogbnVsbDtcbn0sIHdyID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gdC5wYXltZW50TWV0aG9kRGF0YT8uaW5mbz8uYmlsbGluZ0FkZHJlc3MsIGEgPSB0LnNoaXBwaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbaSwgLi4uc10gPSBuLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXSwgbCA9IHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IHQuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuTElORTFdID0gcltwLkxJTkUxXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIHJbcC5MSU5FMl0gPSByW3AuTElORTJdIHx8IG4uYWRkcmVzczIgfHwgXCJcIiwgcltwLkxJTkUzXSA9IHJbcC5MSU5FM10gfHwgbi5hZGRyZXNzMyB8fCBcIlwiLCByW3AuQ0lUWV0gPSByW3AuQ0lUWV0gfHwgbi5sb2NhbGl0eSB8fCBcIlwiLCByW3AuU1RBVEVdID0gcltwLlNUQVRFXSB8fCBuLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIHJbcC5aSVBfQ09ERV0gPSByW3AuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgYyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBpIHx8IFwiXCIsIHUgPSByW3AuTEFTVF9OQU1FXSB8fCBsIHx8IFwiXCI7XG4gICAgYyB8fCB1ID8gKHJbcC5GSVJTVF9OQU1FXSA9IGMsIHJbcC5MQVNUX05BTUVdID0gdSkgOiAocltwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBhICYmIChyW3AuU0hJUFBJTkdfTElORTFdID0gcltwLlNISVBQSU5HX0xJTkUxXSB8fCBhLmFkZHJlc3MxIHx8IFwiXCIsIHJbcC5TSElQUElOR19MSU5FMl0gPSByW3AuU0hJUFBJTkdfTElORTJdIHx8IGEuYWRkcmVzczIgfHwgXCJcIiwgcltwLlNISVBQSU5HX0xJTkUzXSA9IHJbcC5TSElQUElOR19MSU5FM10gfHwgYS5hZGRyZXNzMyB8fCBcIlwiLCByW3AuU0hJUFBJTkdfQ0lUWV0gPSByW3AuU0hJUFBJTkdfQ0lUWV0gfHwgYS5sb2NhbGl0eSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfWklQX0NPREVdID0gcltwLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBhLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCByW3AuU0hJUFBJTkdfU1RBVEVdID0gcltwLlNISVBQSU5HX1NUQVRFXSB8fCBhLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSByW3AuU0hJUFBJTkdfQ09VTlRSWV0gfHwgYS5jb3VudHJ5Q29kZSB8fCBcIlVTXCIpLCByO1xufSwgeyBsb2dfXzogdmUsIGVycl9fOiBoYyB9ID0gayhcImF3eC1iYWNzXCIpLCBnYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgaSA9IEcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTihzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IHUgPSBudWxsO1xuICAgIGlmIChjID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgdmUoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdSA9IGF3YWl0IEd0KFwiYmFjc19kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjM1MHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pLCB2ZShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgdmUoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkID0gYXdhaXQgWihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAuLi5xKGksIGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KSwgbSA9IEJlKGQpLCBmID0gbT8uY29uc2VudF9pZCwgeSA9IG0/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgXztcbiAgICBpZiAoYyA9PT0gXCJ0cnVlbGF5ZXJcIiAmJiB5ICYmIHkubGVuZ3RoID49IDEpIHtcbiAgICAgIHZlKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBfID0gYXdhaXQgSG4oeSwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KSwgdmUoYEJhbmsgc2VsZWN0ZWQ6ICR7Xy5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgdmUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZyA9IENlKGkpLCB3ID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogXz8uYmFua19uYW1lLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgb3duZXJfbmFtZToganQoaVtwLkZJUlNUX05BTUVdLCBpW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBpW3AuRU1BSUxdLFxuICAgICAgICBjb3VudHJ5X2NvZGU6IGlbcC5DT1VOVFJZXSxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IHU/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICBzb3J0X2NvZGU6IHU/LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5nLCB0b3duOiBnLmNpdHksIHBvc3Rjb2RlOiBnLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9LCBiID0gKGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogd1xuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoQykgPT4gQy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoYikge1xuICAgICAgdmUoXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEMgfSA9IGF3YWl0IGxlKHtcbiAgICAgICAgdXJsOiBiLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJCQUNTIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmICh2ZShg4pWwIEJBQ1MgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke0N9XWApLCBDID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKEMgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQkFDUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBTID0gYXdhaXQgeChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1iYWNzXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBpLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBTLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChDKSB7XG4gICAgICB0aHJvdyBoYyhcIkJBQ1MgcGF5bWVudCBlcnJvclwiLCBDKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoQz8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBLZSwgZXJyX186IHdjIH0gPSBrKFwiYXd4LWVmdFwiKSwgdmMgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGkgPSBHKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCI7XG4gICAgbGV0IHUgPSBudWxsO1xuICAgIGlmIChjID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgS2UoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdSA9IGF3YWl0IEd0KFwiZWZ0X2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNDUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSksIEtlKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBLZShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGQgPSBhd2FpdCBaKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIC4uLnEoaSwgbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxuICAgIH0pLCBmID0gQmUoZCk/LmNvbnNlbnRfaWQsIHkgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZToganQoaVtwLkZJUlNUX05BTUVdLCBpW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBpW3AuRU1BSUxdLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgaW5zdGl0dXRpb25fbnVtYmVyOiB1Py5pbnN0aXR1dGlvbl9udW1iZXIsXG4gICAgICAgIHRyYW5zaXRfbnVtYmVyOiB1Py50cmFuc2l0X251bWJlcixcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IHU/LmFjY291bnRfbnVtYmVyXG4gICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIH1cbiAgICB9LCBnID0gKGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogeVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoaCkgPT4gaC50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoZykge1xuICAgICAgS2UoXCJFRlQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogaCB9ID0gYXdhaXQgbGUoe1xuICAgICAgICB1cmw6IGcsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoS2UoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2h9XWApLCBoID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAoaCA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgdyA9IGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBpLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB3LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICB0aHJvdyB3YyhcIkVGVCBwYXltZW50IGVycm9yXCIsIGgpLCB2KFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIG5ldyBFcnJvcihoPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGJlLCBlcnJfXzogYmMgfSA9IGsoXCJhd3gtc2VwYVwiKSwgUGMgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGkgPSBHKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCB1ID0gbnVsbDtcbiAgICBpZiAoYyA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIGJlKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUgPSBhd2FpdCBHdChcInNlcGFfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIzMDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KSwgYmUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGJlKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZCA9IGF3YWl0IFoocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgLi4ucShpLCBsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgfSksIG0gPSBCZShkKSwgZiA9IG0/LmNvbnNlbnRfaWQsIHkgPSBtPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IF87XG4gICAgaWYgKGMgPT09IFwidHJ1ZWxheWVyXCIgJiYgeSAmJiB5Lmxlbmd0aCA+PSAxKSB7XG4gICAgICBiZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgXyA9IGF3YWl0IEhuKHksIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIGJlKGBCYW5rIHNlbGVjdGVkOiAke18uZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IGJlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHcgPSAoYXdhaXQgeChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGYsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IGMsXG4gICAgICAgIGRpcmVjdF9kZWJpdF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJzZXBhX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIHNlcGFfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvLyB0cnVlbGF5ZXJcbiAgICAgICAgICAgIGJhbmtfbmFtZTogXz8uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBpW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGp0KGlbcC5GSVJTVF9OQU1FXSwgaVtwLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IGlbcC5FTUFJTF0sXG4gICAgICAgICAgICBpYmFuOiB1Py5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChiKSA9PiBiLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmICh3KSB7XG4gICAgICBiZShcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogYiB9ID0gYXdhaXQgbGUoe1xuICAgICAgICB1cmw6IHcsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIlNFUEEgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKGJlKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7Yn1dYCksIGIgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAoYiA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IGggPSBhd2FpdCB4KHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZlxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LXNlcGFcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGksXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGgsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgIHRocm93IGJjKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIGIpLCB2KFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcihiPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEVjLCBlcnJfXzogdnIgfSA9IGsoXCJhaXJ3YWxsZXgtY2NcIiksIENjID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgQWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gQ2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyB2cihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBYbiA9IChlKSA9PiBlPy5bXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSAhPT0gdm9pZCAwLCBTYyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gRWMoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IHZyKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7YWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgZW8gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gQWModCksIG4gPSBhd2FpdCBZbih7IHVybDogcltcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pLCBhID0gU2Mobi5ocmVmID8/IFwiXCIpLCBpID0gcltcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGkgIT09IGEpIHtcbiAgICBjb25zdCBsID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBjID0gYEludGVudCBJRCBmcm9tIGNhbGxiYWNrICgke2F9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aX0pLmA7XG4gICAgdGhyb3cgdnIoYyksIG5ldyBFcnJvcihsKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICBpbml0aWFsX2ludGVudF9pZDogYSxcbiAgICAgIGNvbnNlbnRfaWQ6IHJbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbn0sIHRvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBybyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgYnIgPSAoKSA9PiBRbih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICBzcmM6IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4gISF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uXG59KSwgUHIgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gdC50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0LCBuID0gdC5iaWxsaW5nQ29udGFjdCwgYSA9IHQuc2hpcHBpbmdDb250YWN0LCBpID0geyAuLi5lIH07XG4gIGlmIChyIHx8IG4gfHwgYSkge1xuICAgIGlbcC5FTUFJTF0gPSBpW3AuRU1BSUxdIHx8IHI/LmVtYWlsQWRkcmVzcyB8fCBuPy5lbWFpbEFkZHJlc3MgfHwgYT8uZW1haWxBZGRyZXNzIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIGlbcC5DT1VOVFJZXSA9IGlbcC5DT1VOVFJZXSB8fCByPy5jb3VudHJ5Q29kZSB8fCBuPy5jb3VudHJ5Q29kZSB8fCBhPy5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIGlbcC5aSVBfQ09ERV0gPSBpW3AuWklQX0NPREVdIHx8IHI/LnBvc3RhbENvZGUgfHwgbj8ucG9zdGFsQ29kZSB8fCBhPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBzID0gaVtwLkZJUlNUX05BTUVdIHx8IHI/LmdpdmVuTmFtZSB8fCBuPy5naXZlbk5hbWUgfHwgYT8uZ2l2ZW5OYW1lIHx8IFwiXCIsIGwgPSBpW3AuTEFTVF9OQU1FXSB8fCByPy5mYW1pbHlOYW1lIHx8IG4/LmZhbWlseU5hbWUgfHwgYT8uZmFtaWx5TmFtZSB8fCBcIlwiO1xuICAgIHMgfHwgbCA/IChpW3AuRklSU1RfTkFNRV0gPSBzLCBpW3AuTEFTVF9OQU1FXSA9IGwpIDogKGlbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgaVtwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gaTtcbn07XG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuY29uc3Qga2MgPSAoe1xuICB0b3RhbDogZSxcbiAgcHJlZmlsbDogdFxufSkgPT4ge1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgJG4pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gdC5saW5lX2l0ZW1zPy5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IHI/LmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogcj8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogcj8uYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IHI/LmJpbGxpbmdfaW50ZXJ2YWxfY291bnQgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIHF0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBhID0gKGU/LmFtb3VudD8uY3VycmVuY3kgPz8gcj8uY3VycmVuY3kgPz8gdC5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcyA9ICgoZT8uYW1vdW50Py5hbW91bnRBdG9tID8/IHQ/LmFtb3VudEF0b20gPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogZT8ubGFiZWwgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlPy5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCBFciA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IGEsIHRvdGFsOiBpIH0gPSBxdCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1xuICAgICAgXCJlbWFpbFwiLFxuICAgICAgLi4uci5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyA/IFtcInBvc3RhbEFkZHJlc3NcIl0gOiBbXVxuICAgIF0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCIsIFwiamNiXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXCJzdXBwb3J0czNEU1wiLCBcInN1cHBvcnRzQ3JlZGl0XCIsIFwic3VwcG9ydHNEZWJpdFwiXSxcbiAgICB0b3RhbDogaVxuICB9O1xuICByZXR1cm4gci5saW5lX2l0ZW1zLmV2ZXJ5KChjKSA9PiBjLmJpbGxpbmdfaW50ZXJ2YWwgJiYgYy5iaWxsaW5nX2ludGVydmFsX2NvdW50KSAmJiAocy5yZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9IGtjKHtcbiAgICB0b3RhbDogaSxcbiAgICBwcmVmaWxsOiByXG4gIH0pKSwgZT8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBJYyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgUmMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogJGUsIGVycl9fOiBpdCB9ID0gayhcImFkeWVuLWNjXCIpLCBGYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEljLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBubyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgVGMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRmMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBpdChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKG5vKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIE5jID0gKGUpID0+IEpTT04ucGFyc2UoZSksICRyID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIExjID0gYXN5bmMgKCkgPT4ge1xuICAkZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgJHIoKSB8fCBhd2FpdCBEdCg1MDApO1xuICBpZiAoISRyKCkpXG4gICAgdGhyb3cgaXQoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKG5vKTtcbiAgcmV0dXJuICRlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgTWMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogYSwgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBsID0gTmModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiAkZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7bC50eXBlfWApLCBuZXcgUHJvbWlzZSgoYykgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICAkZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKF8pID0+IHtcbiAgICAgIGl0KFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIF8pLCBjKHsgc3RhdHVzOiBGLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgbSA9IChfKSA9PiB7XG4gICAgICBpdChcIkFkeWVuIGVycm9yOlwiLCBfKSwgYyh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGYgPSAoKSA9PiB7XG4gICAgICBjKHsgc3RhdHVzOiBGLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGYpO1xuICAgIGNvbnN0IHkgPSAoXywgZywgdykgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgYyh7IHN0YXR1czogRi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogXywgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIExjKCkudGhlbihcbiAgICAgIChfKSA9PiBfKHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBtXG4gICAgICB9KVxuICAgICkudGhlbigoXykgPT4ge1xuICAgICAgXy5jcmVhdGVGcm9tQWN0aW9uKGwsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIHhjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0gUmMuc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKCRlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKGl0KGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIG9vID0gKGUpID0+IGU/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwLCBhbyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBUYyh0KSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBsIH0gPSAkdChcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgYyA9IGF3YWl0IE1jKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogeGMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBsXG4gIH0pO1xuICBpZiAoYy5jbGVhbnVwKCksIGMuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChjLnN0YXR1cyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChjLnN0YXR1cyA9PT0gRi5TVUNDRVNTKSB7XG4gICAgaWYgKCFjLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiAkZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGMuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGN0KGMuc3RhdHVzKTtcbn0sIGlvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHNvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IERjIH0gPSBrKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIFVjKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gKGF3YWl0IFV0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YT8uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgdihcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBPYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IGUucGF5bWVudCwgbiA9IFByKHQubm9uQ2RlRm9ybUlucHV0cywgciksIGEgPSBHKFxuICAgICAgbixcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIGF3YWl0IFoodC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLnEoYSwgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pO1xuICAgIGNvbnN0IGkgPSBhd2FpdCB4KHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGJyb3dzZXJfaW5mbzogUm8oKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoci50b2tlbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChEYyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGkpLCAhaS5wYXltZW50X21ldGhvZHM/LlswXT8uaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCByZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGEsXG4gICAgICBjb25maXJtUmVzdWx0OiBpLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgbiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG4pLCByO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBKZSwgZXJyX186IGNvIH0gPSBrKFwiYWR5ZW4tYXBwbGUtcGF5XCIpLCBqYyA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBpbyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKEplKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBicigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEplKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoSmUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEplKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IFEocywgbC50b2tlbiwgYywgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFkeWVuQXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBjbyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoZj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgJGMgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGkgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgaW8pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBsIH0gPSBuLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gRXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBsLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiBpPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBmID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBtKSwgeSA9IHtcbiAgICAgIHNlc3Npb246IGYsXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogaS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGEsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4/LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIHYoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogTHQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoXywgZykgPT4ge1xuICAgICAgY29uc3QgdyA9ICgpID0+IHtcbiAgICAgICAgSmUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBnKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIGYub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBVYyhoLCB5KTtcbiAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgIGcoYik7XG4gICAgICAgIH1cbiAgICAgIH0sIGYub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGggPSBhd2FpdCBRKGMsIHUudG9rZW4sIGQsIHZvaWQgMCksIGIgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHF0KHtcbiAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG4ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBoLFxuICAgICAgICAgICAgZGVmYXVsdExhYmVsOiBpPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICAgIHByZWZpbGw6IHVcbiAgICAgICAgICB9KS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBmLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihiKTtcbiAgICAgIH0sIGYub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChoKSA9PiB7XG4gICAgICAgIHYoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBPYyhoLCB5KTtcbiAgICAgICAgICBfKGIpO1xuICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgZyhiKTtcbiAgICAgICAgfVxuICAgICAgfSwgZi5vbmNhbmNlbCA9IHcsIGYuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoXykgPT4ge1xuICAgICAgdGhyb3cgY28oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdihcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IF9cbiAgICAgIH0pLCBfO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBkZSwgZXJyX186IE5lIH0gPSBrKFwiYWR5ZW4tZ29vZ2xlLXBheVwiKSwgR2MgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgc28pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGRlKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgYSA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIE5lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoZGUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBocigpLCAhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSlcbiAgICAgIHJldHVybiBOZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGdyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIGRlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gbC5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBRKHMsIGwudG9rZW4sIGMsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBWZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgIH0pLCBmID0gYXdhaXQgemUoZS5iYXNlVXJsLCBtKSwgeyByZXN1bHQ6IHkgfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KG0pO1xuICAgICAgaWYgKCF5KVxuICAgICAgICByZXR1cm4gZGUoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgcjtcbiAgICB9IGNhdGNoIChtKSB7XG4gICAgICByZXR1cm4gTmUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBtKSwgcjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgTmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBxYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgZGUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBzbyksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IGkubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gYXdhaXQgUShjLCB1LnRva2VuLCBkLCB2b2lkIDApLCBmID0gVmUoe1xuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBtLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIHYoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogaS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEx0KHUsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gYXdhaXQgemUoZS5iYXNlVXJsLCBmKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9IGF3YWl0IHkubG9hZFBheW1lbnREYXRhKGYpO1xuICAgICAgZGUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBfKTtcbiAgICAgIGNvbnN0IGcgPSB3cihyLCBfKSwgdyA9IEcoXG4gICAgICAgIGcsXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBhPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLndcbiAgICAgIH0pLCAhXy5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgYiA9IGF3YWl0IFooYywge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgLi4ucSh3LCB1LmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSksIFMgPSBCZShiKTtcbiAgICAgIGRlKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgUyk7XG4gICAgICBsZXQgQyA9IGF3YWl0IHgoYywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHUudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBSbygpLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogXy5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBDKTtcbiAgICAgIGxldCBMID0gQy5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBBID0gQy5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoKCQpID0+ICQudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoQSAmJiBBLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBkZShcIkFkeWVuIDNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIEEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogJCB9ID0gYXdhaXQgbGUoe1xuICAgICAgICAgIHVybDogQS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGUoYOKVsCBBZHllbiAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAkeyR9XWApLCAkID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKCQgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChBICYmICFMICYmIChDID0gYXdhaXQgeChjLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdS50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IEEudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXJcbiAgICAgICAgfVxuICAgICAgfSksIGRlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2UgYWZ0ZXIgM0RTXCIsIEMpLCBMID0gQy5wYXltZW50X21ldGhvZHM/LlswXT8uaWQpLCAhTClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCBtZXRob2QgSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gcmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB3LFxuICAgICAgICBjb25maXJtUmVzdWx0OiBDLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0aHJvdyBOZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdihcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBfXG4gICAgICB9KSwgbmV3IEVycm9yKF8/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogWWUsIGVycl9fOiBWYyB9ID0gayhcImF3eC1hY2hcIiksIHpjID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBjb25zdCBpID0gRyhyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCB1ID0gbnVsbDtcbiAgICBpZiAoYyA9PT0gXCJtaWNyb19kZXBvc2l0XCIpIHtcbiAgICAgIFllKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUgPSBhd2FpdCBHdChcImFjaF9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjQwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pLCBZZShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgWWUoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkID0gYXdhaXQgWihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAuLi5xKGksIGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KSwgZiA9IEJlKGQpPy5jb25zZW50X2lkLCBfID0gKGF3YWl0IHgocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IGp0KGlbcC5GSVJTVF9OQU1FXSwgaVtwLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IGlbcC5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiB1Py5hY2NvdW50X251bWJlcixcbiAgICAgICAgICAgIGFiYV9yb3V0aW5nX251bWJlcjogdT8uYWJhX3JvdXRpbmdfbnVtYmVyXG4gICAgICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoXykge1xuICAgICAgWWUoXCJQbGFpZCB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiB3IH0gPSBhd2FpdCBsZSh7XG4gICAgICAgIHVybDogXyxcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQUNIIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmIChZZShg4pWwIFBsYWlkIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHt3fV1gKSwgdyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAodyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBnID0gYXdhaXQgeChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1hY2hcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGksXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGcsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHcpIHtcbiAgICAgIHRocm93IFZjKFwiQUNIIHBheW1lbnQgZXJyb3JcIiwgdyksIHYoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB3XG4gICAgICB9KSwgbmV3IEVycm9yKHc/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogd3QgfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gQmMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSAoYXdhaXQgVXQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGE/LmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSksIHYoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5hXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gSGMoZSwgdCkge1xuICBpZiAoIWUucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgd3QoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBlKTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IGxlKHtcbiAgICB1cmw6IGUucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHQuYmFzZVVybFxuICB9KTtcbiAgaWYgKHd0KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtyfV1gKSwgciA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCB4KHQuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IGUudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gd3QoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgbjtcbn1cbmFzeW5jIGZ1bmN0aW9uIEtjKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gZS5wYXltZW50LCBuID0gUHIodC5ub25DZGVGb3JtSW5wdXRzLCByKSwgYSA9IEcoXG4gICAgICBuLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgICBjb25zdCBsID0gKGF3YWl0IFoodC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLnEoYSwgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIWwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBjID0gYXdhaXQgeCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoci50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB3dChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpO1xuICAgIGxldCB1ID0gYy5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgZCA9IGMucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGYpID0+IGYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChkPy5yZWRpcmVjdF91cmwgJiYgZC5jb25zZW50X2lkICYmIGQudGhlaXJfcG1faWQgJiYgKGMgPSBhd2FpdCBIYyhkLCB0KSwgdSA9IGMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKSwgIXUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBtID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG0pLCByZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBhLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IG4gPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChuKSwgcjtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogWmUsIGVycl9fOiBsbyB9ID0gayhcImF3eC1hcHBsZS1wYXlcIiksIFljID0gY2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0byk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKFplKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBicigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFplKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoWmUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIFplKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE4ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IFEocywgbC50b2tlbiwgYywgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgbG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKGY/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBXYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgaSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0byksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4obCksIHUgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgZCA9IEVyKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogbi5pbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4uY1xuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogaT8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZCksIGYgPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGkubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiBjLFxuICAgICAgaXNTZXR1cE1vZGU6IHUsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiB2KFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEx0KGMsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgbmV3IFByb21pc2UoKHksIF8pID0+IHtcbiAgICAgIGNvbnN0IGcgPSAoKSA9PiB7XG4gICAgICAgIFplKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgXyhuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBtLm9uY2FuY2VsID0gZywgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEJjKHcsIGYpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgXyhoKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdyA9IGF3YWl0IFEobCwgYy50b2tlbiwgdSwgdm9pZCAwKSwgaCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogcXQoe1xuICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHcsXG4gICAgICAgICAgICBkZWZhdWx0TGFiZWw6IGk/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICAgICAgcHJlZmlsbDogY1xuICAgICAgICAgIH0pLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKGgpO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgdihcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaCA9IGF3YWl0IEtjKHcsIGYpO1xuICAgICAgICAgIHkoaCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBfKGgpO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHkpID0+IHtcbiAgICAgIHRocm93IGxvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgeSksIHYoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB5XG4gICAgICB9KSwgeTtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogc2UsIGVycl9fOiBMZSB9ID0gayhcImF3eC1nb29nbGUtcGF5XCIpLCBKYyA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcm8pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIHNlKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgYSA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIExlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoc2UoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBocigpLCAhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSlcbiAgICAgIHJldHVybiBMZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGdyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIHNlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gbC5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBRKHMsIGwudG9rZW4sIGMsIHZvaWQgMCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBWZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICB9KSwgZiA9IGF3YWl0IHplKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBmLmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIHNlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIExlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgUi5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBMZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKGY/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBaYyA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgc2UoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBybyksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IGkubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTihjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gYXdhaXQgUShjLCB1LnRva2VuLCBkLCB2b2lkIDApLCBmID0gVmUoe1xuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICB2KFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGkucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBMdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgeSA9IGF3YWl0IHplKGUuYmFzZVVybCwgZik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCB5LmxvYWRQYXltZW50RGF0YShmKTtcbiAgICAgIHNlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgXyk7XG4gICAgICBjb25zdCBnID0gd3IociwgXyksIHcgPSBHKFxuICAgICAgICBnLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYT8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgc2UoXCJfX19cIiwgdyksIHYoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi53XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGggPSBfLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghaClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBiID0gYXdhaXQgWihjLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICAuLi5xKHcsIHUuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgUyA9IEJlKGIpO1xuICAgICAgc2UoXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBTKTtcbiAgICAgIGxldCBDID0gYXdhaXQgeChjLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdS50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogUz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogaFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEMpO1xuICAgICAgbGV0IEwgPSBDLnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IEEgPSBDLnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKCQpID0+ICQudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoQSAmJiBBLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBzZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIEEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogJCB9ID0gYXdhaXQgbGUoe1xuICAgICAgICAgIHVybDogQS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2UoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAkeyR9XWApLCAkID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKCQgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChBICYmICFMICYmIChDID0gYXdhaXQgeChjLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogdS50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IEEudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IEEuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgc2UoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBDKSwgTCA9IEMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKSwgIUwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHcsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEMsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHRocm93IExlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB2KFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IF9cbiAgICAgIH0pLCBuZXcgRXJyb3IoXz8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBfdCwgZXJyX186IFFjIH0gPSBrKFwia2xhcm5hXCIpLCB1byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJrbGFybmFcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHt9KS5udWxsaXNoKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKVxufSksIFhjID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdW8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IFIuYWlyd2FsbGV4S2xhcm5hLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogYSA/PyB7fVxuICAgIH0pXG4gIH07XG59LCBlbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIF90KFwiUnVubmluZyBLbGFybmEgZmxvdy4uLlwiLCBhKTtcbiAgICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBOKGkpLCBsID0gITE7XG4gICAgICBfdChcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCBjID0gdW8ucGFyc2Uocik7XG4gICAgICBfdChcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCB1ID0gRyh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5sID8gQm4oKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIGQgPSBxKHUsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgX3QoXCJOZXcgY3VzdG9tZXIgZmllbGRzXCIsIGQpO1xuICAgICAgY29uc3QgbSA9IGF3YWl0IFooaSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgLi4ucSh1LCBzLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coXCJzdGFydFBheW1lbnRGbG93UmVzcG9uc2VcIiwgbSksIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImtsYXJuYVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGMsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgICAgY29uZmlybVJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kczogW11cbiAgICAgICAgfSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgdGhyb3cgUWMoXCJLbGFybmEgcGF5bWVudCBlcnJvclwiLCBpKSwgdihcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwia2xhcm5hXCIsIGVycm9yOiBpIH0pLCBuZXcgRXJyb3IoaT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBwbyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIG1vID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmFzeW5jIGZ1bmN0aW9uIHRsKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gKGF3YWl0IFV0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogdC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGE/LmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSksIHYoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5hXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyB0LnNlc3Npb24uYWJvcnQoKSwgcjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmwoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBlLnBheW1lbnQsIG4gPSBQcih0Lm5vbkNkZUZvcm1JbnB1dHMsIHIpLCBhID0gRyhuLCB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KSwgYXdhaXQgWih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgLi4ucShhLCB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KTtcbiAgICBjb25zdCBpID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoci50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgcyA9IGF3YWl0IHgodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGlcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChjKSwgcmUoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGEsXG4gICAgICBjb25maXJtUmVzdWx0OiBzLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgbiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG4pLCByO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB2dCwgZXJyX186IGZvIH0gPSBrKFwiYXV0aG5ldC1hcHBsZXBheVwiKSwgbmwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBwbyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKHZ0KFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBicigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHZ0KFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB2dChcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBOKHMpLCBjID0gbC5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBRKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGZvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHYoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGZcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIG9sID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gIH0pID0+IHtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzIH0gPSBuLCBsID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHBvKSwgYyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE4oYyksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgbSA9IEVyKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBkZWZhdWx0TGFiZWw6IGw/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgdihcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IGYgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIG0pLCB5ID0ge1xuICAgICAgc2Vzc2lvbjogZixcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiB0Lm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCBnKSA9PiB7XG4gICAgICBmLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICB2dChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIGcobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBmLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGwodywgeSk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBnKGgpO1xuICAgICAgICB9XG4gICAgICB9LCBmLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0gYXdhaXQgUShjLCB1LnRva2VuLCBkLCB2b2lkIDApLCBoID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBxdCh7XG4gICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBuLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdyxcbiAgICAgICAgICAgIGRlZmF1bHRMYWJlbDogbD8ubWV0YWRhdGE/LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgICAgICBwcmVmaWxsOiB1XG4gICAgICAgICAgfSkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgZi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oaCk7XG4gICAgICB9LCBmLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICB2KFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoID0gYXdhaXQgcmwodywgeSk7XG4gICAgICAgICAgXyhoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIGcoaCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGYuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoXykgPT4ge1xuICAgICAgdGhyb3cgZm8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdihcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IF9cbiAgICAgIH0pLCBfO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IFFlIH0gPSBrKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIGFsID0gY2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEllKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBtbyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChJZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhyKCksICF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKVxuICAgICAgcmV0dXJuIFFlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBJZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihpKSwgbCA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBjID0gYXdhaXQgUShpLCBzLnRva2VuLCBsLCB2b2lkIDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkID0gVmUoe1xuICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzogY1xuICAgICAgfSksIG0gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGQpLCB7IHJlc3VsdDogZiB9ID0gYXdhaXQgbS5pc1JlYWR5VG9QYXkoZCk7XG4gICAgICBpZiAoIWYpXG4gICAgICAgIHJldHVybiBJZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHJldHVybiBRZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGQpLCByO1xuICAgIH1cbiAgICBjb25zdCB1ID0gYXN5bmMgKGQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBjXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgUWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIHYoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBtXG4gICAgICAgIH0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IobT8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBpbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgY29uc3QgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpIH0gPSBhLCBsID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIG1vKS5tZXRhZGF0YSwgYyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IE4oYyksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgbSA9IGF3YWl0IFEoYywgdS50b2tlbiwgZCwgdm9pZCAwKSwgZiA9IFZlKHtcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG0sXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSk7XG4gICAgdihcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiByLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGlcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gYXdhaXQgemUoZS5iYXNlVXJsLCBmKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9IGF3YWl0IHkubG9hZFBheW1lbnREYXRhKGYpO1xuICAgICAgSWUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBfKTtcbiAgICAgIGNvbnN0IGcgPSB3cih0LCBfKSwgdyA9IEcoZywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLndcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaCA9IF8ucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBaKGMsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgIC4uLnEodywgdS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgICB9KTtcbiAgICAgIEllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IHgoYywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHUudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIVMucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiByZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBjLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogUyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhyb3cgUWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIHYoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogX1xuICAgICAgfSksIG5ldyBFcnJvcihfPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IHl0LCBlcnJfXzogc2wgfSA9IGsoXCJjeWJzLWZyYW1lXCIpLCBjbCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICByLm5hbWUgPSBcImNhcmRpbmFsX2NvbGxlY3Rpb25faWZyYW1lXCIsIHIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiLCByLnN0eWxlLndpZHRoID0gXCIxMHB4XCIsIHIuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gIGNvbnN0IG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgbi5hY3Rpb24gPSBlLCBuLm1ldGhvZCA9IFwiUE9TVFwiLCBuLnRhcmdldCA9IHIubmFtZTtcbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgcmV0dXJuIGEudHlwZSA9IFwiaGlkZGVuXCIsIGEubmFtZSA9IFwiSldUXCIsIGEudmFsdWUgPSB0LCBuLmFwcGVuZENoaWxkKGEpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLCB7IGZvcm06IG4sIGRldGFjaDogKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobik7XG4gIH0gfTtcbn0sIGxsID0gYXN5bmMgKGUpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIGNvbnN0IHsgcG9zdFVybDogbiwgYWNjZXNzVG9rZW46IGEgfSA9IGUsIGkgPSBuZXcgVVJMKG4pLm9yaWdpbiwgeyBmb3JtOiBzLCBkZXRhY2g6IGwgfSA9IGNsKG4sIGEpO1xuICB5dChcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgY29uc3QgYyA9IChkKSA9PiB7XG4gICAgaWYgKGQub3JpZ2luICE9PSBpKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG0gPSBKU09OLnBhcnNlKGQuZGF0YSk7XG4gICAgaWYgKHl0KFwiUmVjZWl2ZWQgZXZlbnQgZnJvbSBkZXZpY2UgZGF0YSBjb2xsZWN0b3I6XCIsIG0pLCBtLk1lc3NhZ2VUeXBlID09PSBcInByb2ZpbGUuY29tcGxldGVkXCIpIHtcbiAgICAgIHQobSksIHUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0sIHUgPSAoKSA9PiB7XG4gICAgbCgpLCB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgYyk7XG4gIH07XG4gIHRyeSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGMpLCB5dChcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKSwgcy5zdWJtaXQoKSwgeXQoXCJTdWJtaXR0ZWQgZm9ybVwiKTtcbiAgfSBjYXRjaCAoZCkge1xuICAgIHNsKFwiRXJyb3Igc3VibWl0dGluZyBmb3JtOlwiLCBkKSwgdSgpLCByKGQpO1xuICB9XG59KSwgdWwgPSAoZSkgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybDogdCwgYWNjZXNzVG9rZW46IHIsIG1lcmNoYW50RGF0YTogbiwgaWZyYW1lOiBhLCBob3N0OiBpIH0gPSBlLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIHMuYWN0aW9uID0gdCwgcy5tZXRob2QgPSBcIlBPU1RcIiwgcy50YXJnZXQgPSBhLm5hbWU7XG4gIGNvbnN0IGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGwudHlwZSA9IFwiaGlkZGVuXCIsIGwubmFtZSA9IFwiSldUXCIsIGwudmFsdWUgPSByO1xuICBjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICByZXR1cm4gYy50eXBlID0gXCJoaWRkZW5cIiwgYy5uYW1lID0gXCJNRFwiLCBjLnZhbHVlID0gbiwgcy5hcHBlbmRDaGlsZChsKSwgcy5hcHBlbmRDaGlsZChjKSwgaS5hcHBlbmRDaGlsZChzKSwgcztcbn0sIHsgbG9nX186IERlLCBlcnJfXzogX28gfSA9IGsoXCJjeWJzXCIpLCB5byA9IHokMS5vYmplY3Qoe1xuICBzdGVwX3VwX3VybDogeiQxLnN0cmluZygpLFxuICBhY2Nlc3NfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZGRfdXJsOiBEKHokMS5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBEKHokMS5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHokMS5zdHJpbmcoKVxufSksIGRsID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBwbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSB5by5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IF9vKGBDeWJlcnNvdXJjZSAzRFMgaXMgcmVxdWlyZWQgYnV0IHVzZXIgYWN0aW9uIGlzIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoZGwpO1xuICByZXR1cm4gdC5kYXRhO1xufSwgbWwgPSAoZSkgPT4gZS50eXBlID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIiwgZmwgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybDogdCwgYWNjZXNzVG9rZW46IHIsIG1lcmNoYW50RGF0YTogbiwgaWZyYW1lOiBhLCBob3N0OiBpLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGwgPSBuZXcgVVJMKHQpLm9yaWdpbjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChjKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIERlKFwiQ2xlYW5pbmcgdXAgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCBpLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoKSA9PiB7XG4gICAgICBEZShcIkN5YmVyc291cmNlIDNEUyBjYW5jZWxsZWRcIiksIGMoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGYgPSB5cihhLCAoZykgPT4ge1xuICAgICAgRGUoXCJDeWJlcnNvdXJjZSAzRFMgY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBnKSwgYyh7IHN0YXR1czogZy5zdGF0dXMsIGNsZWFudXA6IHUgfSksIHkoKTtcbiAgICB9LCBsLCBcInBpbmctM2RzLXN0YXR1c1wiLCBsbiksIHkgPSBLbih7XG4gICAgICBlbGVtZW50czogeyBob3N0OiBpLCBjYW5jZWxCdXR0b246IHMgfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogZixcbiAgICAgIHJlc29sdmU6IChnKSA9PiB7XG4gICAgICAgIGMoeyBzdGF0dXM6IGcuc3RhdHVzLCBjbGVhbnVwOiB1IH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCB1bCh7XG4gICAgICBzdGVwVXBVcmw6IHQsXG4gICAgICBhY2Nlc3NUb2tlbjogcixcbiAgICAgIG1lcmNoYW50RGF0YTogbixcbiAgICAgIGlmcmFtZTogYSxcbiAgICAgIGhvc3Q6IGlcbiAgICB9KS5zdWJtaXQoKTtcbiAgfSk7XG59LCBobyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBwbChlKSwgeyBzdGVwX3VwX3VybDogciwgYWNjZXNzX3Rva2VuOiBuLCBkZF91cmw6IGEsIGRkX3Rva2VuOiBpLCBtZXJjaGFudF9kYXRhOiBzIH0gPSB0O1xuICBpZiAoYSAmJiBpKSB7XG4gICAgY29uc3QgbSA9IGF3YWl0IGxsKHtcbiAgICAgIHBvc3RVcmw6IGEsXG4gICAgICBhY2Nlc3NUb2tlbjogaVxuICAgIH0pO1xuICAgIERlKFwiRGV2aWNlIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIG0uU3RhdHVzKTtcbiAgfSBlbHNlXG4gICAgX28oXCJObyBkZXZpY2UgZGF0YSBjb2xsZWN0aW9uIFVSTCBvciB0b2tlbiBwcm92aWRlZFwiKTtcbiAgY29uc3QgeyBob3N0OiBsLCBpZnJhbWU6IGMsIGNhbmNlbEJ1dHRvbjogdSB9ID0gJHQoXCJcIiwgeyBuYW1lOiBcImNhcmRpbmFsX2F1dGhfaWZyYW1lXCIgfSk7XG4gIERlKFwiUnVubmluZyBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKTtcbiAgY29uc3QgZCA9IGF3YWl0IGZsKHtcbiAgICBzdGVwVXBVcmw6IHIsXG4gICAgYWNjZXNzVG9rZW46IG4sXG4gICAgbWVyY2hhbnREYXRhOiBzLFxuICAgIGlmcmFtZTogYyxcbiAgICBob3N0OiBsLFxuICAgIGNhbmNlbEJ1dHRvbjogdVxuICB9KTtcbiAgaWYgKGQuY2xlYW51cCgpLCBkLnN0YXR1cyA9PT0gRi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAoZC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoZC5zdGF0dXMgPT09IEYuU1VDQ0VTUykge1xuICAgIERlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIik7XG4gICAgcmV0dXJuO1xuICB9IGVsc2VcbiAgICBjdChkLnN0YXR1cyk7XG59LCB7IGxvZ19fOiBfbCwgZXJyX186IGdvIH0gPSBrKFwicG9ja3l0LWNjXCIpLCB5bCA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIGhsID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHlsLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgZ28obiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgd28gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIF9sKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBnbyhyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke2FlKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIHJyID0gKGUsIHQpID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldCh0KSwgZ2wgPSAoZSkgPT4gZT8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMCwgd2wgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gaGwodCksIG4gPSBhd2FpdCBZbih7IHVybDogcltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogd28obi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHJbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiByW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IEdyIH0gPSBrKFwic3RyaXBlLWNjXCIpLCB2bCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIHZvID0gYXN5bmMgKGUpID0+IHtcbiAgdihcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLmVcbiAgfSksIEdyKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke2UuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBycyhlKSwgdihcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIEdyKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgYmwgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gdmwuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogdC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiB0LmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59LCBQbCA9IDQsIHsgbG9nX186IFRlLCBlcnJfXzogUnQgfSA9IGsoXCJ1bmlmaWVkLWNjXCIpLCBFbCA9IGFzeW5jICh7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiBhXG59KSA9PiB7XG4gIFRlKFwi4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTihpKTtcbiAgVGUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgY29uc3QgbCA9IEcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBjID0ge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbCxcbiAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpbiB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBsb2dzXG4gICAgICBkZXZpY2VUb2tlbjogem4oKVxuICAgIH0sXG4gICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogdHJ1ZSxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBSdChhLCBjKSwgVGUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IFVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgSm4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgRG4oaSwgYyk7XG4gIGlmIChUZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBibyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gQ2woe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBjLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IGksXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgQ2wgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBsXG4gIH0gPSBlO1xuICBsZXQgYyA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgUGw7IHUrKykge1xuICAgIFRlKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgdihcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IGtsKGMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gYXdhaXQgQWwodC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLm0ubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgVGUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIGNvbnN0IGYgPSBhZShtKTtcbiAgICAgIFJ0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBmKSwgdihcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBmLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChjID0gYXdhaXQgeChpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIFRlKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgYyksIGMuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBibyhyLm1vZGUsIGMpO1xuICB9XG4gIHRocm93IHYoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogY1xuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIEFsID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCB2byhibCh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoWG4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgZW8oZSwgdCkgfSB9O1xuICAgIGlmIChvbyh0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IGFvKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAobWwodCkpXG4gICAgICByZXR1cm4gYXdhaXQgaG8odCksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoU2wodCkpXG4gICAgICByZXR1cm4gYXdhaXQgRW8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgU2wgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBQbyhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59LCBrbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBNYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBSdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgUnQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBibyA9IChlLCB0KSA9PiB7XG4gIGlmIChlID09PSBcInNldHVwXCIpIHtcbiAgICBjb25zdCByID0gdC5jY19wbV9pZCA/PyB0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIENDIFBNIElEIG9yIHBheW1lbnRfbWV0aG9kcyBmb3VuZCBpbiBQRiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBwYXltZW50X21ldGhvZF9pZDogclxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBzdWNjZXNzIHJlc3BvbnNlIGZyb20gc3RhcnRQRlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiB0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59LCB7IGxvZ19fOiBNLCBlcnJfXzogcXIgfSA9IGsoXCJjb21tb24tY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IElsID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBNKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oaSk7XG4gICAgdihcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4udCxcbiAgICAgIHByZWZpbGw6IHNcbiAgICB9KTtcbiAgICBjb25zdCBsID0gcy5maW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M/LnVuaWZpZWRfY2MgPz8gMDtcbiAgICBNKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQobCAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGMgPSBNYXRoLnJhbmRvbSgpLCB1ID0gYyA8IGwsIGQgPSB7XG4gICAgICByb2xsOiBjLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBsLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gTShg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7Y30gdnMgJHtsfSlgKSwgdihcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgZCksIEVsKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgTShg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtjfSB2cyAke2x9KWApLCB2KFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIGQpLCBNKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgbSA9IEcoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBzLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm1cbiAgICB9KTtcbiAgICBjb25zdCBmID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbSxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICExLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpLFxuICAgICAgLi4ucShtLCBzLmNoZWNrb3V0X3NldHRpbmdzKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIE0oYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgVW4oYS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoSm4oeSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBNKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCBfID0gYXdhaXQgSHMoaSwgZik7XG4gICAgICAgIHJldHVybiBNKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE0oYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBfID0gYXdhaXQgT3IoaSwgZik7XG4gICAgICAgIHJldHVybiBNKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBfIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoeSkge1xuICAgICAgaWYgKHkgaW5zdGFuY2VvZiB4biAmJiB5Lm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIE0oXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBNKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIHkucmVzcG9uc2UuaGVhZGVycyksIHYoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgLi4ueS5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBfID0geS5yZXNwb25zZS5oZWFkZXJzID8/IHt9O1xuICAgICAgICBcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCIgaW4gXyAmJiAoZi5leGlzdGluZ19jY19wbV9pZCA9IF9bXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiXSwgTShg4pScIEV4aXN0aW5nIENDIFBNIElEOiAke2YuZXhpc3RpbmdfY2NfcG1faWR9YCkpO1xuICAgICAgICBjb25zdCBnID0gZ2woeS5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICBNKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEEgPSBhd2FpdCB3bChlLmJhc2VVcmwsIHkucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgZi5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBBO1xuICAgICAgICB9XG4gICAgICAgIGlmIChYbih5LnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgTShcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBBID0gYXdhaXQgZW8oZS5iYXNlVXJsLCB5LnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGYuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gQTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob28oeS5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIE0oXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEEgPSBhd2FpdCBhbyhcbiAgICAgICAgICAgIHJbcC5DT1VOVFJZXSxcbiAgICAgICAgICAgIHkucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHMubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gQTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiID0gYXdhaXQgRG4oaSwgZik7XG4gICAgICAgIE0oXCLilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpcIiwgYik7XG4gICAgICAgIGNvbnN0IFMgPSBiLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKFxuICAgICAgICAgIChBKSA9PiBBLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiXG4gICAgICAgICk7XG4gICAgICAgIGlmIChTKSB7XG4gICAgICAgICAgTShcIuKUnCBDeWJlcnNvdXJjZSAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBDeWJlcnNvdXJjZSAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgQSA9IHlvLnBhcnNlKFMpLCAkID0gYXdhaXQgaG8oe1xuICAgICAgICAgICAgLi4uQSxcbiAgICAgICAgICAgIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgX3VuaWZpZWRfY2NfcGNjc19pZDogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGYuZXh0cmFfbWV0YWRhdGEuY3liZXJzb3VyY2UgPSAkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEMgPSB5LnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAhZyAmJiAhUyA/IEMgPyAoTShcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IHZvKFJsKGIpKSkgOiAoTShcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IEVvKGIsIGUuYmFzZVVybCkpIDogTShcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpO1xuICAgICAgICBjb25zdCBMID0gYi5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgTShg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtMfV1gKTtcbiAgICAgICAgICBjb25zdCBBID0gYXdhaXQgeChpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogTFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE0oXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgQSk7XG4gICAgICAgICAgY29uc3QgJCA9IGx0KEEpO1xuICAgICAgICAgIHJldHVybiBNKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7JC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6ICQgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBNKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke0MgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgQSA9IGF3YWl0IE9yKGksIHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogTCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IENcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gTShcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogQSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBxcihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgcXIoeSksIHk7XG4gICAgfVxuICB9XG4pLCBSbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gSmkucGFyc2UodCk7XG59LCBGbCA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgUG8gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBGbC5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gb2EucGFyc2UodCk7XG59LCBFbyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBQbyhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIE0oXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgdihcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgTShg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgdihcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGxlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKE0oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyB2KFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgdihcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgdihcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgVGwgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IGVlLCBlcnJfXzogTmwgfSA9IGsoXCJsb29wLWNyeXB0b1wiKSwgTGwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSB9KSA9PiB7XG4gICAgZWUoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVGwpO1xuICAgIGVlKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIGVlKFwiU3RhcnRpbmcgTG9vcCBDcnlwdG8gZmxvdy4uLlwiKTtcbiAgICBjb25zdCByID0gYXdhaXQgTihlLmFueUNkZUNvbm5lY3Rpb24pLCBuID0gci5tb2RlID09PSBcInNldHVwXCIsIGEgPSBhd2FpdCBVdChlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgfSksIGkgPSBhd2FpdCBRKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgbCA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGMgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBsID0gTWF0aC5tYXgobCwgYykpIDogKGQgPSAoaSA/IGkuYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgYyA9IE1hdGgubWF4KGMsIGQpLCBsID0gTWF0aC5tYXgobCwgYykpO1xuICAgIGNvbnN0IG0gPSBkLCBmID0gdjQoKSwgeSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IG0sXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBsLFxuICAgICAgY3VzdG9tZXJSZWZJZDogZixcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgXyA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB5LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IF9cbiAgICB9O1xuICB9XG4pLCBNbCA9IFYoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgZWUoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgZWUoXCJjb250ZXh0XCIsIGUpLCBlZShcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgZWUoXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBlZShcImZsb3dDYWxsYmFja3NcIiwgbiksIGVlKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBOKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgZWUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7aS5tb2RlfV1gKTtcbiAgICBjb25zdCBzID0gRyhcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGkuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gaS5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBxKHMsIGkuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgdihcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgWihlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIC4uLnUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGMsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGMgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogc1twLlBST01PVElPTl9DT0RFXVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgfSksIG0gPSBhd2FpdCB4KGwsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBhLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjID8gZC5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGEuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5bWVudF9tZXRob2Q6IGEucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBhLnN1Y2Nlc3MsXG4gICAgICAgIGxvb3BfcGF5aW5faWQ6IGEucGF5aW5JZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChlZShgQ29uZmlybSByZXN1bHQ6ICR7bX1gKSwgaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGVlKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgZWUoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgbSk7XG4gICAgICBjb25zdCBmID0gbHQobSk7XG4gICAgICByZXR1cm4gZWUoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtmLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZWUoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIW0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IE5sKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgbSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IG0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBTZSwgZXJyX186IHhsIH0gPSBrKFwicGF5cGFsXCIpLCBDbyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIERsID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQ28pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gUi5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIFVsID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgU2UoXCJSdW5uaW5nIFBheVBhbCBmbG93Li4uXCIpO1xuICAgICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oaSksIHsgaXNBbm9ueW1vdXM6IGwsIHVzZVJlZGlyZWN0RmxvdzogYyB9ID0gYS5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIFNlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICAgIGNvbnN0IHUgPSBDby5wYXJzZShyKTtcbiAgICAgIFNlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICAgIGNvbnN0IGQgPSBHKHQsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLCB7XG4gICAgICAgIC4uLmwgPyBCbigpIDogdm9pZCAwLFxuICAgICAgICAuLi5zLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICB9KSwgbSA9IHEoZCwgcy5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgICBTZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgICAgY29uc3QgZiA9IHY0KCksIHkgPSAhMSwgXyA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHUsXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogeSxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB5ID8ge1xuICAgICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgICAgfSA6IHZvaWQgMCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiBjLFxuICAgICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmXG4gICAgICAgIH0sXG4gICAgICAgIC4uLm1cbiAgICAgIH0sIGcgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIHcgPSBidG9hKEpTT04uc3RyaW5naWZ5KF8pKSwgaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBzdDogcy50b2tlbixcbiAgICAgICAgcjogd1xuICAgICAgfSksIGIgPSBgJHtnfT8ke2gudG9TdHJpbmcoKX1gO1xuICAgICAgaWYgKGMpXG4gICAgICAgIHRocm93IFNlKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGIsIGF3YWl0IER0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICBjb25zdCBTID0gYXdhaXQgV24oXG4gICAgICAgIFwiUGF5UGFsXCIsXG4gICAgICAgIGksXG4gICAgICAgIGYsXG4gICAgICAgIGJcbiAgICAgICk7XG4gICAgICBTZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBTKTtcbiAgICAgIGNvbnN0IEMgPSBycihTLmhyZWYsIFwiY2F0dFwiKSwgTCA9IHJyKFMuaHJlZiwgXCJhcHByb3ZhbF9zZXNzaW9uX2lkXCIpLCBBID0gYXdhaXQgeChpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogeSA/IEMgOiB2b2lkIDAsXG4gICAgICAgIHRoZWlyX3BtX2lkOiB5ID8gTCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU2UoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgQSksIHJlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcInBheXBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHUsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogZCxcbiAgICAgICAgY29uZmlybVJlc3VsdDogQSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiB5XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChpKSB7XG4gICAgICB0aHJvdyB4bChcIlBheVBhbCBwYXltZW50IGVycm9yXCIsIGkpLCB2KFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBwYXltZW50X21ldGhvZDogXCJwYXlwYWxcIiwgZXJyb3I6IGkgfSksIG5ldyBFcnJvcihpPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IG1lLCBlcnJfXzogVnIgfSA9IGsoXCJwb2NreXQtcGF5cGFsXCIpLCBBbyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgT2wgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBBbyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gUi5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIGpsID0gVihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBtZShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBOKGkpO1xuICAgIG1lKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBsID0gQW8ucGFyc2UodCk7XG4gICAgbWUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGMgPSBhPy5zZXR0aW5ncywgdSA9IEcoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gcSh1LCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBtZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSB2NCgpLCBmID0gcy5tb2RlICE9PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBsLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGwsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGYsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGYgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISFhPy5zZXR0aW5ncz8udXNlUmVkaXJlY3RGbG93LFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogbVxuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCBfID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBnID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIHcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgcjogZ1xuICAgIH0pLCBoID0gYCR7X30/JHt3LnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoYT8uc2V0dGluZ3M/LnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IG1lKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGgsIGF3YWl0IER0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgbWUoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIG1lKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IGIgPSBhd2FpdCBXbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBpLFxuICAgICAgbSxcbiAgICAgIGhcbiAgICApO1xuICAgIG1lKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIGIpO1xuICAgIGNvbnN0IFMgPSB3byhiLmhyZWYpLCBDID0gcnIoYi5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFDKVxuICAgICAgdGhyb3cgVnIoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIGIuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBtZShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtTfWApO1xuICAgIGNvbnN0IEwgPSBhd2FpdCB4KGksIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBTLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZiA/IEMgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAobWUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTCksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIUwucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBWcihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEwpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgeyBsb2dfXzogVywgZXJyX186IGJ0IH0gPSBrKFwic3RyaXBlLWFmZmlybVwiKSwgU28gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYWZmaXJtXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRsID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKCksXG4gICAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgR2wgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgVyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIEFmZmlybS4uLlwiKTtcbiAgICBjb25zdCByID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFNvKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gVyhcIk5vIFN0cmlwZSBBZmZpcm0gQ1BNIGZvdW5kXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgVyhcIlN0YXJ0aW5nIHN0cmlwZSBhZmZpcm0gZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gZS5hbnlDZGVDb25uZWN0aW9uO1xuICAgIHJldHVybiAoYXdhaXQgTihuKSkubW9kZSA9PT0gXCJzZXR1cFwiID8gKFcoXCJTZXR1cCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFN0cmlwZSBBZmZpcm0gZmxvd1wiKSwgeyBpc0F2YWlsYWJsZTogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIH0gfSkgOiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jIChsKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIFIuc3RyaXBlQWZmaXJtLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogbCA/PyB7fSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgIHRocm93IGJ0KFwiRXJyb3Igc3RhcnRpbmcgQWZmaXJtIGZsb3c6XCIsIGMpLCBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgcWwgPSBWKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsIG5vbkNkZUZvcm1JbnB1dHM6IHIsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIFcoXCJSdW5uaW5nIFN0cmlwZSBBZmZpcm0gcGF5LWZpcnN0IGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE4oYSk7XG4gICAgVyhcIlZhbGlkYXRpbmcgZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgcyA9IEcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHYoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBXKFwiQ3JlYXRpbmcgY2FydCBpbmZvIGZvciBwYXktZmlyc3QgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgbGluZV9pdGVtczogaS5saW5lX2l0ZW1zLm1hcCgoaCkgPT4gKHtcbiAgICAgICAgcHJpY2VfaWQ6IGgucHJpY2VfaWQsXG4gICAgICAgIHF1YW50aXR5OiBoLnF1YW50aXR5XG4gICAgICB9KSksXG4gICAgICBwcm9tb3Rpb25fY29kZTogc1twLlBST01PVElPTl9DT0RFXSB8fCB2b2lkIDAsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGkuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9O1xuICAgIFcoXCJTdGFydGluZyBwYXktZmlyc3QgcGF5bWVudCBmbG93IGZvciBBZmZpcm0uLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IFooYSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiAhMCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCxcbiAgICAgIC4uLnEocywgaS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxuICAgIH0pO1xuICAgIFcoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyk7XG4gICAgY29uc3QgdSA9ICRsLnBhcnNlKGMucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSwgeyBjbGllbnRfc2VjcmV0OiBkIH0gPSB1WzBdO1xuICAgIFcoXCJDbGllbnQgc2VjcmV0IGZvciBwYXltZW50IGludGVudFwiLCBkKTtcbiAgICBjb25zdCBtID0gTyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFNvKTtcbiAgICBpZiAoIW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpcGUgQWZmaXJtIENQTSBub3QgZm91bmRcIik7XG4gICAgY29uc3QgeyBzdHJpcGU6IGYgfSA9IGF3YWl0IHh0KG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInBheW1lbnRcIixcbiAgICAgIC8vIFVzZSBwYXltZW50IG1vZGUgZm9yIHBheS1maXJzdCBmbG93XG4gICAgICBjdXJyZW5jeTogaS5jdXJyZW5jeSA/PyBcInVzZFwiLFxuICAgICAgYW1vdW50OiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSk7XG4gICAgVyhcIlN0cmlwZSBpbnN0YW5jZSBjcmVhdGVkXCIsIGYpO1xuICAgIGNvbnN0IHkgPSBDZShzKSwgXyA9IGAke3NbcC5GSVJTVF9OQU1FXX0gJHtzW3AuTEFTVF9OQU1FXX1gLCBnID0ge1xuICAgICAgcmV0dXJuX3VybDogbmV3IFVSTChcIi9hcHAvM2RzL3N1Y2Nlc3MvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSxcbiAgICAgIHBheW1lbnRfbWV0aG9kOiB7XG4gICAgICAgIGJpbGxpbmdfZGV0YWlsczoge1xuICAgICAgICAgIGVtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgICAgIG5hbWU6IF8sXG4gICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgbGluZTE6IHkubGluZTEsXG4gICAgICAgICAgICBsaW5lMjogeS5saW5lMiB8fCB2b2lkIDAsXG4gICAgICAgICAgICBjaXR5OiB5LmNpdHksXG4gICAgICAgICAgICBzdGF0ZTogeS5zdGF0ZSxcbiAgICAgICAgICAgIGNvdW50cnk6IHkuY291bnRyeSxcbiAgICAgICAgICAgIHBvc3RhbF9jb2RlOiB5LnppcF9jb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdyA9IHtcbiAgICAgIGhhbmRsZUFjdGlvbnM6ICExXG4gICAgfTtcbiAgICBXKGBDb25maXJtaW5nIEFmZmlybSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtkfWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGVycm9yOiBoLCBwYXltZW50SW50ZW50OiBiIH0gPSBhd2FpdCBmLmNvbmZpcm1BZmZpcm1QYXltZW50KFxuICAgICAgICBkLFxuICAgICAgICBnLFxuICAgICAgICB3XG4gICAgICApO1xuICAgICAgaWYgKGgpXG4gICAgICAgIHRocm93IGJ0KFwiQWZmaXJtIHBheW1lbnQgY29uZmlybWF0aW9uIGVycm9yOlwiLCBoKSwgbmV3IEVycm9yKGBBZmZpcm0gcGF5bWVudCBmYWlsZWQ6ICR7aC5tZXNzYWdlfWApO1xuICAgICAgVyhcIkFmZmlybSBwYXltZW50IGNvbmZpcm1lZCBzdWNjZXNzZnVsbHlcIiwgYik7XG4gICAgICBjb25zdCBTID0gYj8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgaWYgKCFTKVxuICAgICAgICByZXR1cm4gYnQoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJLbGFybmEgcGF5bWVudCBmYWlsZWRcIiksIHtcbiAgICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICB9O1xuICAgICAgVyhcIlBheW1lbnQgcmVxdWlyZXMgYWRkaXRpb25hbCBhY3Rpb24sIHN0YXJ0aW5nIDNEUyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogQyB9ID0gYXdhaXQgbGUoe1xuICAgICAgICB1cmw6IFMsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFmZmlybSB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoQyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgaWYgKEMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgVyhcIjNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgIGNvbnN0IEwgPSBiPy5wYXltZW50X21ldGhvZD8udG9TdHJpbmcoKSA/PyB2b2lkIDAsIEEgPSBhd2FpdCB4KGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBpLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgIHRoZWlyX3BtX2lkOiBMXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBXKFwiUGF5bWVudCBmbG93IGNvbmZpcm1lZFwiLCBBKSwgcmUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmZmlybVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogQSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgdGhyb3cgYnQoXCJFcnJvciBpbiBBZmZpcm0gcGF5bWVudCBmbG93OlwiLCBoKSwgaDtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEgsIGVycl9fOiBuciB9ID0gayhcInN0cmlwZS1hZnRlcnBheVwiKSwga28gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYWZ0ZXJwYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgVmwgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCB6bCA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBIKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgQWZ0ZXJwYXkuLi5cIik7XG4gICAgY29uc3QgciA9IE8oZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBrbyk7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIEgoXCJObyBTdHJpcGUgQWZ0ZXJwYXkgQ1BNIGZvdW5kXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgSChcIlN0YXJ0aW5nIHN0cmlwZSBhZnRlcnBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb247XG4gICAgcmV0dXJuIChhd2FpdCBOKG4pKS5tb2RlID09PSBcInNldHVwXCIgPyAoSChcIlNldHVwIG1vZGUgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEFmdGVycGF5IGZsb3dcIiksIHsgaXNBdmFpbGFibGU6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICB9IH0pIDoge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBSLnN0cmlwZUFmdGVycGF5LnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogbCA/PyB7fSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgIHRocm93IG5yKFwiRXJyb3Igc3RhcnRpbmcgQWZ0ZXJwYXkgZmxvdzpcIiwgYyksIGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBCbCA9IFYoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCwgbm9uQ2RlRm9ybUlucHV0czogciwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgSChcIlJ1bm5pbmcgU3RyaXBlIEFmdGVycGF5IHBheS1maXJzdCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKGEpO1xuICAgIEgoXCJWYWxpZGF0aW5nIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHMgPSBHKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB2KFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnNcbiAgICB9KSwgSChcIkNyZWF0aW5nIGNhcnQgaW5mbyBmb3IgcGF5LWZpcnN0IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcy5tYXAoKGgpID0+ICh7XG4gICAgICAgIHByaWNlX2lkOiBoLnByaWNlX2lkLFxuICAgICAgICBxdWFudGl0eTogaC5xdWFudGl0eVxuICAgICAgfSkpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHNbcC5QUk9NT1RJT05fQ09ERV0gfHwgdm9pZCAwLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfTtcbiAgICBIKFwiU3RhcnRpbmcgcGF5LWZpcnN0IHBheW1lbnQgZmxvdyBmb3IgQWZ0ZXJwYXkuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IFooYSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiAhMCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCxcbiAgICAgIC4uLnEocywgaS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogaWUoKVxuICAgIH0pO1xuICAgIEgoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyk7XG4gICAgY29uc3QgdSA9IFZsLnBhcnNlKFxuICAgICAgYy5yZXF1aXJlZF91c2VyX2FjdGlvbnNcbiAgICApLCB7IGNsaWVudF9zZWNyZXQ6IGQgfSA9IHVbMF07XG4gICAgSChcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGQpO1xuICAgIGNvbnN0IG0gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywga28pO1xuICAgIGlmICghbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBBZnRlcnBheSBDUE0gbm90IGZvdW5kXCIpO1xuICAgIGNvbnN0IHsgc3RyaXBlOiBmIH0gPSBhd2FpdCB4dChtLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJwYXltZW50XCIsXG4gICAgICAvLyBVc2UgcGF5bWVudCBtb2RlIGZvciBwYXktZmlyc3QgZmxvd1xuICAgICAgY3VycmVuY3k6IGkuY3VycmVuY3kgPz8gXCJ1c2RcIixcbiAgICAgIGFtb3VudDogaS5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0pO1xuICAgIEgoXCJTdHJpcGUgaW5zdGFuY2UgY3JlYXRlZFwiLCBmKTtcbiAgICBjb25zdCB5ID0gQ2UocyksIF8gPSBgJHtzW3AuRklSU1RfTkFNRV19ICR7c1twLkxBU1RfTkFNRV19YCwgZyA9IHtcbiAgICAgIHJldHVybl91cmw6IG5ldyBVUkwoXCIvYXBwLzNkcy9zdWNjZXNzL1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksXG4gICAgICBwYXltZW50X21ldGhvZDoge1xuICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHtcbiAgICAgICAgICBlbWFpbDogc1twLkVNQUlMXSxcbiAgICAgICAgICBuYW1lOiBfLFxuICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgIGxpbmUxOiB5LmxpbmUxLFxuICAgICAgICAgICAgbGluZTI6IHkubGluZTIgfHwgdm9pZCAwLFxuICAgICAgICAgICAgY2l0eTogeS5jaXR5LFxuICAgICAgICAgICAgc3RhdGU6IHkuc3RhdGUsXG4gICAgICAgICAgICBjb3VudHJ5OiB5LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0YWxfY29kZTogeS56aXBfY29kZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHcgPSB7XG4gICAgICBoYW5kbGVBY3Rpb25zOiAhMVxuICAgIH07XG4gICAgSChgQ29uZmlybWluZyBBZnRlcnBheSBwYXltZW50IHdpdGggY2xpZW50IHNlY3JldDogJHtkfWApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoID0gYXdhaXQgZi5jb25maXJtQWZ0ZXJwYXlDbGVhcnBheVBheW1lbnQoXG4gICAgICAgIGQsXG4gICAgICAgIGcsXG4gICAgICAgIHdcbiAgICAgICk7XG4gICAgICBpZiAoSChcIkFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uIHJlc3VsdDpcIiwgaCksIGgucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnR5cGUgPT09IFwicmVkaXJlY3RfdG9fdXJsXCIpIHtcbiAgICAgICAgY29uc3QgYiA9IGgucGF5bWVudEludGVudD8ubmV4dF9hY3Rpb24/LnJlZGlyZWN0X3RvX3VybD8udXJsO1xuICAgICAgICBpZiAoIWIpXG4gICAgICAgICAgcmV0dXJuIG5yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJBZnRlcnBheSBwYXltZW50IGZhaWxlZFwiKSwge1xuICAgICAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICAgICAgcmVzdWx0OiB7IGludm9pY2VfdXJsczogW10sIHN1YnNjcmlwdGlvbl9pZHM6IFtdLCBjdXN0b21lcl9pZDogXCJcIiwgcGF5bWVudF9tZXRob2RfaWQ6IFwiXCIgfVxuICAgICAgICAgIH07XG4gICAgICAgIEgoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IFMgfSA9IGF3YWl0IGxlKHtcbiAgICAgICAgICB1cmw6IGIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgIGZyYW1lVGl0bGU6IFwiQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChIKGDilbAgQWZ0ZXJwYXkgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke1N9XWApLCBTID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoUyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFmdGVycGF5IHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIEgoXCJBZnRlcnBheSB2ZXJpZmljYXRpb24gY29tcGxldGVkLCBjb25maXJtaW5nIHdpdGggYmFja2VuZC4uLlwiKTtcbiAgICAgICAgY29uc3QgQyA9IGgucGF5bWVudEludGVudD8ucGF5bWVudF9tZXRob2Q/LnRvU3RyaW5nKCkgPz8gdm9pZCAwLCBMID0gYXdhaXQgeChhLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBpLnRva2VuLFxuICAgICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGMuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICAgICAgICB0aGVpcl9wbV9pZDogQ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlKHtcbiAgICAgICAgICBsb2dQcmVmaXg6IFwic3RyaXBlLWFmdGVycGF5XCIsXG4gICAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgICAgIGNvbmZpcm1SZXN1bHQ6IEwsXG4gICAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB0aHJvdyBIKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kIGluIEFmdGVycGF5IHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gQWZ0ZXJwYXkgcGF5bWVudCBjb25maXJtYXRpb25cIik7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgbnIoXCJFcnJvciBpbiBBZnRlcnBheSBjaGVja291dCBmbG93OlwiLCBoKTtcbiAgICAgIGNvbnN0IGIgPSBoIGluc3RhbmNlb2YgRXJyb3IgPyBoLm1lc3NhZ2UgOiBcIkFmdGVycGF5IHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBLLCBlcnJfXzogb3IgfSA9IGsoXCJzdHJpcGUta2xhcm5hXCIpLCBJbyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJrbGFybmFcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSGwgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKSxcbiAgICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBLbCA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBLKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgS2xhcm5hLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW8pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiBLKFwiTm8gU3RyaXBlIEtsYXJuYSBDUE0gZm91bmRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBLKFwiU3RhcnRpbmcgc3RyaXBlIGtsYXJuYSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb247XG4gICAgcmV0dXJuIChhd2FpdCBOKG4pKS5tb2RlID09PSBcInNldHVwXCIgPyAoSyhcIlNldHVwIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgU3RyaXBlIEtsYXJuYSBmbG93XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgfSB9KSA6IHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gUi5zdHJpcGVLbGFybmEucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBsID8/IHt9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgdGhyb3cgb3IoXCJFcnJvciBzdGFydGluZyBLbGFybmEgZmxvdzpcIiwgYyksIGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBZbCA9IFYoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCwgbm9uQ2RlRm9ybUlucHV0czogciwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgSyhcIlJ1bm5pbmcgU3RyaXBlIEtsYXJuYSBwYXktZmlyc3QgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgTihhKTtcbiAgICBLKFwiVmFsaWRhdGluZyBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBzID0gRyhyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIEsoXCJDcmVhdGluZyBjYXJ0IGluZm8gZm9yIHBheS1maXJzdCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMubWFwKChoKSA9PiAoe1xuICAgICAgICBwcmljZV9pZDogaC5wcmljZV9pZCxcbiAgICAgICAgcXVhbnRpdHk6IGgucXVhbnRpdHlcbiAgICAgIH0pKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBzW3AuUFJPTU9USU9OX0NPREVdIHx8IHZvaWQgMCxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogaS5hbW91bnRfdG90YWxfYXRvbVxuICAgIH07XG4gICAgSyhcIlN0YXJ0aW5nIHBheS1maXJzdCBwYXltZW50IGZsb3cgZm9yIEtsYXJuYS4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgWihhLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6ICEwLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsLFxuICAgICAgLi4ucShzLCBpLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBpZSgpXG4gICAgfSk7XG4gICAgSyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjKTtcbiAgICBjb25zdCB1ID0gSGwucGFyc2UoYy5yZXF1aXJlZF91c2VyX2FjdGlvbnMpLCB7IGNsaWVudF9zZWNyZXQ6IGQgfSA9IHVbMF07XG4gICAgSyhcIkNsaWVudCBzZWNyZXQgZm9yIHBheW1lbnQgaW50ZW50XCIsIGQpO1xuICAgIGNvbnN0IG0gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW8pO1xuICAgIGlmICghbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmlwZSBLbGFybmEgQ1BNIG5vdCBmb3VuZFwiKTtcbiAgICBjb25zdCB7IHN0cmlwZTogZiB9ID0gYXdhaXQgeHQobS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwicGF5bWVudFwiLFxuICAgICAgLy8gVXNlIHBheW1lbnQgbW9kZSBmb3IgcGF5LWZpcnN0IGZsb3dcbiAgICAgIGN1cnJlbmN5OiBpLmN1cnJlbmN5ID8/IFwidXNkXCIsXG4gICAgICBhbW91bnQ6IGkuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9KTtcbiAgICBLKFwiU3RyaXBlIGluc3RhbmNlIGNyZWF0ZWRcIiwgZik7XG4gICAgY29uc3QgeSA9IENlKHMpLCBfID0gYCR7c1twLkZJUlNUX05BTUVdfSAke3NbcC5MQVNUX05BTUVdfWAsIGcgPSB7XG4gICAgICByZXR1cm5fdXJsOiBuZXcgVVJMKFwiL2FwcC8zZHMvc3VjY2Vzcy9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IHtcbiAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB7XG4gICAgICAgICAgZW1haWw6IHNbcC5FTUFJTF0sXG4gICAgICAgICAgbmFtZTogXyxcbiAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICBsaW5lMTogeS5saW5lMSxcbiAgICAgICAgICAgIGxpbmUyOiB5LmxpbmUyIHx8IHZvaWQgMCxcbiAgICAgICAgICAgIGNpdHk6IHkuY2l0eSxcbiAgICAgICAgICAgIHN0YXRlOiB5LnN0YXRlLFxuICAgICAgICAgICAgY291bnRyeTogeS5jb3VudHJ5LFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IHkuemlwX2NvZGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB3ID0ge1xuICAgICAgaGFuZGxlQWN0aW9uczogITFcbiAgICB9O1xuICAgIEsoYENvbmZpcm1pbmcgS2xhcm5hIHBheW1lbnQgd2l0aCBjbGllbnQgc2VjcmV0OiAke2R9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCBmLmNvbmZpcm1LbGFybmFQYXltZW50KGQsIGcsIHcpO1xuICAgICAgaWYgKEsoXCJLbGFybmEgcGF5bWVudCBjb25maXJtYXRpb24gcmVzdWx0OlwiLCBoKSwgaC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8udHlwZSA9PT0gXCJyZWRpcmVjdF90b191cmxcIikge1xuICAgICAgICBjb25zdCBiID0gaC5wYXltZW50SW50ZW50Py5uZXh0X2FjdGlvbj8ucmVkaXJlY3RfdG9fdXJsPy51cmw7XG4gICAgICAgIGlmICghYilcbiAgICAgICAgICByZXR1cm4gb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoXCJLbGFybmEgcGF5bWVudCBmYWlsZWRcIiksIHtcbiAgICAgICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgICAgIHJlc3VsdDogeyBpbnZvaWNlX3VybHM6IFtdLCBzdWJzY3JpcHRpb25faWRzOiBbXSwgY3VzdG9tZXJfaWQ6IFwiXCIsIHBheW1lbnRfbWV0aG9kX2lkOiBcIlwiIH1cbiAgICAgICAgICB9O1xuICAgICAgICBLKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogUyB9ID0gYXdhaXQgbGUoe1xuICAgICAgICAgIHVybDogYixcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgICAgZnJhbWVUaXRsZTogXCJLbGFybmEgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChLKGDilbAgS2xhcm5hIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtTfV1gKSwgUyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChTID09PSBGLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2xhcm5hIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIEsoXCJLbGFybmEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCwgY29uZmlybWluZyB3aXRoIGJhY2tlbmQuLi5cIik7XG4gICAgICAgIGNvbnN0IEMgPSBoLnBheW1lbnRJbnRlbnQ/LnBheW1lbnRfbWV0aG9kPy50b1N0cmluZygpID8/IHZvaWQgMCwgTCA9IGF3YWl0IHgoYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLmNoZWNrb3V0X2F0dGVtcHRfaWQsXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IENcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZSh7XG4gICAgICAgICAgbG9nUHJlZml4OiBcInN0cmlwZS1rbGFybmFcIixcbiAgICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICAgICAgY29uZmlybVJlc3VsdDogTCxcbiAgICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICEwXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHRocm93IEsoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpLCBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmQgaW4gS2xhcm5hIHBheW1lbnQgY29uZmlybWF0aW9uXCIpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIG9yKFwiRXJyb3IgaW4gS2xhcm5hIGNoZWNrb3V0IGZsb3c6XCIsIGgpO1xuICAgICAgY29uc3QgYiA9IGggaW5zdGFuY2VvZiBFcnJvciA/IGgubWVzc2FnZSA6IFwiS2xhcm5hIHBheW1lbnQgZmFpbGVkXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYik7XG4gICAgfVxuICB9XG4pLCBodCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiB6LCBlcnJfXzogenIgfSA9IGsoXCJzdHJpcGUtbGlua1wiKSwgV2wgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSmwgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgWmwgPSBjZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIHooXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IG4gPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgV2wpO1xuICAgIHooXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKGEpLCBzID0gaS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgeihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgUShhLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBjLCBzdHJpcGU6IHUgfSA9IGF3YWl0IHh0KG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogbC5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSksIGQgPSBjLmNyZWF0ZShcImxpbmtBdXRoZW50aWNhdGlvblwiKTtcbiAgICB6KFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBtID0gYy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoZywgdykgPT4ge1xuICAgICAgbGV0IGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGcpO1xuICAgICAgaCB8fCAoenIoYFJlY29tbWFuZGVkIHRvIHJlbmRlciBhIGNvbnRhaW5lciB3aXRoICR7Z30gdG8gYXZvaWQgcmVuZGVyaW5nIGluIHRoZSBib2R5YCksIGggPSBkb2N1bWVudC5ib2R5KTtcbiAgICAgIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgaD8uYXBwZW5kQ2hpbGQoYiksIGQubW91bnQoYik7XG4gICAgICBsZXQgUyA9ICExLCBDID0gITE7XG4gICAgICBpZiAoZC5vbmNlKFwicmVhZHlcIiwgKCkgPT4ge1xuICAgICAgICBDID0gITAsIHI/Lm9uQXV0aGVudGljYXRpb25FbGVtZW50UmVhZHk/LigpO1xuICAgICAgfSksIHcpIHtcbiAgICAgICAgYi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIiwgYi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIiwgYi5zdHlsZS50b3AgPSBcIi0xMDAwcHhcIiwgYi5zdHlsZS5sZWZ0ID0gXCItMTAwMHB4XCIsIGIuc3R5bGUuekluZGV4ID0gXCItMVwiLCBkLm9uKFwiY2hhbmdlXCIsIChBKSA9PiB7XG4gICAgICAgICAgUyA9IEEuY29tcGxldGUgfHwgISFBLnZhbHVlLmVtYWlsLCBDICYmIHI/Lm9uQXV0aGVudGljYXRpb25TdGF0dXNDaGFuZ2U/LihTKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IEwgPSBiLnF1ZXJ5U2VsZWN0b3IoXCJpZnJhbWVcIik7XG4gICAgICAgIEwgJiYgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHV0ID0gTC5vZmZzZXRIZWlnaHQgPiAxNjA7XG4gICAgICAgICAgQyAmJiByPy5vbkF1dGhlbnRpY2F0aW9uU3RhdHVzQ2hhbmdlPy4oUyB8fCB1dCk7XG4gICAgICAgIH0pLm9ic2VydmUoTCwgeyBhdHRyaWJ1dGVzOiAhMCwgYXR0cmlidXRlRmlsdGVyOiBbXCJzdHlsZVwiXSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkO1xuICAgIH0sIHkgPSAoZykgPT4ge1xuICAgICAgbS5tb3VudChnIHx8IGAjJHtodH1gKTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgbS51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gcj8uZG9Ob3RNb3VudE9uSW5pdCA/IHooXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKHooXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIHkoKSksIHI/LnNpbGVudGx5Q2hlY2tBdXRoZW50aWNhdGlvbiAmJiAoeihgU2lsZW50bHkgbW91bnRpbmcgbGluayBhdXRoZW50aWNhdGlvbiBlbGVtZW50IGF0ICMke2h0fS4uLmApLCBmKGAjJHtodH1gLCAhMCkpLCBtLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGcpID0+IHtcbiAgICAgIGlmICh6KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHI/Lm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgci5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB6KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBnLnJlc29sdmUoKTtcbiAgICB9KSwgbS5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGcpID0+IHtcbiAgICAgIHooXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGcpO1xuICAgICAgY29uc3QgdyA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBjLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGcuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB3LmVycm9yID8gKHpyKFwiZXJyb3JcIiwgdy5lcnJvciksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcih3LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh6KFwicGF5bWVudE1ldGhvZFwiLCB3LnBheW1lbnRNZXRob2QpLCBSLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogdy5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogeSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIG1vdW50TGlua0F1dGhlbnRpY2F0aW9uRWxlbWVudDogKGcpID0+IGYoZywgITEpLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZXUoaHQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgUWwgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHooXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oaSk7XG4gICAgeihcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IFhsKHIsIGEuc3RyaXBlUE0pLCBjID0gRyhsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdihcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIHooXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgdSA9IGF3YWl0IFooaSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGEuc3RyaXBlUE0uaWQsXG4gICAgICAuLi5xKGMsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGllKClcbiAgICB9KTtcbiAgICB6KFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHUpO1xuICAgIGNvbnN0IG0gPSBKbC5wYXJzZSh1LnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgeihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBmID0gYXdhaXQgeChpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IG1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGx0KGYpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHooXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogQ2UoYyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IE90KGMsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IF9yKGksIGYpIH07XG4gICAgfVxuICB9XG4pLCBYbCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gdC5iaWxsaW5nX2RldGFpbHMubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdLCBpID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHQubGluaz8uZW1haWwgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGwgPSByW3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGwgPyAocltwLkZJUlNUX05BTUVdID0gcywgcltwLkxBU1RfTkFNRV0gPSBsKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIiksIHooXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBldSA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IHRlLCBlcnJfXzogdHUgfSA9IGsoXCJzdHJpcGUtcHJcIiksIHJ1ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBudSA9IGNlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB0ZShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBPKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcnUpO1xuICAgIHRlKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBOKG4pLCBpID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdGUoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IFEobiwgYS50b2tlbiwgaSwgdm9pZCAwKSwgbCA9IGF3YWl0IFhpKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgdGUoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBsLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGMgPT09IG51bGwpXG4gICAgICByZXR1cm4gdHUoXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIHRlKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGMpO1xuICAgIGNvbnN0IHUgPSAoZCwgbSkgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG0/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogbCxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGMuYXBwbGVQYXksIGdvb2dsZVBheTogYy5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBsLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgb3UgPSBWKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgaW5pdFJlc3VsdDogaVxuICB9KSA9PiB7XG4gICAgaWYgKHRlKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGkucHI7XG4gICAgaWYgKGE/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IF8gPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICB0ZShcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgXyk7XG4gICAgICBjb25zdCBnID0gdHlwZW9mIF8uYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBfLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogXy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgQnIobCwgXy5hbW91bnQsIF8ucGVuZGluZywgZywgXy5sYWJlbCk7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBhd2FpdCBOKHMpO1xuICAgIGlmICghYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBfID0gYy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgICBRKHMsIGMudG9rZW4sIF8sIHZvaWQgMCkudGhlbigoZykgPT4ge1xuICAgICAgICBsLmlzU2hvd2luZygpIHx8IEJyKGwsIGcsICExLCB2b2lkIDAsIFwiVG90YWxcIik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGUoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgbC5zaG93KCk7XG4gICAgY29uc3QgdSA9IGF3YWl0IGVzKGwpO1xuICAgIHRlKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCB1KSwgdGUoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGQgPSBhdShyLCB1KSwgbSA9IEcoZCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHYoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubVxuICAgIH0pLCB0ZShcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcCBheW1lbnQgZmxvdy4uLlwiLCBtKTtcbiAgICBjb25zdCBmID0gYXdhaXQgcXMocywge1xuICAgICAgZmllbGRzOiBtLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0XG4gICAgfSksIHkgPSBpdShmKTtcbiAgICBpZiAodGUoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCB0cyh5LCB1KSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHRlKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IHgocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGx0KF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG1bcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbVtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogQ2UobSksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IE90KG0sIGMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbVtwLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogYy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IF9yKHMsIF8pIH07XG4gICAgfVxuICB9XG4pLCBhdSA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gdC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXSwgaSA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwLCBzID0gdC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3MsIGwgPSB0LnNoaXBwaW5nQWRkcmVzcztcbiAgcltwLkVNQUlMXSA9IHJbcC5FTUFJTF0gfHwgdC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgcz8ucG9zdGFsX2NvZGUgfHwgbD8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCBzPy5jb3VudHJ5IHx8IGw/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBjb25zdCBjID0gcltwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbcC5MQVNUX05BTUVdIHx8IGkgfHwgXCJcIjtcbiAgcmV0dXJuIGMgfHwgdSA/IChyW3AuRklSU1RfTkFNRV0gPSBjLCByW3AuTEFTVF9OQU1FXSA9IHUpIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKSwgdGUoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBCciA9IChlLCB0LCByLCBuLCBhKSA9PiB7XG4gIGUudXBkYXRlKHtcbiAgICB0b3RhbDogdCA/IHtcbiAgICAgIGFtb3VudDogdC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGEgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogclxuICAgIH0gOiB2b2lkIDAsXG4gICAgY3VycmVuY3k6IHQ/LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBpdSA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBaaS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBfZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigoYSkgPT4ge1xuICAgIGNvbnN0IGkgPSByID09PSB2b2lkIDAgPyB0cnVlIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gciwgcyA9IGEucHJvdmlkZXIgPT09IHQ7XG4gICAgcmV0dXJuIGkgJiYgcztcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApO1xuICByZXR1cm4gbi5sZW5ndGggIT09IDEgJiYgKGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApLCB2KFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgIHByb3ZpZGVyOiB0LFxuICAgIHByb2Nlc3NvcjogcixcbiAgICBjcG1zOiBlXG4gIH0pKSwgblswXTtcbn0sIFIgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogSWxcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbnUsXG4gICAgcnVuOiBvdVxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogWmwsXG4gICAgcnVuOiBRbFxuICB9LFxuICBzdHJpcGVLbGFybmE6IHtcbiAgICBpbml0OiBLbCxcbiAgICBydW46IFlsXG4gIH0sXG4gIHN0cmlwZUFmZmlybToge1xuICAgIGluaXQ6IEdsLFxuICAgIHJ1bjogcWxcbiAgfSxcbiAgc3RyaXBlQWZ0ZXJwYXk6IHtcbiAgICBpbml0OiB6bCxcbiAgICBydW46IEJsXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBPbCxcbiAgICBydW46IGpsXG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBEbCxcbiAgICBydW46IFVsXG4gIH0sXG4gIC8vIEtsYXJuYVxuICBhaXJ3YWxsZXhLbGFybmE6IHtcbiAgICBpbml0OiBYYyxcbiAgICBydW46IGVsXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBKYyxcbiAgICBydW46IFpjXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogWWMsXG4gICAgcnVuOiBXY1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHpjXG4gIH0sXG4gIGFpcndhbGxleEVGVDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogdmNcbiAgfSxcbiAgYWlyd2FsbGV4QkFDUzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogZ2NcbiAgfSxcbiAgYWlyd2FsbGV4U0VQQToge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogUGNcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogTGwsXG4gICAgcnVuOiBNbFxuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IG5sLFxuICAgIHJ1bjogb2xcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogYWwsXG4gICAgcnVuOiBpbFxuICB9LFxuICBhZHllbkdvb2dsZVBheToge1xuICAgIGluaXQ6IEdjLFxuICAgIHJ1bjogcWNcbiAgfSxcbiAgYWR5ZW5BcHBsZVBheToge1xuICAgIGluaXQ6IGpjLFxuICAgIHJ1bjogJGNcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0sIHsgbG9nX186IHN1LCBlcnJfXzogY3UgfSA9IGsoXCJpbml0LWZsb3dzXCIpLCBYID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBYZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICAgICAgc3UoYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgYSksIHIuc2V0KGEpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICBjdShg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBhZShhKSwgXCJEZXRhaWxzOlwiLCBhKSwgci50aHJvdyhhLCBhZShhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgbHUgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgdXUgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogWChcIlN0cmlwZSBQUlwiLCBSLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBYKFwiU3RyaXBlIExpbmtcIiwgUi5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBTdHJpcGUgS2xhcm5hXG4gIHN0cmlwZUtsYXJuYTogWChcIlN0cmlwZSBLbGFybmFcIiwgUi5zdHJpcGVLbGFybmEuaW5pdCksXG4gIC8vIFN0cmlwZSBBZmZpcm1cbiAgc3RyaXBlQWZmaXJtOiBYKFwiU3RyaXBlIEFmZmlybVwiLCBSLnN0cmlwZUFmZmlybS5pbml0KSxcbiAgLy8gU3RyaXBlIEFmdGVycGF5XG4gIHN0cmlwZUFmdGVycGF5OiBYKFwiU3RyaXBlIEFmdGVycGF5XCIsIFIuc3RyaXBlQWZ0ZXJwYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBYKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBSLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBYKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIFIuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogWChcIkxvb3BcIiwgUi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBYKFwiUGF5UGFsXCIsIFIucGF5cGFsLmluaXQpLFxuICAvLyBLbGFybmFcbiAgYWlyd2FsbGV4S2xhcm5hOiBYKFwiS2xhcm5hXCIsIFIuYWlyd2FsbGV4S2xhcm5hLmluaXQpLFxuICAvLyBQb2NreXQgUGF5UGFsXG4gIHBvY2t5dFBheXBhbDogWChcIlBvY2t5dCBQYXlQYWxcIiwgUi5wb2NreXRQYXlwYWwuaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogWChcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBYKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBSLmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAvLyBBZHllbiBHb29nbGVQYXlcbiAgYWR5ZW5Hb29nbGVQYXk6IFgoXCJBZHllbiBHb29nbGVQYXlcIiwgUi5hZHllbkdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gQXBwbGVQYXlcbiAgYWR5ZW5BcHBsZVBheTogWChcIkFkeWVuIEFwcGxlUGF5XCIsIFIuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IGR1IH0gPSBrKFwiZm9ybS1jYWxsYmFja3NcIiksIHVlID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgSHIgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogdWUsXG4gIG9uQmx1cjogdWUsXG4gIG9uQ2hhbmdlOiB1ZSxcbiAgb25Mb2FkOiB1ZSxcbiAgb25Mb2FkRXJyb3I6IHVlLFxuICBvblZhbGlkYXRpb25FcnJvcjogdWUsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiB1ZSxcbiAgb25DaGVja291dFN1Y2Nlc3M6IHVlLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHVlLFxuICBvbkNoZWNrb3V0RXJyb3I6IHVlLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogdWVcbn0pLCB5ZSA9IGNsYXNzIHllIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAodCkgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0geWUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBWYShyLCBuID8/IHllLk5PT1AsIGR1KTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3JdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IHllLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG55ZS5OT09QID0gKCkgPT4ge1xufSwgeWUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKEhyLmtleW9mKCkuZW51bSkuZm9yRWFjaCgocikgPT4ge1xuICAgIHRbcl0gPSB5ZS5OT09QO1xuICB9KSwgdDtcbn0sIHllLmZyb21PYmplY3QgPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IHllKCk7XG4gIHJldHVybiByLnNldENhbGxiYWNrcyhIci5wYXJzZSh0KSksIHI7XG59O1xubGV0IGFyID0geWU7XG5mdW5jdGlvbiBwdSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gQigpLCB0ID0gZTtcbiAgICBpZiAodD8ubmV4dCB8fCB0Py5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgaWYgKGU/Ll9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoYSkgPT4gYS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKGEpID0+IGEuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IG4gPSBlO1xuICAgIHJldHVybiBuPy5WdWUgfHwgbj8uX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBtdShlKSB7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgciA9IEIoKTtcbiAgICAgICAgcmV0dXJuIHI/Lm5leHQ/LnZlcnNpb24gfHwgcj8uX19ORVhUX0RBVEFfXz8uYnVpbGRJZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCByID0gQigpPy5kb2N1bWVudD8ucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIHIgPyByLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZnUoKSB7XG4gIGNvbnN0IGUgPSBwdSgpLCB0ID0gbXUoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogdCB9O1xufVxuY29uc3QgUm8gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbCwgdCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGwsIHIgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGwsIG4gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6IGZhbHNlLCBhID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGwsIGkgPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IHMgPSBudWxsO1xuICB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciAmJiAocyA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2UpO1xuICBjb25zdCBsID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoOiByLFxuICAgIGphdmFfZW5hYmxlZDogbixcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6IHRydWUsXG4gICAgbGFuZ3VhZ2U6IHMsXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogbCxcbiAgICB1c2VyX2FnZW50OiBhLFxuICAgIGFjY2VwdF9oZWFkZXI6IGlcbiAgfTtcbn07XG52YXIgSSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLmNhcmQgPSBcImNhcmRcIiwgZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5hcHBsZVBheSA9IFwiYXBwbGUtcGF5XCIsIGUuZ29vZ2xlUGF5ID0gXCJnb29nbGUtcGF5XCIsIGUubG9vcENyeXB0byA9IFwibG9vcC1jcnlwdG9cIiwgZS5wYXlwYWwgPSBcInBheXBhbFwiLCBlLmtsYXJuYSA9IFwia2xhcm5hXCIsIGUuYWZmaXJtID0gXCJhZmZpcm1cIiwgZS5hZnRlcnBheSA9IFwiYWZ0ZXJwYXlcIiwgZS5zdHJpcGVMaW5rID0gXCJzdHJpcGUtbGlua1wiLCBlLmFpcndhbGxleEdvb2dsZVBheSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIiwgZS5haXJ3YWxsZXhBcHBsZVBheSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEdvb2dsZVBheSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRBcHBsZVBheSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiLCBlLmFkeWVuR29vZ2xlUGF5ID0gXCJhZHllbi1nb29nbGUtcGF5XCIsIGUuYWR5ZW5BcHBsZVBheSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCIsIGUuYWlyd2FsbGV4QUNIID0gXCJhaXJ3YWxsZXgtYWNoXCIsIGUuYWlyd2FsbGV4RUZUID0gXCJhaXJ3YWxsZXgtZWZ0XCIsIGUuYWlyd2FsbGV4QkFDUyA9IFwiYWlyd2FsbGV4LWJhY3NcIiwgZS5haXJ3YWxsZXhTRVBBID0gXCJhaXJ3YWxsZXgtc2VwYVwiLCBlKSkoSSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShJKTtcbnZhciBrZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkFDSCA9IFwiYWNoXCIsIGUuRUZUID0gXCJlZnRcIiwgZS5CQUNTID0gXCJiYWNzXCIsIGUuU0VQQSA9IFwic2VwYVwiLCBlLkFQUExFX1BBWSA9IFwiYXBwbGVfcGF5XCIsIGUuQ1JFRElUX0NBUkQgPSBcImNyZWRpdF9jYXJkXCIsIGUuR09PR0xFX1BBWSA9IFwiZ29vZ2xlX3BheVwiLCBlLlNUUklQRV9MSU5LID0gXCJzdHJpcGVfbGlua1wiLCBlLkNSWVBUTyA9IFwiY3J5cHRvXCIsIGUuUEFZUEFMID0gXCJwYXlwYWxcIiwgZSkpKGtlIHx8IHt9KTtcbmNvbnN0IEtyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEFwcGxlUGF5LCBlLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBlLmFkeWVuQXBwbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgoYSkgPT4ge1xuICAgIGNvbnN0IGkgPSBhLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpPy5pc0F2YWlsYWJsZSAmJiByLnB1c2goaSk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuPy5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKGkpID0+IG4uc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGk/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChhKSA9PiBhLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IF91KHIsIGEpXG4gIH07XG59LCBZciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhHb29nbGVQYXksIGUuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBlLmFkeWVuR29vZ2xlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKGEpID0+IHtcbiAgICBjb25zdCBpID0gYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaT8uaXNBdmFpbGFibGUgJiYgci5wdXNoKGkpO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbj8uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAoaSkgPT4gbi5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGk/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChhKSA9PiBhLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IHl1KHIsIGEpXG4gIH07XG59LCBfdSA9IChlLCB0KSA9PiB7XG4gIGlmICh0Py5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuPy5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIHl1ID0gKGUsIHQpID0+IHtcbiAgaWYgKHQ/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKGEpID0+IGEucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4/LmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBXciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbXSwgciA9IGUuYWlyd2FsbGV4S2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcj8uaXNBdmFpbGFibGUgJiYgdC5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICBzdGFydEZsb3c6IChhKSA9PiByLnN0YXJ0RmxvdyhhKVxuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlS2xhcm5hLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4/LmlzQXZhaWxhYmxlICYmIHQucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gbi5zdGFydEZsb3coYSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiB0Lm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiB0Lmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBodSh0LCBhKVxuICB9O1xufSwgaHUgPSAoZSwgdCkgPT4ge1xuICBpZiAodD8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobj8uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgS2xhcm5hIHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEtsYXJuYSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBKciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbXSwgciA9IGUuc3RyaXBlQWZmaXJtLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIHI/LmlzQXZhaWxhYmxlICYmIHQucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAobikgPT4gci5zdGFydEZsb3cobilcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiB0Lm1hcCgobikgPT4gbi5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiB0Lmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChuKSA9PiBndSh0LCBuKVxuICB9O1xufSwgZ3UgPSAoZSwgdCkgPT4ge1xuICBpZiAodD8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobj8uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQWZmaXJtIHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFmZmlybSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBaciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbXSwgciA9IGUuc3RyaXBlQWZ0ZXJwYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gcj8uaXNBdmFpbGFibGUgJiYgdC5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChuKSA9PiByLnN0YXJ0RmxvdyhuKVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHQubWFwKChuKSA9PiBuLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHQubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKG4pID0+IHd1KHQsIG4pXG4gIH07XG59LCB3dSA9IChlLCB0KSA9PiB7XG4gIGlmICh0Py5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuPy5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBZnRlcnBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBZnRlcnBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCB2dSA9IChlKSA9PiBKU09OLnN0cmluZ2lmeShlKSwgeyBsb2dfXzogSnQsIGVycl9fOiBidSB9ID0gayhcInRyYWNlclwiKSwgUHUgPSAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIEV1KGUsIHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgYnUoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7cn1gKTtcbiAgfVxufTtcbmxldCBRcjtcbmNvbnN0IEV1ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIilcbiAgICByZXR1cm47XG4gIGNvbnN0IHIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQzBYdC1WNnUtIX57MDA2fX4uanMnKSwgeyBDb25zb2xlU3BhbkV4cG9ydGVyOiBuLCBTaW1wbGVTcGFuUHJvY2Vzc29yOiBhLCBXZWJUcmFjZXJQcm92aWRlcjogaSB9ID0gciwgcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DZkpiTVN5VS0hfnswMDl9fi5qcycpLCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uOiBsIH0gPSBzLCBjID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LXF4NlBZdTUxLSF+ezAwZH1+LmpzJyksIHsgWm9uZUNvbnRleHRNYW5hZ2VyOiB1IH0gPSBjLCBkID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUN5SEdHZzhPLSF+ezAwZX1+LmpzJyksIHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zOiBtIH0gPSBkLCBmID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LTUyeHZDQ21RLSF+ezAwMX1+LmpzJyksIHsgUmVzb3VyY2U6IHkgfSA9IGYsIF8gPSBhd2FpdCBpbXBvcnQoJy4vZGV0ZWN0LXJlc291cmNlcy1ETWh4Qk1ibi0hfnswMGd9fi5qcycpLnRoZW4oKFZ0KSA9PiBWdC5kKSwgeyBkZXRlY3RSZXNvdXJjZXNTeW5jOiBnIH0gPSBfLCB3ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUJ2NGJ0bEctLSF+ezAwa31+LmpzJyksIHsgT1RMUFRyYWNlRXhwb3J0ZXI6IGggfSA9IHcsIGIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ2Rmb2VKQXAtIX57MDBtfX4uanMnKSwgeyBCM1Byb3BhZ2F0b3I6IFMsIEIzSW5qZWN0RW5jb2Rpbmc6IEMgfSA9IGIsIEwgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQkxPUjI2MG4tIX57MDAzfX4uanMnKSwgeyBCYXRjaFNwYW5Qcm9jZXNzb3I6IEEgfSA9IEw7XG4gIEp0KGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke2V9IGFuZCBiYXNlVXJsICR7dH1gKTtcbiAgY29uc3QgJCA9IEN1KHQpO1xuICBKdChgVXNpbmcgY29sbGVjdG9yIFVSTCAkeyR9YCk7XG4gIGNvbnN0IHV0ID0gbmV3IGgoeyB1cmw6ICQgfSksIEFlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IGkoe1xuICAgIHJlc291cmNlOiBuZXcgeShBZSkubWVyZ2UoZygpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IGEobmV3IG4oKSksXG4gICAgICBuZXcgQSh1dCwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSkucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgdSgpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBTKHsgaW5qZWN0RW5jb2Rpbmc6IEMuTVVMVElfSEVBREVSIH0pXG4gIH0pLCBtKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgbCh7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSksIFFyID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgSnQoXCJUcmFjZXIgaW5pdGlhbGl6ZWRcIiksIFFyO1xufSwgQ3UgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmV3IFVSTChlKS5ob3N0bmFtZTtcbiAgcmV0dXJuIHQgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiID8gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiIDogdCA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiIDogXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuY2xhc3MgQXUge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBhKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGkpID0+IHtcbiAgICAgIGlmICghaS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoWHIoaS5vcmlnaW4pICE9PSBYcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEucGVucGFsIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEuc291cmNlICYmIGkuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBzYyhKU09OLnBhcnNlKGkuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogYywgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoYywgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIoYywgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShjLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tjXSA9IGkuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBjKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChpKSA9PiBpLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWkuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBpLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBpKSwgZmFsc2UpIDogdGhpcy5ub25jZXMuaGFzKGkubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGkpLCBmYWxzZSkgOiAodGhpcy5ub25jZXMuYWRkKGkubm9uY2UpLCB0cnVlKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHQsIHRoaXMuYmFzZVVybCA9IHIsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCBYciA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIFN1KGUsIHQpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luOiB0XG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBXcyhuKTtcbiAgaWYgKCFKcyhuLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3Mga3Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHQsIHIpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldCh0LCByKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgSXUgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSBlO1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGkgPSBhLmxvYWRlZFZhbHVlLCBzID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgbCA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBjID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgZW4oXCJhcHBsZV9wYXlcIiwgaSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogbCxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBsICYmIGVuKFwiZ29vZ2xlX3BheVwiLCBpLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChjKTtcbiAgICB9XG4gIH0pO1xufSwgZW4gPSAoZSwgdCwgciwgbiwgYSkgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiByLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IF9lKHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IGooci5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCB0biA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IGZlLCBlcnJfXzogbmUgfSA9IGsoXCJvcC1mb3JtXCIpLCBoZSA9IGNsYXNzIGhlIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZSwgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgWGUoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IFhlKCksIHRoaXMuY29udGV4dCA9IG5ldyBYZSgpLCB0aGlzLmluaXRGbG93cyA9IHV1KCksIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2UsIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGEgPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBpID0gYS5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBhdC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geGUud2l0aChqZS5zZXRTcGFuKHhlLmFjdGl2ZSgpLCBpKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZ2UuQ0RFX0JSSURHRSk7XG4gICAgICAgICAgcy5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgcy5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihzLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pLCBzLm1vdW50KFwiYm9keVwiKSwgZmUoXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKSwgZmUoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgZmUoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgbCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IHRuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZmUoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIGk/LmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIiksIGZlKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGMgPSBhPy5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIHhlLmFjdGl2ZSgpKSwgdSA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiB0blxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGM/LmVuZCgpLCBpPy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIGZlKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCBZcyh1LCB0aGlzLmRldmljZVRva2VuKSwgZmUoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3QgZCA9IGhlLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB1LFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQoZCksIEl1KHRoaXMuaW5pdEZsb3dzLCBkLCB0aGlzLmZvcm1DYWxsYmFja3MpLCBmZShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgbHUodGhpcy5pbml0Rmxvd3MsIGQsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIGZlKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIGk/LnNldFN0YXR1cyh7IGNvZGU6IFBlLk9LIH0pLCB2KFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICBjb25zdCBsID0gYWUocyk7XG4gICAgICAgICAgaT8uc2V0U3RhdHVzKHtcbiAgICAgICAgICAgIGNvZGU6IFBlLkVSUk9SLFxuICAgICAgICAgICAgbWVzc2FnZTogbFxuICAgICAgICAgIH0pLCBuZShcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbCksIHYoXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgICAgZXJyb3I6IGxcbiAgICAgICAgICB9KSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihsKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpPy5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGEpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gYSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAhaSB8fCBpLnR5cGUgPT09IGdlLkNERV9CUklER0UgfHwgKGkubm9kZS5zdHlsZS5oZWlnaHQgPSBhKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnNldChhKSwgdihcImNkZV9sb2FkZWRcIikpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihhKSwgYSksIHYoXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBhXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGEsIGkgPSB7fSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIiksICF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IHMgPSBNby5wYXJzZShhKSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGMgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcoaSk7XG4gICAgICBsLm5hbWUgPSBgJHtzfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHUgPSBuZXcgVVJMKGAvYXBwL3YxLyR7bC5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiB1LnNlYXJjaCA9IGMudG9TdHJpbmcoKSwgbC5zcmMgPSB1LmhyZWYsIGwuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIGwuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShzLCBsKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGEsIGkpID0+IHtcbiAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgIHR5cGU6IGEsXG4gICAgICAgIG5vZGU6IGksXG4gICAgICAgIG1vdW50OiAobCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCk/LmFwcGVuZENoaWxkKGkpLCB2KFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogYVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IHMudHlwZSwgbm9kZTogcy5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtnZS5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbZ2UuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtnZS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW2dlLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICBbZ2UuQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2FdID0gcywgcztcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoYSkgPT4ge1xuICAgICAgY29uc3QgaSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBpLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIGkuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgYS5zdHlsZXMgJiYgaS5hcHBlbmQoXCJzdHlsZXNcIiwgdnUoYS5zdHlsZXMpKSwgaS5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgaTtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoYSkgPT4gZnQoXG4gICAgICB7XG4gICAgICAgIHNwYW5OYW1lOiBcImNvbm5lY3RfdG9fZWxlbWVudFwiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IFN1KGEubm9kZSk7XG4gICAgICAgIGkudHJhY2luZ0NvbnRleHQgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGEudHlwZSwgaSksICF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgYS50eXBlID09PSBnZS5DREVfQlJJREdFICYmIHRoaXMuYW55Q2RlQ29ubi5zZXQoaSk7XG4gICAgICB9XG4gICAgKS5jYXRjaCgoaSkgPT4gbmUoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGkpKSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChhKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgbmUoXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCBmdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogYT8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHYoXCJzdWJtaXRfY2FyZFwiLCB7IC4uLmEgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICAgICAgICBjb25zdCBzID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFzKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgYXdhaXQgUi5jb21tb25DQy5ydW4oe1xuICAgICAgICAgICAgICBjb250ZXh0OiBzLFxuICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IF9lKHMuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihzLmZvcm1EaXYpLFxuICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpLFxuICAgICAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBhPy5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2UsIGk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IGZ0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgIGlmICghYSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogaSwgaXNBdmFpbGFibGU6IHMgfSA9IEtyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIHsgcHJvY2Vzc29yczogbCwgaXNBdmFpbGFibGU6IGMgfSA9IFlyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIGQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpPy5pc0F2YWlsYWJsZSA/PyAhMSwgeyBwcm9jZXNzb3JzOiBtLCBpc0F2YWlsYWJsZTogZiB9ID0gV3IodGhpcy5pbml0Rmxvd3MpLCB7IHByb2Nlc3NvcnM6IHksIGlzQXZhaWxhYmxlOiBfIH0gPSBKcih0aGlzLmluaXRGbG93cyksIHsgcHJvY2Vzc29yczogZywgaXNBdmFpbGFibGU6IHcgfSA9IFpyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIGggPSBhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAoQWUpID0+IEFlLnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIEFlLnByb3ZpZGVyID09PSBcInBheXBhbFwiXG4gICAgICAgICksIFMgPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKT8uaXNBdmFpbGFibGUgPz8gITEsIEMgPSB0aGlzLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgTCA9IEM/LmlzQXZhaWxhYmxlID8/ICExLCBBID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkuY2FyZCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6ICEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLmFwcGxlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogaSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBzXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLmdvb2dsZVBheSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGwsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogY1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogSS5wYXlwYWwsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBkID8gW1UuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogSS5rbGFybmEsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBtLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkuYWZmaXJtLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogeSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBfXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLmFmdGVycGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogZyxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB3XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGggPyBbVS5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBoXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBJLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBTID8gW1UuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IFNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEkuc3RyaXBlTGluayxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtVLkVudW0uc3RyaXBlXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBMLFxuICAgICAgICAgICAgY29udHJvbGxlcjogQz8uaXNBdmFpbGFibGUgPyBDLmNvbnRyb2xsZXIgOiB2b2lkIDBcbiAgICAgICAgICB9XG4gICAgICAgIF0sICQgPSB7XG4gICAgICAgICAgcGF5cGFsOiBJLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IEkuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBJLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogSS5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IEkuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IEkuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogSS5hZHllbkFwcGxlUGF5XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW0FlLCBDcl0pID0+IHtcbiAgICAgICAgICBjb25zdCBWdCA9IENyLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogJFtBZV0gPz8gQWUsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBWdD8uaXNBdmFpbGFibGUgPz8gITFcbiAgICAgICAgICB9O1xuICAgICAgICB9KSwgLi4uQV07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKGEsIGkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBuZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IGZ0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB2KFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZDogYSwgc2V0dGluZ3M6IGkgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBsID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFsKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgc3dpdGNoIChhKSB7XG4gICAgICAgICAgICAgIGNhc2UgSS5jYXJkOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdENhcmQoaSk7XG4gICAgICAgICAgICAgIGNhc2UgSS5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBrZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IGkgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEkucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAga2UuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBpIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBJLmtsYXJuYToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiBjIH0gPSBXcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMoaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBJLmFmZmlybToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiBjIH0gPSBKcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMoaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBJLmFmdGVycGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IGMgfSA9IFpyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkubG9vcENyeXB0bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcImNyeXB0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImxvb3BcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEkuYXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogYyB9ID0gS3IodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjKGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgSS5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogYyB9ID0gWXIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjKGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIEtlZXBpbmcgZXhpc3RpbmcgY29tbWVudGVkIGNvZGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgaW4gdGhlIGZ1dHVyZSB2ZXJzaW9uXG4gICAgICAgICAgICAgIGNhc2UgSS5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgICAgICAgIG5lKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYy5zdGFydEZsb3coaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBJLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgICAgICAgIG5lKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICAgICAgICBuZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgICAgICAgbmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIEkuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgICAgICAgbmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3RhcnRGbG93KGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgSS5hZHllbkFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgICAgICAgbmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYy5zdGFydEZsb3coaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBJLmFpcndhbGxleEFDSDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUi5haXJ3YWxsZXhBQ0gucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IF9lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIGtlLkFDSCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEkuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLmFpcndhbGxleEVGVC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAga2UuRUZULFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgSS5haXJ3YWxsZXhCQUNTOlxuICAgICAgICAgICAgICAgIHJldHVybiBSLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IF9lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIGtlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBJLmFpcndhbGxleFNFUEE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFIuYWlyd2FsbGV4U0VQQS5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogX2UoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAga2UuU0VQQSxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIEkuc3RyaXBlTGluazoge1xuICAgICAgICAgICAgICAgIG5lKFxuICAgICAgICAgICAgICAgICAgXCJTdHJpcGVMaW5rIGNhbm5vdCBiZSBzdWJtaXR0ZWQgbWFudWFsbHkuIFBsZWFzZSBtb3VudCB0aGUgYnV0dG9uIHByb3Blcmx5IGFuZCBpZiB1c2VyIGNvbXBsZXRlZCB0aGUgcGF5bWVudCBmbG93IHZpYSBTdHJpcGVMaW5rIGJ1dHRvbiwgdGhlIHBheW1lbnQgd2lsbCBiZSBzdWJtaXR0ZWQgYXV0b21hdGljYWxseS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY3QoYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgcztcbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZSwgcztcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdFdpdGggPSB0aGlzLmdlbmVyYWxTdWJtaXQsIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBmZShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpLCB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIGZvciAoY29uc3QgYSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgYSAmJiBhLm5vZGUucmVtb3ZlKCk7XG4gICAgICBCKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBXaSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCB2KFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhhKTtcbiAgICB9LCBoZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMjJcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBhci5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcga3UoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IHpuKCksIFlpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IGZ1KCk7XG4gICAgU24odGhpcy5iYXNlVXJsKS50aGVuKChhKSA9PiB7XG4gICAgICBpZiAoIWVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogYSxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIGVyLnNldChpKTtcbiAgICAgIH1cbiAgICB9KSwgdihcImZvcm1faW5pdFwiKSwgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pLCB0LmFsbG93VHJhY2luZyA9PT0gdHJ1ZSAmJiBQdSh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IEF1KHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCBCKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSBoZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiByPy5mb3JtSWQgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9LCBhID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke3R9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke24udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtuLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtuLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtuLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZCA/IChuZShhKSwgdihcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogYSB9KSwgZmFsc2UpIDogIXIgfHwgci5mb3JtSWQgIT09IHRoaXMuZm9ybUlkID8gKG5lKGEpLCB2KFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCBmYWxzZSkgOiB0cnVlO1xuICB9XG59O1xuaGUub2pzRmxvd3MgPSBSLCBoZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmIChoZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIGhlLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBoZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIGEpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gJG4pLm9yaWdpbixcbiAgZm9ybURpdjogYSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgcm4gPSBoZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChybi5nZXRJbnN0YW5jZSgpKSB7XG4gICAgcm4uZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2tsYXJuYVJlc3VsdCwgc2V0S2xhcm5hUmVzdWx0XSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYWZmaXJtUmVzdWx0LCBzZXRBZmZpcm1SZXN1bHRdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthZnRlcnBheVJlc3VsdCwgc2V0QWZ0ZXJwYXlSZXN1bHRdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgICBpZiAob3BGb3JtKSB7XG4gICAgICAgIGNvbnN0IGFwcGxlUGF5UmVzdWx0MiA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0QXBwbGVQYXlSZXN1bHQoYXBwbGVQYXlSZXN1bHQyKTtcbiAgICAgICAgY29uc3QgZ29vZ2xlUGF5UmVzdWx0MiA9IGdldEdvb2dsZVBheVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEdvb2dsZVBheVJlc3VsdChnb29nbGVQYXlSZXN1bHQyKTtcbiAgICAgICAgY29uc3Qga2xhcm5hUmVzdWx0MiA9IGdldEtsYXJuYVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEtsYXJuYVJlc3VsdChrbGFybmFSZXN1bHQyKTtcbiAgICAgICAgY29uc3QgYWZmaXJtUmVzdWx0MiA9IGdldEFmZmlybVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEFmZmlybVJlc3VsdChhZmZpcm1SZXN1bHQyKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJwYXlSZXN1bHQyID0gZ2V0QWZ0ZXJwYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBZnRlcnBheVJlc3VsdChhZnRlcnBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBybi5nZXRJbnN0YW5jZSgpID8/IG5ldyBybih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGtsYXJuYToga2xhcm5hUmVzdWx0LFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnLFxuICAgIGFmZmlybTogYWZmaXJtUmVzdWx0LFxuICAgIGFmdGVycGF5OiBhZnRlcnBheVJlc3VsdFxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQgYXMgQywgRXMgYXMgRSwgRnMgYXMgRiwgTG4gYXMgTCwgTXMgYXMgTSwgUGUgYXMgUCwgUnMgYXMgUiwgU3VibWl0TWV0aG9kcyBhcyBTLCBUbiBhcyBULCBVciBhcyBVLCBhdCBhcyBhLCBGbiBhcyBiLCBvdCBhcyBjLCBkciBhcyBkLCBDYXJkRWxlbWVudCBhcyBlLCBmcyBhcyBmLCBDYXJkRXhwaXJ5RWxlbWVudCBhcyBnLCBDYXJkTnVtYmVyRWxlbWVudCBhcyBoLCBFbGVtZW50c0Zvcm0gYXMgaSwgamUgYXMgaiwga3QgYXMgaywgbHIgYXMgbCwgRmllbGROYW1lIGFzIG0sIEVudmlyb25tZW50IGFzIG4sIG9lIGFzIG8sIFBheUluRmFpbGVkIGFzIHAsIFBheUluU3RhdGUgYXMgcSwgdXNlT3BlblBheUVsZW1lbnRzIGFzIHIsIHRyIGFzIHQsIHVyIGFzIHUsIHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyBhcyB2LCB4ZSBhcyB4LCB5cyBhcyB5IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxrQkFBQUEsVUFBc0I7QUFDL0IsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLE9BQU9DLFFBQVc7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsT0FBQUMsSUFBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLGlCQUFBQyxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxVQUFBQyxJQUFRLFdBQUFDLElBQVMsYUFBQUMsVUFBaUI7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LEVBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFvQixnQkFBQTdvQixHQUFJNG9CLElBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5VCxHQUNNRCxLQUEwQixDQUFDOUIsT0FDeEI7QUFBQSxFQUNMLFFBQVFBLEVBQU87QUFBQSxFQUNmLFlBQVlBLEVBQU8sZUFBZTtBQUFBLEVBQ2xDLFVBQVVBLEVBQU87QUFBQSxFQUNqQixxQkFBcUJBLEVBQU87QUFBQSxFQUM1QixnQkFBZ0JBLEVBQU87QUFBQSxFQUN2QixTQUFTQSxFQUFPO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6JDEiLCAiY2hhbGsiLCAidjQiLCAianN4IiwgIkZyYWdtZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VFZmZlY3QiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJmbiIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkJhc2VFbGVtZW50c1N0eWxlIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJBV1hCYW5rIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAiYSIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiZm4iLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInokMSIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyQxIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImxvZ19fIiwgImVycl9fJDEiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImlzQnVzaW5lc3NQdXJjaGFzZSIsICJub25DZGVGb3JtSW5wdXRzIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIkZpZWxkTmFtZSIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgInJlc3VsdCIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAibnVsbE9yVW5kZWZPciQxIiwgIkVudmlyb25tZW50IiwgIkVudmlyb25tZW50MiIsICJQYXlJbkZhaWxlZCIsICJQYXlJbkZhaWxlZDIiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93IiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAiY3VzdG9tUGFyYW1zIiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImdldEtsYXJuYVByb2Nlc3NvcnMiLCAia2xhcm5hSW5pdFJlc3VsdHMiLCAiYWlyd2FsbGV4S2xhcm5hRmxvd1Jlc3VsdCIsICJzdHJpcGVLbGFybmFGbG93UmVzdWx0IiwgInN0YXJ0S2xhcm5hRmxvdyIsICJnZXRBZmZpcm1Qcm9jZXNzb3JzIiwgImFmZmlybUluaXRSZXN1bHRzIiwgInN0cmlwZUFmZmlybUZsb3dSZXN1bHQiLCAic3RhcnRBZmZpcm1GbG93IiwgImdldEFmdGVycGF5UHJvY2Vzc29ycyIsICJhZnRlcnBheUluaXRSZXN1bHRzIiwgInN0cmlwZUFmdGVycGF5Rmxvd1Jlc3VsdCIsICJzdGFydEFmdGVycGF5RmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAidXNlU3RhdGUiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1c2VFZmZlY3QiLCAianN4IiwgInVybCIsICJDYXJkRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiLCAiRm8iLCAiVG8iLCAiTm8iLCAiciIsICJuIiwgImEiLCAicyIsICJMbyIsICJUIiwgIkQiLCAicCIsICJvbiIsICJhbiIsICJzbiIsICJjbiIsICJnZSIsICJNbyIsICJGdCIsICJ4byIsICJUdCIsICJwZSIsICJEbyIsICJVbyIsICJPbyIsICJqbyIsICIkbyIsICJHbyIsICJxbyIsICJWbyIsICJ6byIsICJCbyIsICJIbyIsICJLbyIsICJVZSIsICJZbyIsICJXbyIsICJKbyIsICJabyIsICJRbyIsICJYbyIsICJlYSIsICJ0dCIsICJ0YSIsICJyYSIsICJuYSIsICJGIiwgImxuIiwgIm9hIiwgImFhIiwgInVuIiwgImlhIiwgInNhIiwgImNhIiwgImxhIiwgInVhIiwgImRhIiwgInBhIiwgIm1hIiwgImZhIiwgIkUiLCAieWEiLCAiZG4iLCAicG4iLCAiaGEiLCAiZ2EiLCAicWUiLCAid2EiLCAidmEiLCAibW4iLCAiYmEiLCAiUGEiLCAiRWEiLCAiQXIiLCAiU3IiLCAiX24iLCAiQ2EiLCAiQWEiLCAiUHQiLCAieW4iLCAiU2EiLCAia2EiLCAiSWEiLCAiaG4iLCAiUmEiLCAiZ24iLCAiRmEiLCAiVGEiLCAiTmEiLCAiTGEiLCAiTWEiLCAieGEiLCAiRGEiLCAiVWEiLCAiT2EiLCAiamEiLCAiWnQiLCAiJGEiLCAiR2EiLCAicWEiLCAiYWUiLCAiVmEiLCAiemEiLCAid24iLCAiQmEiLCAiSGEiLCAiViIsICJ2IiwgIkhpIiwgImpuIiwgImNlIiwgImsiLCAiY2hhbGsiLCAiUXQiLCAiRWUiLCAiS2EiLCAibCIsICJtIiwgImMiLCAidm4iLCAiT2UiLCAiRXQiLCAiQ3QiLCAiTWUiLCAiWWEiLCAieSIsICJfIiwgImciLCAiaCIsICJmIiwgIldhIiwgIlkiLCAiTnQiLCAienQiLCAiQXQiLCAic3QiLCAia3IiLCAiYm4iLCAiUG4iLCAiSmEiLCAiWmEiLCAiRW4iLCAiSXIiLCAiZ3QiLCAiaXIiLCAiZWkiLCAiWHQiLCAiUWEiLCAicHQiLCAiWGEiLCAic3IiLCAidGkiLCAicmkiLCAid2UiLCAib2kiLCAiUnIiLCAibmkiLCAiYWkiLCAiaWkiLCAic2kiLCAiY2kiLCAibGkiLCAiQ24iLCAiRnIiLCAidWkiLCAiZGkiLCAiVHIiLCAicGkiLCAiTnIiLCAibWkiLCAiZmkiLCAieWkiLCAiaGkiLCAiZ2kiLCAid2kiLCAidmkiLCAiYmkiLCAiUGkiLCAiRWkiLCAiQ2kiLCAiQWkiLCAiU2kiLCAia2kiLCAiSWkiLCAiQW4iLCAiUmkiLCAiRmkiLCAiVGkiLCAiTmkiLCAiTGkiLCAiTWkiLCAieGkiLCAiRGkiLCAiVWkiLCAiT2kiLCAiamkiLCAiYiIsICJTIiwgIlhlIiwgImN0IiwgIkxyIiwgIiRpIiwgIkdpIiwgIkJ0IiwgIlNuIiwgIkx0IiwgIkIiLCAiZXIiLCAiTXIiLCAicWkiLCAiVmkiLCAiemkiLCAibXQiLCAiQmkiLCAiY3IiLCAia24iLCAiSW4iLCAiU3QiLCAiS2kiLCAiUm4iLCAiWWkiLCAiV2kiLCAiSmkiLCAiWmkiLCAiUWkiLCAiTXQiLCAieHIiLCAiRHQiLCAieHQiLCAiWGkiLCAiZXMiLCAidHMiLCAicnMiLCAibnMiLCAiUmUiLCAiRHIiLCAib3MiLCAidSIsICJkIiwgImFzIiwgImlzIiwgInJ0IiwgIm50IiwgImxyIiwgIm90IiwgInVyIiwgInNzIiwgImNzIiwgImxzIiwgIkhlIiwgIm9lIiwgInVzIiwgImRzIiwgInBzIiwgIm1zIiwgImt0IiwgImZzIiwgIl9zIiwgInlzIiwgImhzIiwgImdzIiwgIndzIiwgInZzIiwgImJzIiwgIkh0IiwgIlBzIiwgImRyIiwgInRyIiwgIkZuIiwgIlRuIiwgIkVzIiwgImV0IiwgInByIiwgIm1yIiwgIkNzIiwgImZyIiwgIkFzIiwgIlNzIiwgIk5uIiwgImtzIiwgIklzIiwgIlJzIiwgIkZzIiwgIkxuIiwgIlRzIiwgIkt0IiwgIk1uIiwgIk5zIiwgIkxzIiwgIk1zIiwgInhzIiwgIkRzIiwgIlVyIiwgImF0IiwgIlBlIiwgInhlIiwgIll0IiwgIlVzIiwgImplIiwgIk9zIiwgImZ0IiwgInhuIiwgIkoiLCAiJHMiLCAianMiLCAiR3MiLCAiTiIsICJaIiwgIkRuIiwgInFzIiwgIlZzIiwgInpzIiwgIkJzIiwgIlEiLCAiVW4iLCAiT3IiLCAiSHMiLCAiX3IiLCAiT24iLCAiS3MiLCAiY29ubmVjdFRvQ2hpbGQiLCAiVXQiLCAiWXMiLCAiV3MiLCAiSnMiLCAiJG4iLCAiR24iLCAiSXQiLCAiWnMiLCAicW4iLCAianIiLCAiRmUiLCAiV2UiLCAiUXMiLCAiWHMiLCAiZWMiLCAibmMiLCAidGMiLCAicmMiLCAib2MiLCAiVm4iLCAiem4iLCAiYWMiLCAiaWMiLCAiaiIsICJzYyIsICJCbiIsICJDZSIsICJPdCIsICJqdCIsICJjYyIsICJsYyIsICIkdCIsICJIbiIsICJHdCIsICJ5ciIsICJLbiIsICJsZSIsICJZbiIsICJ1YyIsICJXbiIsICJpZSIsICJ0IiwgImRjIiwgInBjIiwgIm1jIiwgImZjIiwgInljIiwgIkciLCAiSm4iLCAiWm4iLCAibHQiLCAiTyIsICJxIiwgInJlIiwgIlUiLCAiUW4iLCAiVmUiLCAiaHIiLCAiV3QiLCAiZ3IiLCAiemUiLCAiQmUiLCAid3IiLCAidmUiLCAiaGMiLCAiZ2MiLCAiS2UiLCAid2MiLCAidmMiLCAidyIsICJiZSIsICJiYyIsICJQYyIsICJFYyIsICJ2ciIsICJDYyIsICJBYyIsICJYbiIsICJTYyIsICJlbyIsICJ0byIsICJybyIsICJiciIsICJQciIsICJrYyIsICJxdCIsICJFciIsICJJYyIsICJSYyIsICIkZSIsICJpdCIsICJGYyIsICJubyIsICJUYyIsICJOYyIsICIkciIsICJMYyIsICJNYyIsICJ4YyIsICJvbyIsICJhbyIsICJpbyIsICJzbyIsICJEYyIsICJVYyIsICJPYyIsICJSbyIsICJKZSIsICJjbyIsICJqYyIsICIkYyIsICJkZSIsICJOZSIsICJHYyIsICJxYyIsICJMIiwgIkEiLCAiJCIsICJZZSIsICJWYyIsICJ6YyIsICJ3dCIsICJCYyIsICJIYyIsICJLYyIsICJaZSIsICJsbyIsICJZYyIsICJXYyIsICJzZSIsICJMZSIsICJKYyIsICJaYyIsICJDIiwgIl90IiwgIlFjIiwgInVvIiwgIlhjIiwgImVsIiwgInBvIiwgIm1vIiwgInRsIiwgInJsIiwgInZ0IiwgImZvIiwgIm5sIiwgIm9sIiwgIkllIiwgIlFlIiwgImFsIiwgImlsIiwgInl0IiwgInNsIiwgImNsIiwgImxsIiwgInVsIiwgIkRlIiwgIl9vIiwgInlvIiwgImRsIiwgInBsIiwgIm1sIiwgImZsIiwgImhvIiwgIl9sIiwgImdvIiwgInlsIiwgImhsIiwgIndvIiwgInJyIiwgImdsIiwgIndsIiwgIkdyIiwgInZsIiwgInZvIiwgImJsIiwgIlBsIiwgIlRlIiwgIlJ0IiwgIkVsIiwgImJvIiwgIkNsIiwgImtsIiwgIkFsIiwgIlNsIiwgIkVvIiwgIlBvIiwgIk0iLCAicXIiLCAiSWwiLCAiUmwiLCAiRmwiLCAiVGwiLCAiZWUiLCAiTmwiLCAiTGwiLCAiTWwiLCAiU2UiLCAieGwiLCAiQ28iLCAiRGwiLCAiVWwiLCAibWUiLCAiVnIiLCAiQW8iLCAiT2wiLCAiamwiLCAiVyIsICJidCIsICJTbyIsICIkbCIsICJHbCIsICJxbCIsICJIIiwgIm5yIiwgImtvIiwgIlZsIiwgInpsIiwgIkJsIiwgIksiLCAib3IiLCAiSW8iLCAiSGwiLCAiS2wiLCAiWWwiLCAiaHQiLCAieiIsICJ6ciIsICJXbCIsICJKbCIsICJabCIsICJ1dCIsICJldSIsICJRbCIsICJYbCIsICJ0ZSIsICJ0dSIsICJydSIsICJudSIsICJfZSIsICJvdSIsICJCciIsICJhdSIsICJpdSIsICJzdSIsICJjdSIsICJYIiwgImx1IiwgInV1IiwgImR1IiwgInVlIiwgIkhyIiwgInllIiwgImFyIiwgInB1IiwgIm11IiwgImZ1IiwgIkkiLCAia2UiLCAiS3IiLCAiX3UiLCAiWXIiLCAieXUiLCAiV3IiLCAiaHUiLCAiSnIiLCAiZ3UiLCAiWnIiLCAid3UiLCAidnUiLCAiSnQiLCAiYnUiLCAiUHUiLCAiRXUiLCAiUXIiLCAiVnQiLCAiQ3UiLCAiQWUiLCAiQXUiLCAiWHIiLCAiU3UiLCAia3UiLCAiSXUiLCAiZW4iLCAidG4iLCAiZmUiLCAibmUiLCAiaGUiLCAiQ3IiLCAicm4iLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgImZvcm1DYWxsYmFja3MiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJhcHBsZVBheVJlc3VsdCIsICJzZXRBcHBsZVBheVJlc3VsdCIsICJnb29nbGVQYXlSZXN1bHQiLCAic2V0R29vZ2xlUGF5UmVzdWx0IiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImtsYXJuYVJlc3VsdCIsICJzZXRLbGFybmFSZXN1bHQiLCAiYWZmaXJtUmVzdWx0IiwgInNldEFmZmlybVJlc3VsdCIsICJhZnRlcnBheVJlc3VsdCIsICJzZXRBZnRlcnBheVJlc3VsdCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImtsYXJuYVJlc3VsdDIiLCAiYWZmaXJtUmVzdWx0MiIsICJhZnRlcnBheVJlc3VsdDIiLCAiZm9ybSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIl0KfQo=
|