@getopenpay/openpay-js 0.5.9-alpha.8393381 → 0.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Resource-BLwyOgQK.js → Resource-DdfT9Qgs.js} +2 -2
- package/dist/{SimpleSpanProcessor-DeuU4Ths.js → SimpleSpanProcessor-CawKbjQf.js} +6 -6
- package/dist/{detect-resources-DDPtTXfY.js → detect-resources-L_FS0vCv.js} +6 -6
- package/dist/{diag-api-DZmGzRV8.js → diag-api-BQgG0RgX.js} +1 -1
- package/dist/{index-CULYfaFw.js → index-BHpe6-5x.js} +4 -4
- package/dist/{index-CkQ9q-k_.js → index-BxkqQAR8.js} +1 -1
- package/dist/{index-DaDbXboZ.js → index-C7QQCPZm.js} +5 -5
- package/dist/{index-De5csJUl.js → index-CK7R3I_S.js} +4 -4
- package/dist/{index-BdZ9xvPw.js → index-CqWJjO-F.js} +5 -5
- package/dist/{index-BvI1ICZA.js → index-CunYG5q8.js} +4 -4
- package/dist/{index-DeOTp50S.js → index-DPnc8HRA.js} +1 -1
- package/dist/{index-DSDNA-jB.js → index-D_vBvWer.js} +3 -3
- package/dist/{index-OoShGWi9.js → index-m6o0K8op.js} +1 -1
- package/dist/{index-Bf_o-9gF.js → index-vclJPHqd.js} +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/{metrics-api-XGsHF2bg.js → metrics-api-cAjroTqE.js} +1 -1
- package/dist/{sdk-info-DnCtN977.js → sdk-info-rz-T2MNr.js} +1 -1
- package/dist/{url-C5OirCC7.js → url-B-V82H68.js} +1 -1
- package/dist/{utils-RaOCiHZC.js → utils-Bcm865JD.js} +1 -1
- package/dist/{utils-CovqycWP.js → utils-Dq30RtPb.js} +3 -3
- package/package.json +1 -1
|
@@ -6379,7 +6379,7 @@ let Vr;
|
|
|
6379
6379
|
const Xl = async (e, t) => {
|
|
6380
6380
|
if (typeof window > "u")
|
|
6381
6381
|
return;
|
|
6382
|
-
const r = await import("./index-
|
|
6382
|
+
const r = await import("./index-BHpe6-5x.js"), { ConsoleSpanExporter: n, SimpleSpanProcessor: a, WebTracerProvider: o } = r, s = await import("./index-CqWJjO-F.js"), { FetchInstrumentation: l } = s, c = await import("./index-m6o0K8op.js"), { ZoneContextManager: u } = c, d = await import("./index-C7QQCPZm.js"), { registerInstrumentations: m } = d, _ = await import("./index-CunYG5q8.js"), { Resource: f } = _, y = await import("./detect-resources-L_FS0vCv.js").then((Ae) => Ae.d), { detectResourcesSync: h } = y, v = await import("./index-DPnc8HRA.js"), { OTLPTraceExporter: P } = v, w = await import("./index-BxkqQAR8.js"), { B3Propagator: b, B3InjectEncoding: S } = w, D = await import("./index-vclJPHqd.js"), { BatchSpanProcessor: C } = D;
|
|
6383
6383
|
Bt(`Initializing tracer with version ${e} and baseUrl ${t}`);
|
|
6384
6384
|
const J = eu(t);
|
|
6385
6385
|
Bt(`Using collector URL ${J}`);
|
|
@@ -6945,7 +6945,7 @@ const ou = (e, t, r) => {
|
|
|
6945
6945
|
(o = $()) == null || o.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Di(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
|
|
6946
6946
|
}, this.updateCallbacks = (o) => {
|
|
6947
6947
|
this.formCallbacks.setCallbacks(o);
|
|
6948
|
-
}, he.assignAsSingleton(this), this.ojsVersion = "0.5.9", this.ojsReleaseVersion = "0.5.9
|
|
6948
|
+
}, he.assignAsSingleton(this), this.ojsVersion = "0.5.9", this.ojsReleaseVersion = "0.5.9", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Xt.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${ze()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new nu(), this.deviceToken = xn(), Li();
|
|
6949
6949
|
const { framework: r, version: n } = Yl();
|
|
6950
6950
|
gn(this.baseUrl).then((o) => {
|
|
6951
6951
|
if (!Zt.current.isSuccess) {
|
|
@@ -7034,4 +7034,4 @@ export {
|
|
|
7034
7034
|
Ve as t,
|
|
7035
7035
|
or as u
|
|
7036
7036
|
};
|
|
7037
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA2fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogei5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6LnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHoub2JqZWN0KHsgZXJyb3I6IHouc3RyaW5nKCkgfSlcbiAgXSkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgaXNMb2FkaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZCQ0KG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkkNCh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkkNChfX3NwcmVhZEFycmF5JDQoW10sIF9fcmVhZCQ0KGVycm9ycykpLCBfX3JlYWQkNChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBlbnZDYWNoZSA9IHt9O1xuY29uc3QgZ2V0Q3VycmVudEVudiA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gIGlmIChlbnZDYWNoZVtiYXNlVXJsXSkge1xuICAgIHJldHVybiBlbnZDYWNoZVtiYXNlVXJsXTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgY29uc3QgZW52ID0gT2pzRW52aXJvbm1lbnQucGFyc2UocmVzcG9uc2UuZW52aXJvbm1lbnQpO1xuICAgIGVudkNhY2hlW2Jhc2VVcmxdID0gZW52O1xuICAgIHJldHVybiBlbnY7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJHUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fJHUoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKSxcbiAgICAgICAga2VlcGFsaXZlOiB0cnVlXG4gICAgICAgIC8vIFRvIHNlbmQgZXZlbnRzIGV2ZW4gaWYgdGhlIHBhZ2UgaXMgdW5sb2FkZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kdShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5jb25zdCB0cmFjayA9IChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpID0+IHtcbiAgbWV0cmljc1F1ZXVlLmFkZEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcyk7XG59O1xuY29uc3QgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlID0gKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59O1xuY29uc3Qgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQucmVhc29uKTtcbiAgdHJhY2soXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQucmVhc29uXG4gIH0pO1xufTtcbmNvbnN0IG9uVW5jYXVnaHRFcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IpO1xuICB0cmFjayhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQuZXJyb3I/Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IGV2ZW50LmVycm9yPy5zdGFjayxcbiAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBldmVudC5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZXZlbnQuY29sbm9cbiAgfSk7XG59O1xubGV0IHBhZ2VMaWZlY3ljbGUgPSBudWxsO1xuY29uc3QgbG9hZFBhZ2VMaWZlY3ljbGUgPSBhc3luYyAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWdlTGlmZWN5Y2xlTW9kdWxlID0gYXdhaXQgaW1wb3J0KCcuL2xpZmVjeWNsZS0hfnswMDN9fi5qcycpO1xuICAgIHBhZ2VMaWZlY3ljbGUgPSBwYWdlTGlmZWN5Y2xlTW9kdWxlLmRlZmF1bHQ7XG4gICAgcmV0dXJuIHBhZ2VMaWZlY3ljbGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbmNvbnN0IHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgdHJhY2soXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZXZlbnQub2xkU3RhdGUsXG4gICAgbmV3X3N0YXRlOiBldmVudC5uZXdTdGF0ZVxuICB9KTtcbiAgaWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGV2ZW50Lm5ld1N0YXRlID09PSBcInBhc3NpdmVcIikge1xuICAgIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbiAgfVxufTtcbmNvbnN0IGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzID0gYXN5bmMgKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG4gIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGxvYWRQYWdlTGlmZWN5Y2xlKCk7XG4gIGlmIChsaWZlY3ljbGUpIHtcbiAgICBsaWZlY3ljbGUuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICB9XG59O1xuY29uc3QgZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgaWYgKGdldFdpbmRvd1NhZmUoKSAmJiBwYWdlTGlmZWN5Y2xlKSB7XG4gICAgcGFnZUxpZmVjeWNsZS5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9jb3JlIHRvby5cbi8qKlxuICogLSBnbG9iYWxUaGlzIChOZXcgc3RhbmRhcmQpXG4gKiAtIHNlbGYgKFdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHdpbmRvdyBpbnN0YW5jZSBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzKVxuICogLSB3aW5kb3cgKGZhbGxiYWNrIGZvciBvbGRlciBicm93c2VyIGltcGxlbWVudGF0aW9ucylcbiAqIC0gZ2xvYmFsIChOb2RlSlMgaW1wbGVtZW50YXRpb24pXG4gKiAtIDxvYmplY3Q+IChXaGVuIGFsbCBlbHNlIGZhaWxzKVxuICovXG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucywgbm8tdW5kZWZcbnZhciBfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgID8gZ2xvYmFsVGhpc1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xudmFyIFZFUlNJT04gPSAnMS45LjAnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHJlID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byB0ZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3ZpZGVkIG93blZlcnNpb24uXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNlbWFudGljczpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gb3duVmVyc2lvbiB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2sob3duVmVyc2lvbikge1xuICAgIHZhciBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIHZhciByZWplY3RlZFZlcnNpb25zID0gbmV3IFNldCgpO1xuICAgIHZhciBteVZlcnNpb25NYXRjaCA9IG93blZlcnNpb24ubWF0Y2gocmUpO1xuICAgIGlmICghbXlWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyByZXR1cm4gbm9vcFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgfVxuICAgIHZhciBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25NYXRjaCA9IGdsb2JhbFZlcnNpb24ubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWdsb2JhbFZlcnNpb25NYXRjaCkge1xuICAgICAgICAgICAgLy8gY2Fubm90IHBhcnNlIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgbm9vcFxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgICAgICBtYWpvcjogK2dsb2JhbFZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgICAgIG1pbm9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICAgICAgcGF0Y2g6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBnbG9iYWxWZXJzaW9uTWF0Y2hbNF0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIGdsb2JhbFZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAoZ2xvYmFsVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2hcbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgIT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWFqb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yID09PSAwKSB7XG4gICAgICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA9PT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vciAmJlxuICAgICAgICAgICAgICAgIG93blZlcnNpb25QYXJzZWQucGF0Y2ggPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5wYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vcikge1xuICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgfTtcbn1cbi8qKlxuICogVGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgQVBJLlxuICpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiB2ZXJzaW9uIG9mIHRoZSBBUEkgcmVxdWVzdGluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2xvYmFsIEFQSVxuICovXG52YXIgaXNDb21wYXRpYmxlID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2soVkVSU0lPTik7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbWFqb3IgPSBWRVJTSU9OLnNwbGl0KCcuJylbMF07XG52YXIgR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIG1ham9yKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoYWxsb3dPdmVycmlkZSA9PT0gdm9pZCAwKSB7IGFsbG93T3ZlcnJpZGUgPSBmYWxzZTsgfVxuICAgIHZhciBhcGkgPSAoX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyB0eXBlKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gVkVSU0lPTikge1xuICAgICAgICAvLyBBbGwgcmVnaXN0ZXJlZCBBUElzIG11c3QgYmUgb2YgdGhlIHNhbWUgdmVyc2lvbiBleGFjdGx5XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGFwaS52ZXJzaW9uICsgXCIgZm9yIFwiICsgdHlwZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgVkVSU0lPTik7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBnbG9iYWxWZXJzaW9uID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb247XG4gICAgaWYgKCFnbG9iYWxWZXJzaW9uIHx8ICFpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKF9iID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3R5cGVdO1xufVxuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICB2YXIgYXBpID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXTtcbiAgICBpZiAoYXBpKSB7XG4gICAgICAgIGRlbGV0ZSBhcGlbdHlwZV07XG4gICAgfVxufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xudmFyIERpYWdDb21wb25lbnRMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlhZ0NvbXBvbmVudExvZ2dlcihwcm9wcykge1xuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2UgfHwgJ0RpYWdDb21wb25lbnRMb2dnZXInO1xuICAgIH1cbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZXJyb3InLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2luZm8nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3ZlcmJvc2UnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdDb21wb25lbnRMb2dnZXI7XG59KCkpO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KG5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDMoW10sIF9fcmVhZCQzKGFyZ3MpLCBmYWxzZSkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBhdmFpbGFibGUgaW50ZXJuYWwgbG9nZ2luZyBsZXZlbHMgZm9yIHRoZSBkaWFnbm9zdGljIGxvZ2dlciwgdGhlIG51bWVyaWMgdmFsdWVzXG4gKiBvZiB0aGUgbGV2ZWxzIGFyZSBkZWZpbmVkIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgaW5pdGlhbCBMb2dMZXZlbCB0byBhdm9pZFxuICogY29tcGF0aWJpbGl0eS9taWdyYXRpb24gaXNzdWVzIGZvciBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBhc3N1bWUgdGhlIG51bWVyaWMgb3JkZXJpbmcuXG4gKi9cbnZhciBEaWFnTG9nTGV2ZWw7XG4oZnVuY3Rpb24gKERpYWdMb2dMZXZlbCkge1xuICAgIC8qKiBEaWFnbm9zdGljIExvZ2dpbmcgbGV2ZWwgc2V0dGluZyB0byBkaXNhYmxlIGFsbCBsb2dnaW5nIChleGNlcHQgYW5kIGZvcmNlZCBsb2dzKSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvciBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IDMwXSA9IFwiRVJST1JcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhIHdhcm5pbmcgc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiV0FSTlwiXSA9IDUwXSA9IFwiV0FSTlwiO1xuICAgIC8qKiBHZW5lcmFsIGluZm9ybWF0aW9uYWwgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiSU5GT1wiXSA9IDYwXSA9IFwiSU5GT1wiO1xuICAgIC8qKiBHZW5lcmFsIGRlYnVnIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkRFQlVHXCJdID0gNzBdID0gXCJERUJVR1wiO1xuICAgIC8qKlxuICAgICAqIERldGFpbGVkIHRyYWNlIGxldmVsIGxvZ2dpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQsIHNob3VsZCBvbmx5IGJlIHNldFxuICAgICAqIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIlZFUkJPU0VcIl0gPSA4MF0gPSBcIlZFUkJPU0VcIjtcbiAgICAvKiogVXNlZCB0byBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgdG8gaW5jbHVkZSBhbGwgbG9nZ2luZyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJBTExcIl0gPSA5OTk5XSA9IFwiQUxMXCI7XG59KShEaWFnTG9nTGV2ZWwgfHwgKERpYWdMb2dMZXZlbCA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIobWF4TGV2ZWwsIGxvZ2dlcikge1xuICAgIGlmIChtYXhMZXZlbCA8IERpYWdMb2dMZXZlbC5OT05FKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gRGlhZ0xvZ0xldmVsLkFMTCkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5BTEw7XG4gICAgfVxuICAgIC8vIEluIGNhc2UgdGhlIGxvZ2dlciBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGxvZ2dlciA9IGxvZ2dlciB8fCB7fTtcbiAgICBmdW5jdGlvbiBfZmlsdGVyRnVuYyhmdW5jTmFtZSwgdGhlTGV2ZWwpIHtcbiAgICAgICAgdmFyIHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgRGlhZ0xvZ0xldmVsLkVSUk9SKSxcbiAgICAgICAgd2FybjogX2ZpbHRlckZ1bmMoJ3dhcm4nLCBEaWFnTG9nTGV2ZWwuV0FSTiksXG4gICAgICAgIGluZm86IF9maWx0ZXJGdW5jKCdpbmZvJywgRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgRGlhZ0xvZ0xldmVsLkRFQlVHKSxcbiAgICAgICAgdmVyYm9zZTogX2ZpbHRlckZ1bmMoJ3ZlcmJvc2UnLCBEaWFnTG9nTGV2ZWwuVkVSQk9TRSksXG4gICAgfTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQyID0gJ2RpYWcnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IGludGVybmFsXG4gKiBkaWFnbm9zdGljIEFQSVxuICovXG52YXIgRGlhZ0FQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIGludGVybmFsIGNvbnN0cnVjdG9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEaWFnQVBJKCkge1xuICAgICAgICBmdW5jdGlvbiBfbG9nUHJveHkoZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDIoW10sIF9fcmVhZCQyKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2luZyBzZWxmIGxvY2FsIHZhcmlhYmxlIGZvciBtaW5pZmljYXRpb24gcHVycG9zZXMgYXMgJ3RoaXMnIGNhbm5vdCBiZSBtaW5pZmllZFxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIERpYWdBUEkgc3BlY2lmaWMgZnVuY3Rpb25zXG4gICAgICAgIHZhciBzZXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAob3B0aW9uc09yTG9nTGV2ZWwgPT09IHZvaWQgMCkgeyBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IERpYWdMb2dMZXZlbC5JTkZPIH07IH1cbiAgICAgICAgICAgIGlmIChsb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIExvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgbWlnaHQgYnJlYWsgdGhlIHVzZXIgYXBwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvZyB0byBzZWxmLiBJZiBhIGxvZ2dlciB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbG9nLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZExvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgdmFyIG5ld0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcigoX2IgPSBvcHRpb25zT3JMb2dMZXZlbC5sb2dMZXZlbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IChfYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPic7XG4gICAgICAgICAgICAgICAgb2xkTG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQyLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgRGlhZ0FQSS5pbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRGlhZ0FQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbnZhciBCYXNlQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29udGV4dCB3aGljaCBpbmhlcml0cyB2YWx1ZXMgZnJvbSBhbiBvcHRpb25hbCBwYXJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDb250ZXh0IGEgY29udGV4dCBmcm9tIHdoaWNoIHRvIGluaGVyaXQgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFzZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgICAvLyBmb3IgbWluaWZpY2F0aW9uXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpOyB9O1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEJhc2VDb250ZXh0O1xufSgpKTtcbi8qKiBUaGUgcm9vdCBjb250ZXh0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29udGV4dCAqL1xudmFyIFJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIE5vb3BDb250ZXh0TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUk9PVF9DT05URVhUO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKF9jb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheSQxKFt0aGlzQXJnXSwgX19yZWFkJDEoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBOb29wQ29udGV4dE1hbmFnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMSA9ICdjb250ZXh0JztcbnZhciBOT09QX0NPTlRFWFRfTUFOQUdFUiA9IG5ldyBOb29wQ29udGV4dE1hbmFnZXIoKTtcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBDb250ZXh0IEFQSVxuICovXG52YXIgQ29udGV4dEFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHRBUEkoKSB7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBDb250ZXh0QVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBDb250ZXh0QVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgbWFuYWdlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgbWFuYWdlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uIChjb250ZXh0TWFuYWdlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgY29udGV4dE1hbmFnZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtjb250ZXh0LCBmbiwgdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBjb250ZXh0IHRvIGEgdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmluZCB0byB0aGUgZXZlbnQgZW1pdHRlciBvciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlciB0byBiaW5kXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChjb250ZXh0LCB0YXJnZXQpO1xuICAgIH07XG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FJDEpIHx8IE5PT1BfQ09OVEVYVF9NQU5BR0VSO1xuICAgIH07XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dEFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhY2VGbGFncztcbihmdW5jdGlvbiAoVHJhY2VGbGFncykge1xuICAgIC8qKiBSZXByZXNlbnRzIG5vIGZsYWcgc2V0LiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBCaXQgdG8gcmVwcmVzZW50IHdoZXRoZXIgdHJhY2UgaXMgc2FtcGxlZCBpbiB0cmFjZSBmbGFncy4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJTQU1QTEVEXCJdID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFRyYWNlRmxhZ3MgfHwgKFRyYWNlRmxhZ3MgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIElOVkFMSURfU1BBTklEID0gJzAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfVFJBQ0VJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogSU5WQUxJRF9UUkFDRUlELFxuICAgIHNwYW5JZDogSU5WQUxJRF9TUEFOSUQsXG4gICAgdHJhY2VGbGFnczogVHJhY2VGbGFncy5OT05FLFxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIE5vblJlY29yZGluZ1NwYW4gaXMgdGhlIGRlZmF1bHQge0BsaW5rIFNwYW59IHRoYXQgaXMgdXNlZCB3aGVuIG5vIFNwYW5cbiAqIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS4gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wIGluY2x1ZGluZyBjb250ZXh0XG4gKiBwcm9wYWdhdGlvbi5cbiAqL1xudmFyIE5vblJlY29yZGluZ1NwYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9uUmVjb3JkaW5nU3Bhbihfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKF9zcGFuQ29udGV4dCA9PT0gdm9pZCAwKSB7IF9zcGFuQ29udGV4dCA9IElOVkFMSURfU1BBTl9DT05URVhUOyB9XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBSZXR1cm5zIGEgU3BhbkNvbnRleHQuXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKF9rZXksIF92YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbiAoX25hbWUsIF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uIChfbGluaykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24gKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24gKF9zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbiAoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChfZW5kVGltZSkgeyB9O1xuICAgIC8vIGlzUmVjb3JkaW5nIGFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBOb25SZWNvcmRpbmdTcGFuLlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfdGltZSkgeyB9O1xuICAgIHJldHVybiBOb25SZWNvcmRpbmdTcGFuO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogc3BhbiBrZXlcbiAqL1xudmFyIFNQQU5fS0VZID0gY3JlYXRlQ29udGV4dEtleSgnT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOJyk7XG4vKipcbiAqIFJldHVybiB0aGUgc3BhbiBpZiBvbmUgZXhpc3RzXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNQQU5fS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEdldHMgdGhlIHNwYW4gZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBvbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICAgIHJldHVybiBnZXRTcGFuKENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG4vKipcbiAqIFNldCB0aGUgc3BhbiBvbiBhIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHVzZSBhcyBwYXJlbnRcbiAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gc2V0IGFjdGl2ZVxuICovXG5mdW5jdGlvbiBzZXRTcGFuKGNvbnRleHQsIHNwYW4pIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTUEFOX0tFWSwgc3Bhbik7XG59XG4vKipcbiAqIFJlbW92ZSBjdXJyZW50IHNwYW4gc3RvcmVkIGluIHRoZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBkZWxldGUgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNQQU5fS0VZKTtcbn1cbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpKTtcbn1cbi8qKlxuICogR2V0IHRoZSBzcGFuIGNvbnRleHQgb2YgdGhlIHNwYW4gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGdldFNwYW4oY29udGV4dCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGFuQ29udGV4dCgpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1RSQUNFSURfUkVHRVggPSAvXihbMC05YS1mXXszMn0pJC9pO1xudmFyIFZBTElEX1NQQU5JRF9SRUdFWCA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaXNWYWxpZFRyYWNlSWQodHJhY2VJZCkge1xuICAgIHJldHVybiBWQUxJRF9UUkFDRUlEX1JFR0VYLnRlc3QodHJhY2VJZCkgJiYgdHJhY2VJZCAhPT0gSU5WQUxJRF9UUkFDRUlEO1xufVxuZnVuY3Rpb24gaXNWYWxpZFNwYW5JZChzcGFuSWQpIHtcbiAgICByZXR1cm4gVkFMSURfU1BBTklEX1JFR0VYLnRlc3Qoc3BhbklkKSAmJiBzcGFuSWQgIT09IElOVkFMSURfU1BBTklEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICogQHJldHVybiB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIChpc1ZhbGlkVHJhY2VJZChzcGFuQ29udGV4dC50cmFjZUlkKSAmJiBpc1ZhbGlkU3BhbklkKHNwYW5Db250ZXh0LnNwYW5JZCkpO1xufVxuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgY29udGV4dEFwaSA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcbi8qKlxuICogTm8tb3AgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBUcmFjZXJ9LlxuICovXG52YXIgTm9vcFRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyKCkge1xuICAgIH1cbiAgICAvLyBzdGFydFNwYW4gc3RhcnRzIGEgbm9vcCBzcGFuLlxuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHsgY29udGV4dCA9IGNvbnRleHRBcGkuYWN0aXZlKCk7IH1cbiAgICAgICAgdmFyIHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudEZyb21Db250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHBhcmVudEZyb21Db250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAobmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICB2YXIgb3B0cztcbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBjdHggIT09IG51bGwgJiYgY3R4ICE9PSB2b2lkIDAgPyBjdHggOiBjb250ZXh0QXBpLmFjdGl2ZSgpO1xuICAgICAgICB2YXIgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICB2YXIgY29udGV4dFdpdGhTcGFuU2V0ID0gc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRBcGkud2l0aChjb250ZXh0V2l0aFNwYW5TZXQsIGZuLCB1bmRlZmluZWQsIHNwYW4pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXI7XG59KCkpO1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAodHlwZW9mIHNwYW5Db250ZXh0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3NwYW5JZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUZsYWdzJ10gPT09ICdudW1iZXInKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyKCk7XG4vKipcbiAqIFByb3h5IHRyYWNlciBwcm92aWRlZCBieSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyXG4gKi9cbnZhciBQcm94eVRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChfbmFtZSwgX29wdGlvbnMsIF9jb250ZXh0LCBfZm4pIHtcbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcnkgdG8gZ2V0IGEgdHJhY2VyIGZyb20gdGhlIHByb3h5IHRyYWNlciBwcm92aWRlci5cbiAgICAgKiBJZiB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyIGhhcyBubyBkZWxlZ2F0ZSwgcmV0dXJuIGEgbm9vcCB0cmFjZXIuXG4gICAgICovXG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBUcmFjZXJQcm92aWRlcn0gd2hpY2ggcmV0dXJucyBhbiBpbXBvdGVudFxuICogVHJhY2VyIGZvciBhbGwgY2FsbHMgdG8gYGdldFRyYWNlcmAuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wLlxuICovXG52YXIgTm9vcFRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgTm9vcFRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BUcmFjZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSX1BST1ZJREVSID0gbmV3IE5vb3BUcmFjZXJQcm92aWRlcigpO1xuLyoqXG4gKiBUcmFjZXIgcHJvdmlkZXIgd2hpY2ggcHJvdmlkZXMge0BsaW5rIFByb3h5VHJhY2VyfXMuXG4gKlxuICogQmVmb3JlIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXJzIHByb3ZpZGVkIGFyZSBOb09wLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXMgYXJlIHByb3ZpZGVkIGZyb20gdGhlIGRlbGVnYXRlLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0IGFmdGVyIHRyYWNlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQsXG4gKiAgIGFsbCB0cmFjZXJzIGFscmVhZHkgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGRlbGVnYXRlIGltcGxlbWVudGF0aW9uLlxuICovXG52YXIgUHJveHlUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgUHJveHlUcmFjZXJ9XG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfVFJBQ0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSB0cmFjZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZS4gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gaXMgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiSU5URVJOQUxcIl0gPSAwXSA9IFwiSU5URVJOQUxcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgc2VydmVyLXNpZGUgaGFuZGxpbmcgb2YgYW4gUlBDIG9yIG90aGVyXG4gICAgICogcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJTRVJWRVJcIl0gPSAxXSA9IFwiU0VSVkVSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHRoZSBjbGllbnQtc2lkZSB3cmFwcGVyIGFyb3VuZCBhbiBSUEMgb3JcbiAgICAgKiBvdGhlciByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNMSUVOVFwiXSA9IDJdID0gXCJDTElFTlRcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgcHJvZHVjZXIgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiUFJPRFVDRVJcIl0gPSAzXSA9IFwiUFJPRFVDRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgY29uc3VtZXIgcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCB8fCAoU3BhbktpbmQgPSB7fSkpO1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xudmFyIFNwYW5TdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChTcGFuU3RhdHVzQ29kZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN0YXR1cy5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIlVOU0VUXCJdID0gMF0gPSBcIlVOU0VUXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yXG4gICAgICogT3BlcmF0b3IgdG8gaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiT0tcIl0gPSAxXSA9IFwiT0tcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiRVJST1JcIl0gPSAyXSA9IFwiRVJST1JcIjtcbn0pKFNwYW5TdGF0dXNDb2RlIHx8IChTcGFuU3RhdHVzQ29kZSA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbnZhciBjb250ZXh0ID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG52YXIgVHJhY2VBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBUcmFjZUFQSSgpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGlzU3BhbkNvbnRleHRWYWxpZDtcbiAgICAgICAgdGhpcy5kZWxldGVTcGFuID0gZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gZ2V0U3BhbjtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBzZXRTcGFuO1xuICAgICAgICB0aGlzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgVHJhY2UgQVBJICovXG4gICAgVHJhY2VBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGdsb2JhbCB0cmFjZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0cmFjZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRyYWNlciBmcm9tIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVHJhY2VBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIHRyYWNlIEFQSSAqL1xudmFyIHRyYWNlID0gVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKTtcblxuY29uc3QgY3JlYXRlQ0RFU3BhbiA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBjZGUuJHtkYXRhLnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgLi4uY2RlQ29ubi50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KGRhdGEucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjcmVhdGVUcmFja2luZ1NwYW4gPSBhc3luYyAob3B0aW9ucywgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke29wdGlvbnMuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogb3B0aW9ucy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBvcHRpb25zLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogb3B0aW9ucy5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogb3B0aW9ucy5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBvcHRpb25zLnJlZmVycmVyLFxuICAgICAgICAuLi5vcHRpb25zLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IG9wdGlvbnMucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bhbi5lbmQoKTtcbiAgfVxufTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUNERVNwYW4oY2RlQ29ubiwgZGF0YSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICAgIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gICAgICB0cmFjayhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yX21lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2VfdHlwZTogZGF0YS50eXBlLFxuICAgICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgICAgIGhhc19mb2N1czogZG9jdW1lbnQuaGFzRm9jdXMoKSxcbiAgICAgICAgaHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgIGRvY3VtZW50X3Zpc2liaWxpdHlfc3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgY29ubmVjdGlvbl9kb3dubGluazogY29ubmVjdGlvbj8uZG93bmxpbmssXG4gICAgICAgIGNvbm5lY3Rpb25fZWZmZWN0aXZlX3R5cGU6IGNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb25fcnR0OiBjb25uZWN0aW9uPy5ydHQsXG4gICAgICAgIGNvbm5lY3Rpb25fc2F2ZV9kYXRhOiBjb25uZWN0aW9uPy5zYXZlRGF0YVxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICAgIH1cbiAgICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5yZXNwb25zZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSk7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnBheWxvYWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4ucmVzdWx0XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3QgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LFxuICAgIFNldHVwQ2hlY2tvdXRSZXNwb25zZSxcbiAgICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiAgKTtcbn07XG5jb25zdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UsXG4gICAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFwcm9tb0NvZGUpIHtcbiAgICAgIHByb21vQ29kZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLFxuICAgIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4gICk7XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UsIFwic2V0dXBfY2hlY2tvdXRcIik7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLCBcInBlcmZvcm1fY2hlY2tvdXRcIik7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZSB9LCByZXNwb25zZU1vZGVsKTtcbiAgY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IHByZXBhcmVQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3Qgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlID0gYXN5bmMgKGNkZUNvbm4sIGVycm9yTWVzc2FnZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7IG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9O1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcXVlcnlDREUoXG4gICAgICBjZGVDb25uLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkIH0sXG4gICAgICBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICByZXR1cm4gXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn07XG5jb25zdCBzZXRVc2VyRGV2aWNlVG9rZW4gPSBhc3luYyAoY2RlQ29ubiwgZGV2aWNlVG9rZW4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogZGV2aWNlVG9rZW4gfSB9LFxuICAgIFNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlXG4gICk7XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6YCwgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBGUkFNRV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcblxuLy8gVGhlc2UgdmFsdWVzIHNob3VsZCBORVZFUiBjaGFuZ2UuIFRoZSB2YWx1ZXMgYXJlIHByZWNpc2VseSBmb3Jcbi8vIGdlbmVyYXRpbmcgVUxJRHMuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIjsgLy8gQ3JvY2tmb3JkJ3MgQmFzZTMyXG5jb25zdCBFTkNPRElOR19MRU4gPSAzMjsgLy8gZnJvbSBFTkNPRElORy5sZW5ndGg7XG5jb25zdCBSQU5ET01fTEVOID0gMTY7XG5jb25zdCBUSU1FX0xFTiA9IDEwO1xuY29uc3QgVElNRV9NQVggPSAyODE0NzQ5NzY3MTA2NTU7IC8vIGZyb20gTWF0aC5wb3coMiwgNDgpIC0gMTtcblxudmFyIFVMSURFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFVMSURFcnJvckNvZGUpIHtcbiAgICBVTElERXJyb3JDb2RlW1wiQmFzZTMySW5jb3JyZWN0RW5jb2RpbmdcIl0gPSBcIkIzMl9FTkNfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlclwiXSA9IFwiREVDX1RJTUVfQ0hBUlwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lTmVnYXRpdmVcIl0gPSBcIkVOQ19USU1FX05FR1wiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkXCJdID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJQUk5HRGV0ZWN0RmFpbHVyZVwiXSA9IFwiUFJOR19ERVRFQ1RcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVUxJREludmFsaWRcIl0gPSBcIlVMSURfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVbmV4cGVjdGVkXCJdID0gXCJVTkVYUEVDVEVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVVSURJbnZhbGlkXCJdID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFVMSURFcnJvckNvZGUgfHwgKFVMSURFcnJvckNvZGUgPSB7fSkpO1xuY2xhc3MgVUxJREVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihgJHttZXNzYWdlfSAoJHtlcnJvckNvZGV9KWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiO1xuICAgICAgICB0aGlzLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByYW5kb21DaGFyKHBybmcpIHtcbiAgICBsZXQgcmFuZCA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKTtcbiAgICBpZiAocmFuZCA9PT0gRU5DT0RJTkdfTEVOKSB7XG4gICAgICAgIHJhbmQgPSBFTkNPRElOR19MRU4gLSAxO1xuICAgIH1cbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmQpO1xufVxuLyoqXG4gKiBEZXRlY3QgdGhlIGJlc3QgUFJORyAocHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKVxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgdG8gY2hlY2sgZnJvbSAoZ2xvYmFsL3dpbmRvdylcbiAqIEByZXR1cm5zIFRoZSBQUk5HIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBSTkcocm9vdCkge1xuICAgIGNvbnN0IHJvb3RMb29rdXAgPSBkZXRlY3RSb290KCk7XG4gICAgY29uc3QgZ2xvYmFsQ3J5cHRvID0gKHJvb3RMb29rdXAgJiYgKHJvb3RMb29rdXAuY3J5cHRvIHx8IHJvb3RMb29rdXAubXNDcnlwdG8pKSB8fFxuICAgICAgICAobnVsbCk7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LmdldFJhbmRvbVZhbHVlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgICAgIGdsb2JhbENyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJbMF0gLyAweGZmO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5yYW5kb21CeXRlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBnbG9iYWxDcnlwdG8ucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAweGZmO1xuICAgIH1cbiAgICBlbHNlIDtcbiAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZGV0ZWN0Um9vdCgpIHtcbiAgICBpZiAoaW5XZWJXb3JrZXIoKSlcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGVuY29kZVJhbmRvbShsZW4sIHBybmcpIHtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHtcbiAgICAgICAgc3RyID0gcmFuZG9tQ2hhcihwcm5nKSArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogRW5jb2RlIHRoZSB0aW1lIHBvcnRpb24gb2YgYSBVTElEXG4gKiBAcGFyYW0gbm93IFRoZSBjdXJyZW50IHRpbWVzdGFtcFxuICogQHBhcmFtIGxlbiBMZW5ndGggdG8gZ2VuZXJhdGVcbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIHRpbWVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlVGltZShub3csIGxlbiA9IFRJTUVfTEVOKSB7XG4gICAgaWYgKGlzTmFOKG5vdykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA+IFRJTUVfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtUSU1FX01BWH06ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5vdykgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGxldCBtb2QsIHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgY3VycmVudExlbiA9IGxlbjsgY3VycmVudExlbiA+IDA7IGN1cnJlbnRMZW4tLSkge1xuICAgICAgICBtb2QgPSBub3cgJSBFTkNPRElOR19MRU47XG4gICAgICAgIHN0ciA9IEVOQ09ESU5HLmNoYXJBdChtb2QpICsgc3RyO1xuICAgICAgICBub3cgPSAobm93IC0gbW9kKSAvIEVOQ09ESU5HX0xFTjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIGluV2ViV29ya2VyKCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBVTElEXG4gKiBAcGFyYW0gc2VlZFRpbWUgT3B0aW9uYWwgdGltZSBzZWVkXG4gKiBAcGFyYW0gcHJuZyBPcHRpb25hbCBQUk5HIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBBIFVMSUQgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogIHVsaWQoKTsgLy8gXCIwMUhOWlhEMDdNNUNFTjVYQTY2RU1aU1JaV1wiXG4gKi9cbmZ1bmN0aW9uIHVsaWQoc2VlZFRpbWUsIHBybmcpIHtcbiAgICBjb25zdCBjdXJyZW50UFJORyA9IGRldGVjdFBSTkcoKTtcbiAgICBjb25zdCBzZWVkID0gRGF0ZS5ub3coKSA7XG4gICAgcmV0dXJuIGVuY29kZVRpbWUoc2VlZCwgVElNRV9MRU4pICsgZW5jb2RlUmFuZG9tKFJBTkRPTV9MRU4sIGN1cnJlbnRQUk5HKTtcbn1cblxuY29uc3QgQ09PS0lFX05BTUUgPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIjtcbmNvbnN0IGdldERldmljZVRva2VuID0gKCkgPT4ge1xuICBjb25zdCBleGlzdGluZ0Nvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgoY29va2llKSA9PiBjb29raWUuaW5jbHVkZXMoQ09PS0lFX05BTUUpKTtcbiAgaWYgKGV4aXN0aW5nQ29va2llKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ29va2llLnNwbGl0KFwiPVwiKVsxXTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IHVsaWQoKTtcbiAgc2V0RGV2aWNlVG9rZW4odG9rZW4pO1xuICByZXR1cm4gdG9rZW47XG59O1xuY29uc3Qgc2V0RGV2aWNlVG9rZW4gPSAodG9rZW4pID0+IHtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgb25lWWVhckZyb21Ob3cuc2V0RnVsbFllYXIob25lWWVhckZyb21Ob3cuZ2V0RnVsbFllYXIoKSArIDEpO1xuICBkb2N1bWVudC5jb29raWUgPSBgJHtDT09LSUVfTkFNRX09JHt0b2tlbn07IHBhdGg9LzsgZXhwaXJlcz0ke29uZVllYXJGcm9tTm93LnRvVVRDU3RyaW5nKCl9YDtcbn07XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnR5cGUgPT09IFwiY2hlY2tib3hcIiA/IGlucHV0LmNoZWNrZWQgOiBpbnB1dC52YWx1ZTtcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBnZW5lcmF0ZUFub255bW91c1ZhbHVlcyA9ICgpID0+IHtcbiAgY29uc3QgaWQgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgZW1haWw6IGB4eF8ke2lkfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2lkfWAsXG4gICAgY291bnRyeTogYFVTYFxuICB9O1xufTtcbmNvbnN0IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLkxJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgaWYgKCFjaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykgcmV0dXJuO1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2V0RnVsbE5hbWUgPSAoZmlyc3ROYW1lLCBsYXN0TmFtZSkgPT4ge1xuICByZXR1cm4gW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBiYW5rU2VsZWN0b3JTdHlsZXMgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7aGVpZ2h0ID8/IFwiNjAwcHhcIn0gLSA0OHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5iYW5rLXNlbGVjdG9yLWhlYWRlciB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5iYW5rLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG4uYmFuay1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYm9yZGVyOiAycHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4uYmFuay1pdGVtOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstaXRlbTphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG4uYmFuay1sb2dvIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XG59XG4uYmFuay1sb2dvLXBsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBjb2xvcjogIzZjNzU3ZDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5iYW5rLWluZm8ge1xuICBmbGV4OiAxO1xufVxuLmJhbmstZGlzcGxheS1uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzFhMWExYTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuLmJhbmstbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNmM3NTdkO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgaWQsIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBuYW1lIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwiJHtpZCA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHt0aXRsZSA/PyBcIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIn1cIiBhbGxvdz1cInBheW1lbnRcIiBuYW1lPVwiJHtuYW1lID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG59O1xuY29uc3QgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciA9IChiYW5rcywgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlIH0gPSBvcHRpb25zID8/IHt9O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgIGNvbnN0IGJhbmtMaXN0SHRtbCA9IGJhbmtzLm1hcCgoYmFuaywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGxvZ29IdG1sID0gYmFuay5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke2JhbmsucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7YmFuay5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7YmFuay5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2luZGV4fVwiPlxuICAgICAgICAgICR7bG9nb0h0bWx9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaW5mb1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstZGlzcGxheS1uYW1lXCI+JHtiYW5rLmRpc3BsYXlfbmFtZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLW5hbWVcIj4ke2JhbmsuYmFua19uYW1lfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7YmFua1NlbGVjdG9yU3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke3RpdGxlID8/IFwiU2VsZWN0IHlvdXIgYmFua1wifTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbGlzdFwiPlxuICAgICAgICAgICAgICAke2JhbmtMaXN0SHRtbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gICAgY29uc3QgYmFua0l0ZW1zID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbmstaXRlbVwiKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChob3N0KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSk7XG4gICAgYmFua0l0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShiYW5rc1tpbmRleF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgfSk7XG59O1xuY29uc3QgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0gPSAocGF5bWVudE1ldGhvZFR5cGUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBiYXNlVXJsIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhcHAvZGlyZWN0X2RlYml0L21pY3JvX2RlcG9zaXQ/dHlwZT0ke3BheW1lbnRNZXRob2RUeXBlfWAsIGJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UucGF5bG9hZC5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIE1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZUNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbEhhbmRsZUNhbmNlbCgpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgd3JhcHBlZEhhbmRsZUNhbmNlbCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdCwgZXJyX186IGVycl9fJHMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2Rcbn0pID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJHQoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRzKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHMsIGVycl9fOiBlcnJfXyRyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzO1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyRyKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHIsIGVycl9fOiBlcnJfXyRxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJHEoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcyksXG4gICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKVxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAgPSBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXzIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKGFyZ3MubG9nUHJlZml4KTtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYXJncy5hbnlDZGVDb25uZWN0aW9uKTtcbiAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGxvZ19fMihgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLmApO1xuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gYXdhaXQgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QoYXJncy5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogc2V0dXBSZXN1bHQgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYXJncy51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGxvZ19fMihgVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICAgIGlmICghYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJHEoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogYXJncy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfTtcbiAgICBsb2dfXzIoYERvaW5nIGNoZWNrb3V0Li4uYCwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBzaGlwcGluZ0FkZHJlc3NSZXF1aXJlZDogcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIGJhc2VSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGJhc2VSZXF1ZXN0KSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnYgPSBhd2FpdCBnZXRDdXJyZW50RW52KGJhc2VVcmwpO1xuICByZXR1cm4gZW52ID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSBhc3luYyAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gcGF5bWVudERhdGEuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTFdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUyXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FM10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczMgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoc2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmxvY2FsaXR5IHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBzaGlwcGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kcSwgZXJyX186IGVycl9fJHAgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWJhY3NcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhCQUNTRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IG1pY3JvRGVwb3NpdERhdGEgPSBudWxsO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBsb2dfXyRxKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1pY3JvRGVwb3NpdERhdGEgPSBhd2FpdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybShcImJhY3NfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIzNTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRxKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtzID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgc2VsZWN0ZWRCYW5rO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwidHJ1ZWxheWVyXCIgJiYgYXZhaWxhYmxlQmFua3MgJiYgYXZhaWxhYmxlQmFua3MubGVuZ3RoID49IDEpIHtcbiAgICAgIGxvZ19fJHEoXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlbGVjdGVkQmFuayA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IoYXZhaWxhYmxlQmFua3MsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHEoYEJhbmsgc2VsZWN0ZWQ6ICR7c2VsZWN0ZWRCYW5rLmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHEoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImJhY3NfZGlyZWN0X2RlYml0XCIsXG4gICAgICBiYWNzX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBUcnVlTGF5ZXJcbiAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICBzb3J0X2NvZGU6IG1pY3JvRGVwb3NpdERhdGE/LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5iaWxsaW5nQWRkcmVzcywgdG93bjogYmlsbGluZ0FkZHJlc3MuY2l0eSwgcG9zdGNvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogZGlyZWN0RGViaXREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHEoXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRxKGDilbAgQkFDUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRwKFwiQkFDUyBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHAsIGVycl9fOiBlcnJfXyRvIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1lZnRcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhFRlRGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kcChcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJlZnRfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0NTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcChcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRwKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGRpcmVjdERlYml0RGF0YSA9IHtcbiAgICAgIHR5cGU6IFwiZWZ0X2RpcmVjdF9kZWJpdFwiLFxuICAgICAgZWZ0X2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBQbGFpZFxuICAgICAgICBidXNpbmVzc19hY2NvdW50OiBjdXN0b21QYXJhbXMuaXNCdXNpbmVzc0FjY291bnQgPz8gZmFsc2UsXG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIGluc3RpdHV0aW9uX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uaW5zdGl0dXRpb25fbnVtYmVyLFxuICAgICAgICB0cmFuc2l0X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8udHJhbnNpdF9udW1iZXIsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlclxuICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRwKFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiRUZUIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJHAoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1lZnRcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbyhcIkVGVCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG8sIGVycl9fOiBlcnJfXyRuIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1zZXBhXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4U0VQQUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kbyhcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJzZXBhX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG8oXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbyhcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyRvKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRvKGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRvKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IHNlbGVjdGVkQmFuaz8uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgIC8vIG1pY3JvZGVwb3NpdFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIGliYW46IG1pY3JvRGVwb3NpdERhdGE/LmliYW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kbyhcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG8oYOKVsCBTRVBBIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG4oXCJTRVBBIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbiwgZXJyX186IGVycl9fJG0gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kbShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRuKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRtKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMyhlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJG0oZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICAgIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGFwcGxlUGF5UGF5bWVudCkgPT4ge1xuICBjb25zdCBwbUJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBzaGlwcGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuc2hpcHBpbmdDb250YWN0O1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgaWYgKHBtQmlsbGluZ0NvbnRhY3QgfHwgYmlsbGluZ0NvbnRhY3QgfHwgc2hpcHBpbmdDb250YWN0KSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwbUJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgYmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBzaGlwcGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9ICh7XG4gIHRvdGFsLFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7cHJlZmlsbC50b2tlbn1gLCBGUkFNRV9CQVNFX1VSTCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cbiAgY29uc3QgbGluZUl0ZW0gPSBwcmVmaWxsLmxpbmVfaXRlbXM/LlswXTtcbiAgaWYgKCFsaW5lSXRlbSkgcmV0dXJuIHZvaWQgMDtcbiAgcmV0dXJuIHtcbiAgICBwYXltZW50RGVzY3JpcHRpb246IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgIGxhYmVsOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ID8/IHZvaWQgMCxcbiAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICB9LFxuICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtwcmVmaWxsLnRva2VufWBcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVBcHBsZVBheVRvdGFsID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbCA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCBhbW91bnQgPSAoYW1vdW50QXRvbSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5sYWJlbCA/PyBkZWZhdWx0TGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICBpbml0aWFsUHJldmlldyxcbiAgICBwcmVmaWxsLFxuICAgIGRlZmF1bHRMYWJlbFxuICB9KTtcbiAgbGV0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KVxuICB9O1xuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRtLCBlcnJfXzogZXJyX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRsKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kbShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRsKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRtKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJG0oYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kbShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRsKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJGwoXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kbChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJG0oYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJG0oXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRsKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaywgZXJyX186IGVycl9fJGsgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kayhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kayhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGsoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kayhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5wYXltZW50UmVxdWVzdC50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kayhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGosIGVycl9fOiBlcnJfXyRqIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGooXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRqKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kaihcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRqKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRqKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRqKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kaihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kaihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRqKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGooXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGksIGVycl9fOiBlcnJfXyRpIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hY2hcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhBQ0hGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kaShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJhY2hfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0MDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRpKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIC8vQUNIIG1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICAgICAgYWJhX3JvdXRpbmdfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hYmFfcm91dGluZ19udW1iZXJcbiAgICAgICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJGkoXCJQbGFpZCB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRpKGDilbAgUGxhaWQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGkoXCJBQ0ggcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJGgoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJGgoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJGgoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIGZvcm1JbnB1dHMsXG4gICAgICBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29udGV4dC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVpcmVkVXNlckFjdGlvbnMgPSBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIWNvbnNlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kaChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kZywgZXJyX186IGVycl9fJGggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kZyhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kZyhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kZyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ucGF5bWVudFJlcXVlc3QudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kaChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGcoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRmKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRnKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kZihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRnKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRmKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgbG9nX18kZihcIl9fX1wiLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kZihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBlbmNyeXB0ZWRQYXltZW50VG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kZihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kZihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kZihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGYoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRnKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBBcHBsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoZm9ybUlucHV0cywgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoXG4gICAgICAgIG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgbW9iaWxlV2FsbGV0UGF5bWVudERhdGEgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBtb2JpbGVXYWxsZXRQYXltZW50RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1hcHBsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRmKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGwsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3NcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyRlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogcGF5bWVudFJlcXVlc3QudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRmKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZCwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1nb29nbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyRkKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRkKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRkKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIHByZWZpbGwsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kZChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgbG9nX18kZChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoZW5jcnlwdGVkUGF5bWVudFRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kZCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyRkKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmF1bHRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRjKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt2YXVsdElkfV1gKTtcbiAgICByZXR1cm4gdmF1bHRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kZChlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHBhcnNlQXJnRnJvbUhyZWYgPSAoaHJlZiwgYXJnTmFtZSkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICByZXR1cm4gdXJsLnNlYXJjaFBhcmFtcy5nZXQoYXJnTmFtZSk7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5Qb2NreXQzZHNGbG93ID0gYXN5bmMgKGJhc2VVcmwsIGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQxKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnMtZnJhbWVcIik7XG5jb25zdCBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yID0gKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKSA9PiB7XG4gIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIGlmcmFtZS5uYW1lID0gXCJjYXJkaW5hbF9jb2xsZWN0aW9uX2lmcmFtZVwiO1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBpZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwcHhcIjtcbiAgaWZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMTBweFwiO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gcG9zdFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBpbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgaW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuICB9O1xuICByZXR1cm4geyBmb3JtLCBkZXRhY2ggfTtcbn07XG5jb25zdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IHBvc3RVcmwsIGFjY2Vzc1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHBvc3RVcmwpLm9yaWdpbjtcbiAgICBjb25zdCB7IGZvcm0sIGRldGFjaCB9ID0gYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3Rvcihwb3N0VXJsLCBhY2Nlc3NUb2tlbik7XG4gICAgbG9nX18kYihcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgICBjb25zdCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGV4cGVjdGVkT3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgbG9nX18kYihcIlJlY2VpdmVkIGV2ZW50IGZyb20gZGV2aWNlIGRhdGEgY29sbGVjdG9yOlwiLCBkYXRhKTtcbiAgICAgIGlmIChkYXRhW1wiTWVzc2FnZVR5cGVcIl0gPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkZXRhY2goKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgICAgbG9nX18kYihcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKTtcbiAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICBsb2dfXyRiKFwiU3VibWl0dGVkIGZvcm1cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJGMoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGVycm9yKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5QYXllckF1dGggPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QgfSA9IHBhcmFtcztcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHN0ZXBVcFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgdG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgdG9rZW5JbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgdG9rZW5JbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgdG9rZW5JbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBjb25zdCBtZElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBtZElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBtZElucHV0Lm5hbWUgPSBcIk1EXCI7XG4gIG1kSW5wdXQudmFsdWUgPSBtZXJjaGFudERhdGE7XG4gIGZvcm0uYXBwZW5kQ2hpbGQodG9rZW5JbnB1dCk7XG4gIGZvcm0uYXBwZW5kQ2hpbGQobWRJbnB1dCk7XG4gIGhvc3QuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIHJldHVybiBmb3JtO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJGIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3lic1wiKTtcbmNvbnN0IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RlcF91cF91cmw6IHouc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogei5zdHJpbmcoKSxcbiAgZGRfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRlJJRU5ETFlfRVJSID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAodXNlckFjdGlvbikgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5zYWZlUGFyc2UodXNlckFjdGlvbik7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGIoYEN5YmVyc291cmNlIDNEUyBpcyByZXF1aXJlZCBidXQgdXNlciBhY3Rpb24gaXMgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKEZSSUVORExZX0VSUik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMgPSAodXNlckFjdGlvbikgPT4ge1xuICByZXR1cm4gdXNlckFjdGlvbltcInR5cGVcIl0gPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiO1xufTtcbmNvbnN0IGhhbmRsZUN5YmVyc291cmNlM2RzID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybCwgYWNjZXNzVG9rZW4sIG1lcmNoYW50RGF0YSwgaWZyYW1lLCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHN0ZXBVcFVybCkub3JpZ2luO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kYShcIkNsZWFuaW5nIHVwIEN5YmVyc291cmNlIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRhKFwiQ3liZXJzb3VyY2UgM0RTIGNhbmNlbGxlZFwiKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVELCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgbG9nX18kYShcIkN5YmVyc291cmNlIDNEUyBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIHN0YXR1cyk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBzdGF0dXMuc3RhdHVzLCBjbGVhbnVwIH0pO1xuICAgICAgY2xlYW51cFBvbGxpbmcoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgZXhwZWN0ZWRPcmlnaW4sIFwicGluZy0zZHMtc3RhdHVzXCIsIFBpbmczRFNTdGF0dXNSZXNwb25zZSk7XG4gICAgY29uc3QgY2xlYW51cFBvbGxpbmcgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHM6IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmU6IChzdGF0dXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBmb3JtID0gcnVuUGF5ZXJBdXRoKHtcbiAgICAgIHN0ZXBVcFVybCxcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgbWVyY2hhbnREYXRhLFxuICAgICAgaWZyYW1lLFxuICAgICAgaG9zdFxuICAgIH0pO1xuICAgIGZvcm0uc3VibWl0KCk7XG4gIH0pO1xufTtcbmNvbnN0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyA9IGFzeW5jICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyh1c2VyQWN0aW9uKTtcbiAgY29uc3QgeyBzdGVwX3VwX3VybCwgYWNjZXNzX3Rva2VuLCBkZF91cmwsIGRkX3Rva2VuLCBtZXJjaGFudF9kYXRhIH0gPSBwYXlsb2FkO1xuICBpZiAoZGRfdXJsICYmIGRkX3Rva2VuKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblJlc3VsdCA9IGF3YWl0IHJ1bkRldmljZURhdGFDb2xsZWN0aW9uKHtcbiAgICAgIHBvc3RVcmw6IGRkX3VybCxcbiAgICAgIGFjY2Vzc1Rva2VuOiBkZF90b2tlblxuICAgIH0pO1xuICAgIGxvZ19fJGEoXCJEZXZpY2UgZGF0YSBjb2xsZWN0aW9uIGNvbXBsZXRlZCB3aXRoIHN0YXR1czpcIiwgY29sbGVjdGlvblJlc3VsdC5TdGF0dXMpO1xuICB9IGVsc2Uge1xuICAgIGVycl9fJGIoXCJObyBkZXZpY2UgZGF0YSBjb2xsZWN0aW9uIFVSTCBvciB0b2tlbiBwcm92aWRlZFwiKTtcbiAgfVxuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJcIiwgeyBuYW1lOiBcImNhcmRpbmFsX2F1dGhfaWZyYW1lXCIgfSk7XG4gIGxvZ19fJGEoXCJSdW5uaW5nIEN5YmVyc291cmNlIDNEUyBmbG93XCIpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyh7XG4gICAgc3RlcFVwVXJsOiBzdGVwX3VwX3VybCxcbiAgICBhY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuLFxuICAgIG1lcmNoYW50RGF0YTogbWVyY2hhbnRfZGF0YSxcbiAgICBpZnJhbWUsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGxvZ19fJGEoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyQ5KGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJDkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRhKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyQ5KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kOShg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyQ5KGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyQ5KGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kYShg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyQ5KGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRhKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRhKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ4LCBlcnJfXzogZXJyX18kOSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDgoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kOChg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyQ4KGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ4KGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kOChg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ4KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY3VzdG9tUGFyYW1zLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kOChg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDgoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kOChg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kOChg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICAgIGxvZ19fJDgoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQ4KFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHRyYWNrKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICAgIC4uLmVycm9yLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBlcnJIZWFkZXJzID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICBpZiAoXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGVyckhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4aXN0aW5nX2NjX3BtX2lkID0gZXJySGVhZGVyc1tcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCJdO1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEV4aXN0aW5nIENDIFBNIElEOiAke2NvbW1vbkNoZWNrb3V0UGFyYW1zLmV4aXN0aW5nX2NjX3BtX2lkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWR5ZW4zZHMgPSBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBZHllbjNkcykge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFkeWVuXCJdID0gYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyQ4KGDilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZUFjdGlvbiA9IHN0YXJ0UGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJjeWJlcnNvdXJjZV9wYXllcl9hdXRoXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEN5YmVyc291cmNlIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEN5YmVyc291cmNlIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkID0gQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkLnBhcnNlKGN5YmVyc291cmNlQWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh7XG4gICAgICAgICAgICAgIC4uLmN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCxcbiAgICAgICAgICAgICAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX3BjY3NfaWQ6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJjeWJlcnNvdXJjZVwiXSA9IGN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2hvdWxkVXNlU3RyaXBlRmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAgIGlmICghcmVxdWlyZXNQb2NreXQzZHMgJiYgIWN5YmVyc291cmNlQWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyQ4KGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2dfXyQ4KGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjY1BtSWQgPSBzdGFydFBmUmVzdWx0LmNjX3BtX2lkO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtjY1BtSWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHshc2hvdWxkVXNlU3RyaXBlRmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWQsXG4gICAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHNob3VsZFVzZVN0cmlwZUZsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kOChg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kOShg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyQ5KGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbjNEU0FjdGlvblR5cGVzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdO1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGNvbW1vbjNEU0FjdGlvblR5cGVzLmluY2x1ZGVzKGFjdGlvbi50eXBlKSk7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBsb2dfXyQ4KGDilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgIHRyYWNrKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dfXyQ4KGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybH1dYCk7XG4gIHRyYWNrKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7IHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCwgYmFzZVVybCB9KTtcbiAgbG9nX18kOChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0cmFjayhcIjNkc19jYW5jZWxsZWRcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdHJhY2soXCIzZHNfZmFpbHVyZVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICB0cmFjayhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufTtcblxuY29uc3QgTG9vcENyeXB0b0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImxvb3AtY3J5cHRvXCIpO1xuY29uc3QgaW5pdExvb3BGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kNyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBMb29wQ3J5cHRvQ3BtKTtcbiAgICBsb2dfXyQ3KGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkoY2hlY2tvdXRQYXltZW50TWV0aG9kKX1gKTtcbiAgICBsb2dfXyQ3KGBTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uYCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoXG4gICAgICBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBwcmVmaWxsLnRva2VuLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghaXNTZXR1cE1vZGUgJiYgIWNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhwcmVmaWxsLmN1cnJlbmN5KSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3ByZWZpbGwuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSB8fCAhcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbmVjZXNzYXJ5IHNldHVwIGRhdGEgZm9yIExvb3BcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRTZXR1cEluZm8gPSBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gcGF5bWVudFNldHVwSW5mb1tcImF1dGhvcml6YXRpb25fYW1vdW50XCJdO1xuICAgIGxldCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50ID0gcGF5bWVudFNldHVwSW5mb1tcIm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBjb25zdCBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoID0gcGF5bWVudFNldHVwSW5mb1tcImFsbG93X2N1c3RvbWVyX3RvX2Nob29zZV9hdXRoXCJdO1xuICAgIGxldCBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IDA7XG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgoc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCwgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAoaW5pdGlhbFByZXZpZXcgPyBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tIDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSkgKiBwYXltZW50U2V0dXBJbmZvW1widG9rZW5fcHJpY2VcIl07XG4gICAgICBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgobWluQXV0aG9yaXphdGlvblVzZEFtb3VudCwgY2hhcmdlQW1vdW50VXNkQXRvbSk7XG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgoc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCwgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRVc2RBbW91bnQgPSBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGNvbnN0IGN1c3RvbWVyUmVmSWQgPSB2NCgpO1xuICAgIGNvbnN0IHdpZGdldFByb3BzID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudCxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBjdXN0b21lclJlZklkLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCxcbiAgICAgIGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGhcbiAgICB9O1xuICAgIGNvbnN0IGluaXRMb29wQ29ubmVjdFByb3BzID0ge1xuICAgICAgYXBpVG9rZW46IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHdpZGdldFByb3BzLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuTG9vcEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBSdW5uaW5nIExvb3AgZmxvdy4uLmApO1xuICAgIGxvZ19fJDcoXCJjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgIGxvZ19fJDcoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ3KFwibm9uQ2RlRm9ybUlucHV0c1wiLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICBsb2dfXyQ3KFwiZmxvd0NhbGxiYWNrc1wiLCBmb3JtQ2FsbGJhY2tzKTtcbiAgICBsb2dfXyQ3KFwiY3VzdG9tUGFyYW1zXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ3KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgcHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBpc0NoZWNrb3V0TW9kZSA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGN1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgfVxuICAgIGlmICghY3VzdG9tUGFyYW1zLnN1Y2Nlc3MpIHtcbiAgICAgIHRyYWNrKFwibG9vcF9wYXlfZmxvd19mYWlsdXJlXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIFN1Y2Nlc3MgaXMgbm90IHRydWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIC4uLmN1c3RvbWVyRmllbGRzLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc0NoZWNrb3V0TW9kZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNDaGVja291dE1vZGUgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQsXG4gICAgICAvLyBOT1RFOiB3ZSBkbyBoYXZlIHRoZSBjaGVja291dCBhdHRlbXB0IGlkIGhlcmUgZXZlbiBpZiBpdHMgYSBzZXR1cCwgYnV0IGZvciBub3cgd2UgZG9uJ3QgaW5jbHVkZSBpdFxuICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNoZWNrb3V0IGF0dGVtcHQgc3VwcG9ydCBmb3Igc2V0dXAgaW50ZW50cy5cbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzQ2hlY2tvdXRNb2RlID8gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogY3VzdG9tUGFyYW1zLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBjdXN0b21QYXJhbXMuc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJDcoYENvbmZpcm0gcmVzdWx0OiAke2NvbmZpcm1SZXN1bHR9YCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ3KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBsb2dfXyQ3KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIGxvZ19fJDcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNyhgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ4KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwYXlwYWxcIik7XG5jb25zdCBQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5jb25zdCBpbml0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUGF5cGFsQ3BtKTtcbiAgaWYgKCFwYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgbG9nX18kNihgUnVubmluZyBQYXlQYWwgZmxvdy4uLmApO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgeyBpc0Fub255bW91cywgdXNlUmVkaXJlY3RGbG93IH0gPSBjdXN0b21QYXJhbXMuc2V0dGluZ3MgPz8ge307XG4gICAgICBsb2dfXyQ2KGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgICBjb25zdCBjcG0gPSBQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICAgIGxvZ19fJDYoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5pc0Fub255bW91cyA/IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgbG9nX18kNihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cHJlZmlsbC5tb2RlfWApO1xuICAgICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IGZhbHNlO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QgPSB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogdXNlUmVkaXJlY3RGbG93LFxuICAgICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgICB9O1xuICAgICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgICBpZiAodXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICAgIGxvZ19fJDYoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIik7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgICAgcmVkaXJlY3RVcmxcbiAgICAgICk7XG4gICAgICBsb2dfXyQ2KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgICAgY29uc3QgYXBwcm92YWxTZXNzaW9uSWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJhcHByb3ZhbF9zZXNzaW9uX2lkXCIpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IGlzUGF5Rmlyc3RGbG93ID8gYXBwcm92YWxTZXNzaW9uSWQgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgbG9nX18kNihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcInBheXBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNwbSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGlzUGF5Rmlyc3RGbG93XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDcoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogZXJyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtcGF5cGFsXCIpO1xuY29uc3QgUG9ja3l0UGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogei5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFBvY2t5dFBheXBhbEZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3QgcG9ja3l0UGF5cGFsQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBvY2t5dFBheXBhbENwbSk7XG4gIGlmICghcG9ja3l0UGF5cGFsQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9ja3l0IFBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBvY2t5dFBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUG9ja3l0UGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ1KGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgY29uc3QgY3BtID0gUG9ja3l0UGF5cGFsQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kNShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgIGNvbnN0IHNldHRpbmdzID0gY3VzdG9tUGFyYW1zPy5zZXR0aW5ncztcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBzZXR0aW5ncz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgbG9nX18kNShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cHJlZmlsbC5tb2RlfWApO1xuICAgIGNvbnN0IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3cgPSB2NCgpO1xuICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCI7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjcG0ucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISFjdXN0b21QYXJhbXM/LnNldHRpbmdzPy51c2VSZWRpcmVjdEZsb3csXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93XG4gICAgICB9LFxuICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICB9O1xuICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgIGlmIChjdXN0b21QYXJhbXM/LnNldHRpbmdzPy51c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgIGxvZ19fJDUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIik7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgfVxuICAgIGxvZ19fJDUoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIik7XG4gICAgbG9nX18kNShgT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uYCk7XG4gICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICByZWRpcmVjdFVybFxuICAgICk7XG4gICAgbG9nX18kNShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICBjb25zdCB2YXVsdElkID0gcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmKTtcbiAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFjaGVja291dEF0dGVtcHRJZCkge1xuICAgICAgZXJyX18kNihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgcGF5cGFsRmxvd1Jlc3VsdC5ocmVmKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICB9XG4gICAgbG9nX18kNShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHt2YXVsdElkfWApO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IHZhdWx0SWQsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwXG4gICAgfSk7XG4gICAgbG9nX18kNShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ2KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBPSlNfU1RSSVBFX0xJTktfQlROX0lEID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCI7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbmNvbnN0IFN0cmlwZUxpbmtDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVMaW5rRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IGluaXRQYXJhbXMgPSBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBsb2dfXyQ0KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlTGlua0NwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVMaW5rQ3BtKTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWApO1xuICAgIH07XG4gICAgY29uc3QgZGlzbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50LnVubW91bnQoKTtcbiAgICB9O1xuICAgIGlmIChpbml0UGFyYW1zPy5kb05vdE1vdW50T25Jbml0KSB7XG4gICAgICBsb2dfXyQ0KGBOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDQoYE1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLmApO1xuICAgICAgbW91bnRCdXR0b24oKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQ1KFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDQoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbixcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGdldEVsZW1lbnRCeUlkQXN5bmMoT0pTX1NUUklQRV9MSU5LX0JUTl9JRClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDQoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNKG5vbkNkZUZvcm1JbnB1dHMsIGN1c3RvbVBhcmFtcy5zdHJpcGVQTSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQ0KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IGdldEVsZW1lbnRCeUlkQXN5bmMgPSAoaWQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGNvbnN0IGdldEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVzb2x2ZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGdldEVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbiAgZ2V0RWxlbWVudCgpO1xufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMyhgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ0KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kMyhgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDMoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICBjb25zdCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gdHlwZW9mIG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIiA/IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nLCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBvdmVycmlkZS5sYWJlbCk7XG4gICAgfVxuICAgIGxvZ19fJDMoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQzKGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQzKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kMyhgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBiaWxsaW5nQWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5LCBsYWJlbCkgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGxhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgdHJhY2soXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgICBwcm92aWRlcjogd2l0aFByb3ZpZGVyLFxuICAgICAgcHJvY2Vzc29yOiB3aXRoUHJvY2Vzc29yLFxuICAgICAgY3Btc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UG9ja3l0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBvY2t5dFBheXBhbEZsb3dcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IGluaXRQYXlwYWxGbG93LFxuICAgIHJ1bjogcnVuUGF5cGFsRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEFDSEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhFRlRGbG93XG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEJBQ1NGbG93XG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleFNFUEFGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuR29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuQXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5BcHBsZVBheUZsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQzKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gICAgYWlyd2FsbGV4QXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAgIC8vIExvb3BcbiAgICBsb29wOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkxvb3BcIiwgT2pzRmxvd3MubG9vcENyeXB0by5pbml0KSxcbiAgICAvLyBQYXlQYWxcbiAgICBwYXlwYWw6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiUGF5UGFsXCIsIE9qc0Zsb3dzLnBheXBhbC5pbml0KSxcbiAgICAvLyBQb2NreXQgUGF5UGFsXG4gICAgcG9ja3l0UGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBvY2t5dCBQYXlQYWxcIiwgT2pzRmxvd3MucG9ja3l0UGF5cGFsLmluaXQpLFxuICAgIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgICAvLyBBZHllbiBHb29nbGVQYXlcbiAgICBhZHllbkdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWR5ZW5Hb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gQXBwbGVQYXlcbiAgICBhZHllbkFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFkeWVuIEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuQXBwbGVQYXkuaW5pdClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB9O1xufTtcblxuY29uc3QgeyBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fJDIpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVjdEZyYW1ld29yaygpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgY29uc3QgbmV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAobmV4dFdpbmRvdz8ubmV4dCB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKSB7XG4gICAgICByZXR1cm4gXCJuZXh0anNcIiAvKiBOZXh0SlMgKi87XG4gICAgfVxuICAgIGNvbnN0IG51eHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG51eHRXaW5kb3c/Ll9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKSB7XG4gICAgICByZXR1cm4gXCJudXh0XCIgLyogTnV4dCAqLztcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChrZXkpID0+IGtleS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCAhIUFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobm9kZSkgPT4gbm9kZS5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSkge1xuICAgICAgcmV0dXJuIFwicmVhY3RcIiAvKiBSZWFjdCAqLztcbiAgICB9XG4gICAgY29uc3QgdnVlV2luZG93ID0gd2luZG93O1xuICAgIGlmICh2dWVXaW5kb3c/LlZ1ZSB8fCB2dWVXaW5kb3c/Ll9fVlVFX18pIHtcbiAgICAgIHJldHVybiBcInZ1ZVwiIC8qIFZ1ZSAqLztcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikpIHtcbiAgICAgIHJldHVybiBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovO1xuICAgIH1cbiAgICByZXR1cm4gXCJ2YW5pbGxhXCIgLyogVmFuaWxsYSAqLztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCIgLyogVW5rbm93biAqLztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrVmVyc2lvbihmcmFtZXdvcmspIHtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKGZyYW1ld29yaykge1xuICAgICAgY2FzZSBcInJlYWN0XCIgLyogUmVhY3QgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibmV4dGpzXCIgLyogTmV4dEpTICovOiB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICAgICAgY29uc3QgbmV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICAgICAgcmV0dXJuIG5leHRXaW5kb3c/Lm5leHQ/LnZlcnNpb24gfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXz8uYnVpbGRJZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIiAvKiBOdXh0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcInZ1ZVwiIC8qIFZ1ZSAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLzoge1xuICAgICAgICBjb25zdCBkb2N1bWVudDIgPSBnZXRXaW5kb3dTYWZlKCk/LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBuZ1ZlcnNpb25FbCA9IGRvY3VtZW50Mj8ucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIG5nVmVyc2lvbkVsID8gbmdWZXJzaW9uRWwuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya0luZm8oKSB7XG4gIGNvbnN0IGZyYW1ld29yayA9IGRldGVjdEZyYW1ld29yaygpO1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0RnJhbWV3b3JrVmVyc2lvbihmcmFtZXdvcmspO1xuICByZXR1cm4geyBmcmFtZXdvcmssIHZlcnNpb24gfTtcbn1cblxuY29uc3QgZ2V0RnJhdWRNZXRhZGF0YSA9ICgpID0+IHtcbiAgY29uc3Qgc2NyZWVuX2hlaWdodCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsO1xuICBjb25zdCBzY3JlZW5fd2lkdGggPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4ud2lkdGggOiBudWxsO1xuICBjb25zdCBjb2xvcl9kZXB0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbDtcbiAgY29uc3QgamF2YV9lbmFibGVkID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLmphdmFFbmFibGVkKCkgOiBmYWxzZTtcbiAgY29uc3QgdXNlcl9hZ2VudCA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgOiBudWxsO1xuICBjb25zdCBhY2NlcHRfaGVhZGVyID0gXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44XCI7XG4gIGxldCBsYW5ndWFnZSA9IG51bGw7XG4gIGlmICh3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvcikge1xuICAgIGxhbmd1YWdlID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTtcbiAgfVxuICBjb25zdCB0aW1lX3pvbmVfb2Zmc2V0ID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoLFxuICAgIGphdmFfZW5hYmxlZCxcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6IHRydWUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgc2NyZWVuX2hlaWdodCxcbiAgICBzY3JlZW5fd2lkdGgsXG4gICAgdGltZV96b25lX29mZnNldCxcbiAgICB1c2VyX2FnZW50LFxuICAgIGFjY2VwdF9oZWFkZXJcbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QUNIXCJdID0gXCJhaXJ3YWxsZXgtYWNoXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4RUZUXCJdID0gXCJhaXJ3YWxsZXgtZWZ0XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QkFDU1wiXSA9IFwiYWlyd2FsbGV4LWJhY3NcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhTRVBBXCJdID0gXCJhaXJ3YWxsZXgtc2VwYVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcbnZhciBQYXltZW50UHJvdmlkZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgoUGF5bWVudFByb3ZpZGVyVHlwZTIpID0+IHtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBQ0hcIl0gPSBcImFjaFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkVGVFwiXSA9IFwiZWZ0XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQkFDU1wiXSA9IFwiYmFjc1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNFUEFcIl0gPSBcInNlcGFcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBUFBMRV9QQVlcIl0gPSBcImFwcGxlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSRURJVF9DQVJEXCJdID0gXCJjcmVkaXRfY2FyZFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkdPT0dMRV9QQVlcIl0gPSBcImdvb2dsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTVFJJUEVfTElOS1wiXSA9IFwic3RyaXBlX2xpbmtcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUllQVE9cIl0gPSBcImNyeXB0b1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlBBWVBBTFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBQYXltZW50UHJvdmlkZXJUeXBlMjtcbn0pKFBheW1lbnRQcm92aWRlclR5cGUgfHwge30pO1xuXG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJ0cmFjZXJcIik7XG5jb25zdCBpbml0VHJhY2VyU2FmZSA9ICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIHRyeSB7XG4gICAgaW5pdFRyYWNlclVuc2FmZSh2ZXJzaW9uLCBiYXNlVXJsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlcnJfXyQxKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke2Vycm9yfWApO1xuICB9XG59O1xubGV0IGdsb2JhbFRyYWNlcjtcbmNvbnN0IGluaXRUcmFjZXJVbnNhZmUgPSBhc3luYyAodmVyc2lvbiwgYmFzZVVybCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgY29uc3Qgc2RrVHJhY2VXZWIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDA3fX4uanMnKTtcbiAgY29uc3QgeyBDb25zb2xlU3BhbkV4cG9ydGVyLCBTaW1wbGVTcGFuUHJvY2Vzc29yLCBXZWJUcmFjZXJQcm92aWRlciB9ID0gc2RrVHJhY2VXZWI7XG4gIGNvbnN0IGluc3RydW1lbnRhdGlvbkZldGNoID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZn1+LmpzJyk7XG4gIGNvbnN0IHsgRmV0Y2hJbnN0cnVtZW50YXRpb24gfSA9IGluc3RydW1lbnRhdGlvbkZldGNoO1xuICBjb25zdCBjb250ZXh0Wm9uZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGV9fi5qcycpO1xuICBjb25zdCB7IFpvbmVDb250ZXh0TWFuYWdlciB9ID0gY29udGV4dFpvbmU7XG4gIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGl9fi5qcycpO1xuICBjb25zdCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyB9ID0gaW5zdHJ1bWVudGF0aW9uO1xuICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBrfX4uanMnKTtcbiAgY29uc3QgeyBSZXNvdXJjZSB9ID0gcmVzb3VyY2VzO1xuICBjb25zdCBkZXRlY3RSZXNvdXJjZXMgPSBhd2FpdCBpbXBvcnQoJy4vZGV0ZWN0LXJlc291cmNlcy0hfnswMG19fi5qcycpLnRoZW4obiA9PiBuLmQpO1xuICBjb25zdCB7IGRldGVjdFJlc291cmNlc1N5bmMgfSA9IGRldGVjdFJlc291cmNlcztcbiAgY29uc3QgZXhwb3J0ZXJUcmFjZU90bHAgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBufX4uanMnKTtcbiAgY29uc3QgeyBPVExQVHJhY2VFeHBvcnRlciB9ID0gZXhwb3J0ZXJUcmFjZU90bHA7XG4gIGNvbnN0IHByb3BhZ2F0b3JCMyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGp9fi5qcycpO1xuICBjb25zdCB7IEIzUHJvcGFnYXRvciwgQjNJbmplY3RFbmNvZGluZyB9ID0gcHJvcGFnYXRvckIzO1xuICBjb25zdCBzZGtUcmFjZUJhc2UgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDAxfX4uanMnKTtcbiAgY29uc3QgeyBCYXRjaFNwYW5Qcm9jZXNzb3IgfSA9IHNka1RyYWNlQmFzZTtcbiAgbG9nX18kMShgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHt2ZXJzaW9ufSBhbmQgYmFzZVVybCAke2Jhc2VVcmx9YCk7XG4gIGNvbnN0IGNvbGxlY3RvclVybCA9IGdldENvbGxlY3RvclVybChiYXNlVXJsKTtcbiAgbG9nX18kMShgVXNpbmcgY29sbGVjdG9yIFVSTCAke2NvbGxlY3RvclVybH1gKTtcbiAgY29uc3QgZXhwb3J0ZXIgPSBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoeyB1cmw6IGNvbGxlY3RvclVybCB9KTtcbiAgY29uc3QgYmFzZUF0dHJzID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IHZlcnNpb24sXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBXZWJUcmFjZXJQcm92aWRlcih7XG4gICAgcmVzb3VyY2U6IG5ldyBSZXNvdXJjZShiYXNlQXR0cnMpLm1lcmdlKGRldGVjdFJlc291cmNlc1N5bmMoKSksXG4gICAgc3BhblByb2Nlc3NvcnM6IFtcbiAgICAgIG5ldyBTaW1wbGVTcGFuUHJvY2Vzc29yKG5ldyBDb25zb2xlU3BhbkV4cG9ydGVyKCkpLFxuICAgICAgbmV3IEJhdGNoU3BhblByb2Nlc3NvcihleHBvcnRlciwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG4gIHByb3ZpZGVyLnJlZ2lzdGVyKHtcbiAgICBjb250ZXh0TWFuYWdlcjogbmV3IFpvbmVDb250ZXh0TWFuYWdlcigpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBCM1Byb3BhZ2F0b3IoeyBpbmplY3RFbmNvZGluZzogQjNJbmplY3RFbmNvZGluZy5NVUxUSV9IRUFERVIgfSlcbiAgfSk7XG4gIHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyh7XG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgbmV3IEZldGNoSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgZ2xvYmFsVHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgbG9nX18kMShgVHJhY2VyIGluaXRpYWxpemVkYCk7XG4gIHJldHVybiBnbG9iYWxUcmFjZXI7XG59O1xuY29uc3QgZ2V0Q29sbGVjdG9yVXJsID0gKGZyb21CYXNlVXJsKSA9PiB7XG4gIGNvbnN0IGJhc2VIb3N0bmFtZSA9IG5ldyBVUkwoZnJvbUJhc2VVcmwpLmhvc3RuYW1lO1xuICBpZiAoYmFzZUhvc3RuYW1lID09PSBcImNkZS5vcGVucGF5c3RhZ2luZy5jb21cIikge1xuICAgIHJldHVybiBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCI7XG4gIH0gZWxzZSBpZiAoYmFzZUhvc3RuYW1lID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiO1xuICB9XG4gIHJldHVybiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5cbmNsYXNzIE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoZm9ybUlkLCBiYXNlVXJsLCBmb3JtQ2FsbGJhY2tzLCBpbnRlcm5hbENhbGxiYWNrcykge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZ2V0Q2xlYW5PcmlnaW4oZXZlbnQub3JpZ2luKSAhPT0gZ2V0Q2xlYW5PcmlnaW4odGhpcy5iYXNlVXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInBlbnBhbFwiXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSAmJiBldmVudC5kYXRhW1wic291cmNlXCJdID09PSBcInJlYWN0LWRldnRvb2xzLWJyaWRnZVwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBldmVudERhdGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKTtcbiAgICAgIGlmICghaXNWYWxpZCkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQsIHBheWxvYWQgfSA9IGV2ZW50RGF0YTtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IHBheWxvYWQudHlwZTtcbiAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQocGF5bG9hZC5oZWlnaHQgPyBgJHtwYXlsb2FkLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiBwYXlsb2FkLm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmluaXRGbG93cyA9IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMoKTtcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gICAgICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZXh0LndpdGgodHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNkZUJyaWRnZUlmcmFtZSA9IHRoaXMuY3JlYXRlRWxlbWVudChFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIjtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGNkZUJyaWRnZUlmcmFtZS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubW91bnQoXCJib2R5XCIpO1xuICAgICAgICAgIGxvZ19fKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIik7XG4gICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjZGVDb25uU3BhbiA9IHRyYWNlcj8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBjb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICBjb25zdCBhbnlDZGVDb25uID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZGVDb25uU3Bhbj8uZW5kKCk7XG4gICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICAgIGF3YWl0IHNldFVzZXJEZXZpY2VUb2tlbihhbnlDZGVDb25uLCB0aGlzLmRldmljZVRva2VuKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCBvanNDb250ZXh0ID0gT3BlblBheUZvcm0uYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgICAgYW55Q2RlQ29ubixcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KG9qc0NvbnRleHQpO1xuICAgICAgICAgIHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgICBhd2FpdCBzdGFydEFsbEluaXRGbG93cyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjZGVMb2FkZWQudG90YWxBbW91bnRBdG9tcywgY2RlTG9hZGVkLmN1cnJlbmN5KTtcbiAgICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgICAgIHNwYW4/LnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgIHRyYWNrKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICAgIHNwYW4/LnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVycl9fKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIHRyYWNrKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc3Bhbj8uZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSByZXR1cm47XG4gICAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZGVkID0gKHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KHBheWxvYWQpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkZWRcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGVyck1zZykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZXJyTXNnKSwgZXJyTXNnKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyck1zZ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke2ZyYW1lLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nLnRvU3RyaW5nKCk7XG4gICAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFbGVtZW50ID0gdGhpcy5yZWdpc3RlcklmcmFtZSh0eXBlLCBmcmFtZSk7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZEVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKHR5cGUsIGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlOiBmcmFtZSxcbiAgICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSk7XG4gICAgICAgICAgdHJhY2soXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKTtcbiAgICAgICAgICBjb25uLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlbGVtZW50LnR5cGUsIGNvbm4pO1xuICAgICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHtcbiAgICAgICAgICAgIHRoaXMuYW55Q2RlQ29ubi5zZXQoY29ubik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApLmNhdGNoKChlcnIpID0+IGVycl9fKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBlcnIpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9O1xuICAgIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlcnJfXyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cmFjayhcInN1Ym1pdF9jYXJkXCIsIHsgLi4ucGFyYW1zIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYXBwbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBcHBsZVBheUF2YWlsYWJsZSB9ID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlIH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IHBheXBhbEF2YWlsYWJsZSA9IHBheXBhbEZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA9IGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAgIChtZXRob2QpID0+IG1ldGhvZC5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiBtZXRob2QucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxvb3BGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgbG9vcENyeXB0b0F2YWlsYWJsZSA9IGxvb3BGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaW5pdEZsb3dOYW1lTWFwID0ge1xuICAgICAgICAgICAgcGF5cGFsOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICAgIGFkeWVuR29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5LFxuICAgICAgICAgICAgYWR5ZW5BcHBsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzX29sZCA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbG93UmVzdWx0ID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5pdEZsb3dOYW1lTWFwW2tleV0gPz8ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gWy4uLm1ldGhvZHNfb2xkLCAuLi5tZXRob2RzXTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kLCBzZXR0aW5ncyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkeWVuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuR29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWR5ZW5BcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpO1xuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICAgIGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgICBkZWxldGUgd2luZG93W1wib2pzXCJdO1xuICAgICAgdHJhY2soXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuOVwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuNS45LWFscGhhLjgzOTMzODFcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5kZXZpY2VUb2tlbiA9IGdldERldmljZVRva2VuKCk7XG4gICAgYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCB7IGZyYW1ld29yaywgdmVyc2lvbiB9ID0gZ2V0RnJhbWV3b3JrSW5mbygpO1xuICAgIGdldEN1cnJlbnRFbnYodGhpcy5iYXNlVXJsKS50aGVuKChlbnZpcm9ubWVudCkgPT4ge1xuICAgICAgaWYgKCFtZXRyaWNzUHVibGlzaGVyLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgICAgZnJhbWV3b3JrLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBtZXRyaWNzUHVibGlzaGVyLnNldChtZXRyaWNzQ29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJhY2soXCJmb3JtX2luaXRcIik7XG4gICAgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pO1xuICAgIGlmIChjb25maWcuYWxsb3dUcmFjaW5nID09PSB0cnVlKSB7XG4gICAgICBpbml0VHJhY2VyU2FmZSh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmFzc2lnbkFzU2luZ2xldG9uID0gKGZvcm0pID0+IHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5nZXRJbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgICB9O1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKGNvbmZpZywgY2RlTG9hZGVkUGF5bG9hZCwgYW55Q2RlQ29ubmVjdGlvbiwgZm9ybURpdikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwoY29uZmlnLmJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkwpLm9yaWdpbixcbiAgICAgICAgZm9ybURpdixcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IGNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiBjZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGN1c3RvbUluaXRQYXJhbXM6IGNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICAgICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IGNvbmZpZy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKGNhbGxlciA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBkZWJ1Z0luZm8gPSB7XG4gICAgICBjYWxsZXIsXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IGN1cnJlbnRJbnN0YW5jZT8uZm9ybUlkIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7Y2FsbGVyfVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtkZWJ1Z0luZm8udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtkZWJ1Z0luZm8uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke2RlYnVnSW5mby5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7ZGVidWdJbmZvLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY3VycmVudEluc3RhbmNlIHx8IGN1cnJlbnRJbnN0YW5jZS5mb3JtSWQgIT09IHRoaXMuZm9ybUlkKSB7XG4gICAgICBlcnJfXyhlcnJvck1lc3NhZ2UpO1xuICAgICAgdHJhY2soXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dEFQSSBhcyBDLCBEaWFnQVBJIGFzIEQsIEZpZWxkTmFtZSBhcyBGLCBJTlZBTElEX1NQQU5fQ09OVEVYVCBhcyBJLCBPcGVuUGF5Rm9ybSBhcyBPLCBQcm94eVRyYWNlciBhcyBQLCBST09UX0NPTlRFWFQgYXMgUiwgU3BhbktpbmQgYXMgUywgVHJhY2VGbGFncyBhcyBULCBEaWFnTG9nTGV2ZWwgYXMgYSwgY3JlYXRlQ29udGV4dEtleSBhcyBiLCBjb250ZXh0IGFzIGMsIGlzVmFsaWRUcmFjZUlkIGFzIGQsIGlzVmFsaWRTcGFuSWQgYXMgZSwgU3BhblN0YXR1c0NvZGUgYXMgZiwgZ2V0R2xvYmFsIGFzIGcsIElOVkFMSURfU1BBTklEIGFzIGgsIGlzU3BhbkNvbnRleHRWYWxpZCBhcyBpLCBJTlZBTElEX1RSQUNFSUQgYXMgaiwgUHJveHlUcmFjZXJQcm92aWRlciBhcyBrLCBTdWJtaXRNZXRob2RzIGFzIGwsIHJlZ2lzdGVyR2xvYmFsIGFzIHIsIHRyYWNlIGFzIHQsIHVucmVnaXN0ZXJHbG9iYWwg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RUY7QUFBQSxFQUNUO0FBQ0Y7QUFqRUlpMUIsR0FBSyxXQUFXelUsR0FHaEJ5VSxHQUFLLG9CQUFvQixDQUFDelEsTUFBUztBQUNqQyxNQUFJeVEsR0FBWSxZQUFZO0FBQzFCLFVBQU0sSUFBSSxNQUFNLGdFQUFnRTtBQUVsRixTQUFPLE1BQVN6UTtBQUNsQixHQUdBeVEsR0FBSyxjQUFjLE1BQ1YsT0FBTyxPQUFVLE1BTzFCQSxHQUFLLHNCQUFzQixDQUFDNWhDLEdBQVFra0MsR0FBa0JyYyxHQUFrQnRKLE9BQy9EO0FBQUEsRUFDTCxxQkFBcUJ2ZSxFQUFPO0FBQUEsRUFDNUIsU0FBUyxJQUFJLElBQUlBLEVBQU8sV0FBVzhiLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUF5QztBQUFBLEVBQ0EsbUJBQW1CMmxCLEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBcmM7QUFBQSxFQUNBLGtCQUFrQjduQixFQUFPLG9CQUFvQixDQUFDO0FBQUEsRUFDOUMsbUNBQW1DQSxFQUFPO0FBQzVDO0FBbm1CTixJQUFNbWtDLEtBQU52QzsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiIsICJjaGFsayIsICJ2NCIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImZuIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJpc1N1Ym1pdHRpbmciLCAicGFyYW1zIiwgIl9hIiwgIl9iIiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgIk9qc0Vudmlyb25tZW50IiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJlbnZDYWNoZSIsICJnZXRDdXJyZW50RW52IiwgImJhc2VVcmwiLCAicmVzcG9uc2UiLCAicmVzIiwgImV4Y2x1ZGVQcm9wcyIsICJwcm9wcyIsICJrZXkiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJHUiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJ0cmFjayIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAib25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciIsICJlcnJvck1lc3NhZ2UiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIm9uVW5jYXVnaHRFcnJvciIsICJwYWdlTGlmZWN5Y2xlIiwgImxvYWRQYWdlTGlmZWN5Y2xlIiwgInBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIiLCAiYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMiLCAibGlmZWN5Y2xlIiwgImRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgInJlc3VsdFN0YXR1cyIsICJfZ2xvYmFsVGhpcyIsICJWRVJTSU9OIiwgInJlIiwgIl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrIiwgIm93blZlcnNpb24iLCAiYWNjZXB0ZWRWZXJzaW9ucyIsICJyZWplY3RlZFZlcnNpb25zIiwgIm15VmVyc2lvbk1hdGNoIiwgIm93blZlcnNpb25QYXJzZWQiLCAiZ2xvYmFsVmVyc2lvbiIsICJfcmVqZWN0IiwgInYiLCAiX2FjY2VwdCIsICJnbG9iYWxWZXJzaW9uTWF0Y2giLCAiZ2xvYmFsVmVyc2lvblBhcnNlZCIsICJpc0NvbXBhdGlibGUiLCAibWFqb3IiLCAiR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSIsICJfZ2xvYmFsIiwgInJlZ2lzdGVyR2xvYmFsIiwgInR5cGUiLCAiZGlhZyIsICJhbGxvd092ZXJyaWRlIiwgImFwaSIsICJnZXRHbG9iYWwiLCAidW5yZWdpc3Rlckdsb2JhbCIsICJfX3JlYWQkMyIsICJvIiwgIm4iLCAibSIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkMyIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJEaWFnQ29tcG9uZW50TG9nZ2VyIiwgImxvZ1Byb3h5IiwgImZ1bmNOYW1lIiwgIm5hbWVzcGFjZSIsICJsb2dnZXIiLCAiRGlhZ0xvZ0xldmVsIiwgImNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlciIsICJtYXhMZXZlbCIsICJfZmlsdGVyRnVuYyIsICJ0aGVMZXZlbCIsICJ0aGVGdW5jIiwgIl9fcmVhZCQyIiwgIl9fc3ByZWFkQXJyYXkkMiIsICJBUElfTkFNRSQyIiwgIkRpYWdBUEkiLCAiX2xvZ1Byb3h5IiwgInNlbGYiLCAic2V0TG9nZ2VyIiwgIm9wdGlvbnNPckxvZ0xldmVsIiwgIm9sZExvZ2dlciIsICJuZXdMb2dnZXIiLCAic3RhY2siLCAib3B0aW9ucyIsICJjcmVhdGVDb250ZXh0S2V5IiwgImRlc2NyaXB0aW9uIiwgIkJhc2VDb250ZXh0IiwgInBhcmVudENvbnRleHQiLCAiUk9PVF9DT05URVhUIiwgIl9fcmVhZCQxIiwgIl9fc3ByZWFkQXJyYXkkMSIsICJOb29wQ29udGV4dE1hbmFnZXIiLCAiX2NvbnRleHQiLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNvbm5lY3Rpb24iLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiZ2V0UHJlZmlsbCIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJzdW0iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvclN0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAicmVzcG9uc2VNb2RlbCIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAic2V0VXNlckRldmljZVRva2VuIiwgImRldmljZVRva2VuIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAiRlJBTUVfQkFTRV9VUkwiLCAiRU5DT0RJTkciLCAiRU5DT0RJTkdfTEVOIiwgIlJBTkRPTV9MRU4iLCAiVElNRV9MRU4iLCAiVElNRV9NQVgiLCAiVUxJREVycm9yQ29kZSIsICJVTElERXJyb3IiLCAiZXJyb3JDb2RlIiwgIm1lc3NhZ2UiLCAicmFuZG9tQ2hhciIsICJwcm5nIiwgInJhbmQiLCAiZGV0ZWN0UFJORyIsICJyb290TG9va3VwIiwgImRldGVjdFJvb3QiLCAiZ2xvYmFsQ3J5cHRvIiwgImJ1ZmZlciIsICJpbldlYldvcmtlciIsICJlbmNvZGVSYW5kb20iLCAibGVuIiwgInN0ciIsICJlbmNvZGVUaW1lIiwgIm1vZCIsICJjdXJyZW50TGVuIiwgInVsaWQiLCAic2VlZFRpbWUiLCAiY3VycmVudFBSTkciLCAic2VlZCIsICJDT09LSUVfTkFNRSIsICJnZXREZXZpY2VUb2tlbiIsICJleGlzdGluZ0Nvb2tpZSIsICJjb29raWUiLCAidG9rZW4iLCAic2V0RGV2aWNlVG9rZW4iLCAib25lWWVhckZyb21Ob3ciLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiRWxlbWVudEV2ZW50IiwgImdlbmVyYXRlQW5vbnltb3VzVmFsdWVzIiwgImdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImZpZWxkcyIsICJGaWVsZE5hbWUiLCAiZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImNoZWNrb3V0X3NldHRpbmdzIiwgImdldEZ1bGxOYW1lIiwgImZpcnN0TmFtZSIsICJsYXN0TmFtZSIsICJzdHlsZXMiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImJhbmtTZWxlY3RvclN0eWxlcyIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRpdGxlIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAiY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciIsICJiYW5rcyIsICJiYW5rTGlzdEh0bWwiLCAiYmFuayIsICJsb2dvSHRtbCIsICJiYW5rSXRlbXMiLCAiY2xlYW51cCIsICJjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSIsICJwYXltZW50TWV0aG9kVHlwZSIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAib25TdWNjZXNzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJzdGFydFBvbGxpbmciLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgIm9yaWdpbmFsSGFuZGxlQ2FuY2VsIiwgIndyYXBwZWRIYW5kbGVDYW5jZWwiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAiaGFuZGxlRXZlbnRzIiwgIlRocmVlRFNTdGF0dXMiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAicGFyYW1zIiwgImZyYW1lV2lkdGgiLCAiZnJhbWVIZWlnaHQiLCAiZnJhbWVUaXRsZSIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAiZXJyX18iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAiZGV0ZWN0TGFuZ3VhZ2UiLCAibGFuZ3VhZ2VzIiwgImxhbmd1YWdlIiwgImxvZ19fJHQiLCAiZXJyX18kcyIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgImxvZ19fJHMiLCAiZXJyX18kciIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJBbGxGaWVsZE5hbWVzIiwgImxvZ19fJHIiLCAiZXJyX18kcSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9hZFNjcmlwdCIsICJzY3JpcHRJZCIsICJzcmMiLCAiY2hlY2tMb2FkZWRGbiIsICJldmVudExpc3RlbmVyQ29udHJvbGxlciIsICJzY3JpcHQiLCAiZXhpc3RpbmdTY3JpcHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiaW5pdGlhbFByZXZpZXciLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJjb21tb25BY3Rpb24iLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgImZvcm1JbnB1dHMiLCAicGF5bWVudERhdGEiLCAiaW5wdXRzIiwgImJpbGxpbmdBZGRyZXNzIiwgInNoaXBwaW5nQWRkcmVzcyIsICJwYXllckZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgInJ1bkFpcndhbGxleEJBQ1NGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmb3JtQ2FsbGJhY2tzIiwgImN1c3RvbVBhcmFtcyIsICJub25DZGVGb3JtRmllbGRzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAidmVyaWZpY2F0aW9uTWV0aG9kIiwgIm1pY3JvRGVwb3NpdERhdGEiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgImNvbnNlbnRJZCIsICJhdmFpbGFibGVCYW5rcyIsICJzZWxlY3RlZEJhbmsiLCAiZGlyZWN0RGViaXREYXRhIiwgInJlZGlyZWN0VXJsIiwgIm5ld0NvbmZpcm1SZXN1bHQiLCAibG9nX18kcCIsICJlcnJfXyRvIiwgInJ1bkFpcndhbGxleEVGVEZsb3ciLCAibG9nX18kbyIsICJlcnJfXyRuIiwgInJ1bkFpcndhbGxleFNFUEFGbG93IiwgImxvZ19fJG4iLCAiZXJyX18kbSIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQzIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJoZWFkZXJzIiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQyIiwgIkdvb2dsZVBheUNwbSQyIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJhbW91bnQiLCAiZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJG0iLCAiZXJyX18kbCIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgIm9uQ2FuY2VsIiwgIm9uUGF5bWVudEZhaWxlZCIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgIl8iLCAiX18iLCAiYWR5ZW5DaGVja291dCIsICJjaGVja291dCIsICJkZXRlcm1pbmVMb2NhbGUiLCAicHJlZmlsbExvY2FsZSIsICJicm93c2VyTG9jYWxlIiwgImNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzIiwgInJ1bkFkeWVuM2RzRmxvdyIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgImxvZ19fJGwiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMiIsICJnZXRGcmF1ZE1ldGFkYXRhIiwgImxvZ19fJGsiLCAiZXJyX18kayIsICJpbml0QWR5ZW5BcHBsZVBheUZsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgIk9qc0Zsb3dzIiwgInJ1bkFkeWVuQXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAidXBkYXRlIiwgImxvZ19fJGoiLCAiZXJyX18kaiIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIl9lIiwgIl9mIiwgIl9nIiwgIl9oIiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJGkiLCAiZXJyX18kaSIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGgiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGciLCAiZXJyX18kaCIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRmIiwgImVycl9fJGciLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAibG9nX18kZSIsICJlcnJfXyRmIiwgImluaXRBdXRobmV0QXBwbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRBcHBsZVBheUZsb3ciLCAibG9nX18kZCIsICJlcnJfXyRlIiwgImluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyIsICJydW5BdXRobmV0R29vZ2xlUGF5RmxvdyIsICJsb2dfXyRjIiwgImVycl9fJGQiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJ2YXVsdElkIiwgInBhcnNlQXJnRnJvbUhyZWYiLCAiYXJnTmFtZSIsICJjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMiLCAicnVuUG9ja3l0M2RzRmxvdyIsICJsb2dfXyRiIiwgImVycl9fJGMiLCAiYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciIsICJwb3N0VXJsIiwgImFjY2Vzc1Rva2VuIiwgImZvcm0iLCAicnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24iLCAiZXhwZWN0ZWRPcmlnaW4iLCAiZGV0YWNoIiwgImhhbmRsZUNvbGxlY3Rpb25FdmVudCIsICJydW5QYXllckF1dGgiLCAic3RlcFVwVXJsIiwgIm1lcmNoYW50RGF0YSIsICJ0b2tlbklucHV0IiwgIm1kSW5wdXQiLCAibG9nX18kYSIsICJlcnJfXyRiIiwgIkN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRlJJRU5ETFlfRVJSIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgInVzZXJBY3Rpb24iLCAiY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMiLCAiaGFuZGxlQ3liZXJzb3VyY2UzZHMiLCAiY2xlYW51cFBvbGxpbmciLCAicnVuQ3liZXJzb3VyY2UzZHNGbG93IiwgInN0ZXBfdXBfdXJsIiwgImFjY2Vzc190b2tlbiIsICJkZF91cmwiLCAiZGRfdG9rZW4iLCAibWVyY2hhbnRfZGF0YSIsICJjb2xsZWN0aW9uUmVzdWx0IiwgInN0cmlwZUxvZ19fIiwgIlN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCIsICJzdHJpcGVDQzNEU0Zsb3ciLCAicGFyc2VVc2VyRkVQYXlsb2FkIiwgIk1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyIsICJsb2dfXyQ5IiwgImVycl9fJGEiLCAidW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAic3RhcnRQZlJlc3VsdCIsICJyZXR1cm5TdWNjZXNzUmVzdWx0IiwgInJ1bkNvbmZpcm1Mb29wIiwgImNoZWNrb3V0QXR0ZW1wdElkIiwgInBmUmVzdWx0IiwgInZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uIiwgInVzZXJBY3Rpb25SZXN1bHQiLCAicnVuUmVxdWlyZWRVc2VyQWN0aW9uIiwgImNoZWNrSWZMZWdhY3kzRFNQYXRoIiwgImNvbW1vbkNDM0RTRmxvdyIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJVc2VyQWN0aW9uRkVQYXlsb2FkIiwgInByZWZpbGxNb2RlIiwgInBheW1lbnRNZXRob2RJZCIsICJsb2dfXyQ4IiwgImVycl9fJDkiLCAicnVuQ29tbW9uQ2NGbG93IiwgInVuaWZpZWRDQ1JvbGxvdXRSYXRpbyIsICJyb2xsIiwgInVzZVVuaWZpZWRDQ0Zsb3ciLCAidWNjUm9sbFRyYWNraW5nTWV0YWRhdGEiLCAiZXJySGVhZGVycyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgImN5YmVyc291cmNlQWN0aW9uIiwgImN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjY1BtSWQiLCAic3RyaXBlQWN0aW9uIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInJlcXVpcmVkX3VzZXJfYWN0aW9ucyIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiTG9vcENyeXB0b0NwbSIsICJsb2dfXyQ3IiwgImVycl9fJDgiLCAiaW5pdExvb3BGbG93IiwgInByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEiLCAicGF5bWVudFNldHVwSW5mbyIsICJzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50IiwgIm1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJpc0NoZWNrb3V0TW9kZSIsICJjdXN0b21lckZpZWxkcyIsICJsb2dfXyQ2IiwgImVycl9fJDciLCAiUGF5cGFsQ3BtIiwgImluaXRQYXlwYWxGbG93IiwgInBheXBhbENwbSIsICJydW5QYXlwYWxGbG93IiwgImlzQW5vbnltb3VzIiwgInVzZVJlZGlyZWN0RmxvdyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93IiwgImlzUGF5Rmlyc3RGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0IiwgInByZUFjdGlvblVybCIsICJlbmNvZGVkUmVxdWVzdCIsICJzZWFyY2hQYXJhbXMiLCAicGF5cGFsRmxvd1Jlc3VsdCIsICJhcHByb3ZhbFNlc3Npb25JZCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgImluaXRQb2NreXRQYXlwYWxGbG93IiwgInBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJvdXJFeGlzdGluZ1BtSWQiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJhcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAibWF0Y2hlc1Byb2Nlc3NvciIsICJtYXRjaGVzUHJvdmlkZXIiLCAibG9nX18kMiIsICJlcnJfXyQzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiZXJyX18kMiIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIndpbmRvdyIsICJuZXh0V2luZG93IiwgIm51eHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAiZG9jdW1lbnQyIiwgIm5nVmVyc2lvbkVsIiwgImdldEZyYW1ld29ya0luZm8iLCAic2NyZWVuX2hlaWdodCIsICJzY3JlZW5fd2lkdGgiLCAiY29sb3JfZGVwdGgiLCAiamF2YV9lbmFibGVkIiwgInVzZXJfYWdlbnQiLCAiYWNjZXB0X2hlYWRlciIsICJ0aW1lX3pvbmVfb2Zmc2V0IiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUGF5bWVudFByb3ZpZGVyVHlwZSIsICJQYXltZW50UHJvdmlkZXJUeXBlMiIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgImZpbmFsU3RhdHVzIiwgInVzZXJQYXJhbXMiLCAicnVuU3RyaXBlUHJGbG93IiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUJyaWRnZUlmcmFtZSIsICJFbGVtZW50VHlwZUVudW0iLCAiY2RlTG9hZGVkIiwgImNkZUNvbm5TcGFuIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlbGVtZW50VmFsdWUiLCAiRWxlbWVudFR5cGUiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAic2VsZWN0b3IiLCAiY29ubiIsICJjb250ZXh0MiIsICJhcHBsZVBheVByb2Nlc3NvcnMiLCAiaXNBcHBsZVBheUF2YWlsYWJsZSIsICJnb29nbGVQYXlQcm9jZXNzb3JzIiwgImlzR29vZ2xlUGF5QXZhaWxhYmxlIiwgInBheXBhbEF2YWlsYWJsZSIsICJwb2NreXRQYXlwYWxBdmFpbGFibGUiLCAibWV0aG9kIiwgImxvb3BGbG93UmVzdWx0IiwgImxvb3BDcnlwdG9BdmFpbGFibGUiLCAibWV0aG9kcyIsICJpbml0Rmxvd05hbWVNYXAiLCAiZmxvd1Jlc3VsdCIsICJzdGFydEZsb3ciLCAiYWlyd2FsbGV4R29vZ2xlUGF5IiwgImFpcndhbGxleEFwcGxlUGF5IiwgImF1dGhvcml6ZU5ldEdvb2dsZVBheSIsICJhdXRob3JpemVOZXRBcHBsZVBheSIsICJhZHllbkdvb2dsZVBheSIsICJhZHllbkFwcGxlUGF5IiwgIm5ld0NhbGxiYWNrcyIsICJtZXRyaWNzQ29udGV4dCIsICJjYWxsZXIiLCAiY3VycmVudEluc3RhbmNlIiwgImRlYnVnSW5mbyIsICJjZGVMb2FkZWRQYXlsb2FkIiwgIk9wZW5QYXlGb3JtIl0KfQo=
|
|
7037
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA2fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHouZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gei5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMlwiIC8qIExJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUzXCIgLyogTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmdcIiAvKiBJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgKi9dOiB6LmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56LmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogei5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgei5vYmplY3QoeyBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6Lm9iamVjdCh7XG4gIGJhbmtfbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLFxuICByZXNvdXJjZXM6IHoub2JqZWN0KHtcbiAgICBsb2dvX3VybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KEFXWEJhbmspKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHouYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHouc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHouc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6LmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xuei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEVGVEZvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQkFDU0Zvcm1EYXRhID0gei5vYmplY3Qoe1xuICBzb3J0Q29kZTogei5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHouZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogQkFDU0Zvcm1EYXRhLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU0VQQUZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBpYmFuOiB6LnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogei5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6LnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogei5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhID0gei5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogei5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHoub2JqZWN0KHtcbiAgaWJhbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBNaWNyb0RlcG9zaXRTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6LnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHoub2JqZWN0KHsgZXJyb3I6IHouc3RyaW5nKCkgfSlcbiAgXSkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogei5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHoub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5yZWNvcmQoei5hbnkoKSk7XG56Lm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgbWVzc2FnZTogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBTZXRVc2VyRGV2aWNlVG9rZW5SZXNwb25zZSA9IHoub2JqZWN0KHt9KTtcbmNvbnN0IFVzZXJBY3Rpb25GRVBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSA9IHouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHN1bSA9IChhcnIpID0+IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbn07XG5cbmNvbnN0IGJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQucmV0dXJuVmFsdWUgPSB0cnVlO1xufTtcbmNvbnN0IHByZXZlbnROYXZpZ2F0aW9uID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBiZWZvcmVVbmxvYWRIYW5kbGVyKTtcbn07XG5jb25zdCBzdG9wUHJldmVudE5hdmlnYXRpb24gPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGJlZm9yZVVubG9hZEhhbmRsZXIpO1xufTtcblxuY29uc3QgYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMgPSAoc2ltcGxlT2pzRmxvdykgPT4ge1xuICBsZXQgaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgaWYgKGlzU3VibWl0dGluZykge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3RhcnRlZD8uKCk7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHBhcmFtcy5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4uZmxvd1Jlc3VsdFxuICAgICAgfSk7XG4gICAgICBmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUoKTtcbiAgICAgIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogcGFyYW1zLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlLCBlcnJvckNvZGUsIGVycm9yIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24pIHtcbiAgICAgICAgc3RvcFByZXZlbnROYXZpZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgICBjb25zdCBlcnJvckNvZGUgPSBhd2FpdCBzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUocGFyYW1zLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycl9fKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBlcnJvcik7XG4gICAgICB0cmFjayhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZSwgZXJyb3JDb2RlLCBlcnJvciB9KTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBlcnJvck1lc3NhZ2UsIGVycm9yQ29kZSwgaXNMb2FkaW5nOiBmYWxzZSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZCQ0KG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkkNCh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkkNChfX3NwcmVhZEFycmF5JDQoW10sIF9fcmVhZCQ0KGVycm9ycykpLCBfX3JlYWQkNChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheSQ0KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkJDQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5JDQoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQkNChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG5jb25zdCBPanNFbnZpcm9ubWVudCA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5jb25zdCBlbnZDYWNoZSA9IHt9O1xuY29uc3QgZ2V0Q3VycmVudEVudiA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gIGlmIChlbnZDYWNoZVtiYXNlVXJsXSkge1xuICAgIHJldHVybiBlbnZDYWNoZVtiYXNlVXJsXTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgYmFzZVVybCkpLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSk7XG4gICAgY29uc3QgZW52ID0gT2pzRW52aXJvbm1lbnQucGFyc2UocmVzcG9uc2UuZW52aXJvbm1lbnQpO1xuICAgIGVudkNhY2hlW2Jhc2VVcmxdID0gZW52O1xuICAgIHJldHVybiBlbnY7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIE9qc0Vudmlyb25tZW50LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3ZhbHVlfWApO1xufVxuY29uc3QgZXhjbHVkZVByb3BzID0gKG9iaiwgcHJvcHMpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2tleV0pID0+ICFwcm9wcy5pbmNsdWRlcyhrZXkpKSk7XG59O1xuY29uc3QgZ2V0V2luZG93U2FmZSA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiB3aW5kb3c7XG59O1xuXG5jb25zdCBtZXRyaWNzUHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbmNvbnN0IE1FVFJJQ1NfUVVFVUVfS0VZID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCI7XG5jb25zdCBNQVhfUkVUUllfQVRURU1QVFMgPSAzO1xuY29uc3QgQkFUQ0hfU0laRSA9IDM7XG5jb25zdCBCQVRDSF9JTlRFUlZBTF9NUyA9IDFlMztcbmNvbnN0IHsgbG9nX186IGxvZ19fJHUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIE1ldHJpY3NRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDA7XG4gICAgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyR1KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fJHUoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKSxcbiAgICAgICAga2VlcGFsaXZlOiB0cnVlXG4gICAgICAgIC8vIFRvIHNlbmQgZXZlbnRzIGV2ZW4gaWYgdGhlIHBhZ2UgaXMgdW5sb2FkZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kdShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5jb25zdCB0cmFjayA9IChldmVudCwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpID0+IHtcbiAgbWV0cmljc1F1ZXVlLmFkZEV2ZW50KGV2ZW50LCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcyk7XG59O1xuY29uc3QgZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlID0gKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59O1xuY29uc3Qgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQucmVhc29uKTtcbiAgdHJhY2soXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQucmVhc29uXG4gIH0pO1xufTtcbmNvbnN0IG9uVW5jYXVnaHRFcnJvciA9IChldmVudCkgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXZlbnQuZXJyb3IpO1xuICB0cmFjayhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgZXJyb3JfbmFtZTogZXZlbnQuZXJyb3I/Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IGV2ZW50LmVycm9yPy5zdGFjayxcbiAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBldmVudC5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZXZlbnQuY29sbm9cbiAgfSk7XG59O1xubGV0IHBhZ2VMaWZlY3ljbGUgPSBudWxsO1xuY29uc3QgbG9hZFBhZ2VMaWZlY3ljbGUgPSBhc3luYyAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWdlTGlmZWN5Y2xlTW9kdWxlID0gYXdhaXQgaW1wb3J0KCcuL2xpZmVjeWNsZS0hfnswMDN9fi5qcycpO1xuICAgIHBhZ2VMaWZlY3ljbGUgPSBwYWdlTGlmZWN5Y2xlTW9kdWxlLmRlZmF1bHQ7XG4gICAgcmV0dXJuIHBhZ2VMaWZlY3ljbGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbmNvbnN0IHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgdHJhY2soXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZXZlbnQub2xkU3RhdGUsXG4gICAgbmV3X3N0YXRlOiBldmVudC5uZXdTdGF0ZVxuICB9KTtcbiAgaWYgKGV2ZW50Lm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGV2ZW50Lm5ld1N0YXRlID09PSBcInBhc3NpdmVcIikge1xuICAgIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbiAgfVxufTtcbmNvbnN0IGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzID0gYXN5bmMgKCkgPT4ge1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvblVuY2F1Z2h0RXJyb3IpO1xuICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb25VbmhhbmRsZWRSZWplY3Rpb25FcnJvcik7XG4gIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGxvYWRQYWdlTGlmZWN5Y2xlKCk7XG4gIGlmIChsaWZlY3ljbGUpIHtcbiAgICBsaWZlY3ljbGUuYWRkRXZlbnRMaXN0ZW5lcihcInN0YXRlY2hhbmdlXCIsIHBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIpO1xuICB9XG59O1xuY29uc3QgZGV0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMgPSBhc3luYyAoKSA9PiB7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uVW5jYXVnaHRFcnJvcik7XG4gIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvblVuaGFuZGxlZFJlamVjdGlvbkVycm9yKTtcbiAgaWYgKGdldFdpbmRvd1NhZmUoKSAmJiBwYWdlTGlmZWN5Y2xlKSB7XG4gICAgcGFnZUxpZmVjeWNsZS5yZW1vdmVFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgcGFnZUxpZmVjeWNsZVN0YXRlQ2hhbmdlSGFuZGxlcik7XG4gIH1cbn07XG5cbmNvbnN0IFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5jb25zdCBvdXJDdXJyZW5jeVRvVGhlaXJzID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufTtcbmNvbnN0IGdldExvYWRlZFN0cmlwZSA9IGFzeW5jIChwdWJsaXNoYWJsZUtleSkgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgIGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogdHJ1ZSxcbiAgICBkaXNhYmxlV2FsbGV0czogW10gXG4gIH0pO1xuICByZXR1cm4gcGF5bWVudFJlcXVlc3Q7XG59O1xuY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTtcbiAgfSk7XG59O1xuY29uc3QgaXNTdHJpcGVKc1ByZXNlbnQgPSAoKSA9PiB7XG4gIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbn07XG5jb25zdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCA9IGFzeW5jIChwYXltZW50UmVxdWVzdCkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKGV2dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIGV2dCk7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJ0b2tlblwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIGV2dCk7XG4gICAgICB9KTtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgY29uZmlybVN0cmlwZVByUE0gPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhLCBzdHJpcGVQbSkgPT4ge1xuICBpZiAoIW5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGsgfHwgIW5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHN0cmlwZVBtLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9jb3JlIHRvby5cbi8qKlxuICogLSBnbG9iYWxUaGlzIChOZXcgc3RhbmRhcmQpXG4gKiAtIHNlbGYgKFdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHdpbmRvdyBpbnN0YW5jZSBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzKVxuICogLSB3aW5kb3cgKGZhbGxiYWNrIGZvciBvbGRlciBicm93c2VyIGltcGxlbWVudGF0aW9ucylcbiAqIC0gZ2xvYmFsIChOb2RlSlMgaW1wbGVtZW50YXRpb24pXG4gKiAtIDxvYmplY3Q+IChXaGVuIGFsbCBlbHNlIGZhaWxzKVxuICovXG4vKiogb25seSBnbG9iYWxzIHRoYXQgY29tbW9uIHRvIG5vZGUgYW5kIGJyb3dzZXJzIGFyZSBhbGxvd2VkICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucywgbm8tdW5kZWZcbnZhciBfZ2xvYmFsVGhpcyA9IHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0J1xuICAgID8gZ2xvYmFsVGhpc1xuICAgIDogdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHdpbmRvd1xuICAgICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgID8gZ2xvYmFsXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIHRoaXMgaXMgYXV0b2dlbmVyYXRlZCBmaWxlLCBzZWUgc2NyaXB0cy92ZXJzaW9uLXVwZGF0ZS5qc1xudmFyIFZFUlNJT04gPSAnMS45LjAnO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIHJlID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB0byB0ZXN0IGFuIEFQSSB2ZXJzaW9uIHRvIHNlZSBpZiBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByb3ZpZGVkIG93blZlcnNpb24uXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNlbWFudGljczpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gb3duVmVyc2lvbiB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2sob3duVmVyc2lvbikge1xuICAgIHZhciBhY2NlcHRlZFZlcnNpb25zID0gbmV3IFNldChbb3duVmVyc2lvbl0pO1xuICAgIHZhciByZWplY3RlZFZlcnNpb25zID0gbmV3IFNldCgpO1xuICAgIHZhciBteVZlcnNpb25NYXRjaCA9IG93blZlcnNpb24ubWF0Y2gocmUpO1xuICAgIGlmICghbXlWZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgLy8gd2UgY2Fubm90IGd1YXJhbnRlZSBjb21wYXRpYmlsaXR5IHNvIHdlIGFsd2F5cyByZXR1cm4gbm9vcFxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH07XG4gICAgfVxuICAgIHZhciBvd25WZXJzaW9uUGFyc2VkID0ge1xuICAgICAgICBtYWpvcjogK215VmVyc2lvbk1hdGNoWzFdLFxuICAgICAgICBtaW5vcjogK215VmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICBwYXRjaDogK215VmVyc2lvbk1hdGNoWzNdLFxuICAgICAgICBwcmVyZWxlYXNlOiBteVZlcnNpb25NYXRjaFs0XSxcbiAgICB9O1xuICAgIC8vIGlmIG93blZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLnByZXJlbGVhc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNFeGFjdG1hdGNoKGdsb2JhbFZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxWZXJzaW9uID09PSBvd25WZXJzaW9uO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfcmVqZWN0KHYpIHtcbiAgICAgICAgcmVqZWN0ZWRWZXJzaW9ucy5hZGQodik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2FjY2VwdCh2KSB7XG4gICAgICAgIGFjY2VwdGVkVmVyc2lvbnMuYWRkKHYpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShnbG9iYWxWZXJzaW9uKSB7XG4gICAgICAgIGlmIChhY2NlcHRlZFZlcnNpb25zLmhhcyhnbG9iYWxWZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlamVjdGVkVmVyc2lvbnMuaGFzKGdsb2JhbFZlcnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25NYXRjaCA9IGdsb2JhbFZlcnNpb24ubWF0Y2gocmUpO1xuICAgICAgICBpZiAoIWdsb2JhbFZlcnNpb25NYXRjaCkge1xuICAgICAgICAgICAgLy8gY2Fubm90IHBhcnNlIG90aGVyIHZlcnNpb25cbiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBndWFyYW50ZWUgY29tcGF0aWJpbGl0eSBzbyB3ZSBhbHdheXMgbm9vcFxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdsb2JhbFZlcnNpb25QYXJzZWQgPSB7XG4gICAgICAgICAgICBtYWpvcjogK2dsb2JhbFZlcnNpb25NYXRjaFsxXSxcbiAgICAgICAgICAgIG1pbm9yOiArZ2xvYmFsVmVyc2lvbk1hdGNoWzJdLFxuICAgICAgICAgICAgcGF0Y2g6ICtnbG9iYWxWZXJzaW9uTWF0Y2hbM10sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBnbG9iYWxWZXJzaW9uTWF0Y2hbNF0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIGlmIGdsb2JhbFZlcnNpb24gaGFzIGEgcHJlcmVsZWFzZSB0YWcsIHZlcnNpb25zIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAoZ2xvYmFsVmVyc2lvblBhcnNlZC5wcmVyZWxlYXNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ham9yIHZlcnNpb25zIG11c3QgbWF0Y2hcbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWFqb3IgIT09IGdsb2JhbFZlcnNpb25QYXJzZWQubWFqb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmVqZWN0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvd25WZXJzaW9uUGFyc2VkLm1ham9yID09PSAwKSB7XG4gICAgICAgICAgICBpZiAob3duVmVyc2lvblBhcnNlZC5taW5vciA9PT0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vciAmJlxuICAgICAgICAgICAgICAgIG93blZlcnNpb25QYXJzZWQucGF0Y2ggPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5wYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYWNjZXB0KGdsb2JhbFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZlcnNpb25QYXJzZWQubWlub3IgPD0gZ2xvYmFsVmVyc2lvblBhcnNlZC5taW5vcikge1xuICAgICAgICAgICAgcmV0dXJuIF9hY2NlcHQoZ2xvYmFsVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yZWplY3QoZ2xvYmFsVmVyc2lvbik7XG4gICAgfTtcbn1cbi8qKlxuICogVGVzdCBhbiBBUEkgdmVyc2lvbiB0byBzZWUgaWYgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgQVBJLlxuICpcbiAqIC0gRXhhY3QgbWF0Y2ggaXMgYWx3YXlzIGNvbXBhdGlibGVcbiAqIC0gTWFqb3IgdmVyc2lvbnMgbXVzdCBtYXRjaCBleGFjdGx5XG4gKiAgICAtIDEueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDIueCBwYWNrYWdlXG4gKiAgICAtIDIueCBwYWNrYWdlIGNhbm5vdCB1c2UgZ2xvYmFsIDEueCBwYWNrYWdlXG4gKiAtIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBBUEkgbW9kdWxlIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSBnbG9iYWwgQVBJIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoaXMgQVBJXG4gKiAgICAtIDEuMyBwYWNrYWdlIG1heSB1c2UgMS40IGdsb2JhbCBiZWNhdXNlIHRoZSBsYXRlciBnbG9iYWwgY29udGFpbnMgYWxsIGZ1bmN0aW9ucyAxLjMgZXhwZWN0c1xuICogICAgLSAxLjQgcGFja2FnZSBtYXkgTk9UIHVzZSAxLjMgZ2xvYmFsIGJlY2F1c2UgaXQgbWF5IHRyeSB0byBjYWxsIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBleGlzdCBvbiAxLjNcbiAqIC0gSWYgdGhlIG1ham9yIHZlcnNpb24gaXMgMCwgdGhlIG1pbm9yIHZlcnNpb24gaXMgdHJlYXRlZCBhcyB0aGUgbWFqb3IgYW5kIHRoZSBwYXRjaCBpcyB0cmVhdGVkIGFzIHRoZSBtaW5vclxuICogLSBQYXRjaCBhbmQgYnVpbGQgdGFnIGRpZmZlcmVuY2VzIGFyZSBub3QgY29uc2lkZXJlZCBhdCB0aGlzIHRpbWVcbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiB2ZXJzaW9uIG9mIHRoZSBBUEkgcmVxdWVzdGluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2xvYmFsIEFQSVxuICovXG52YXIgaXNDb21wYXRpYmxlID0gX21ha2VDb21wYXRpYmlsaXR5Q2hlY2soVkVSU0lPTik7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgbWFqb3IgPSBWRVJTSU9OLnNwbGl0KCcuJylbMF07XG52YXIgR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIG1ham9yKTtcbnZhciBfZ2xvYmFsID0gX2dsb2JhbFRoaXM7XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbCh0eXBlLCBpbnN0YW5jZSwgZGlhZywgYWxsb3dPdmVycmlkZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoYWxsb3dPdmVycmlkZSA9PT0gdm9pZCAwKSB7IGFsbG93T3ZlcnJpZGUgPSBmYWxzZTsgfVxuICAgIHZhciBhcGkgPSAoX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSA9IChfYSA9IF9nbG9iYWxbR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHtcbiAgICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICB9KTtcbiAgICBpZiAoIWFsbG93T3ZlcnJpZGUgJiYgYXBpW3R5cGVdKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBhbiBBUEkgb2YgdGhpcyB0eXBlXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyB0eXBlKTtcbiAgICAgICAgZGlhZy5lcnJvcihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcGkudmVyc2lvbiAhPT0gVkVSU0lPTikge1xuICAgICAgICAvLyBBbGwgcmVnaXN0ZXJlZCBBUElzIG11c3QgYmUgb2YgdGhlIHNhbWUgdmVyc2lvbiBleGFjdGx5XG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGFwaS52ZXJzaW9uICsgXCIgZm9yIFwiICsgdHlwZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgVkVSU0lPTik7XG4gICAgICAgIGRpYWcuZXJyb3IoZXJyLnN0YWNrIHx8IGVyci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhcGlbdHlwZV0gPSBpbnN0YW5jZTtcbiAgICBkaWFnLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIHR5cGUgKyBcIiB2XCIgKyBWRVJTSU9OICsgXCIuXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0R2xvYmFsKHR5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBnbG9iYWxWZXJzaW9uID0gKF9hID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZlcnNpb247XG4gICAgaWYgKCFnbG9iYWxWZXJzaW9uIHx8ICFpc0NvbXBhdGlibGUoZ2xvYmFsVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gKF9iID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW3R5cGVdO1xufVxuZnVuY3Rpb24gdW5yZWdpc3Rlckdsb2JhbCh0eXBlLCBkaWFnKSB7XG4gICAgZGlhZy5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyB0eXBlICsgXCIgdlwiICsgVkVSU0lPTiArIFwiLlwiKTtcbiAgICB2YXIgYXBpID0gX2dsb2JhbFtHTE9CQUxfT1BFTlRFTEVNRVRSWV9BUElfS0VZXTtcbiAgICBpZiAoYXBpKSB7XG4gICAgICAgIGRlbGV0ZSBhcGlbdHlwZV07XG4gICAgfVxufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMyA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuLyoqXG4gKiBDb21wb25lbnQgTG9nZ2VyIHdoaWNoIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhbnkgY29tcG9uZW50IHdoaWNoXG4gKiB3aWxsIGFkZCBhdXRvbWF0aWNhbGx5IGFkZGl0aW9uYWwgbmFtZXNwYWNlIGluIGZyb250IG9mIHRoZSBsb2cgbWVzc2FnZS5cbiAqIEl0IHdpbGwgdGhlbiBmb3J3YXJkIGFsbCBtZXNzYWdlIHRvIGdsb2JhbCBkaWFnIGxvZ2dlclxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNMb2dnZXIgPSBkaWFnLmNyZWF0ZUNvbXBvbmVudExvZ2dlcih7IG5hbWVzcGFjZTogJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwJyB9KTtcbiAqIGNMb2dnZXIuZGVidWcoJ3Rlc3QnKTtcbiAqIC8vIEBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwIHRlc3RcbiAqL1xudmFyIERpYWdDb21wb25lbnRMb2dnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGlhZ0NvbXBvbmVudExvZ2dlcihwcm9wcykge1xuICAgICAgICB0aGlzLl9uYW1lc3BhY2UgPSBwcm9wcy5uYW1lc3BhY2UgfHwgJ0RpYWdDb21wb25lbnRMb2dnZXInO1xuICAgIH1cbiAgICBEaWFnQ29tcG9uZW50TG9nZ2VyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2RlYnVnJywgdGhpcy5fbmFtZXNwYWNlLCBhcmdzKTtcbiAgICB9O1xuICAgIERpYWdDb21wb25lbnRMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dQcm94eSgnZXJyb3InLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ2luZm8nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3dhcm4nLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgRGlhZ0NvbXBvbmVudExvZ2dlci5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nUHJveHkoJ3ZlcmJvc2UnLCB0aGlzLl9uYW1lc3BhY2UsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIERpYWdDb21wb25lbnRMb2dnZXI7XG59KCkpO1xuZnVuY3Rpb24gbG9nUHJveHkoZnVuY05hbWUsIG5hbWVzcGFjZSwgYXJncykge1xuICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJncy51bnNoaWZ0KG5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDMoW10sIF9fcmVhZCQzKGFyZ3MpLCBmYWxzZSkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBhdmFpbGFibGUgaW50ZXJuYWwgbG9nZ2luZyBsZXZlbHMgZm9yIHRoZSBkaWFnbm9zdGljIGxvZ2dlciwgdGhlIG51bWVyaWMgdmFsdWVzXG4gKiBvZiB0aGUgbGV2ZWxzIGFyZSBkZWZpbmVkIHRvIG1hdGNoIHRoZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgaW5pdGlhbCBMb2dMZXZlbCB0byBhdm9pZFxuICogY29tcGF0aWJpbGl0eS9taWdyYXRpb24gaXNzdWVzIGZvciBhbnkgaW1wbGVtZW50YXRpb24gdGhhdCBhc3N1bWUgdGhlIG51bWVyaWMgb3JkZXJpbmcuXG4gKi9cbnZhciBEaWFnTG9nTGV2ZWw7XG4oZnVuY3Rpb24gKERpYWdMb2dMZXZlbCkge1xuICAgIC8qKiBEaWFnbm9zdGljIExvZ2dpbmcgbGV2ZWwgc2V0dGluZyB0byBkaXNhYmxlIGFsbCBsb2dnaW5nIChleGNlcHQgYW5kIGZvcmNlZCBsb2dzKSAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvciBzY2VuYXJpbyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJFUlJPUlwiXSA9IDMwXSA9IFwiRVJST1JcIjtcbiAgICAvKiogSWRlbnRpZmllcyBhIHdhcm5pbmcgc2NlbmFyaW8gKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiV0FSTlwiXSA9IDUwXSA9IFwiV0FSTlwiO1xuICAgIC8qKiBHZW5lcmFsIGluZm9ybWF0aW9uYWwgbG9nIG1lc3NhZ2UgKi9cbiAgICBEaWFnTG9nTGV2ZWxbRGlhZ0xvZ0xldmVsW1wiSU5GT1wiXSA9IDYwXSA9IFwiSU5GT1wiO1xuICAgIC8qKiBHZW5lcmFsIGRlYnVnIGxvZyBtZXNzYWdlICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIkRFQlVHXCJdID0gNzBdID0gXCJERUJVR1wiO1xuICAgIC8qKlxuICAgICAqIERldGFpbGVkIHRyYWNlIGxldmVsIGxvZ2dpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQsIHNob3VsZCBvbmx5IGJlIHNldFxuICAgICAqIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgRGlhZ0xvZ0xldmVsW0RpYWdMb2dMZXZlbFtcIlZFUkJPU0VcIl0gPSA4MF0gPSBcIlZFUkJPU0VcIjtcbiAgICAvKiogVXNlZCB0byBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgdG8gaW5jbHVkZSBhbGwgbG9nZ2luZyAqL1xuICAgIERpYWdMb2dMZXZlbFtEaWFnTG9nTGV2ZWxbXCJBTExcIl0gPSA5OTk5XSA9IFwiQUxMXCI7XG59KShEaWFnTG9nTGV2ZWwgfHwgKERpYWdMb2dMZXZlbCA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dMZXZlbERpYWdMb2dnZXIobWF4TGV2ZWwsIGxvZ2dlcikge1xuICAgIGlmIChtYXhMZXZlbCA8IERpYWdMb2dMZXZlbC5OT05FKSB7XG4gICAgICAgIG1heExldmVsID0gRGlhZ0xvZ0xldmVsLk5PTkU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1heExldmVsID4gRGlhZ0xvZ0xldmVsLkFMTCkge1xuICAgICAgICBtYXhMZXZlbCA9IERpYWdMb2dMZXZlbC5BTEw7XG4gICAgfVxuICAgIC8vIEluIGNhc2UgdGhlIGxvZ2dlciBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGxvZ2dlciA9IGxvZ2dlciB8fCB7fTtcbiAgICBmdW5jdGlvbiBfZmlsdGVyRnVuYyhmdW5jTmFtZSwgdGhlTGV2ZWwpIHtcbiAgICAgICAgdmFyIHRoZUZ1bmMgPSBsb2dnZXJbZnVuY05hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRoZUZ1bmMgPT09ICdmdW5jdGlvbicgJiYgbWF4TGV2ZWwgPj0gdGhlTGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGVGdW5jLmJpbmQobG9nZ2VyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlcnJvcjogX2ZpbHRlckZ1bmMoJ2Vycm9yJywgRGlhZ0xvZ0xldmVsLkVSUk9SKSxcbiAgICAgICAgd2FybjogX2ZpbHRlckZ1bmMoJ3dhcm4nLCBEaWFnTG9nTGV2ZWwuV0FSTiksXG4gICAgICAgIGluZm86IF9maWx0ZXJGdW5jKCdpbmZvJywgRGlhZ0xvZ0xldmVsLklORk8pLFxuICAgICAgICBkZWJ1ZzogX2ZpbHRlckZ1bmMoJ2RlYnVnJywgRGlhZ0xvZ0xldmVsLkRFQlVHKSxcbiAgICAgICAgdmVyYm9zZTogX2ZpbHRlckZ1bmMoJ3ZlcmJvc2UnLCBEaWFnTG9nTGV2ZWwuVkVSQk9TRSksXG4gICAgfTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBfX3JlYWQkMiA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5JDIgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbnZhciBBUElfTkFNRSQyID0gJ2RpYWcnO1xuLyoqXG4gKiBTaW5nbGV0b24gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBPcGVuVGVsZW1ldHJ5IGludGVybmFsXG4gKiBkaWFnbm9zdGljIEFQSVxuICovXG52YXIgRGlhZ0FQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIGludGVybmFsIGNvbnN0cnVjdG9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEaWFnQVBJKCkge1xuICAgICAgICBmdW5jdGlvbiBfbG9nUHJveHkoZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsb2dnZXIgPSBnZXRHbG9iYWwoJ2RpYWcnKTtcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dCBpZiBsb2dnZXIgbm90IHNldFxuICAgICAgICAgICAgICAgIGlmICghbG9nZ2VyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2dlcltmdW5jTmFtZV0uYXBwbHkobG9nZ2VyLCBfX3NwcmVhZEFycmF5JDIoW10sIF9fcmVhZCQyKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2luZyBzZWxmIGxvY2FsIHZhcmlhYmxlIGZvciBtaW5pZmljYXRpb24gcHVycG9zZXMgYXMgJ3RoaXMnIGNhbm5vdCBiZSBtaW5pZmllZFxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIERpYWdBUEkgc3BlY2lmaWMgZnVuY3Rpb25zXG4gICAgICAgIHZhciBzZXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nZ2VyLCBvcHRpb25zT3JMb2dMZXZlbCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAob3B0aW9uc09yTG9nTGV2ZWwgPT09IHZvaWQgMCkgeyBvcHRpb25zT3JMb2dMZXZlbCA9IHsgbG9nTGV2ZWw6IERpYWdMb2dMZXZlbC5JTkZPIH07IH1cbiAgICAgICAgICAgIGlmIChsb2dnZXIgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIExvZ2dpbmcgdG8gdGhlIGNvbnNvbGUgbWlnaHQgYnJlYWsgdGhlIHVzZXIgYXBwbGljYXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvZyB0byBzZWxmLiBJZiBhIGxvZ2dlciB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGl0IHdpbGwgcmVjZWl2ZSB0aGUgbG9nLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb24nKTtcbiAgICAgICAgICAgICAgICBzZWxmLmVycm9yKChfYSA9IGVyci5zdGFjaykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yTG9nTGV2ZWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc09yTG9nTGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBvcHRpb25zT3JMb2dMZXZlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9sZExvZ2dlciA9IGdldEdsb2JhbCgnZGlhZycpO1xuICAgICAgICAgICAgdmFyIG5ld0xvZ2dlciA9IGNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcigoX2IgPSBvcHRpb25zT3JMb2dMZXZlbC5sb2dMZXZlbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRGlhZ0xvZ0xldmVsLklORk8sIGxvZ2dlcik7XG4gICAgICAgICAgICAvLyBUaGVyZSBhbHJlYWR5IGlzIGFuIGxvZ2dlciByZWdpc3RlcmVkLiBXZSdsbCBsZXQgaXQga25vdyBiZWZvcmUgb3ZlcndyaXRpbmcgaXQuXG4gICAgICAgICAgICBpZiAob2xkTG9nZ2VyICYmICFvcHRpb25zT3JMb2dMZXZlbC5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IChfYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAnPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPic7XG4gICAgICAgICAgICAgICAgb2xkTG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICAgICAgbmV3TG9nZ2VyLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBzdGFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoJ2RpYWcnLCBuZXdMb2dnZXIsIHNlbGYsIHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnNldExvZ2dlciA9IHNldExvZ2dlcjtcbiAgICAgICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSQyLCBzZWxmKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWFnQ29tcG9uZW50TG9nZ2VyKG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLnZlcmJvc2UgPSBfbG9nUHJveHkoJ3ZlcmJvc2UnKTtcbiAgICAgICAgc2VsZi5kZWJ1ZyA9IF9sb2dQcm94eSgnZGVidWcnKTtcbiAgICAgICAgc2VsZi5pbmZvID0gX2xvZ1Byb3h5KCdpbmZvJyk7XG4gICAgICAgIHNlbGYud2FybiA9IF9sb2dQcm94eSgnd2FybicpO1xuICAgICAgICBzZWxmLmVycm9yID0gX2xvZ1Byb3h5KCdlcnJvcicpO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIERpYWdBUEkgQVBJICovXG4gICAgRGlhZ0FQSS5pbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgRGlhZ0FQSSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9O1xuICAgIHJldHVybiBEaWFnQVBJO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKiBHZXQgYSBrZXkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBjb250ZXh0IHZhbHVlICovXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0S2V5KGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHRoYXQgZm9yIHRoZSBzYW1lIGlucHV0LCBtdWx0aXBsZSBjYWxscyBzaG91bGRcbiAgICAvLyByZXR1cm4gZGlmZmVyZW50IGtleXMuIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBKUyBkZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICAvLyBzeXN0ZW0sIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBzb21lIHBhY2thZ2VcbiAgICAvLyBjb3VsZCBob2xkIGRpZmZlcmVudCBrZXlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoZXJlZm9yZSwgd2UgdXNlIFN5bWJvbC5mb3Igd2hpY2ggcmV0dXJucyB0aGUgc2FtZSBrZXkgZm9yIHRoZSBzYW1lIGlucHV0LlxuICAgIHJldHVybiBTeW1ib2wuZm9yKGRlc2NyaXB0aW9uKTtcbn1cbnZhciBCYXNlQ29udGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29udGV4dCB3aGljaCBpbmhlcml0cyB2YWx1ZXMgZnJvbSBhbiBvcHRpb25hbCBwYXJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDb250ZXh0IGEgY29udGV4dCBmcm9tIHdoaWNoIHRvIGluaGVyaXQgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFzZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICAgICAgICAvLyBmb3IgbWluaWZpY2F0aW9uXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5fY3VycmVudENvbnRleHQgPSBwYXJlbnRDb250ZXh0ID8gbmV3IE1hcChwYXJlbnRDb250ZXh0KSA6IG5ldyBNYXAoKTtcbiAgICAgICAgc2VsZi5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZXh0LmdldChrZXkpOyB9O1xuICAgICAgICBzZWxmLnNldFZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IEJhc2VDb250ZXh0KHNlbGYuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRDb250ZXh0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgQmFzZUNvbnRleHQoc2VsZi5fY3VycmVudENvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC5fY3VycmVudENvbnRleHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEJhc2VDb250ZXh0O1xufSgpKTtcbi8qKiBUaGUgcm9vdCBjb250ZXh0IGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGFyZW50IGNvbnRleHQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgY29udGV4dCAqL1xudmFyIFJPT1RfQ09OVEVYVCA9IG5ldyBCYXNlQ29udGV4dCgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCQxID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIE5vb3BDb250ZXh0TWFuYWdlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wQ29udGV4dE1hbmFnZXIoKSB7XG4gICAgfVxuICAgIE5vb3BDb250ZXh0TWFuYWdlci5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gUk9PVF9DT05URVhUO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24gKF9jb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDM7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDNdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgX19zcHJlYWRBcnJheSQxKFt0aGlzQXJnXSwgX19yZWFkJDEoYXJncyksIGZhbHNlKSk7XG4gICAgfTtcbiAgICBOb29wQ29udGV4dE1hbmFnZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoX2NvbnRleHQsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9vcENvbnRleHRNYW5hZ2VyLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBOb29wQ29udGV4dE1hbmFnZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fcmVhZCA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgQVBJX05BTUUkMSA9ICdjb250ZXh0JztcbnZhciBOT09QX0NPTlRFWFRfTUFOQUdFUiA9IG5ldyBOb29wQ29udGV4dE1hbmFnZXIoKTtcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBDb250ZXh0IEFQSVxuICovXG52YXIgQ29udGV4dEFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIENvbnRleHRBUEkoKSB7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ29udGV4dCBBUEkgKi9cbiAgICBDb250ZXh0QVBJLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBDb250ZXh0QVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgbWFuYWdlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgbWFuYWdlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGVsc2UgZmFsc2VcbiAgICAgKi9cbiAgICBDb250ZXh0QVBJLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uIChjb250ZXh0TWFuYWdlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUkMSwgY29udGV4dE1hbmFnZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBhbiBhY3RpdmUgY29udGV4dFxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBiZSBhY3RpdmUgZHVyaW5nIGZ1bmN0aW9uIGV4ZWN1dGlvblxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGluIGEgY29udGV4dFxuICAgICAqIEBwYXJhbSB0aGlzQXJnIG9wdGlvbmFsIHJlY2VpdmVyIHRvIGJlIHVzZWQgZm9yIGNhbGxpbmcgZm5cbiAgICAgKiBAcGFyYW0gYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIGZuXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uIChjb250ZXh0LCBmbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMzsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gM10gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KF9hLCBfX3NwcmVhZEFycmF5KFtjb250ZXh0LCBmbiwgdGhpc0FyZ10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEJpbmQgYSBjb250ZXh0IHRvIGEgdGFyZ2V0IGZ1bmN0aW9uIG9yIGV2ZW50IGVtaXR0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gYmluZCB0byB0aGUgZXZlbnQgZW1pdHRlciBvciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udGV4dFxuICAgICAqIEBwYXJhbSB0YXJnZXQgZnVuY3Rpb24gb3IgZXZlbnQgZW1pdHRlciB0byBiaW5kXG4gICAgICovXG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIChjb250ZXh0LCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZChjb250ZXh0LCB0YXJnZXQpO1xuICAgIH07XG4gICAgQ29udGV4dEFQSS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FJDEpIHx8IE5PT1BfQ09OVEVYVF9NQU5BR0VSO1xuICAgIH07XG4gICAgLyoqIERpc2FibGUgYW5kIHJlbW92ZSB0aGUgZ2xvYmFsIGNvbnRleHQgbWFuYWdlciAqL1xuICAgIENvbnRleHRBUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpO1xuICAgICAgICB1bnJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FJDEsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29udGV4dEFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgVHJhY2VGbGFncztcbihmdW5jdGlvbiAoVHJhY2VGbGFncykge1xuICAgIC8qKiBSZXByZXNlbnRzIG5vIGZsYWcgc2V0LiAqL1xuICAgIFRyYWNlRmxhZ3NbVHJhY2VGbGFnc1tcIk5PTkVcIl0gPSAwXSA9IFwiTk9ORVwiO1xuICAgIC8qKiBCaXQgdG8gcmVwcmVzZW50IHdoZXRoZXIgdHJhY2UgaXMgc2FtcGxlZCBpbiB0cmFjZSBmbGFncy4gKi9cbiAgICBUcmFjZUZsYWdzW1RyYWNlRmxhZ3NbXCJTQU1QTEVEXCJdID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFRyYWNlRmxhZ3MgfHwgKFRyYWNlRmxhZ3MgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIElOVkFMSURfU1BBTklEID0gJzAwMDAwMDAwMDAwMDAwMDAnO1xudmFyIElOVkFMSURfVFJBQ0VJRCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG52YXIgSU5WQUxJRF9TUEFOX0NPTlRFWFQgPSB7XG4gICAgdHJhY2VJZDogSU5WQUxJRF9UUkFDRUlELFxuICAgIHNwYW5JZDogSU5WQUxJRF9TUEFOSUQsXG4gICAgdHJhY2VGbGFnczogVHJhY2VGbGFncy5OT05FLFxufTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogVGhlIE5vblJlY29yZGluZ1NwYW4gaXMgdGhlIGRlZmF1bHQge0BsaW5rIFNwYW59IHRoYXQgaXMgdXNlZCB3aGVuIG5vIFNwYW5cbiAqIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS4gQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wIGluY2x1ZGluZyBjb250ZXh0XG4gKiBwcm9wYWdhdGlvbi5cbiAqL1xudmFyIE5vblJlY29yZGluZ1NwYW4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9uUmVjb3JkaW5nU3Bhbihfc3BhbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKF9zcGFuQ29udGV4dCA9PT0gdm9pZCAwKSB7IF9zcGFuQ29udGV4dCA9IElOVkFMSURfU1BBTl9DT05URVhUOyB9XG4gICAgICAgIHRoaXMuX3NwYW5Db250ZXh0ID0gX3NwYW5Db250ZXh0O1xuICAgIH1cbiAgICAvLyBSZXR1cm5zIGEgU3BhbkNvbnRleHQuXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKF9rZXksIF92YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChfYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbiAoX25hbWUsIF9hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uIChfbGluaykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24gKF9saW5rcykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nXG4gICAgTm9uUmVjb3JkaW5nU3Bhbi5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24gKF9zdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbiAoX25hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChfZW5kVGltZSkgeyB9O1xuICAgIC8vIGlzUmVjb3JkaW5nIGFsd2F5cyByZXR1cm5zIGZhbHNlIGZvciBOb25SZWNvcmRpbmdTcGFuLlxuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICAvLyBCeSBkZWZhdWx0IGRvZXMgbm90aGluZ1xuICAgIE5vblJlY29yZGluZ1NwYW4ucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfdGltZSkgeyB9O1xuICAgIHJldHVybiBOb25SZWNvcmRpbmdTcGFuO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogc3BhbiBrZXlcbiAqL1xudmFyIFNQQU5fS0VZID0gY3JlYXRlQ29udGV4dEtleSgnT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOJyk7XG4vKipcbiAqIFJldHVybiB0aGUgc3BhbiBpZiBvbmUgZXhpc3RzXG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBnZXQgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKFNQQU5fS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEdldHMgdGhlIHNwYW4gZnJvbSB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBvbmUgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCkge1xuICAgIHJldHVybiBnZXRTcGFuKENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG4vKipcbiAqIFNldCB0aGUgc3BhbiBvbiBhIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHVzZSBhcyBwYXJlbnRcbiAqIEBwYXJhbSBzcGFuIHNwYW4gdG8gc2V0IGFjdGl2ZVxuICovXG5mdW5jdGlvbiBzZXRTcGFuKGNvbnRleHQsIHNwYW4pIHtcbiAgICByZXR1cm4gY29udGV4dC5zZXRWYWx1ZShTUEFOX0tFWSwgc3Bhbik7XG59XG4vKipcbiAqIFJlbW92ZSBjdXJyZW50IHNwYW4gc3RvcmVkIGluIHRoZSBjb250ZXh0XG4gKlxuICogQHBhcmFtIGNvbnRleHQgY29udGV4dCB0byBkZWxldGUgc3BhbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNwYW4oY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmRlbGV0ZVZhbHVlKFNQQU5fS0VZKTtcbn1cbi8qKlxuICogV3JhcCBzcGFuIGNvbnRleHQgaW4gYSBOb29wU3BhbiBhbmQgc2V0IGFzIHNwYW4gaW4gYSBuZXdcbiAqIGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IHRvIHNldCBhY3RpdmUgc3BhbiBvblxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIHNldFNwYW5Db250ZXh0KGNvbnRleHQsIHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFNwYW4oY29udGV4dCwgbmV3IE5vblJlY29yZGluZ1NwYW4oc3BhbkNvbnRleHQpKTtcbn1cbi8qKlxuICogR2V0IHRoZSBzcGFuIGNvbnRleHQgb2YgdGhlIHNwYW4gaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGdldFNwYW4oY29udGV4dCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zcGFuQ29udGV4dCgpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIFZBTElEX1RSQUNFSURfUkVHRVggPSAvXihbMC05YS1mXXszMn0pJC9pO1xudmFyIFZBTElEX1NQQU5JRF9SRUdFWCA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaXNWYWxpZFRyYWNlSWQodHJhY2VJZCkge1xuICAgIHJldHVybiBWQUxJRF9UUkFDRUlEX1JFR0VYLnRlc3QodHJhY2VJZCkgJiYgdHJhY2VJZCAhPT0gSU5WQUxJRF9UUkFDRUlEO1xufVxuZnVuY3Rpb24gaXNWYWxpZFNwYW5JZChzcGFuSWQpIHtcbiAgICByZXR1cm4gVkFMSURfU1BBTklEX1JFR0VYLnRlc3Qoc3BhbklkKSAmJiBzcGFuSWQgIT09IElOVkFMSURfU1BBTklEO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB7QGxpbmsgU3BhbkNvbnRleHR9IGlzIHZhbGlkLlxuICogQHJldHVybiB0cnVlIGlmIHRoaXMge0BsaW5rIFNwYW5Db250ZXh0fSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIChpc1ZhbGlkVHJhY2VJZChzcGFuQ29udGV4dC50cmFjZUlkKSAmJiBpc1ZhbGlkU3BhbklkKHNwYW5Db250ZXh0LnNwYW5JZCkpO1xufVxuLyoqXG4gKiBXcmFwIHRoZSBnaXZlbiB7QGxpbmsgU3BhbkNvbnRleHR9IGluIGEgbmV3IG5vbi1yZWNvcmRpbmcge0BsaW5rIFNwYW59XG4gKlxuICogQHBhcmFtIHNwYW5Db250ZXh0IHNwYW4gY29udGV4dCB0byBiZSB3cmFwcGVkXG4gKiBAcmV0dXJucyBhIG5ldyBub24tcmVjb3JkaW5nIHtAbGluayBTcGFufSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHdyYXBTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbihzcGFuQ29udGV4dCk7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgY29udGV4dEFwaSA9IENvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtcbi8qKlxuICogTm8tb3AgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBUcmFjZXJ9LlxuICovXG52YXIgTm9vcFRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb29wVHJhY2VyKCkge1xuICAgIH1cbiAgICAvLyBzdGFydFNwYW4gc3RhcnRzIGEgbm9vcCBzcGFuLlxuICAgIE5vb3BUcmFjZXIucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHsgY29udGV4dCA9IGNvbnRleHRBcGkuYWN0aXZlKCk7IH1cbiAgICAgICAgdmFyIHJvb3QgPSBCb29sZWFuKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5yb290KTtcbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJlbnRGcm9tQ29udGV4dCA9IGNvbnRleHQgJiYgZ2V0U3BhbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIGlmIChpc1NwYW5Db250ZXh0KHBhcmVudEZyb21Db250ZXh0KSAmJlxuICAgICAgICAgICAgaXNTcGFuQ29udGV4dFZhbGlkKHBhcmVudEZyb21Db250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb25SZWNvcmRpbmdTcGFuKHBhcmVudEZyb21Db250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTm9uUmVjb3JkaW5nU3BhbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb29wVHJhY2VyLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbiAobmFtZSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgICB2YXIgb3B0cztcbiAgICAgICAgdmFyIGN0eDtcbiAgICAgICAgdmFyIGZuO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBmbiA9IGFyZzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgb3B0cyA9IGFyZzI7XG4gICAgICAgICAgICBmbiA9IGFyZzM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRzID0gYXJnMjtcbiAgICAgICAgICAgIGN0eCA9IGFyZzM7XG4gICAgICAgICAgICBmbiA9IGFyZzQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudENvbnRleHQgPSBjdHggIT09IG51bGwgJiYgY3R4ICE9PSB2b2lkIDAgPyBjdHggOiBjb250ZXh0QXBpLmFjdGl2ZSgpO1xuICAgICAgICB2YXIgc3BhbiA9IHRoaXMuc3RhcnRTcGFuKG5hbWUsIG9wdHMsIHBhcmVudENvbnRleHQpO1xuICAgICAgICB2YXIgY29udGV4dFdpdGhTcGFuU2V0ID0gc2V0U3BhbihwYXJlbnRDb250ZXh0LCBzcGFuKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRBcGkud2l0aChjb250ZXh0V2l0aFNwYW5TZXQsIGZuLCB1bmRlZmluZWQsIHNwYW4pO1xuICAgIH07XG4gICAgcmV0dXJuIE5vb3BUcmFjZXI7XG59KCkpO1xuZnVuY3Rpb24gaXNTcGFuQ29udGV4dChzcGFuQ29udGV4dCkge1xuICAgIHJldHVybiAodHlwZW9mIHNwYW5Db250ZXh0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3NwYW5JZCddID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB0eXBlb2Ygc3BhbkNvbnRleHRbJ3RyYWNlSWQnXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdHlwZW9mIHNwYW5Db250ZXh0Wyd0cmFjZUZsYWdzJ10gPT09ICdudW1iZXInKTtcbn1cblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBOT09QX1RSQUNFUiA9IG5ldyBOb29wVHJhY2VyKCk7XG4vKipcbiAqIFByb3h5IHRyYWNlciBwcm92aWRlZCBieSB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyXG4gKi9cbnZhciBQcm94eVRyYWNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlcihfcHJvdmlkZXIsIG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSBfcHJvdmlkZXI7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIFByb3h5VHJhY2VyLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMsIGNvbnRleHQpO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uIChfbmFtZSwgX29wdGlvbnMsIF9jb250ZXh0LCBfZm4pIHtcbiAgICAgICAgdmFyIHRyYWNlciA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0cmFjZXIuc3RhcnRBY3RpdmVTcGFuLCB0cmFjZXIsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUcnkgdG8gZ2V0IGEgdHJhY2VyIGZyb20gdGhlIHByb3h5IHRyYWNlciBwcm92aWRlci5cbiAgICAgKiBJZiB0aGUgcHJveHkgdHJhY2VyIHByb3ZpZGVyIGhhcyBubyBkZWxlZ2F0ZSwgcmV0dXJuIGEgbm9vcCB0cmFjZXIuXG4gICAgICovXG4gICAgUHJveHlUcmFjZXIucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0cmFjZXIgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKCF0cmFjZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBOT09QX1RSQUNFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHRyYWNlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgIH07XG4gICAgcmV0dXJuIFByb3h5VHJhY2VyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBUcmFjZXJQcm92aWRlcn0gd2hpY2ggcmV0dXJucyBhbiBpbXBvdGVudFxuICogVHJhY2VyIGZvciBhbGwgY2FsbHMgdG8gYGdldFRyYWNlcmAuXG4gKlxuICogQWxsIG9wZXJhdGlvbnMgYXJlIG5vLW9wLlxuICovXG52YXIgTm9vcFRyYWNlclByb3ZpZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUcmFjZXJQcm92aWRlcigpIHtcbiAgICB9XG4gICAgTm9vcFRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAoX25hbWUsIF92ZXJzaW9uLCBfb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BUcmFjZXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVHJhY2VyUHJvdmlkZXI7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIE5PT1BfVFJBQ0VSX1BST1ZJREVSID0gbmV3IE5vb3BUcmFjZXJQcm92aWRlcigpO1xuLyoqXG4gKiBUcmFjZXIgcHJvdmlkZXIgd2hpY2ggcHJvdmlkZXMge0BsaW5rIFByb3h5VHJhY2VyfXMuXG4gKlxuICogQmVmb3JlIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXJzIHByb3ZpZGVkIGFyZSBOb09wLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0LCB0cmFjZXMgYXJlIHByb3ZpZGVkIGZyb20gdGhlIGRlbGVnYXRlLlxuICogICBXaGVuIGEgZGVsZWdhdGUgaXMgc2V0IGFmdGVyIHRyYWNlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQsXG4gKiAgIGFsbCB0cmFjZXJzIGFscmVhZHkgcHJvdmlkZWQgd2lsbCB1c2UgdGhlIHByb3ZpZGVkIGRlbGVnYXRlIGltcGxlbWVudGF0aW9uLlxuICovXG52YXIgUHJveHlUcmFjZXJQcm92aWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQcm94eVRyYWNlclByb3ZpZGVyKCkge1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSB7QGxpbmsgUHJveHlUcmFjZXJ9XG4gICAgICovXG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5ldyBQcm94eVRyYWNlcih0aGlzLCBuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IE5PT1BfVFJBQ0VSX1BST1ZJREVSO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBkZWxlZ2F0ZSB0cmFjZXIgcHJvdmlkZXJcbiAgICAgKi9cbiAgICBQcm94eVRyYWNlclByb3ZpZGVyLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH07XG4gICAgUHJveHlUcmFjZXJQcm92aWRlci5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHJldHVybiBQcm94eVRyYWNlclByb3ZpZGVyO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbnZhciBTcGFuS2luZDtcbihmdW5jdGlvbiAoU3BhbktpbmQpIHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZS4gSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gaXMgdXNlZCBpbnRlcm5hbGx5LiAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiSU5URVJOQUxcIl0gPSAwXSA9IFwiSU5URVJOQUxcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBjb3ZlcnMgc2VydmVyLXNpZGUgaGFuZGxpbmcgb2YgYW4gUlBDIG9yIG90aGVyXG4gICAgICogcmVtb3RlIHJlcXVlc3QuXG4gICAgICovXG4gICAgU3BhbktpbmRbU3BhbktpbmRbXCJTRVJWRVJcIl0gPSAxXSA9IFwiU0VSVkVSXCI7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNwYW4gY292ZXJzIHRoZSBjbGllbnQtc2lkZSB3cmFwcGVyIGFyb3VuZCBhbiBSUEMgb3JcbiAgICAgKiBvdGhlciByZW1vdGUgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNMSUVOVFwiXSA9IDJdID0gXCJDTElFTlRcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgcHJvZHVjZXIgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYVxuICAgICAqIGJyb2tlci4gVW5saWtlIGNsaWVudCBhbmQgc2VydmVyLCB0aGVyZSBpcyBubyBkaXJlY3QgY3JpdGljYWwgcGF0aCBsYXRlbmN5XG4gICAgICogcmVsYXRpb25zaGlwIGJldHdlZW4gcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHNwYW5zLlxuICAgICAqL1xuICAgIFNwYW5LaW5kW1NwYW5LaW5kW1wiUFJPRFVDRVJcIl0gPSAzXSA9IFwiUFJPRFVDRVJcIjtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3BhbiBkZXNjcmliZXMgY29uc3VtZXIgcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIGFcbiAgICAgKiBicm9rZXIuIFVubGlrZSBjbGllbnQgYW5kIHNlcnZlciwgdGhlcmUgaXMgbm8gZGlyZWN0IGNyaXRpY2FsIHBhdGggbGF0ZW5jeVxuICAgICAqIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2R1Y2VyIGFuZCBjb25zdW1lciBzcGFucy5cbiAgICAgKi9cbiAgICBTcGFuS2luZFtTcGFuS2luZFtcIkNPTlNVTUVSXCJdID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShTcGFuS2luZCB8fCAoU3BhbktpbmQgPSB7fSkpO1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xudmFyIFNwYW5TdGF0dXNDb2RlO1xuKGZ1bmN0aW9uIChTcGFuU3RhdHVzQ29kZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IHN0YXR1cy5cbiAgICAgKi9cbiAgICBTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZVtcIlVOU0VUXCJdID0gMF0gPSBcIlVOU0VUXCI7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBoYXMgYmVlbiB2YWxpZGF0ZWQgYnkgYW4gQXBwbGljYXRpb24gZGV2ZWxvcGVyIG9yXG4gICAgICogT3BlcmF0b3IgdG8gaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiT0tcIl0gPSAxXSA9IFwiT0tcIjtcbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRhaW5zIGFuIGVycm9yLlxuICAgICAqL1xuICAgIFNwYW5TdGF0dXNDb2RlW1NwYW5TdGF0dXNDb2RlW1wiRVJST1JcIl0gPSAyXSA9IFwiRVJST1JcIjtcbn0pKFNwYW5TdGF0dXNDb2RlIHx8IChTcGFuU3RhdHVzQ29kZSA9IHt9KSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgY29udGV4dCBBUEkgKi9cbnZhciBjb250ZXh0ID0gQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3RyYWNlJztcbi8qKlxuICogU2luZ2xldG9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgT3BlblRlbGVtZXRyeSBUcmFjaW5nIEFQSVxuICovXG52YXIgVHJhY2VBUEkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqIEVtcHR5IHByaXZhdGUgY29uc3RydWN0b3IgcHJldmVudHMgZW5kIHVzZXJzIGZyb20gY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBUEkgKi9cbiAgICBmdW5jdGlvbiBUcmFjZUFQSSgpIHtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3JhcFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IGlzU3BhbkNvbnRleHRWYWxpZDtcbiAgICAgICAgdGhpcy5kZWxldGVTcGFuID0gZGVsZXRlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuID0gZ2V0U3BhbjtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbjtcbiAgICAgICAgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGdldFNwYW5Db250ZXh0O1xuICAgICAgICB0aGlzLnNldFNwYW4gPSBzZXRTcGFuO1xuICAgICAgICB0aGlzLnNldFNwYW5Db250ZXh0ID0gc2V0U3BhbkNvbnRleHQ7XG4gICAgfVxuICAgIC8qKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgVHJhY2UgQVBJICovXG4gICAgVHJhY2VBUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFRyYWNlQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IGdsb2JhbCB0cmFjZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0cmFjZXIgcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBlbHNlIGZhbHNlXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKHByb3ZpZGVyKSB7XG4gICAgICAgIHZhciBzdWNjZXNzID0gcmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHByb3ZpZGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIuXG4gICAgICovXG4gICAgVHJhY2VBUEkucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0R2xvYmFsKEFQSV9OQU1FKSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHRyYWNlciBmcm9tIHRoZSBnbG9iYWwgdHJhY2VyIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIFRyYWNlQVBJLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbiAobmFtZSwgdmVyc2lvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcihuYW1lLCB2ZXJzaW9uKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCB0cmFjZXIgcHJvdmlkZXIgKi9cbiAgICBUcmFjZUFQSS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdW5yZWdpc3Rlckdsb2JhbChBUElfTkFNRSwgRGlhZ0FQSS5pbnN0YW5jZSgpKTtcbiAgICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcm94eVRyYWNlclByb3ZpZGVyKCk7XG4gICAgfTtcbiAgICByZXR1cm4gVHJhY2VBUEk7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gU3BsaXQgbW9kdWxlLWxldmVsIHZhcmlhYmxlIGRlZmluaXRpb24gaW50byBzZXBhcmF0ZSBmaWxlcyB0byBhbGxvd1xuLy8gdHJlZS1zaGFraW5nIG9uIGVhY2ggYXBpIGluc3RhbmNlLlxuLyoqIEVudHJ5cG9pbnQgZm9yIHRyYWNlIEFQSSAqL1xudmFyIHRyYWNlID0gVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKTtcblxuY29uc3QgY3JlYXRlQ0RFU3BhbiA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCBvcGVyYXRpb24pID0+IHtcbiAgY29uc3QgdHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQuYWN0aXZlKCk7XG4gIGNvbnN0IHNwYW4gPSB0cmFjZXIuc3RhcnRTcGFuKFxuICAgIGBjZGUuJHtkYXRhLnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgLi4uY2RlQ29ubi50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBjZGVDb25uLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogY2RlQ29ubi50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGNkZUNvbm4udHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IGRhdGEudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KGRhdGEucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcmVudENvbnRleHRcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQud2l0aCh0cmFjZS5zZXRTcGFuKHBhcmVudENvbnRleHQsIHNwYW4pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNwYW4uZW5kKCk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjcmVhdGVUcmFja2luZ1NwYW4gPSBhc3luYyAob3B0aW9ucywgb3BlcmF0aW9uKSA9PiB7XG4gIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gIGNvbnN0IHBhcmVudENvbnRleHQgPSBjb250ZXh0LmFjdGl2ZSgpO1xuICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke29wdGlvbnMuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBTcGFuS2luZC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogb3B0aW9ucy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBvcHRpb25zLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogb3B0aW9ucy5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogb3B0aW9ucy5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogb3B0aW9ucy5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBvcHRpb25zLnJlZmVycmVyLFxuICAgICAgICAuLi5vcHRpb25zLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IG9wdGlvbnMucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Q29udGV4dFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0sgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHNwYW4uc2V0U3RhdHVzKHtcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgc3Bhbi5lbmQoKTtcbiAgfVxufTtcblxuY2xhc3MgQ2RlRXJyb3IgZXh0ZW5kcyBDdXN0b21FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYCR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgIHN1cGVyKGZyaWVuZGx5TWVzc2FnZSk7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBxdWVyeUNERSA9IGFzeW5jIChjZGVDb25uLCBkYXRhLCByZXNwb25zZVNjaGVtYSwgdHJhY2tpbmdLZXkpID0+IHtcbiAgcmV0dXJuIGNyZWF0ZUNERVNwYW4oY2RlQ29ubiwgZGF0YSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0cmFja2luZ0tleSkge1xuICAgICAgdHJhY2sodHJhY2tpbmdLZXksIHtcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICAgIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gICAgICB0cmFjayhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yX21lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2VfdHlwZTogZGF0YS50eXBlLFxuICAgICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgICBvbmxpbmU6IG5hdmlnYXRvci5vbkxpbmUsXG4gICAgICAgIGhhc19mb2N1czogZG9jdW1lbnQuaGFzRm9jdXMoKSxcbiAgICAgICAgaHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgIGRvY3VtZW50X3Zpc2liaWxpdHlfc3RhdGU6IGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSxcbiAgICAgICAgY29ubmVjdGlvbl9kb3dubGluazogY29ubmVjdGlvbj8uZG93bmxpbmssXG4gICAgICAgIGNvbm5lY3Rpb25fZWZmZWN0aXZlX3R5cGU6IGNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUsXG4gICAgICAgIGNvbm5lY3Rpb25fcnR0OiBjb25uZWN0aW9uPy5ydHQsXG4gICAgICAgIGNvbm5lY3Rpb25fc2F2ZV9kYXRhOiBjb25uZWN0aW9uPy5zYXZlRGF0YVxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICAgIH1cbiAgICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgaWYgKHRyYWNraW5nS2V5KSB7XG4gICAgICB0cmFjayh0cmFja2luZ0tleSwge1xuICAgICAgICAuLi5yZXNwb25zZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSk7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLFxuICAgIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sXG4gICAgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UsXG4gICAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiAgKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cmFjayhcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLnBheWxvYWRcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgdHJhY2soXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4ucmVzdWx0XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3QgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LFxuICAgIFNldHVwQ2hlY2tvdXRSZXNwb25zZSxcbiAgICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiAgKTtcbn07XG5jb25zdCBjaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkUmVzcG9uc2UsXG4gICAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuICApO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFwcm9tb0NvZGUpIHtcbiAgICAgIHByb21vQ29kZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LFxuICAgIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLFxuICAgIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4gICk7XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UsIFwic2V0dXBfY2hlY2tvdXRcIik7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlLCBcInBlcmZvcm1fY2hlY2tvdXRcIik7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZSB9LCByZXNwb25zZU1vZGVsKTtcbiAgY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IHByZXBhcmVQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShcbiAgICBjZGVDb25uLFxuICAgIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sXG4gICAgUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UsXG4gICAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4gICk7XG59O1xuY29uc3Qgc2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlID0gYXN5bmMgKGNkZUNvbm4sIGVycm9yTWVzc2FnZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7IG1lc3NhZ2U6IGVycm9yTWVzc2FnZSB9O1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcXVlcnlDREUoXG4gICAgICBjZGVDb25uLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkIH0sXG4gICAgICBDaGVja291dFN0YW5kYXJkRXJyb3JSZXNwb25zZVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICByZXR1cm4gXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn07XG5jb25zdCBzZXRVc2VyRGV2aWNlVG9rZW4gPSBhc3luYyAoY2RlQ29ubiwgZGV2aWNlVG9rZW4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKFxuICAgIGNkZUNvbm4sXG4gICAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogZGV2aWNlVG9rZW4gfSB9LFxuICAgIFNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlXG4gICk7XG59O1xuXG5jb25zdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0ID0gYXN5bmMgKG9iaikgPT4ge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCAhb2JqKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGluZyA9IHsgdHlwZTogXCJwaW5nXCIgfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvYmouc2VuZChwaW5nKTtcbiAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6YCwgZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBGUkFNRV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcblxuLy8gVGhlc2UgdmFsdWVzIHNob3VsZCBORVZFUiBjaGFuZ2UuIFRoZSB2YWx1ZXMgYXJlIHByZWNpc2VseSBmb3Jcbi8vIGdlbmVyYXRpbmcgVUxJRHMuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIjsgLy8gQ3JvY2tmb3JkJ3MgQmFzZTMyXG5jb25zdCBFTkNPRElOR19MRU4gPSAzMjsgLy8gZnJvbSBFTkNPRElORy5sZW5ndGg7XG5jb25zdCBSQU5ET01fTEVOID0gMTY7XG5jb25zdCBUSU1FX0xFTiA9IDEwO1xuY29uc3QgVElNRV9NQVggPSAyODE0NzQ5NzY3MTA2NTU7IC8vIGZyb20gTWF0aC5wb3coMiwgNDgpIC0gMTtcblxudmFyIFVMSURFcnJvckNvZGU7XG4oZnVuY3Rpb24gKFVMSURFcnJvckNvZGUpIHtcbiAgICBVTElERXJyb3JDb2RlW1wiQmFzZTMySW5jb3JyZWN0RW5jb2RpbmdcIl0gPSBcIkIzMl9FTkNfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlclwiXSA9IFwiREVDX1RJTUVfQ0hBUlwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJEZWNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkRFQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lTmVnYXRpdmVcIl0gPSBcIkVOQ19USU1FX05FR1wiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkXCJdID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJFbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWRcIl0gPSBcIkVOQ19USU1FX01BTEZPUk1FRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJQUk5HRGV0ZWN0RmFpbHVyZVwiXSA9IFwiUFJOR19ERVRFQ1RcIjtcbiAgICBVTElERXJyb3JDb2RlW1wiVUxJREludmFsaWRcIl0gPSBcIlVMSURfSU5WQUxJRFwiO1xuICAgIFVMSURFcnJvckNvZGVbXCJVbmV4cGVjdGVkXCJdID0gXCJVTkVYUEVDVEVEXCI7XG4gICAgVUxJREVycm9yQ29kZVtcIlVVSURJbnZhbGlkXCJdID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFVMSURFcnJvckNvZGUgfHwgKFVMSURFcnJvckNvZGUgPSB7fSkpO1xuY2xhc3MgVUxJREVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgbWVzc2FnZSkge1xuICAgICAgICBzdXBlcihgJHttZXNzYWdlfSAoJHtlcnJvckNvZGV9KWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiO1xuICAgICAgICB0aGlzLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByYW5kb21DaGFyKHBybmcpIHtcbiAgICBsZXQgcmFuZCA9IE1hdGguZmxvb3IocHJuZygpICogRU5DT0RJTkdfTEVOKTtcbiAgICBpZiAocmFuZCA9PT0gRU5DT0RJTkdfTEVOKSB7XG4gICAgICAgIHJhbmQgPSBFTkNPRElOR19MRU4gLSAxO1xuICAgIH1cbiAgICByZXR1cm4gRU5DT0RJTkcuY2hhckF0KHJhbmQpO1xufVxuLyoqXG4gKiBEZXRlY3QgdGhlIGJlc3QgUFJORyAocHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yKVxuICogQHBhcmFtIHJvb3QgVGhlIHJvb3QgdG8gY2hlY2sgZnJvbSAoZ2xvYmFsL3dpbmRvdylcbiAqIEByZXR1cm5zIFRoZSBQUk5HIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFBSTkcocm9vdCkge1xuICAgIGNvbnN0IHJvb3RMb29rdXAgPSBkZXRlY3RSb290KCk7XG4gICAgY29uc3QgZ2xvYmFsQ3J5cHRvID0gKHJvb3RMb29rdXAgJiYgKHJvb3RMb29rdXAuY3J5cHRvIHx8IHJvb3RMb29rdXAubXNDcnlwdG8pKSB8fFxuICAgICAgICAobnVsbCk7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxDcnlwdG8/LmdldFJhbmRvbVZhbHVlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgICAgIGdsb2JhbENyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmZmVyKTtcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJbMF0gLyAweGZmO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsQ3J5cHRvPy5yYW5kb21CeXRlcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiBnbG9iYWxDcnlwdG8ucmFuZG9tQnl0ZXMoMSkucmVhZFVJbnQ4KCkgLyAweGZmO1xuICAgIH1cbiAgICBlbHNlIDtcbiAgICB0aHJvdyBuZXcgVUxJREVycm9yKFVMSURFcnJvckNvZGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gZGV0ZWN0Um9vdCgpIHtcbiAgICBpZiAoaW5XZWJXb3JrZXIoKSlcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGVuY29kZVJhbmRvbShsZW4sIHBybmcpIHtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHtcbiAgICAgICAgc3RyID0gcmFuZG9tQ2hhcihwcm5nKSArIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogRW5jb2RlIHRoZSB0aW1lIHBvcnRpb24gb2YgYSBVTElEXG4gKiBAcGFyYW0gbm93IFRoZSBjdXJyZW50IHRpbWVzdGFtcFxuICogQHBhcmFtIGxlbiBMZW5ndGggdG8gZ2VuZXJhdGVcbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIHRpbWVcbiAqL1xuZnVuY3Rpb24gZW5jb2RlVGltZShub3csIGxlbiA9IFRJTUVfTEVOKSB7XG4gICAgaWYgKGlzTmFOKG5vdykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVMSURFcnJvcihVTElERXJyb3JDb2RlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA+IFRJTUVfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtUSU1FX01BWH06ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7bm93fWApO1xuICAgIH1cbiAgICBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG5vdykgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBVTElERXJyb3IoVUxJREVycm9yQ29kZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtub3d9YCk7XG4gICAgfVxuICAgIGxldCBtb2QsIHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgY3VycmVudExlbiA9IGxlbjsgY3VycmVudExlbiA+IDA7IGN1cnJlbnRMZW4tLSkge1xuICAgICAgICBtb2QgPSBub3cgJSBFTkNPRElOR19MRU47XG4gICAgICAgIHN0ciA9IEVOQ09ESU5HLmNoYXJBdChtb2QpICsgc3RyO1xuICAgICAgICBub3cgPSAobm93IC0gbW9kKSAvIEVOQ09ESU5HX0xFTjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmZ1bmN0aW9uIGluV2ViV29ya2VyKCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBVTElEXG4gKiBAcGFyYW0gc2VlZFRpbWUgT3B0aW9uYWwgdGltZSBzZWVkXG4gKiBAcGFyYW0gcHJuZyBPcHRpb25hbCBQUk5HIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBBIFVMSUQgc3RyaW5nXG4gKiBAZXhhbXBsZVxuICogIHVsaWQoKTsgLy8gXCIwMUhOWlhEMDdNNUNFTjVYQTY2RU1aU1JaV1wiXG4gKi9cbmZ1bmN0aW9uIHVsaWQoc2VlZFRpbWUsIHBybmcpIHtcbiAgICBjb25zdCBjdXJyZW50UFJORyA9IGRldGVjdFBSTkcoKTtcbiAgICBjb25zdCBzZWVkID0gRGF0ZS5ub3coKSA7XG4gICAgcmV0dXJuIGVuY29kZVRpbWUoc2VlZCwgVElNRV9MRU4pICsgZW5jb2RlUmFuZG9tKFJBTkRPTV9MRU4sIGN1cnJlbnRQUk5HKTtcbn1cblxuY29uc3QgQ09PS0lFX05BTUUgPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIjtcbmNvbnN0IGdldERldmljZVRva2VuID0gKCkgPT4ge1xuICBjb25zdCBleGlzdGluZ0Nvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgoY29va2llKSA9PiBjb29raWUuaW5jbHVkZXMoQ09PS0lFX05BTUUpKTtcbiAgaWYgKGV4aXN0aW5nQ29va2llKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ29va2llLnNwbGl0KFwiPVwiKVsxXTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IHVsaWQoKTtcbiAgc2V0RGV2aWNlVG9rZW4odG9rZW4pO1xuICByZXR1cm4gdG9rZW47XG59O1xuY29uc3Qgc2V0RGV2aWNlVG9rZW4gPSAodG9rZW4pID0+IHtcbiAgY29uc3Qgb25lWWVhckZyb21Ob3cgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgb25lWWVhckZyb21Ob3cuc2V0RnVsbFllYXIob25lWWVhckZyb21Ob3cuZ2V0RnVsbFllYXIoKSArIDEpO1xuICBkb2N1bWVudC5jb29raWUgPSBgJHtDT09LSUVfTkFNRX09JHt0b2tlbn07IHBhdGg9LzsgZXhwaXJlcz0ke29uZVllYXJGcm9tTm93LnRvVVRDU3RyaW5nKCl9YDtcbn07XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnR5cGUgPT09IFwiY2hlY2tib3hcIiA/IGlucHV0LmNoZWNrZWQgOiBpbnB1dC52YWx1ZTtcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZSB9O1xuICB9LCB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVsZW1lbnRFdmVudC5wYXJzZShldmVudERhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGV2ZW50RGF0YSwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBnZW5lcmF0ZUFub255bW91c1ZhbHVlcyA9ICgpID0+IHtcbiAgY29uc3QgaWQgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2lkfWAsXG4gICAgZW1haWw6IGB4eF8ke2lkfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2lkfWAsXG4gICAgY291bnRyeTogYFVTYFxuICB9O1xufTtcbmNvbnN0IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcykgPT4ge1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLkxJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgaWYgKCFjaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykgcmV0dXJuO1xuICByZXR1cm4ge1xuICAgIGxpbmUxOiBmaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSxcbiAgICBsaW5lMjogZmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0sXG4gICAgbGluZTM6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdLFxuICAgIGNpdHk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0sXG4gICAgc3RhdGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdLFxuICAgIGNvdW50cnk6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0sXG4gICAgemlwX2NvZGU6IGZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdXG4gIH07XG59O1xuY29uc3QgZ2V0RnVsbE5hbWUgPSAoZmlyc3ROYW1lLCBsYXN0TmFtZSkgPT4ge1xuICByZXR1cm4gW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbn07XG5cbmNvbnN0IHN0eWxlcyA9ICh7IHdpZHRoLCBoZWlnaHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6ICR7d2lkdGggPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHtoZWlnaHQgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBiYW5rU2VsZWN0b3JTdHlsZXMgPSAoeyB3aWR0aCwgaGVpZ2h0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke3dpZHRoID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7aGVpZ2h0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7aGVpZ2h0ID8/IFwiNjAwcHhcIn0gLSA0OHB4KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5iYW5rLXNlbGVjdG9yLWhlYWRlciB7XG4gIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5iYW5rLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG4uYmFuay1pdGVtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDtcbiAgYm9yZGVyOiAycHggc29saWQgI2U1ZTVlNTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4uYmFuay1pdGVtOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLmJhbmstaXRlbTphY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG4uYmFuay1sb2dvIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlOWVjZWY7XG59XG4uYmFuay1sb2dvLXBsYWNlaG9sZGVyIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBjb2xvcjogIzZjNzU3ZDtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5iYW5rLWluZm8ge1xuICBmbGV4OiAxO1xufVxuLmJhbmstZGlzcGxheS1uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzFhMWExYTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuLmJhbmstbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiAjNmM3NTdkO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmA7XG5jb25zdCBjcmVhdGVBbmRPcGVuRnJhbWUgPSAodXJsLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgaWQsIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBuYW1lIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwiJHtpZCA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHt0aXRsZSA/PyBcIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIn1cIiBhbGxvdz1cInBheW1lbnRcIiBuYW1lPVwiJHtuYW1lID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgY29uc3QgaWZyYW1lID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gIHJldHVybiB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH07XG59O1xuY29uc3QgY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciA9IChiYW5rcywgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlIH0gPSBvcHRpb25zID8/IHt9O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgIGNvbnN0IGJhbmtMaXN0SHRtbCA9IGJhbmtzLm1hcCgoYmFuaywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGxvZ29IdG1sID0gYmFuay5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke2JhbmsucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7YmFuay5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7YmFuay5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2luZGV4fVwiPlxuICAgICAgICAgICR7bG9nb0h0bWx9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstaW5mb1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstZGlzcGxheS1uYW1lXCI+JHtiYW5rLmRpc3BsYXlfbmFtZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLW5hbWVcIj4ke2JhbmsuYmFua19uYW1lfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7YmFua1NlbGVjdG9yU3R5bGVzKHsgd2lkdGgsIGhlaWdodCB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke3RpdGxlID8/IFwiU2VsZWN0IHlvdXIgYmFua1wifTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbGlzdFwiPlxuICAgICAgICAgICAgICAke2JhbmtMaXN0SHRtbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gICAgY29uc3QgYmFua0l0ZW1zID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbmstaXRlbVwiKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChob3N0KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSk7XG4gICAgYmFua0l0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShiYW5rc1tpbmRleF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgfSk7XG59O1xuY29uc3QgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0gPSAocGF5bWVudE1ldGhvZFR5cGUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBiYXNlVXJsIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhcHAvZGlyZWN0X2RlYml0L21pY3JvX2RlcG9zaXQ/dHlwZT0ke3BheW1lbnRNZXRob2RUeXBlfWAsIGJhc2VVcmwpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsLCB7IHdpZHRoLCBoZWlnaHQsIHRpdGxlOiBcIk1pY3JvIERlcG9zaXQgRm9ybVwiIH0pO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXNwb25zZS5wYXlsb2FkKSB7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcmVzcG9uc2UucGF5bG9hZCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UucGF5bG9hZC5lcnJvcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UucGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIE1pY3JvRGVwb3NpdFN0YXR1c1Jlc3BvbnNlXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgfTtcbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZUNhbmNlbCA9IGhhbmRsZUNhbmNlbDtcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICBvcmlnaW5hbEhhbmRsZUNhbmNlbCgpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgd3JhcHBlZEhhbmRsZUNhbmNlbCk7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gc3RhcnRQb2xsaW5nKGlmcmFtZSwgb25TdWNjZXNzLCBjaGlsZE9yaWdpbiwgdHlwZSwgcmVzcG9uc2VNb2RlbCkge1xuICBjb25zdCBoYW5kbGVQb2xsaW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4sIHR5cGUsIHJlc3BvbnNlTW9kZWwpO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgIG9uU3VjY2VzcyhzdGF0dXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9O1xuICBoYW5kbGVQb2xsaW5nKCk7XG4gIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZVBvbGxpbmcsIENERV9QT0xMSU5HX0lOVEVSVkFMKTtcbiAgcmV0dXJuIHBvbGxpbmdJbnRlcnZhbDtcbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50cyh7XG4gIGVsZW1lbnRzLFxuICBwb2xsaW5nSW50ZXJ2YWwsXG4gIHJlc29sdmVcbn0pIHtcbiAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZ0ludGVydmFsKTtcbiAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICBlbGVtZW50cy5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICBlbGVtZW50cy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNhbmNlbCk7XG4gIH07XG4gIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG59XG5hc3luYyBmdW5jdGlvbiBzdGFydDNkc1ZlcmlmaWNhdGlvbihwYXJhbXMpIHtcbiAgY29uc3QgeyB1cmwsIGJhc2VVcmwsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcmFtZVRpdGxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCwgeyB3aWR0aDogZnJhbWVXaWR0aCwgaGVpZ2h0OiBmcmFtZUhlaWdodCwgdGl0bGU6IGZyYW1lVGl0bGUgfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoXG4gICAgICBlbGVtZW50cy5pZnJhbWUsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBQaW5nM0RTU3RhdHVzUmVzcG9uc2VcbiAgICApO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyAhPT0gVGhyZWVEU1N0YXR1cy5TVUNDRVNTKSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBocmVmOiByZXN1bHQuaHJlZlxuICB9O1xufTtcbmNvbnN0IG9wZW5Qb3B1cFdpbmRvdyA9IChwb3B1cE5hbWUsIHVybCkgPT4ge1xuICBjb25zdCBwb3B1cFdpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gIGlmICghcG9wdXBXaW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cG9wdXBOYW1lfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICB9XG4gIHJldHVybiBwb3B1cFdpbmRvdztcbn07XG5jb25zdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0ID0gYXN5bmMgKHBvcHVwTmFtZSwgY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbiwgdXJsKSA9PiB7XG4gIGNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHBvcHVwV2luZG93ID0gb3BlblBvcHVwV2luZG93KHBvcHVwTmFtZSwgdXJsKTtcbiAgICBjb25zdCBwb2xsaW5nID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQoY2RlQ29ubiwgZXhwZWN0ZWRWZXJpZnlUb2tlbik7XG4gICAgICAgIGlmICh2ZXJpZnlSZXN1bHQucHJlc2VudCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgICAgcG9wdXBXaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICByZXNvbHZlKHsgaHJlZjogdmVyaWZ5UmVzdWx0LmhyZWYgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyX18oZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbGluZyk7XG4gICAgICAgIHJlamVjdChnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn07XG5cbmNvbnN0IGRldGVjdExhbmd1YWdlID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlcyA6IFtuYXZpZ2F0b3IubGFuZ3VhZ2VdO1xuICBsZXQgbGFuZ3VhZ2UgPSBsYW5ndWFnZXM/LlswXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS5zcGxpdChcIi1cIilbMF07XG4gIH1cbiAgcmV0dXJuIGxhbmd1YWdlO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kdCwgZXJyX186IGVycl9fJHMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2Rcbn0pID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IHouc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fJHQoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRzKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHMsIGVycl9fOiBlcnJfXyRyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzO1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyRyKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyRzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHIsIGVycl9fOiBlcnJfXyRxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vblwiKTtcbmNvbnN0IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICB9XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn07XG5jb25zdCBmaW5kQ3BtTWF0Y2hpbmdUeXBlID0gKGFsbENQTXMsIHpvZE1vZGVsKSA9PiB7XG4gIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICBpZiAoIWNwbSkge1xuICAgIGVycl9fJHEoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOmAsIGFsbENQTXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxgKTtcbiAgfVxuICByZXR1cm4gem9kTW9kZWwucGFyc2UoY3BtKTtcbn07XG5jb25zdCBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtID0gKGZpZWxkcywgY2hlY2tvdXRfc2V0dGluZ3MpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBmaWVsZHMubGFzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGZpZWxkcy5maXJzdE5hbWUsXG4gICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKGZpZWxkcyksXG4gICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhmaWVsZHMsIGNoZWNrb3V0X3NldHRpbmdzKVxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAgPSBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXzIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKGFyZ3MubG9nUHJlZml4KTtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYXJncy5hbnlDZGVDb25uZWN0aW9uKTtcbiAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGFyZ3MuY29uZmlybVJlc3VsdCk7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGxvZ19fMihgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLmApO1xuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gYXdhaXQgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QoYXJncy5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogc2V0dXBSZXN1bHQgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYXJncy51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGxvZ19fMihgVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5gKTtcbiAgICAgIGlmICghYXJncy5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICAgIGVycl9fJHEoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBhcmdzLmNvbmZpcm1SZXN1bHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBhcmdzLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogYXJncy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMoYXJncy5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKGFyZ3MucmVxdWlyZWRGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBhcmdzLnJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGFyZ3MuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfTtcbiAgICBsb2dfXzIoYERvaW5nIGNoZWNrb3V0Li4uYCwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYXJncy5hbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6LmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5jb25zdCBsb2FkU2NyaXB0ID0gKHtcbiAgc2NyaXB0SWQsXG4gIHNyYyxcbiAgY2hlY2tMb2FkZWRGblxufSkgPT4ge1xuICBjb25zdCBldmVudExpc3RlbmVyQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5pZCA9IHNjcmlwdElkO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgY29uc3QgZXhpc3RpbmdTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7XG4gICAgaWYgKGNoZWNrTG9hZGVkRm4oKSkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdTY3JpcHQpIHtcbiAgICAgIHNjcmlwdCA9IGV4aXN0aW5nU2NyaXB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGV2ZW50TGlzdGVuZXJDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogZXZlbnRMaXN0ZW5lckNvbnRyb2xsZXIuc2lnbmFsIH1cbiAgICApO1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBldmVudExpc3RlbmVyQ29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICByZWplY3QoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBldmVudExpc3RlbmVyQ29udHJvbGxlci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gIHByZWZpbGxcbn0pID0+IHtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IChvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5hbW91bnQ/LmN1cnJlbmN5ID8/IHByZWZpbGw/LmN1cnJlbmN5ID8/IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBiYXNlUmVxdWVzdCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiB0cnVlLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXksXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogdHJ1ZSxcbiAgICBzaGlwcGluZ0FkZHJlc3NSZXF1aXJlZDogcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbWVyY2hhbnRJZCA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IHRvdGFsUHJpY2UudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgaWYgKCFvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5nb29nbGVQYXlQYXltZW50UmVxdWVzdCkgcmV0dXJuIGJhc2VSZXF1ZXN0O1xuICBpZiAodHlwZW9mIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0KGJhc2VSZXF1ZXN0KSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmJhc2VSZXF1ZXN0LCAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0Lmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH07XG59O1xuY29uc3QgbG9hZEdvb2dsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaVxuICB9KTtcbn07XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQgPSBhc3luYyAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnYgPSBhd2FpdCBnZXRDdXJyZW50RW52KGJhc2VVcmwpO1xuICByZXR1cm4gZW52ID09PSBcInByb2RcIiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCI7XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSBhc3luYyAoYmFzZVVybCwgcGF5bWVudERhdGFSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5RW52aXJvbm1lbnQoYmFzZVVybCk7XG4gIGlmIChwYXltZW50c0NsaWVudCA9PT0gbnVsbCkge1xuICAgIHBheW1lbnRzQ2xpZW50ID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgbWVyY2hhbnRJbmZvOiBwYXltZW50RGF0YVJlcXVlc3QubWVyY2hhbnRJbmZvXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBheW1lbnRzQ2xpZW50O1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgY29uc3Qgc2hpcHBpbmdBZGRyZXNzID0gcGF5bWVudERhdGEuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAoYmlsbGluZ0FkZHJlc3MpIHtcbiAgICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLmxhc3ROYW1lUGFydHNdID0gYmlsbGluZ0FkZHJlc3MubmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICAgIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxJTkUxXSA9IGlucHV0c1tGaWVsZE5hbWUuTElORTFdIHx8IGJpbGxpbmdBZGRyZXNzLmFkZHJlc3MxIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl0gPSBpbnB1dHNbRmllbGROYW1lLkxJTkUyXSB8fCBiaWxsaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5MSU5FM10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczMgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3MuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICAgIGNvbnN0IGxhc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICBpZiAoc2hpcHBpbmdBZGRyZXNzKSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdIHx8IHNoaXBwaW5nQWRkcmVzcy5hZGRyZXNzMiB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gfHwgc2hpcHBpbmdBZGRyZXNzLmFkZHJlc3MzIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmxvY2FsaXR5IHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSB8fCBzaGlwcGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSB8fCBzaGlwcGluZ0FkZHJlc3MuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gfHwgc2hpcHBpbmdBZGRyZXNzLmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kcSwgZXJyX186IGVycl9fJHAgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWJhY3NcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhCQUNTRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25NZXRob2QgPSBjdXN0b21QYXJhbXMudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IG1pY3JvRGVwb3NpdERhdGEgPSBudWxsO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBsb2dfXyRxKFwiTWljcm8gZGVwb3NpdCB2ZXJpZmljYXRpb24gc2VsZWN0ZWQsIHNob3dpbmcgZm9ybS4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1pY3JvRGVwb3NpdERhdGEgPSBhd2FpdCBjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybShcImJhY3NfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIzNTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRxKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGF2YWlsYWJsZUJhbmtzID0gc3RhcnRGbG93TmV4dEFjdGlvbnM/LmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgc2VsZWN0ZWRCYW5rO1xuICAgIGlmICh2ZXJpZmljYXRpb25NZXRob2QgPT09IFwidHJ1ZWxheWVyXCIgJiYgYXZhaWxhYmxlQmFua3MgJiYgYXZhaWxhYmxlQmFua3MubGVuZ3RoID49IDEpIHtcbiAgICAgIGxvZ19fJHEoXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlbGVjdGVkQmFuayA9IGF3YWl0IGNyZWF0ZUFuZE9wZW5CYW5rU2VsZWN0b3IoYXZhaWxhYmxlQmFua3MsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJHEoYEJhbmsgc2VsZWN0ZWQ6ICR7c2VsZWN0ZWRCYW5rLmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ19fJHEoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBkaXJlY3REZWJpdERhdGEgPSB7XG4gICAgICB0eXBlOiBcImJhY3NfZGlyZWN0X2RlYml0XCIsXG4gICAgICBiYWNzX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBUcnVlTGF5ZXJcbiAgICAgICAgYmFua19uYW1lOiBzZWxlY3RlZEJhbms/LmJhbmtfbmFtZSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICBzb3J0X2NvZGU6IG1pY3JvRGVwb3NpdERhdGE/LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5iaWxsaW5nQWRkcmVzcywgdG93bjogYmlsbGluZ0FkZHJlc3MuY2l0eSwgcG9zdGNvZGU6IGJpbGxpbmdBZGRyZXNzLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogZGlyZWN0RGViaXREYXRhXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJHEoXCJCQUNTIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRxKGDilbAgQkFDUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCQUNTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmV3Q29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRwKFwiQkFDUyBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJHAsIGVycl9fOiBlcnJfXyRvIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1lZnRcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhFRlRGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kcChcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJlZnRfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0NTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kcChcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRwKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGRpcmVjdERlYml0RGF0YSA9IHtcbiAgICAgIHR5cGU6IFwiZWZ0X2RpcmVjdF9kZWJpdFwiLFxuICAgICAgZWZ0X2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAvLyBQbGFpZFxuICAgICAgICBidXNpbmVzc19hY2NvdW50OiBjdXN0b21QYXJhbXMuaXNCdXNpbmVzc0FjY291bnQgPz8gZmFsc2UsXG4gICAgICAgIG93bmVyX25hbWU6IGdldEZ1bGxOYW1lKG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLCBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgLy8gTWljcm9kZXBvc2l0XG4gICAgICAgIGluc3RpdHV0aW9uX251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8uaW5zdGl0dXRpb25fbnVtYmVyLFxuICAgICAgICB0cmFuc2l0X251bWJlcjogbWljcm9EZXBvc2l0RGF0YT8udHJhbnNpdF9udW1iZXIsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hY2NvdW50X251bWJlclxuICAgICAgICAvLyBtYW5kYXRlX3ZlcnNpb246IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBjb25zZW50SWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9tZXRob2Q6IHZlcmlmaWNhdGlvbk1ldGhvZCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGRpcmVjdERlYml0RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApPy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICBsb2dfXyRwKFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgdXJsOiByZWRpcmVjdFVybCxcbiAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiRUZUIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJHAoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1lZnRcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IG5ld0NvbmZpcm1SZXN1bHQsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kbyhcIkVGVCBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJG8sIGVycl9fOiBlcnJfXyRuIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1zZXBhXCIpO1xuY29uc3QgcnVuQWlyd2FsbGV4U0VQQUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gY3VzdG9tUGFyYW1zLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kbyhcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJzZXBhX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzAwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJG8oXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nX18kbyhcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0Rmxvd05leHRBY3Rpb25zID0gcGFyc2VBaXJ3YWxsZXhTdGFydFBheW1lbnRGbG93UmVzcG9uc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBjb25zZW50SWQgPSBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZDtcbiAgICBjb25zdCBhdmFpbGFibGVCYW5rcyA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHNlbGVjdGVkQmFuaztcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcInRydWVsYXllclwiICYmIGF2YWlsYWJsZUJhbmtzICYmIGF2YWlsYWJsZUJhbmtzLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsb2dfXyRvKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBzZWxlY3RlZEJhbmsgPSBhd2FpdCBjcmVhdGVBbmRPcGVuQmFua1NlbGVjdG9yKGF2YWlsYWJsZUJhbmtzLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRvKGBCYW5rIHNlbGVjdGVkOiAke3NlbGVjdGVkQmFuay5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRvKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IHNlbGVjdGVkQmFuaz8uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgIC8vIG1pY3JvZGVwb3NpdFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIGliYW46IG1pY3JvRGVwb3NpdERhdGE/LmliYW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKT8ucmVkaXJlY3RfdXJsO1xuICAgIGlmIChyZWRpcmVjdFVybCkge1xuICAgICAgbG9nX18kbyhcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICB1cmw6IHJlZGlyZWN0VXJsLFxuICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGxvZ19fJG8oYOKVsCBTRVBBIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNFUEEgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV3Q29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY29uc2VudElkXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJG4oXCJTRVBBIHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbiwgZXJyX186IGVycl9fJG0gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWlyd2FsbGV4LWNjXCIpO1xuY29uc3QgQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kbShkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRuKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyRtKGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMyhlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IGludGVudElkID0gcGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBpbml0aWFsSW50ZW50SWQgPSBoZWFkZXJzW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaW5pdGlhbEludGVudElkICE9PSBpbnRlbnRJZCkge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpbnRlbnRJZH0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpbml0aWFsSW50ZW50SWR9KS5gO1xuICAgIGVycl9fJG0oZGV2RXJyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIGNvbnN0IGV4dHJhTWV0YWRhdGFGb3JDaGVja291dCA9IHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGludGVudElkLFxuICAgICAgY29uc2VudF9pZDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xuICByZXR1cm4gZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0O1xufTtcbmNvbnN0IEFwcGxlUGF5Q3BtJDIgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRTY3JpcHQoe1xuICAgIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfYXBwbGVfcGF5X3Nka1wiLFxuICAgIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICAgIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGFwcGxlUGF5UGF5bWVudCkgPT4ge1xuICBjb25zdCBwbUJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3Q7XG4gIGNvbnN0IGJpbGxpbmdDb250YWN0ID0gYXBwbGVQYXlQYXltZW50LmJpbGxpbmdDb250YWN0O1xuICBjb25zdCBzaGlwcGluZ0NvbnRhY3QgPSBhcHBsZVBheVBheW1lbnQuc2hpcHBpbmdDb250YWN0O1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgaWYgKHBtQmlsbGluZ0NvbnRhY3QgfHwgYmlsbGluZ0NvbnRhY3QgfHwgc2hpcHBpbmdDb250YWN0KSB7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBwbUJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgfHwgYmlsbGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBzaGlwcGluZ0NvbnRhY3Q/LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IGJpbGxpbmdDb250YWN0Py5jb3VudHJ5Q29kZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmNvdW50cnlDb2RlIHx8IFwiVVNcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgYmlsbGluZ0NvbnRhY3Q/LnBvc3RhbENvZGUgfHwgc2hpcHBpbmdDb250YWN0Py5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBmaXJzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBtQmlsbGluZ0NvbnRhY3Q/LmdpdmVuTmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IHNoaXBwaW5nQ29udGFjdD8uZ2l2ZW5OYW1lIHx8IFwiXCI7XG4gICAgY29uc3QgbGFzdE5hbWUgPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgcG1CaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBiaWxsaW5nQ29udGFjdD8uZmFtaWx5TmFtZSB8fCBzaGlwcGluZ0NvbnRhY3Q/LmZhbWlseU5hbWUgfHwgXCJcIjtcbiAgICBpZiAoZmlyc3ROYW1lIHx8IGxhc3ROYW1lKSB7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gbGFzdE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBcIlwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5wdXRzO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCA9ICh7XG4gIHRvdGFsLFxuICBwcmVmaWxsXG59KSA9PiB7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdG90YWwuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7cHJlZmlsbC50b2tlbn1gLCBGUkFNRV9CQVNFX1VSTCkudG9TdHJpbmcoKVxuICAgIH07XG4gIH1cbiAgY29uc3QgbGluZUl0ZW0gPSBwcmVmaWxsLmxpbmVfaXRlbXM/LlswXTtcbiAgaWYgKCFsaW5lSXRlbSkgcmV0dXJuIHZvaWQgMDtcbiAgcmV0dXJuIHtcbiAgICBwYXltZW50RGVzY3JpcHRpb246IGxpbmVJdGVtPy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICBhbW91bnQ6IHRvdGFsLmFtb3VudCxcbiAgICAgIGxhYmVsOiBsaW5lSXRlbT8uZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IGxpbmVJdGVtPy5iaWxsaW5nX2ludGVydmFsX2NvdW50ID8/IHZvaWQgMCxcbiAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICB9LFxuICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtwcmVmaWxsLnRva2VufWBcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVBcHBsZVBheVRvdGFsID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgaW5pdGlhbFByZXZpZXcsXG4gIHByZWZpbGwsXG4gIGRlZmF1bHRMYWJlbCA9IFwiVG90YWxcIlxufSkgPT4ge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSAob3ZlcnJpZGVQYXltZW50UmVxdWVzdD8uYW1vdW50Py5jdXJyZW5jeSA/PyBwcmVmaWxsPy5jdXJyZW5jeSA/PyBpbml0aWFsUHJldmlldy5jdXJyZW5jeSkudG9VcHBlckNhc2UoKTtcbiAgY29uc3QgYW1vdW50QXRvbSA9IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFtb3VudD8uYW1vdW50QXRvbSA/PyBpbml0aWFsUHJldmlldz8uYW1vdW50QXRvbSA/PyAwO1xuICBjb25zdCBhbW91bnQgPSAoYW1vdW50QXRvbSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0Py5sYWJlbCA/PyBkZWZhdWx0TGFiZWwgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogb3ZlcnJpZGVQYXltZW50UmVxdWVzdD8ucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LFxuICBpbml0aWFsUHJldmlldyxcbiAgcHJlZmlsbCxcbiAgZGVmYXVsdExhYmVsXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlLCB0b3RhbCB9ID0gY3JlYXRlQXBwbGVQYXlUb3RhbCh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCxcbiAgICBpbml0aWFsUHJldmlldyxcbiAgICBwcmVmaWxsLFxuICAgIGRlZmF1bHRMYWJlbFxuICB9KTtcbiAgbGV0IHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCh7XG4gICAgICB0b3RhbCxcbiAgICAgIHByZWZpbGxcbiAgICB9KVxuICB9O1xuICBpZiAoIW92ZXJyaWRlUGF5bWVudFJlcXVlc3Q/LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgaWYgKHR5cGVvZiBvdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBheW1lbnRSZXF1ZXN0ID0ge1xuICAgICAgLi4ucGF5bWVudFJlcXVlc3QsXG4gICAgICAuLi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocGF5bWVudFJlcXVlc3QpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXltZW50UmVxdWVzdCA9IHsgLi4ucGF5bWVudFJlcXVlc3QsIC4uLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9O1xuICB9XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xuY29uc3QgQWR5ZW5Mb2NhbGUgPSB6LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyRtLCBlcnJfXzogZXJyX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhZHllbi1jY1wiKTtcbmNvbnN0IEFkeWVuM2RzUmVzcG9uc2VIZWFkZXJzID0gei5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbmNvbnN0IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbjNkc1Jlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRsKGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGVycm9yUmVzcG9uc2VIZWFkZXJzKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZnJpZW5kbHlFcnIpO1xuICB9XG4gIHJldHVybiBwYXJzZVJlc3VsdC5kYXRhO1xufTtcbmNvbnN0IGRlY29kZUFkeWVuQWN0aW9uID0gKGFjdGlvbikgPT4ge1xuICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBKU09OLnBhcnNlKGFjdGlvbik7XG4gIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG59O1xuY29uc3QgaXNBZHllbkF2YWlsYWJsZSA9ICgpID0+IHtcbiAgcmV0dXJuIFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93W1wiQWR5ZW5XZWJcIl07XG59O1xuY29uc3QgZ2V0QWR5ZW5DaGVja291dCA9IGFzeW5jICgpID0+IHtcbiAgbG9nX18kbShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoIWlzQWR5ZW5BdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc0FkeWVuQXZhaWxhYmxlKCkpIHtcbiAgICBlcnJfXyRsKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBsb2dfXyRtKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gIHJldHVybiB3aW5kb3dbXCJBZHllbldlYlwiXVtcIkFkeWVuQ2hlY2tvdXRcIl07XG59O1xuY29uc3QgaGFuZGxlQWR5ZW4zZHMgPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVycywgbG9jYWxlLCBjb3VudHJ5Q29kZSwgY29tcG9uZW50LCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgYWN0aW9uID0gZGVjb2RlQWR5ZW5BY3Rpb24oaGVhZGVyc1tcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIGxvZ19fJG0oYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfWApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kbShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25QYXltZW50RmFpbGVkID0gKHN0YXRlKSA9PiB7XG4gICAgICBlcnJfXyRsKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHN0YXRlKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuRkFJTFVSRSwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIGVycl9fJGwoXCJBZHllbiBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5GQUlMVVJFLCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCwgY2xlYW51cCB9KTtcbiAgICB9O1xuICAgIGNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DYW5jZWwpO1xuICAgIGNvbnN0IG9uQWRkaXRpb25hbERldGFpbHMgPSAoc3RhdGUsIF8sIF9fKSA9PiB7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgICAgcmVzb2x2ZSh7IHN0YXR1czogVGhyZWVEU1N0YXR1cy5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogc3RhdGUsIGNsZWFudXAgfSk7XG4gICAgfTtcbiAgICBnZXRBZHllbkNoZWNrb3V0KCkudGhlbihcbiAgICAgIChhZHllbkNoZWNrb3V0KSA9PiBhZHllbkNoZWNrb3V0KHtcbiAgICAgICAgY2xpZW50S2V5OiBoZWFkZXJzW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGhlYWRlcnNbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBjb3VudHJ5Q29kZSxcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlscyxcbiAgICAgICAgb25QYXltZW50RmFpbGVkLFxuICAgICAgICBvbkVycm9yXG4gICAgICB9KVxuICAgICkudGhlbigoY2hlY2tvdXQpID0+IHtcbiAgICAgIGNoZWNrb3V0LmNyZWF0ZUZyb21BY3Rpb24oYWN0aW9uLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChjb21wb25lbnQpO1xuICAgIH0pO1xuICB9KTtcbn07XG5jb25zdCBkZXRlcm1pbmVMb2NhbGUgPSAocHJlZmlsbExvY2FsZSkgPT4ge1xuICBjb25zdCBicm93c2VyTG9jYWxlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG4gIGNvbnN0IGxvY2FsZSA9IHByZWZpbGxMb2NhbGUgPz8gYnJvd3NlckxvY2FsZTtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBZHllbkxvY2FsZS5zYWZlUGFyc2UobG9jYWxlKTtcbiAgaWYgKCFwYXJzZVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgZXJyX18kbChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7bG9jYWxlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKTtcbiAgICByZXR1cm4gXCJlbi1VU1wiO1xuICB9XG4gIGxvZ19fJG0oYFJlc29sdmVkIGxvY2FsZTogJHtwYXJzZVJlc3VsdC5kYXRhfWApO1xuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLWFkeWVuLWFjdGlvblwiXSAhPT0gdm9pZCAwO1xufTtcbmNvbnN0IHJ1bkFkeWVuM2RzRmxvdyA9IGFzeW5jIChjb3VudHJ5Q29kZSwgZXJyb3JSZXNwb25zZUhlYWRlcnMsIHByZWZpbGxMb2NhbGUpID0+IHtcbiAgY29uc3QgaGVhZGVycyA9IHBhcnNlUmVzcG9uc2VIZWFkZXJzJDIoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCBjb21wb25lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBjb21wb25lbnQuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGlmcmFtZS5yZXBsYWNlV2l0aChjb21wb25lbnQpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZHllbjNkcyh7XG4gICAgaGVhZGVycyxcbiAgICBsb2NhbGU6IGRldGVybWluZUxvY2FsZShwcmVmaWxsTG9jYWxlKSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgICBjb21wb25lbnQsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGlmICghcmVzdWx0LmFkZGl0aW9uYWxEZXRhaWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICAgIGxvZ19fJG0oXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiByZXN1bHQuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5jb25zdCBBcHBsZVBheUNwbSQxID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0kMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kbCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBjb250ZXh0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGNvbnN0IHBheW1lbnRTZXNzaW9uUmVzcG9uc2UgPSBuZXh0QWN0aW9uTWV0YWRhdGE/LltcImFwcGxlX3BheV9zZXNzaW9uXCJdO1xuICAgIGlmICghcGF5bWVudFNlc3Npb25SZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIH1cbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24ocGF5bWVudFNlc3Npb25SZXNwb25zZSk7XG4gICAgdHJhY2soXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5wYXltZW50U2Vzc2lvblJlc3BvbnNlXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnRleHQuc2Vzc2lvbi5hYm9ydCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMihldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBmb3JtSW5wdXRzLFxuICAgICAgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGNvbnRleHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgYXdhaXQgc3RhcnRQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhcbiAgICAgICAgbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29udGV4dC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogY29udGV4dC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGdldEZyYXVkTWV0YWRhdGEoKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRsKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgY29uc3Qgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kaywgZXJyX186IGVycl9fJGsgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYWR5ZW4tYXBwbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFkeWVuQXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kayhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kayhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGsoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kayhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGFwcGxlUGF5Q3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGVycl9fJGsoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDEpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kayhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQkMihldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5wYXltZW50UmVxdWVzdC50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQyKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSBoYW5kbGVDYW5jZWw7XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kayhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGosIGVycl9fOiBlcnJfXyRqIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFkeWVuLWdvb2dsZS1wYXlcIik7XG5jb25zdCBpbml0QWR5ZW5Hb29nbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kaihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGooXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRqKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRqKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kaihcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRqKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFkeWVuR29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRqKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BZHllbkdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRqKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMSk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogZ29vZ2xlUGF5Q3BtLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZXhjbHVkZVByb3BzKHByZWZpbGwsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kaihcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgICAgbWVyZ2VkSW5wdXRzLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgY3VzdG9tUGFyYW1zPy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jcnlwdGVkUGF5bWVudFRva2VuID0gcGF5bWVudERhdGEucGF5bWVudE1ldGhvZERhdGE/LnRva2VuaXphdGlvbkRhdGE/LnRva2VuO1xuICAgICAgaWYgKCFlbmNyeXB0ZWRQYXltZW50VG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kaihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgYnJvd3Nlcl9pbmZvOiBnZXRGcmF1ZE1ldGFkYXRhKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kaihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBsb2dfXyRqKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgbmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogY29udGV4dC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dfXyRqKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmICFvdXJQbUlkKSB7XG4gICAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGooXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGksIGVycl9fOiBlcnJfXyRpIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hY2hcIik7XG5jb25zdCBydW5BaXJ3YWxsZXhBQ0hGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvbk1ldGhvZCA9IGN1c3RvbVBhcmFtcy52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJwbGFpZFwiO1xuICAgIGxldCBtaWNyb0RlcG9zaXREYXRhID0gbnVsbDtcbiAgICBpZiAodmVyaWZpY2F0aW9uTWV0aG9kID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgbG9nX18kaShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtaWNyb0RlcG9zaXREYXRhID0gYXdhaXQgY3JlYXRlQW5kT3Blbk1pY3JvRGVwb3NpdEZvcm0oXCJhY2hfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0MDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kaShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dfXyRpKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogdmVyaWZpY2F0aW9uTWV0aG9kLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogY3VzdG9tUGFyYW1zLmlzQnVzaW5lc3NBY2NvdW50ID8/IGZhbHNlLFxuICAgICAgICAgICAgb3duZXJfbmFtZTogZ2V0RnVsbE5hbWUobm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sIG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgICAgIC8vQUNIIG1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYWNjb3VudF9udW1iZXI6IG1pY3JvRGVwb3NpdERhdGE/LmFjY291bnRfbnVtYmVyLFxuICAgICAgICAgICAgYWJhX3JvdXRpbmdfbnVtYmVyOiBtaWNyb0RlcG9zaXREYXRhPy5hYmFfcm91dGluZ19udW1iZXJcbiAgICAgICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgIChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk/LnJlZGlyZWN0X3VybDtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIGxvZ19fJGkoXCJQbGFpZCB2ZXJpZmljYXRpb24gUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgIHVybDogcmVkaXJlY3RVcmwsXG4gICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBsb2dfXyRpKGDilbAgUGxhaWQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsYWlkIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBuZXdDb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGkoXCJBQ0ggcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRoIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHByZXBhcmVQYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogY29udGV4dC5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBjb25zdCBwYXltZW50U2Vzc2lvblJlc3BvbnNlID0gbmV4dEFjdGlvbk1ldGFkYXRhPy5bXCJhcHBsZV9wYXlfc2Vzc2lvblwiXTtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHBheW1lbnRTZXNzaW9uUmVzcG9uc2UpO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ucGF5bWVudFNlc3Npb25SZXNwb25zZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJGgoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJGgoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJGgoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQ7XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxKGV2ZW50LCBjb250ZXh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bWVudERhdGEgPSBldmVudC5wYXltZW50O1xuICAgIGNvbnN0IGZvcm1JbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5KGNvbnRleHQubm9uQ2RlRm9ybUlucHV0cywgcGF5bWVudERhdGEpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIGZvcm1JbnB1dHMsXG4gICAgICBjb250ZXh0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgY29udGV4dC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzKFxuICAgICAgICBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb250ZXh0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogZGV0ZWN0TGFuZ3VhZ2UoKVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcXVpcmVkVXNlckFjdGlvbnMgPSBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIWNvbnNlbnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kaChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICAgIG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kZywgZXJyX186IGVycl9fJGggfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXd4LWFwcGxlLXBheVwiKTtcbmNvbnN0IGluaXRBaXJ3YWxsZXhBcHBsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZyhcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kZyhcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGcoXCJBcHBsZSBQYXkgTG9hZGVkXCIpO1xuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kZyhcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRoKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtJDIpO1xuICAgIGNvbnN0IHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCwgaW5pdGlhbFByZXZpZXcgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGw6IHtcbiAgICAgICAgLi4ucHJlZmlsbFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRMYWJlbDogYXBwbGVQYXlDcG0/Lm1ldGFkYXRhPy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgcGF5bWVudFJlcXVlc3QpO1xuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0ge1xuICAgICAgc2Vzc2lvbixcbiAgICAgIGNvbm5lY3Rpb246IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBhcHBsZVBheUNwbS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgbG9nX18kZyhcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gaGFuZGxlQ2FuY2VsO1xuICAgICAgc2Vzc2lvbi5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVWYWxpZGF0ZU1lcmNoYW50JDEoZXZlbnQsIHNlc3Npb25Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ucGF5bWVudFJlcXVlc3QudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih1cGRhdGUpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMShldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kaChcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGYsIGVycl9fOiBlcnJfXyRnIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImF3eC1nb29nbGUtcGF5XCIpO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCB1bmF2YWlsYWJsZVJlc3VsdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZihcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGcoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRmKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRnKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRHb29nbGVQYXlFbnZpcm9ubWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGlmIChlbnZpcm9ubWVudCA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIXByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCkge1xuICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgICAgcHJlZmlsbCxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgY2xpZW50LmlzUmVhZHlUb1BheShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kZihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRnKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZXJyKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBvbkdvb2dsZVBheVN0YXJ0RmxvdyA9IGFzeW5jIChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9qc0Zsb3dzLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnb29nbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlld1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kZyhcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBzdGFydEZsb3c6IG9uR29vZ2xlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyRmKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGdvb2dsZVBheUNwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBHb29nbGVQYXlDcG0kMik7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBwcmVmaWxsLFxuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBwcm9jZXNzb3JBY2NvdW50Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pO1xuICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGdvb2dsZVBheUNwbS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGV4Y2x1ZGVQcm9wcyhwcmVmaWxsLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsLCBwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YSA9IGF3YWl0IGNsaWVudC5sb2FkUGF5bWVudERhdGEocGF5bWVudERhdGFSZXF1ZXN0KTtcbiAgICAgIGxvZ19fJGYoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheShub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YSk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICAgIG1lcmdlZElucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGN1c3RvbVBhcmFtcz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgbG9nX18kZihcIl9fX1wiLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRGbG93TmV4dEFjdGlvbnMgPSBwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgbG9nX18kZihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHN0YXJ0Rmxvd05leHRBY3Rpb25zKTtcbiAgICAgIGxldCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHN0YXJ0Rmxvd05leHRBY3Rpb25zPy5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBlbmNyeXB0ZWRQYXltZW50VG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbG9nX18kZihcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgbGV0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IGNvbmZpcm1SZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zPy5maW5kKFxuICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAobmV4dEFjdGlvbk1ldGFkYXRhICYmIG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbG9nX18kZihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kZihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiAhb3VyUG1JZCkge1xuICAgICAgICBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IG5leHRBY3Rpb25NZXRhZGF0YS50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJGYoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRnKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBBcHBsZVBheUNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHByZXBhcmVQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgcHJlcGFyZVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IG5leHRBY3Rpb25NZXRhZGF0YT8uW1wiYXBwbGVfcGF5X3Nlc3Npb25cIl07XG4gICAgaWYgKCFwYXltZW50U2Vzc2lvblJlc3BvbnNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICB0cmFjayhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnBheW1lbnRTZXNzaW9uUmVzcG9uc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29udGV4dC5zZXNzaW9uLmFib3J0KCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQYXltZW50QXV0aG9yaXplZChldmVudCwgY29udGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IHBheW1lbnREYXRhID0gZXZlbnQucGF5bWVudDtcbiAgICBjb25zdCBmb3JtSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhBcHBsZVBheShjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoZm9ybUlucHV0cywgY29udGV4dC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgdHJhY2soXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgIH0pO1xuICAgIGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMoXG4gICAgICAgIG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgICAgIGNvbnRleHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgY29uc3QgbW9iaWxlV2FsbGV0UGF5bWVudERhdGEgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShwYXltZW50RGF0YS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBtb2JpbGVXYWxsZXRQYXltZW50RGF0YVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG91clBtSWQgPSBjb25maXJtUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgY29udGV4dC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChyZXN1bHQpO1xuICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBjb250ZXh0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogZmFsc2VcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuY29uc3QgeyBsb2dfXzogbG9nX18kZSwgZXJyX186IGVycl9fJGYgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1hcHBsZXBheVwiKTtcbmNvbnN0IGluaXRBdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkQXBwbGVQYXlTY3JpcHQoKTtcbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4gdW5hdmFpbGFibGVSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbk1ha2VQYXltZW50cyA9IGF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKTtcbiAgICBpZiAoIWNhbk1ha2VQYXltZW50cykge1xuICAgICAgbG9nX18kZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGFwcGxlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGlmICghcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uQXBwbGVQYXlTdGFydEZsb3cgPSBhc3luYyAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBhcHBsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRmKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyclxuICAgICAgICB9KTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0Rmxvdzogb25BcHBsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0QXBwbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgZm9ybUNhbGxiYWNrc1xuICB9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBnZXRBcHBsZVBheVBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QsXG4gICAgICBpbml0aWFsUHJldmlldyxcbiAgICAgIHByZWZpbGwsXG4gICAgICBkZWZhdWx0TGFiZWw6IGFwcGxlUGF5Q3BtPy5tZXRhZGF0YT8ucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIHRyYWNrKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgY29uc3Qgc2Vzc2lvbkNvbnRleHQgPSB7XG4gICAgICBzZXNzaW9uLFxuICAgICAgY29ubmVjdGlvbjogY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGwsXG4gICAgICBpc1NldHVwTW9kZSxcbiAgICAgIGJhc2VVcmw6IGNvbnRleHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3NcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyRlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogcGF5bWVudFJlcXVlc3QudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odXBkYXRlKTtcbiAgICAgIH07XG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgdHJhY2soXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBzZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBlcnJfXyRmKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZXJyKTtcbiAgICAgIHRyYWNrKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuKTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kZCwgZXJyX186IGVycl9fJGUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXV0aG5ldC1nb29nbGVwYXlcIik7XG5jb25zdCBpbml0QXV0aG5ldEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyRkKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgdW5hdmFpbGFibGVSZXN1bHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29vZ2xlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdvb2dsZVBheUNwbSk7XG4gICAgaWYgKCFnb29nbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkdvb2dsZSBQYXkgQ1BNXCIsIGdvb2dsZVBheUNwbSk7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIGVycl9fJGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBsb2dfXyRkKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKTtcbiAgICBhd2FpdCBsb2FkR29vZ2xlUGF5U2NyaXB0KCk7XG4gICAgaWYgKCF3aW5kb3cuZ29vZ2xlPy5wYXltZW50cz8uYXBpKSB7XG4gICAgICBlcnJfXyRlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKTtcbiAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICB9XG4gICAgbG9nX18kZChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50RGF0YVJlcXVlc3QgPSBnZXRQYXltZW50RGF0YVJlcXVlc3Qoe1xuICAgICAgICBwcmVmaWxsLFxuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBjb25zdCB7IHJlc3VsdDogaXNSZWFkeVRvUGF5IH0gPSBhd2FpdCBjbGllbnQuaXNSZWFkeVRvUGF5KHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgICBpZiAoIWlzUmVhZHlUb1BheSkge1xuICAgICAgICBsb2dfXyRkKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIik7XG4gICAgICAgIHJldHVybiB1bmF2YWlsYWJsZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHVuYXZhaWxhYmxlUmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIHRyYWNrKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BdXRobmV0R29vZ2xlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXcsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSA9IGN1c3RvbVBhcmFtcztcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gZ29vZ2xlUGF5Q3BtLm1ldGFkYXRhO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gZ2V0UGF5bWVudERhdGFSZXF1ZXN0KHtcbiAgICAgIHByZWZpbGwsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXcsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSk7XG4gICAgdHJhY2soXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwsIHBheW1lbnREYXRhUmVxdWVzdCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kZChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ubm9uQ2RlRm9ybUZpZWxkc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXltZW50VG9rZW4gPSBwYXltZW50RGF0YS5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW47XG4gICAgICBpZiAoIWVuY3J5cHRlZFBheW1lbnRUb2tlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICAgIH0pO1xuICAgICAgbG9nX18kZChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoZW5jcnlwdGVkUGF5bWVudFRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBpZiAoIW91clBtSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cCh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY29uZmlybVJlc3VsdCxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0cmFjayhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kZCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyRkKGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmF1bHRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyRjKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt2YXVsdElkfV1gKTtcbiAgICByZXR1cm4gdmF1bHRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kZChlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IHBhcnNlQXJnRnJvbUhyZWYgPSAoaHJlZiwgYXJnTmFtZSkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICByZXR1cm4gdXJsLnNlYXJjaFBhcmFtcy5nZXQoYXJnTmFtZSk7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtcG9ja3l0LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBydW5Qb2NreXQzZHNGbG93ID0gYXN5bmMgKGJhc2VVcmwsIGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyQxKGVycm9yUmVzcG9uc2VIZWFkZXJzKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QoeyB1cmw6IGhlYWRlcnNbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybCB9KTtcbiAgY29uc3QgdmF1bHRJZCA9IHBhcnNlVmF1bHRJZEZyb20zZHNIcmVmKHJlc3VsdC5ocmVmID8/IFwiXCIpO1xuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB2YXVsdElkLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGhlYWRlcnNbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRjIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImN5YnMtZnJhbWVcIik7XG5jb25zdCBhdHRhY2hEZXZpY2VEYXRhQ29sbGVjdG9yID0gKHBvc3RVcmwsIGFjY2Vzc1Rva2VuKSA9PiB7XG4gIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIGlmcmFtZS5uYW1lID0gXCJjYXJkaW5hbF9jb2xsZWN0aW9uX2lmcmFtZVwiO1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICBpZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwcHhcIjtcbiAgaWZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMTBweFwiO1xuICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gIGZvcm0uYWN0aW9uID0gcG9zdFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBpbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgaW5wdXQudmFsdWUgPSBhY2Nlc3NUb2tlbjtcbiAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZvcm0pO1xuICB9O1xuICByZXR1cm4geyBmb3JtLCBkZXRhY2ggfTtcbn07XG5jb25zdCBydW5EZXZpY2VEYXRhQ29sbGVjdGlvbiA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IHBvc3RVcmwsIGFjY2Vzc1Rva2VuIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHBvc3RVcmwpLm9yaWdpbjtcbiAgICBjb25zdCB7IGZvcm0sIGRldGFjaCB9ID0gYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3Rvcihwb3N0VXJsLCBhY2Nlc3NUb2tlbik7XG4gICAgbG9nX18kYihcIkF0dGFjaGVkIGRldmljZSBkYXRhIGNvbGxlY3RvclwiKTtcbiAgICBjb25zdCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGV4cGVjdGVkT3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgbG9nX18kYihcIlJlY2VpdmVkIGV2ZW50IGZyb20gZGV2aWNlIGRhdGEgY29sbGVjdG9yOlwiLCBkYXRhKTtcbiAgICAgIGlmIChkYXRhW1wiTWVzc2FnZVR5cGVcIl0gPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBkZXRhY2goKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVDb2xsZWN0aW9uRXZlbnQpO1xuICAgICAgbG9nX18kYihcIkF0dGFjaGVkIGxpc3RlbmVyIHRvIHdpbmRvd1wiKTtcbiAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICBsb2dfXyRiKFwiU3VibWl0dGVkIGZvcm1cIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycl9fJGMoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGVycm9yKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBydW5QYXllckF1dGggPSAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsLCBhY2Nlc3NUb2tlbiwgbWVyY2hhbnREYXRhLCBpZnJhbWUsIGhvc3QgfSA9IHBhcmFtcztcbiAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBmb3JtLmFjdGlvbiA9IHN0ZXBVcFVybDtcbiAgZm9ybS5tZXRob2QgPSBcIlBPU1RcIjtcbiAgZm9ybS50YXJnZXQgPSBpZnJhbWUubmFtZTtcbiAgY29uc3QgdG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgdG9rZW5JbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgdG9rZW5JbnB1dC5uYW1lID0gXCJKV1RcIjtcbiAgdG9rZW5JbnB1dC52YWx1ZSA9IGFjY2Vzc1Rva2VuO1xuICBjb25zdCBtZElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICBtZElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICBtZElucHV0Lm5hbWUgPSBcIk1EXCI7XG4gIG1kSW5wdXQudmFsdWUgPSBtZXJjaGFudERhdGE7XG4gIGZvcm0uYXBwZW5kQ2hpbGQodG9rZW5JbnB1dCk7XG4gIGZvcm0uYXBwZW5kQ2hpbGQobWRJbnB1dCk7XG4gIGhvc3QuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gIHJldHVybiBmb3JtO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJGIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY3lic1wiKTtcbmNvbnN0IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RlcF91cF91cmw6IHouc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogei5zdHJpbmcoKSxcbiAgZGRfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRlJJRU5ETFlfRVJSID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAodXNlckFjdGlvbikgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IEN5YmVyc291cmNlQWN0aW9uUGF5bG9hZC5zYWZlUGFyc2UodXNlckFjdGlvbik7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGVycl9fJGIoYEN5YmVyc291cmNlIDNEUyBpcyByZXF1aXJlZCBidXQgdXNlciBhY3Rpb24gaXMgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKEZSSUVORExZX0VSUik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMgPSAodXNlckFjdGlvbikgPT4ge1xuICByZXR1cm4gdXNlckFjdGlvbltcInR5cGVcIl0gPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiO1xufTtcbmNvbnN0IGhhbmRsZUN5YmVyc291cmNlM2RzID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHN0ZXBVcFVybCwgYWNjZXNzVG9rZW4sIG1lcmNoYW50RGF0YSwgaWZyYW1lLCBob3N0LCBjYW5jZWxCdXR0b24gfSA9IHBhcmFtcztcbiAgY29uc3QgZXhwZWN0ZWRPcmlnaW4gPSBuZXcgVVJMKHN0ZXBVcFVybCkub3JpZ2luO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbG9nX18kYShcIkNsZWFuaW5nIHVwIEN5YmVyc291cmNlIDNEUyBmbG93XCIpO1xuICAgICAgY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNhbmNlbCk7XG4gICAgICBob3N0LnJlbW92ZSgpO1xuICAgIH07XG4gICAgY29uc3Qgb25DYW5jZWwgPSAoKSA9PiB7XG4gICAgICBsb2dfXyRhKFwiQ3liZXJzb3VyY2UgM0RTIGNhbmNlbGxlZFwiKTtcbiAgICAgIHJlc29sdmUoeyBzdGF0dXM6IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVELCBjbGVhbnVwIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgbG9nX18kYShcIkN5YmVyc291cmNlIDNEUyBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIHN0YXR1cyk7XG4gICAgICByZXNvbHZlKHsgc3RhdHVzOiBzdGF0dXMuc3RhdHVzLCBjbGVhbnVwIH0pO1xuICAgICAgY2xlYW51cFBvbGxpbmcoKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgZXhwZWN0ZWRPcmlnaW4sIFwicGluZy0zZHMtc3RhdHVzXCIsIFBpbmczRFNTdGF0dXNSZXNwb25zZSk7XG4gICAgY29uc3QgY2xlYW51cFBvbGxpbmcgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHM6IHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmU6IChzdGF0dXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZSh7IHN0YXR1czogc3RhdHVzLnN0YXR1cywgY2xlYW51cCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2FuY2VsKTtcbiAgICBjb25zdCBmb3JtID0gcnVuUGF5ZXJBdXRoKHtcbiAgICAgIHN0ZXBVcFVybCxcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgbWVyY2hhbnREYXRhLFxuICAgICAgaWZyYW1lLFxuICAgICAgaG9zdFxuICAgIH0pO1xuICAgIGZvcm0uc3VibWl0KCk7XG4gIH0pO1xufTtcbmNvbnN0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyA9IGFzeW5jICh1c2VyQWN0aW9uKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlc3BvbnNlSGVhZGVycyh1c2VyQWN0aW9uKTtcbiAgY29uc3QgeyBzdGVwX3VwX3VybCwgYWNjZXNzX3Rva2VuLCBkZF91cmwsIGRkX3Rva2VuLCBtZXJjaGFudF9kYXRhIH0gPSBwYXlsb2FkO1xuICBpZiAoZGRfdXJsICYmIGRkX3Rva2VuKSB7XG4gICAgY29uc3QgY29sbGVjdGlvblJlc3VsdCA9IGF3YWl0IHJ1bkRldmljZURhdGFDb2xsZWN0aW9uKHtcbiAgICAgIHBvc3RVcmw6IGRkX3VybCxcbiAgICAgIGFjY2Vzc1Rva2VuOiBkZF90b2tlblxuICAgIH0pO1xuICAgIGxvZ19fJGEoXCJEZXZpY2UgZGF0YSBjb2xsZWN0aW9uIGNvbXBsZXRlZCB3aXRoIHN0YXR1czpcIiwgY29sbGVjdGlvblJlc3VsdC5TdGF0dXMpO1xuICB9IGVsc2Uge1xuICAgIGVycl9fJGIoXCJObyBkZXZpY2UgZGF0YSBjb2xsZWN0aW9uIFVSTCBvciB0b2tlbiBwcm92aWRlZFwiKTtcbiAgfVxuICBjb25zdCB7IGhvc3QsIGlmcmFtZSwgY2FuY2VsQnV0dG9uIH0gPSBjcmVhdGVBbmRPcGVuRnJhbWUoXCJcIiwgeyBuYW1lOiBcImNhcmRpbmFsX2F1dGhfaWZyYW1lXCIgfSk7XG4gIGxvZ19fJGEoXCJSdW5uaW5nIEN5YmVyc291cmNlIDNEUyBmbG93XCIpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVDeWJlcnNvdXJjZTNkcyh7XG4gICAgc3RlcFVwVXJsOiBzdGVwX3VwX3VybCxcbiAgICBhY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuLFxuICAgIG1lcmNoYW50RGF0YTogbWVyY2hhbnRfZGF0YSxcbiAgICBpZnJhbWUsXG4gICAgaG9zdCxcbiAgICBjYW5jZWxCdXR0b25cbiAgfSk7XG4gIHJlc3VsdC5jbGVhbnVwKCk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGxvZ19fJGEoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0TmV2ZXIocmVzdWx0LnN0YXR1cyk7XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICB0cmFjayhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5leHRBY3Rpb25NZXRhZGF0YVxuICB9KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICB0cmFjayhcIjNkc19zdHJpcGVfY29tcGxldGVcIik7XG4gIHN0cmlwZUxvZ19fKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufTtcbmNvbnN0IHBhcnNlVXNlckZFUGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZC5zYWZlUGFyc2UocGF5bG9hZCk7XG4gIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBhcnNlZC5lcnJvci5lcnJvcnMpfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiBwYXJzZWQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogcGFyc2VkLmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHBhcnNlZC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufTtcblxuY29uc3QgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TID0gNDtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDksIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInVuaWZpZWQtY2NcIik7XG5jb25zdCB1bnNhZmVseVJ1blVuaWZpZWRDY0Zsb3cgPSBhc3luYyAoe1xuICBjb250ZXh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gIG5vbkNkZUZvcm1JbnB1dHMsXG4gIGZvcm1DYWxsYmFja3MsXG4gIGN1c3RvbVBhcmFtc1xufSkgPT4ge1xuICBsb2dfXyQ5KGDilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gIGxvZ19fJDkoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG5vbkNkZUZvcm1JbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHMsXG4gICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaW4gdGhlIGNoZWNrb3V0IGF0dGVtcHQgbG9nc1xuICAgICAgZGV2aWNlVG9rZW46IGdldERldmljZVRva2VuKClcbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IHRydWUsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IGN1c3RvbVBhcmFtcy5wYXltZW50Um91dGVJZFxuICB9O1xuICBlcnJfXyRhKGN1c3RvbVBhcmFtcywgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICBsb2dfXyQ5KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgbG9nX18kOShg4pScIHN0YXJ0UGYgcmVzdWx0YCwgc3RhcnRQZlJlc3VsdCk7XG4gIGlmIChzdGFydFBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpIHtcbiAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHN0YXJ0UGZSZXN1bHQpO1xuICB9XG4gIGlmICghc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgfVxuICByZXR1cm4gcnVuQ29uZmlybUxvb3Aoe1xuICAgIGNvbnRleHQsXG4gICAgcHJlZmlsbCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLFxuICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgc3RhcnRQZlJlc3VsdCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogc3RhcnRQZlJlc3VsdC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufTtcbmNvbnN0IHJ1bkNvbmZpcm1Mb29wID0gYXN5bmMgKHBhcmFtcykgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBwcmVmaWxsLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICBzdGFydFBmUmVzdWx0LFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBwZlJlc3VsdCA9IHN0YXJ0UGZSZXN1bHQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0NPTkZJUk1fTE9PUF9JVEVSQVRJT05TOyBpKyspIHtcbiAgICBsb2dfXyQ5KGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7aX1gKTtcbiAgICB0cmFjayhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogaSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb24gfSA9IHZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uKHBmUmVzdWx0KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckFjdGlvblJlc3VsdCA9IGF3YWl0IHJ1blJlcXVpcmVkVXNlckFjdGlvbihjb250ZXh0LmJhc2VVcmwsIHVzZXJBY3Rpb24sIHByZWZpbGwsIG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi51c2VyQWN0aW9uUmVzdWx0Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH07XG4gICAgICBsb2dfXyQ5KGDilJwgTmV3IGV4dHJhIG1ldGFkYXRhYCwgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgZXJyX18kYShg4pScIEVycm9yIGluIHJ1bm5pbmcgdXNlciBhY3Rpb24gaW4gaXRlcmF0aW9uICR7aX0uIENvbnRpbnVpbmcgdG8gY29uZmlybSBzdGVwLi4uYCwgZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwidW5pZmllZF9jY191c2VyX2FjdGlvbl9lcnJvclwiLCB7IGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSwgaXRlcmF0aW9uOiBpIH0pO1xuICAgIH1cbiAgICBwZlJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjaGVja291dEF0dGVtcHRJZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFcbiAgICB9KTtcbiAgICBsb2dfXyQ5KGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7aX0pYCwgcGZSZXN1bHQpO1xuICAgIGlmIChwZlJlc3VsdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmV0dXJuU3VjY2Vzc1Jlc3VsdChwcmVmaWxsLm1vZGUsIHBmUmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgdHJhY2soXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogcGZSZXN1bHQuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IHBmUmVzdWx0XG4gIH0pO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBlcnJvciwgcGxlYXNlIHRyeSBhbm90aGVyIHBheW1lbnQgbWV0aG9kXCIpO1xufTtcbmNvbnN0IHJ1blJlcXVpcmVkVXNlckFjdGlvbiA9IGFzeW5jIChiYXNlVXJsLCB1c2VyQWN0aW9uLCBwcmVmaWxsLCBub25DZGVGb3JtSW5wdXRzKSA9PiB7XG4gIGlmICh1c2VyQWN0aW9uLl91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHVzZXJBY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVVzZXJGRVBheWxvYWQodXNlckFjdGlvbikpO1xuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB9IGVsc2UgaWYgKGNoZWNrSWZSZXF1aXJlc0FpcndhbGxleDNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkFpcndhbGxleDNkc0Zsb3coYmFzZVVybCwgdXNlckFjdGlvbik7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYWlyd2FsbGV4TWV0YWRhdGFGb3JDaGVja291dCB9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmUmVxdWlyZXNBZHllbjNkcyh1c2VyQWN0aW9uKSkge1xuICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgdXNlckFjdGlvbixcbiAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhZHllbk1ldGFkYXRhRm9yQ2hlY2tvdXQgfSB9O1xuICAgIH0gZWxzZSBpZiAoY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHModXNlckFjdGlvbikpIHtcbiAgICAgIGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh1c2VyQWN0aW9uKTtcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgfSBlbHNlIGlmIChjaGVja0lmTGVnYWN5M0RTUGF0aCh1c2VyQWN0aW9uKSkge1xuICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdXNlckFjdGlvbl0gfSwgYmFzZVVybCk7XG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodXNlckFjdGlvbil9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHVzZXJBY3Rpb24pfWApO1xuICB9XG59O1xuY29uc3QgY2hlY2tJZkxlZ2FjeTNEU1BhdGggPSAodXNlckFjdGlvbikgPT4ge1xuICB0cnkge1xuICAgIHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKFt1c2VyQWN0aW9uXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgdmFsaWRhdGVQZlJlc3VsdFVzZXJBY3Rpb24gPSAocGZSZXN1bHQpID0+IHtcbiAgaWYgKCFwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSBpZiAocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfSBlbHNlIGlmIChwZlJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG11bHRpcGxlIHJlcXVpcmVkIHVzZXIgYWN0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyQWN0aW9uID0gVXNlckFjdGlvbkZFUGF5bG9hZC5zYWZlUGFyc2UocGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF1c2VyQWN0aW9uLnN1Y2Nlc3MpIHtcbiAgICBlcnJfXyRhKFwiVXNlciBhY3Rpb24gcmF3IHBheWxvYWRcIiwgcGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgICBlcnJfXyRhKFwiUGFyc2luZyBlcnJvclwiLCB1c2VyQWN0aW9uLmVycm9yKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmRhdGFcbiAgfTtcbn07XG5jb25zdCByZXR1cm5TdWNjZXNzUmVzdWx0ID0gKHByZWZpbGxNb2RlLCBwZlJlc3VsdCkgPT4ge1xuICBpZiAocHJlZmlsbE1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IHBheW1lbnRNZXRob2RJZCA9IHBmUmVzdWx0LmNjX3BtX2lkID8/IHBmUmVzdWx0LnBheW1lbnRfbWV0aG9kcz8uWzBdLmlkO1xuICAgIGlmICghcGF5bWVudE1ldGhvZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBwYXltZW50TWV0aG9kSWRcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghcGZSZXN1bHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHBmUmVzdWx0LmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ4LCBlcnJfXzogZXJyX18kOSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDgoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICB0cmFjayhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJlZmlsbFxuICAgIH0pO1xuICAgIGNvbnN0IHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyA9IHByZWZpbGwuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzPy5bXCJ1bmlmaWVkX2NjXCJdID8/IDA7XG4gICAgbG9nX18kOChg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IHJvbGwgPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnN0IHVzZVVuaWZpZWRDQ0Zsb3cgPSByb2xsIDwgdW5pZmllZENDUm9sbG91dFJhdGlvO1xuICAgIGNvbnN0IHVjY1JvbGxUcmFja2luZ01ldGFkYXRhID0ge1xuICAgICAgcm9sbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3dcbiAgICB9O1xuICAgIGlmICh1c2VVbmlmaWVkQ0NGbG93KSB7XG4gICAgICBsb2dfXyQ4KGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtyb2xsfSB2cyAke3VuaWZpZWRDQ1JvbGxvdXRSYXRpb30pYCk7XG4gICAgICB0cmFjayhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgdWNjUm9sbFRyYWNraW5nTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIHVuc2FmZWx5UnVuVW5pZmllZENjRmxvdyh7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ4KGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke3JvbGx9IHZzICR7dW5pZmllZENDUm9sbG91dFJhdGlvfSlgKTtcbiAgICAgIHRyYWNrKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHVjY1JvbGxUcmFja2luZ01ldGFkYXRhKTtcbiAgICB9XG4gICAgbG9nX18kOChg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgICBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBjb25zdCBjb21tb25DaGVja291dFBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6IGZhbHNlLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogY3VzdG9tUGFyYW1zLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBsb2dfXyQ4KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY3VzdG9tUGFyYW1zLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kOChg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDgoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kOChg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kOChg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICAgIGxvZ19fJDgoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQ4KFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHRyYWNrKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAgIC4uLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICAgIC4uLmVycm9yLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBlcnJIZWFkZXJzID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICBpZiAoXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGVyckhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4aXN0aW5nX2NjX3BtX2lkID0gZXJySGVhZGVyc1tcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCJdO1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEV4aXN0aW5nIENDIFBNIElEOiAke2NvbW1vbkNoZWNrb3V0UGFyYW1zLmV4aXN0aW5nX2NjX3BtX2lkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQWR5ZW4zZHMgPSBjaGVja0lmUmVxdWlyZXNBZHllbjNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNBZHllbjNkcykge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0ID0gYXdhaXQgcnVuQWR5ZW4zZHNGbG93KFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgICAgcHJlZmlsbC5sb2NhbGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFkeWVuXCJdID0gYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdGFydFBmUmVzdWx0ID0gYXdhaXQgc3RhcnRQYXltZW50Rmxvd0ZvckNDKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyQ4KGDilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBjb25zdCBjeWJlcnNvdXJjZUFjdGlvbiA9IHN0YXJ0UGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJjeWJlcnNvdXJjZV9wYXllcl9hdXRoXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChjeWJlcnNvdXJjZUFjdGlvbikge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIEN5YmVyc291cmNlIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEN5YmVyc291cmNlIDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgY3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkID0gQ3liZXJzb3VyY2VBY3Rpb25QYXlsb2FkLnBhcnNlKGN5YmVyc291cmNlQWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1bkN5YmVyc291cmNlM2RzRmxvdyh7XG4gICAgICAgICAgICAgIC4uLmN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCxcbiAgICAgICAgICAgICAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgIF91bmlmaWVkX2NjX3BjY3NfaWQ6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tbW9uQ2hlY2tvdXRQYXJhbXMuZXh0cmFfbWV0YWRhdGFbXCJjeWJlcnNvdXJjZVwiXSA9IGN5YmVyc291cmNlTWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2hvdWxkVXNlU3RyaXBlRmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gIT09IFwidHJ1ZVwiO1xuICAgICAgICAgIGlmICghcmVxdWlyZXNQb2NreXQzZHMgJiYgIWN5YmVyc291cmNlQWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyQ4KGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2dfXyQ4KGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IGNvbW1vbkNDM0RTRmxvdyhzdGFydFBmUmVzdWx0LCBjb250ZXh0LmJhc2VVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjY1BtSWQgPSBzdGFydFBmUmVzdWx0LmNjX3BtX2lkO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtjY1BtSWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQ4KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgICAgIGxvZ19fJDgoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nX18kOChg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHshc2hvdWxkVXNlU3RyaXBlRmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBjY1BtSWQsXG4gICAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHNob3VsZFVzZVN0cmlwZUZsb3dcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kOChg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXJyX18kOShg4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFYCk7XG4gICAgICBlcnJfXyQ5KGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IHBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IHN0cmlwZUFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbjNEU0FjdGlvblR5cGVzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdO1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGNvbW1vbjNEU0FjdGlvblR5cGVzLmluY2x1ZGVzKGFjdGlvbi50eXBlKSk7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIH1cbiAgcmV0dXJuIENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhKHN0YXJ0UGZSZXN1bHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBsb2dfXyQ4KGDilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgIHRyYWNrKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dfXyQ4KGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybH1dYCk7XG4gIHRyYWNrKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uZXh0QWN0aW9uTWV0YWRhdGFcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzIH0gPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvbih7IHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCwgYmFzZVVybCB9KTtcbiAgbG9nX18kOChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7c3RhdHVzfV1gKTtcbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICB0cmFjayhcIjNkc19jYW5jZWxsZWRcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdHJhY2soXCIzZHNfZmFpbHVyZVwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgfVxuICB0cmFjayhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufTtcblxuY29uc3QgTG9vcENyeXB0b0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6LnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogei5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ4IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImxvb3AtY3J5cHRvXCIpO1xuY29uc3QgaW5pdExvb3BGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kNyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBMb29wQ3J5cHRvQ3BtKTtcbiAgICBsb2dfXyQ3KGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkoY2hlY2tvdXRQYXltZW50TWV0aG9kKX1gKTtcbiAgICBsb2dfXyQ3KGBTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uYCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IHByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEgPSBhd2FpdCBwcmVwYXJlUGF5bWVudEZsb3coY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhbFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoXG4gICAgICBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBwcmVmaWxsLnRva2VuLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghaXNTZXR1cE1vZGUgJiYgIWNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhwcmVmaWxsLmN1cnJlbmN5KSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3ByZWZpbGwuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YSB8fCAhcHJlRmxvd05leHRBY3Rpb25NZXRhZGF0YS5uZXh0X2FjdGlvbl9tZXRhZGF0YSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbmVjZXNzYXJ5IHNldHVwIGRhdGEgZm9yIExvb3BcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRTZXR1cEluZm8gPSBwcmVGbG93TmV4dEFjdGlvbk1ldGFkYXRhLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gcGF5bWVudFNldHVwSW5mb1tcImF1dGhvcml6YXRpb25fYW1vdW50XCJdO1xuICAgIGxldCBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50ID0gcGF5bWVudFNldHVwSW5mb1tcIm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudFwiXTtcbiAgICBjb25zdCBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoID0gcGF5bWVudFNldHVwSW5mb1tcImFsbG93X2N1c3RvbWVyX3RvX2Nob29zZV9hdXRoXCJdO1xuICAgIGxldCBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGlmIChpc1NldHVwTW9kZSkge1xuICAgICAgY2hhcmdlQW1vdW50VXNkQXRvbSA9IDA7XG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgoc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCwgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYXJnZUFtb3VudFVzZEF0b20gPSAoaW5pdGlhbFByZXZpZXcgPyBpbml0aWFsUHJldmlldy5hbW91bnRBdG9tIDogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSkgKiBwYXltZW50U2V0dXBJbmZvW1widG9rZW5fcHJpY2VcIl07XG4gICAgICBtaW5BdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgobWluQXV0aG9yaXphdGlvblVzZEFtb3VudCwgY2hhcmdlQW1vdW50VXNkQXRvbSk7XG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50ID0gTWF0aC5tYXgoc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudCwgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCk7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnRVc2RBbW91bnQgPSBjaGFyZ2VBbW91bnRVc2RBdG9tO1xuICAgIGNvbnN0IGN1c3RvbWVyUmVmSWQgPSB2NCgpO1xuICAgIGNvbnN0IHdpZGdldFByb3BzID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudCxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQsXG4gICAgICBjdXN0b21lclJlZklkLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudCxcbiAgICAgIGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGhcbiAgICB9O1xuICAgIGNvbnN0IGluaXRMb29wQ29ubmVjdFByb3BzID0ge1xuICAgICAgYXBpVG9rZW46IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIHdpZGdldFByb3BzLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuTG9vcEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ3KGBSdW5uaW5nIExvb3AgZmxvdy4uLmApO1xuICAgIGxvZ19fJDcoXCJjb250ZXh0XCIsIGNvbnRleHQpO1xuICAgIGxvZ19fJDcoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICBsb2dfXyQ3KFwibm9uQ2RlRm9ybUlucHV0c1wiLCBub25DZGVGb3JtSW5wdXRzKTtcbiAgICBsb2dfXyQ3KFwiZmxvd0NhbGxiYWNrc1wiLCBmb3JtQ2FsbGJhY2tzKTtcbiAgICBsb2dfXyQ3KFwiY3VzdG9tUGFyYW1zXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY29udGV4dC5hbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ3KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgcHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBpc0NoZWNrb3V0TW9kZSA9IHByZWZpbGwubW9kZSAhPT0gXCJzZXR1cFwiO1xuICAgIGNvbnN0IGN1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBpZiAoIWN1c3RvbVBhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgfVxuICAgIGlmICghY3VzdG9tUGFyYW1zLnN1Y2Nlc3MpIHtcbiAgICAgIHRyYWNrKFwibG9vcF9wYXlfZmxvd19mYWlsdXJlXCIsIGN1c3RvbVBhcmFtcyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIFN1Y2Nlc3MgaXMgbm90IHRydWUuXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIC4uLmN1c3RvbWVyRmllbGRzLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc0NoZWNrb3V0TW9kZSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNDaGVja291dE1vZGUgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGRldGVjdExhbmd1YWdlKClcbiAgICB9KTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQsXG4gICAgICAvLyBOT1RFOiB3ZSBkbyBoYXZlIHRoZSBjaGVja291dCBhdHRlbXB0IGlkIGhlcmUgZXZlbiBpZiBpdHMgYSBzZXR1cCwgYnV0IGZvciBub3cgd2UgZG9uJ3QgaW5jbHVkZSBpdFxuICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNoZWNrb3V0IGF0dGVtcHQgc3VwcG9ydCBmb3Igc2V0dXAgaW50ZW50cy5cbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGlzQ2hlY2tvdXRNb2RlID8gc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogY3VzdG9tUGFyYW1zLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBjdXN0b21QYXJhbXMucGF5bWVudE1ldGhvZCxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBjdXN0b21QYXJhbXMuc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxvZ19fJDcoYENvbmZpcm0gcmVzdWx0OiAke2NvbmZpcm1SZXN1bHR9YCk7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ3KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBsb2dfXyQ3KGDilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpgLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIGxvZ19fJDcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogY3JlYXRlZFBheW1lbnRNZXRob2QgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nX18kNyhgRG9pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ4KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwYXlwYWxcIik7XG5jb25zdCBQYXlwYWxDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5jb25zdCBpbml0UGF5cGFsRmxvdyA9IGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICBjb25zdCBwYXlwYWxDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUGF5cGFsQ3BtKTtcbiAgaWYgKCFwYXlwYWxDcG0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICB9XG4gIGNvbnN0IHN0YXJ0RmxvdyA9ICgpID0+IHtcbiAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwYXlwYWxDcG0sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgIHN0YXJ0Rmxvd1xuICB9O1xufTtcbmNvbnN0IHJ1blBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgbG9nX18kNihgUnVubmluZyBQYXlQYWwgZmxvdy4uLmApO1xuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgeyBpc0Fub255bW91cywgdXNlUmVkaXJlY3RGbG93IH0gPSBjdXN0b21QYXJhbXMuc2V0dGluZ3MgPz8ge307XG4gICAgICBsb2dfXyQ2KGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgICBjb25zdCBjcG0gPSBQYXlwYWxDcG0ucGFyc2UoY2hlY2tvdXRQYXltZW50TWV0aG9kKTtcbiAgICAgIGxvZ19fJDYoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5pc0Fub255bW91cyA/IGdlbmVyYXRlQW5vbnltb3VzVmFsdWVzKCkgOiB2b2lkIDAsXG4gICAgICAgIC4uLnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbmV3Q3VzdG9tZXJGaWVsZHMgPSBjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtKG5vbkNkZUZvcm1GaWVsZHMsIHByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgICAgbG9nX18kNihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cHJlZmlsbC5tb2RlfWApO1xuICAgICAgY29uc3QgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyA9IHY0KCk7XG4gICAgICBjb25zdCBpc1BheUZpcnN0RmxvdyA9IGZhbHNlO1xuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QgPSB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNwbSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBpc1BheUZpcnN0RmxvdyA/IHtcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogdXNlUmVkaXJlY3RGbG93LFxuICAgICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93XG4gICAgICAgIH0sXG4gICAgICAgIC4uLm5ld0N1c3RvbWVyRmllbGRzXG4gICAgICB9O1xuICAgICAgY29uc3QgcHJlQWN0aW9uVXJsID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgY29udGV4dC5iYXNlVXJsKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZW5jb2RlZFJlcXVlc3QgPSBidG9hKEpTT04uc3RyaW5naWZ5KHN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0KSk7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHI6IGVuY29kZWRSZXF1ZXN0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gYCR7cHJlQWN0aW9uVXJsfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgICBpZiAodXNlUmVkaXJlY3RGbG93KSB7XG4gICAgICAgIGxvZ19fJDYoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIik7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgICAgIGF3YWl0IHNsZWVwKDIwICogMWUzKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXlwYWxGbG93UmVzdWx0ID0gYXdhaXQgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdChcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgZnJvbnRlbmRUb2tlbkZvclJlZGlyZWN0RmxvdyxcbiAgICAgICAgcmVkaXJlY3RVcmxcbiAgICAgICk7XG4gICAgICBsb2dfXyQ2KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgICAgY29uc3QgY2hlY2tvdXRBdHRlbXB0SWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJjYXR0XCIpO1xuICAgICAgY29uc3QgYXBwcm92YWxTZXNzaW9uSWQgPSBwYXJzZUFyZ0Zyb21IcmVmKHBheXBhbEZsb3dSZXN1bHQuaHJlZiwgXCJhcHByb3ZhbF9zZXNzaW9uX2lkXCIpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaXNQYXlGaXJzdEZsb3cgPyBjaGVja291dEF0dGVtcHRJZCA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IGlzUGF5Rmlyc3RGbG93ID8gYXBwcm92YWxTZXNzaW9uSWQgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgbG9nX18kNihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiBwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwKHtcbiAgICAgICAgbG9nUHJlZml4OiBcInBheXBhbFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGNwbSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgICBjb25maXJtUmVzdWx0LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGlzUGF5Rmlyc3RGbG93XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDcoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBlcnIpO1xuICAgICAgdHJhY2soXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogZXJyIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycj8ubWVzc2FnZSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtcGF5cGFsXCIpO1xuY29uc3QgUG9ja3l0UGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogei5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFBvY2t5dFBheXBhbEZsb3cgPSBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgY29uc3QgcG9ja3l0UGF5cGFsQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFBvY2t5dFBheXBhbENwbSk7XG4gIGlmICghcG9ja3l0UGF5cGFsQ3BtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9ja3l0IFBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIH1cbiAgY29uc3Qgc3RhcnRGbG93ID0gKCkgPT4ge1xuICAgIHJldHVybiBPanNGbG93cy5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHBvY2t5dFBheXBhbENwbSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgc3RhcnRGbG93XG4gIH07XG59O1xuY29uc3QgcnVuUG9ja3l0UGF5cGFsRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDUoYFJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBsb2dfXyQ1KGBWZXJpZnlpbmcgQ1BNLi4uYCk7XG4gICAgY29uc3QgY3BtID0gUG9ja3l0UGF5cGFsQ3BtLnBhcnNlKGNoZWNrb3V0UGF5bWVudE1ldGhvZCk7XG4gICAgbG9nX18kNShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc2ApO1xuICAgIGNvbnN0IHNldHRpbmdzID0gY3VzdG9tUGFyYW1zPy5zZXR0aW5ncztcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBzZXR0aW5ncz8uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBjb25zdCBuZXdDdXN0b21lckZpZWxkcyA9IGNyZWF0ZUN1c3RvbWVyRmllbGRzRnJvbUZvcm0obm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgbG9nX18kNShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cHJlZmlsbC5tb2RlfWApO1xuICAgIGNvbnN0IGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3cgPSB2NCgpO1xuICAgIGNvbnN0IGlzUGF5Rmlyc3RGbG93ID0gcHJlZmlsbC5tb2RlICE9PSBcInNldHVwXCI7XG4gICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjcG0ucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY3BtLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBpc1BheUZpcnN0RmxvdyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogaXNQYXlGaXJzdEZsb3cgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISFjdXN0b21QYXJhbXM/LnNldHRpbmdzPy51c2VSZWRpcmVjdEZsb3csXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93XG4gICAgICB9LFxuICAgICAgLi4ubmV3Q3VzdG9tZXJGaWVsZHNcbiAgICB9O1xuICAgIGNvbnN0IHByZUFjdGlvblVybCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGNvbnRleHQuYmFzZVVybCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBlbmNvZGVkUmVxdWVzdCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoc3RhcnRQYXltZW50Rmxvd1JlcXVlc3QpKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBwcmVmaWxsLnRva2VuLFxuICAgICAgcjogZW5jb2RlZFJlcXVlc3RcbiAgICB9KTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGAke3ByZUFjdGlvblVybH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgIGlmIChjdXN0b21QYXJhbXM/LnNldHRpbmdzPy51c2VSZWRpcmVjdEZsb3cpIHtcbiAgICAgIGxvZ19fJDUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIik7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICAgICAgYXdhaXQgc2xlZXAoMjAgKiAxZTMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgfVxuICAgIGxvZ19fJDUoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIik7XG4gICAgbG9nX18kNShgT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uYCk7XG4gICAgY29uc3QgcGF5cGFsRmxvd1Jlc3VsdCA9IGF3YWl0IHN0YXJ0UG9wdXBXaW5kb3dWZXJpZmljYXRpb25TdHJpY3QoXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGZyb250ZW5kVG9rZW5Gb3JSZWRpcmVjdEZsb3csXG4gICAgICByZWRpcmVjdFVybFxuICAgICk7XG4gICAgbG9nX18kNShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCBwYXlwYWxGbG93UmVzdWx0KTtcbiAgICBjb25zdCB2YXVsdElkID0gcGFyc2VWYXVsdElkRnJvbTNkc0hyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmKTtcbiAgICBjb25zdCBjaGVja291dEF0dGVtcHRJZCA9IHBhcnNlQXJnRnJvbUhyZWYocGF5cGFsRmxvd1Jlc3VsdC5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFjaGVja291dEF0dGVtcHRJZCkge1xuICAgICAgZXJyX18kNihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgcGF5cGFsRmxvd1Jlc3VsdC5ocmVmKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICB9XG4gICAgbG9nX18kNShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHt2YXVsdElkfWApO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IHZhdWx0SWQsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBpc1BheUZpcnN0RmxvdyA/IGNoZWNrb3V0QXR0ZW1wdElkIDogdm9pZCAwXG4gICAgfSk7XG4gICAgbG9nX18kNShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBjb25maXJtUmVzdWx0KTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSkge1xuICAgICAgICBlcnJfXyQ2KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuXG5jb25zdCBPSlNfU1RSSVBFX0xJTktfQlROX0lEID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCI7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtbGlua1wiKTtcbmNvbnN0IFN0cmlwZUxpbmtDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IGluaXRTdHJpcGVMaW5rRmxvdyA9IGFkZEVycm9yQ2F0Y2hlckZvckluaXQoXG4gIGFzeW5jICh7IGNvbnRleHQsIGZvcm1DYWxsYmFja3MgfSkgPT4ge1xuICAgIGNvbnN0IGluaXRQYXJhbXMgPSBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBsb2dfXyQ0KGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uYCk7XG4gICAgY29uc3Qgc3RyaXBlTGlua0NwbSA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVMaW5rQ3BtKTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDQoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kNChgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWApO1xuICAgIH07XG4gICAgY29uc3QgZGlzbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50LnVubW91bnQoKTtcbiAgICB9O1xuICAgIGlmIChpbml0UGFyYW1zPy5kb05vdE1vdW50T25Jbml0KSB7XG4gICAgICBsb2dfXyQ0KGBOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDQoYE1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLmApO1xuICAgICAgbW91bnRCdXR0b24oKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kNChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDQoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQ0KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQ1KFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDQoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbixcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGdldEVsZW1lbnRCeUlkQXN5bmMoT0pTX1NUUklQRV9MSU5LX0JUTl9JRClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZvcm1DYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQ0KGBSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDQoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNKG5vbkNkZUZvcm1JbnB1dHMsIGN1c3RvbVBhcmFtcy5zdHJpcGVQTSk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIHRyYWNrKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLm5vbkNkZUZvcm1GaWVsZHNcbiAgICB9KTtcbiAgICBsb2dfXyQ0KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBkZXRlY3RMYW5ndWFnZSgpXG4gICAgfSk7XG4gICAgbG9nX18kNChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQ0KGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogZ2VuZXJhdGVCaWxsaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGdlbmVyYXRlU2hpcHBpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzLCBwcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdID0gaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RyaXBlUG1bXCJsaW5rXCJdPy5lbWFpbCB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQ0KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IGdldEVsZW1lbnRCeUlkQXN5bmMgPSAoaWQpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGNvbnN0IGdldEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVzb2x2ZShlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGdldEVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbiAgZ2V0RWxlbWVudCgpO1xufSk7XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQzKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMyhgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYEdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudGApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgaXNTZXR1cE1vZGVcbiAgICApO1xuICAgIGxvZ19fJDMoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICBjb25zdCBjYW5NYWtlUGF5bWVudCA9IGF3YWl0IHByLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGNhbk1ha2VQYXltZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJfXyQ0KGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICB9XG4gICAgbG9nX18kMyhgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgIGNvbnN0IHJ1blN0cmlwZVByRmxvdzIgPSAocHJvdmlkZXIsIHBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgICAgcHIsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBjYW5NYWtlUGF5bWVudC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXkgfSxcbiAgICAgICAgICBzdGFydEZsb3c6IHJ1blN0cmlwZVByRmxvdzJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiBydW5TdHJpcGVQckZsb3cyXG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDMoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICBjb25zdCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0ID0gdHlwZW9mIG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT09IFwiZnVuY3Rpb25cIiA/IG92ZXJyaWRlLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogb3ZlcnJpZGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nLCBhcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBvdmVycmlkZS5sYWJlbCk7XG4gICAgfVxuICAgIGxvZ19fJDMoYFNob3dpbmcgUFIgZGlhbG9nLi4uYCk7XG4gICAgcHIuc2hvdygpO1xuICAgIGNvbnN0IHN0cmlwZVBtQWRkZWRFdmVudCA9IGF3YWl0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kKHByKTtcbiAgICBsb2dfXyQzKGBTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6YCwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBsb2dfXyQzKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbShub25DZGVGb3JtSW5wdXRzLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB0cmFjayhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5ub25DZGVGb3JtRmllbGRzXG4gICAgfSk7XG4gICAgbG9nX18kMyhgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDMoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IGdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzKG5vbkNkZUZvcm1GaWVsZHMpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBnZW5lcmF0ZVNoaXBwaW5nQWRkcmVzc0Zyb21GaWVsZHMobm9uQ2RlRm9ybUZpZWxkcywgcHJlZmlsbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG1FdnQpID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtRXZ0LnBheWVyTmFtZT8udHJpbSgpPy5zcGxpdCgvXFxzKy8pID8/IFtdO1xuICBjb25zdCBwYXllckxhc3ROYW1lID0gcGF5ZXJMYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgY29uc3QgYmlsbGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5wYXltZW50TWV0aG9kPy5iaWxsaW5nX2RldGFpbHM/LmFkZHJlc3M7XG4gIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcztcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCBzdHJpcGVQbUV2dC5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBiaWxsaW5nQWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5IHx8IFwiVVNcIjtcbiAgY29uc3QgZmlyc3ROYW1lID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIlwiO1xuICBjb25zdCBsYXN0TmFtZSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiXCI7XG4gIGlmIChmaXJzdE5hbWUgfHwgbGFzdE5hbWUpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gZmlyc3ROYW1lO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGxhc3ROYW1lO1xuICB9IGVsc2Uge1xuICAgIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gXCJcIjtcbiAgfVxuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5LCBsYWJlbCkgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGxhYmVsID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gd2l0aFByb2Nlc3NvciA9PT0gdm9pZCAwID8gdHJ1ZSA6IGNwbS5wcm9jZXNzb3JfbmFtZSA9PT0gd2l0aFByb2Nlc3NvcjtcbiAgICBjb25zdCBtYXRjaGVzUHJvdmlkZXIgPSBjcG0ucHJvdmlkZXIgPT09IHdpdGhQcm92aWRlcjtcbiAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gIH0pO1xuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gICAgdHJhY2soXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgICBwcm92aWRlcjogd2l0aFByb3ZpZGVyLFxuICAgICAgcHJvY2Vzc29yOiB3aXRoUHJvY2Vzc29yLFxuICAgICAgY3Btc1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufTtcbmNvbnN0IE9qc0Zsb3dzID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkNvbW1vbkNjRmxvd1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlUHJGbG93JDFcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBpbml0OiBpbml0UG9ja3l0UGF5cGFsRmxvdyxcbiAgICBydW46IHJ1blBvY2t5dFBheXBhbEZsb3dcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IGluaXRQYXlwYWxGbG93LFxuICAgIHJ1bjogcnVuUGF5cGFsRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9LFxuICBhaXJ3YWxsZXhBQ0g6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEFDSEZsb3dcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhFRlRGbG93XG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleEJBQ1NGbG93XG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IHJ1bkFpcndhbGxleFNFUEFGbG93XG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IGluaXRMb29wRmxvdyxcbiAgICBydW46IHJ1bkxvb3BGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEF1dGhuZXRBcHBsZVBheUZsb3csXG4gICAgcnVuOiBydW5BdXRobmV0QXBwbGVQYXlGbG93XG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IGluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkF1dGhuZXRHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuR29vZ2xlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFkeWVuR29vZ2xlUGF5Rmxvd1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFkeWVuQXBwbGVQYXlGbG93LFxuICAgIHJ1bjogcnVuQWR5ZW5BcHBsZVBheUZsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQzKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gICAgYWlyd2FsbGV4QXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAgIC8vIExvb3BcbiAgICBsb29wOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkxvb3BcIiwgT2pzRmxvd3MubG9vcENyeXB0by5pbml0KSxcbiAgICAvLyBQYXlQYWxcbiAgICBwYXlwYWw6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiUGF5UGFsXCIsIE9qc0Zsb3dzLnBheXBhbC5pbml0KSxcbiAgICAvLyBQb2NreXQgUGF5UGFsXG4gICAgcG9ja3l0UGF5cGFsOiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIlBvY2t5dCBQYXlQYWxcIiwgT2pzRmxvd3MucG9ja3l0UGF5cGFsLmluaXQpLFxuICAgIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE9qc0Zsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBPanNGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgICAvLyBBZHllbiBHb29nbGVQYXlcbiAgICBhZHllbkdvb2dsZVBheTogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJBZHllbiBHb29nbGVQYXlcIiwgT2pzRmxvd3MuYWR5ZW5Hb29nbGVQYXkuaW5pdCksXG4gICAgLy8gQWR5ZW4gQXBwbGVQYXlcbiAgICBhZHllbkFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFkeWVuIEFwcGxlUGF5XCIsIE9qc0Zsb3dzLmFkeWVuQXBwbGVQYXkuaW5pdClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB9O1xufTtcblxuY29uc3QgeyBlcnJfXzogZXJyX18kMiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6LmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6Lm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fJDIpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVjdEZyYW1ld29yaygpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgY29uc3QgbmV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICBpZiAobmV4dFdpbmRvdz8ubmV4dCB8fCBuZXh0V2luZG93Py5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKSB7XG4gICAgICByZXR1cm4gXCJuZXh0anNcIiAvKiBOZXh0SlMgKi87XG4gICAgfVxuICAgIGNvbnN0IG51eHRXaW5kb3cgPSB3aW5kb3c7XG4gICAgaWYgKG51eHRXaW5kb3c/Ll9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKSB7XG4gICAgICByZXR1cm4gXCJudXh0XCIgLyogTnV4dCAqLztcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChrZXkpID0+IGtleS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCAhIUFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobm9kZSkgPT4gbm9kZS5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSkge1xuICAgICAgcmV0dXJuIFwicmVhY3RcIiAvKiBSZWFjdCAqLztcbiAgICB9XG4gICAgY29uc3QgdnVlV2luZG93ID0gd2luZG93O1xuICAgIGlmICh2dWVXaW5kb3c/LlZ1ZSB8fCB2dWVXaW5kb3c/Ll9fVlVFX18pIHtcbiAgICAgIHJldHVybiBcInZ1ZVwiIC8qIFZ1ZSAqLztcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikpIHtcbiAgICAgIHJldHVybiBcImFuZ3VsYXJcIiAvKiBBbmd1bGFyICovO1xuICAgIH1cbiAgICByZXR1cm4gXCJ2YW5pbGxhXCIgLyogVmFuaWxsYSAqLztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCIgLyogVW5rbm93biAqLztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RnJhbWV3b3JrVmVyc2lvbihmcmFtZXdvcmspIHtcbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKGZyYW1ld29yaykge1xuICAgICAgY2FzZSBcInJlYWN0XCIgLyogUmVhY3QgKi86IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlIFwibmV4dGpzXCIgLyogTmV4dEpTICovOiB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICAgICAgY29uc3QgbmV4dFdpbmRvdyA9IHdpbmRvdztcbiAgICAgICAgcmV0dXJuIG5leHRXaW5kb3c/Lm5leHQ/LnZlcnNpb24gfHwgbmV4dFdpbmRvdz8uX19ORVhUX0RBVEFfXz8uYnVpbGRJZCB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIiAvKiBOdXh0ICovOiB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcInZ1ZVwiIC8qIFZ1ZSAqLzoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhbmd1bGFyXCIgLyogQW5ndWxhciAqLzoge1xuICAgICAgICBjb25zdCBkb2N1bWVudDIgPSBnZXRXaW5kb3dTYWZlKCk/LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBuZ1ZlcnNpb25FbCA9IGRvY3VtZW50Mj8ucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIG5nVmVyc2lvbkVsID8gbmdWZXJzaW9uRWwuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1ld29ya0luZm8oKSB7XG4gIGNvbnN0IGZyYW1ld29yayA9IGRldGVjdEZyYW1ld29yaygpO1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0RnJhbWV3b3JrVmVyc2lvbihmcmFtZXdvcmspO1xuICByZXR1cm4geyBmcmFtZXdvcmssIHZlcnNpb24gfTtcbn1cblxuY29uc3QgZ2V0RnJhdWRNZXRhZGF0YSA9ICgpID0+IHtcbiAgY29uc3Qgc2NyZWVuX2hlaWdodCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsO1xuICBjb25zdCBzY3JlZW5fd2lkdGggPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4ud2lkdGggOiBudWxsO1xuICBjb25zdCBjb2xvcl9kZXB0aCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbDtcbiAgY29uc3QgamF2YV9lbmFibGVkID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLmphdmFFbmFibGVkKCkgOiBmYWxzZTtcbiAgY29uc3QgdXNlcl9hZ2VudCA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgOiBudWxsO1xuICBjb25zdCBhY2NlcHRfaGVhZGVyID0gXCJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44XCI7XG4gIGxldCBsYW5ndWFnZSA9IG51bGw7XG4gIGlmICh3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvcikge1xuICAgIGxhbmd1YWdlID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTtcbiAgfVxuICBjb25zdCB0aW1lX3pvbmVfb2Zmc2V0ID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoLFxuICAgIGphdmFfZW5hYmxlZCxcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6IHRydWUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgc2NyZWVuX2hlaWdodCxcbiAgICBzY3JlZW5fd2lkdGgsXG4gICAgdGltZV96b25lX29mZnNldCxcbiAgICB1c2VyX2FnZW50LFxuICAgIGFjY2VwdF9oZWFkZXJcbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QUNIXCJdID0gXCJhaXJ3YWxsZXgtYWNoXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4RUZUXCJdID0gXCJhaXJ3YWxsZXgtZWZ0XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QkFDU1wiXSA9IFwiYWlyd2FsbGV4LWJhY3NcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhTRVBBXCJdID0gXCJhaXJ3YWxsZXgtc2VwYVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnoubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcbnZhciBQYXltZW50UHJvdmlkZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgoUGF5bWVudFByb3ZpZGVyVHlwZTIpID0+IHtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBQ0hcIl0gPSBcImFjaFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkVGVFwiXSA9IFwiZWZ0XCI7XG4gIFBheW1lbnRQcm92aWRlclR5cGUyW1wiQkFDU1wiXSA9IFwiYmFjc1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlNFUEFcIl0gPSBcInNlcGFcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJBUFBMRV9QQVlcIl0gPSBcImFwcGxlX3BheVwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkNSRURJVF9DQVJEXCJdID0gXCJjcmVkaXRfY2FyZFwiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIkdPT0dMRV9QQVlcIl0gPSBcImdvb2dsZV9wYXlcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJTVFJJUEVfTElOS1wiXSA9IFwic3RyaXBlX2xpbmtcIjtcbiAgUGF5bWVudFByb3ZpZGVyVHlwZTJbXCJDUllQVE9cIl0gPSBcImNyeXB0b1wiO1xuICBQYXltZW50UHJvdmlkZXJUeXBlMltcIlBBWVBBTFwiXSA9IFwicGF5cGFsXCI7XG4gIHJldHVybiBQYXltZW50UHJvdmlkZXJUeXBlMjtcbn0pKFBheW1lbnRQcm92aWRlclR5cGUgfHwge30pO1xuXG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJ0cmFjZXJcIik7XG5jb25zdCBpbml0VHJhY2VyU2FmZSA9ICh2ZXJzaW9uLCBiYXNlVXJsKSA9PiB7XG4gIHRyeSB7XG4gICAgaW5pdFRyYWNlclVuc2FmZSh2ZXJzaW9uLCBiYXNlVXJsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlcnJfXyQxKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke2Vycm9yfWApO1xuICB9XG59O1xubGV0IGdsb2JhbFRyYWNlcjtcbmNvbnN0IGluaXRUcmFjZXJVbnNhZmUgPSBhc3luYyAodmVyc2lvbiwgYmFzZVVybCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgY29uc3Qgc2RrVHJhY2VXZWIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDA3fX4uanMnKTtcbiAgY29uc3QgeyBDb25zb2xlU3BhbkV4cG9ydGVyLCBTaW1wbGVTcGFuUHJvY2Vzc29yLCBXZWJUcmFjZXJQcm92aWRlciB9ID0gc2RrVHJhY2VXZWI7XG4gIGNvbnN0IGluc3RydW1lbnRhdGlvbkZldGNoID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LSF+ezAwZn1+LmpzJyk7XG4gIGNvbnN0IHsgRmV0Y2hJbnN0cnVtZW50YXRpb24gfSA9IGluc3RydW1lbnRhdGlvbkZldGNoO1xuICBjb25zdCBjb250ZXh0Wm9uZSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGV9fi5qcycpO1xuICBjb25zdCB7IFpvbmVDb250ZXh0TWFuYWdlciB9ID0gY29udGV4dFpvbmU7XG4gIGNvbnN0IGluc3RydW1lbnRhdGlvbiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGl9fi5qcycpO1xuICBjb25zdCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyB9ID0gaW5zdHJ1bWVudGF0aW9uO1xuICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBrfX4uanMnKTtcbiAgY29uc3QgeyBSZXNvdXJjZSB9ID0gcmVzb3VyY2VzO1xuICBjb25zdCBkZXRlY3RSZXNvdXJjZXMgPSBhd2FpdCBpbXBvcnQoJy4vZGV0ZWN0LXJlc291cmNlcy0hfnswMG19fi5qcycpLnRoZW4obiA9PiBuLmQpO1xuICBjb25zdCB7IGRldGVjdFJlc291cmNlc1N5bmMgfSA9IGRldGVjdFJlc291cmNlcztcbiAgY29uc3QgZXhwb3J0ZXJUcmFjZU90bHAgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDBufX4uanMnKTtcbiAgY29uc3QgeyBPVExQVHJhY2VFeHBvcnRlciB9ID0gZXhwb3J0ZXJUcmFjZU90bHA7XG4gIGNvbnN0IHByb3BhZ2F0b3JCMyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC0hfnswMGp9fi5qcycpO1xuICBjb25zdCB7IEIzUHJvcGFnYXRvciwgQjNJbmplY3RFbmNvZGluZyB9ID0gcHJvcGFnYXRvckIzO1xuICBjb25zdCBzZGtUcmFjZUJhc2UgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtIX57MDAxfX4uanMnKTtcbiAgY29uc3QgeyBCYXRjaFNwYW5Qcm9jZXNzb3IgfSA9IHNka1RyYWNlQmFzZTtcbiAgbG9nX18kMShgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHt2ZXJzaW9ufSBhbmQgYmFzZVVybCAke2Jhc2VVcmx9YCk7XG4gIGNvbnN0IGNvbGxlY3RvclVybCA9IGdldENvbGxlY3RvclVybChiYXNlVXJsKTtcbiAgbG9nX18kMShgVXNpbmcgY29sbGVjdG9yIFVSTCAke2NvbGxlY3RvclVybH1gKTtcbiAgY29uc3QgZXhwb3J0ZXIgPSBuZXcgT1RMUFRyYWNlRXhwb3J0ZXIoeyB1cmw6IGNvbGxlY3RvclVybCB9KTtcbiAgY29uc3QgYmFzZUF0dHJzID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IHZlcnNpb24sXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBXZWJUcmFjZXJQcm92aWRlcih7XG4gICAgcmVzb3VyY2U6IG5ldyBSZXNvdXJjZShiYXNlQXR0cnMpLm1lcmdlKGRldGVjdFJlc291cmNlc1N5bmMoKSksXG4gICAgc3BhblByb2Nlc3NvcnM6IFtcbiAgICAgIG5ldyBTaW1wbGVTcGFuUHJvY2Vzc29yKG5ldyBDb25zb2xlU3BhbkV4cG9ydGVyKCkpLFxuICAgICAgbmV3IEJhdGNoU3BhblByb2Nlc3NvcihleHBvcnRlciwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSk7XG4gIHByb3ZpZGVyLnJlZ2lzdGVyKHtcbiAgICBjb250ZXh0TWFuYWdlcjogbmV3IFpvbmVDb250ZXh0TWFuYWdlcigpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBCM1Byb3BhZ2F0b3IoeyBpbmplY3RFbmNvZGluZzogQjNJbmplY3RFbmNvZGluZy5NVUxUSV9IRUFERVIgfSlcbiAgfSk7XG4gIHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyh7XG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgbmV3IEZldGNoSW5zdHJ1bWVudGF0aW9uKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KTtcbiAgZ2xvYmFsVHJhY2VyID0gdHJhY2UuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKTtcbiAgbG9nX18kMShgVHJhY2VyIGluaXRpYWxpemVkYCk7XG4gIHJldHVybiBnbG9iYWxUcmFjZXI7XG59O1xuY29uc3QgZ2V0Q29sbGVjdG9yVXJsID0gKGZyb21CYXNlVXJsKSA9PiB7XG4gIGNvbnN0IGJhc2VIb3N0bmFtZSA9IG5ldyBVUkwoZnJvbUJhc2VVcmwpLmhvc3RuYW1lO1xuICBpZiAoYmFzZUhvc3RuYW1lID09PSBcImNkZS5vcGVucGF5c3RhZ2luZy5jb21cIikge1xuICAgIHJldHVybiBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCI7XG4gIH0gZWxzZSBpZiAoYmFzZUhvc3RuYW1lID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiKSB7XG4gICAgcmV0dXJuIFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiO1xuICB9XG4gIHJldHVybiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5cbmNsYXNzIE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoZm9ybUlkLCBiYXNlVXJsLCBmb3JtQ2FsbGJhY2tzLCBpbnRlcm5hbENhbGxiYWNrcykge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZ2V0Q2xlYW5PcmlnaW4oZXZlbnQub3JpZ2luKSAhPT0gZ2V0Q2xlYW5PcmlnaW4odGhpcy5iYXNlVXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInBlbnBhbFwiXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInNvdXJjZVwiXSAmJiBldmVudC5kYXRhW1wic291cmNlXCJdID09PSBcInJlYWN0LWRldnRvb2xzLWJyaWRnZVwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBldmVudERhdGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKTtcbiAgICAgIGlmICghaXNWYWxpZCkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQsIHBheWxvYWQgfSA9IGV2ZW50RGF0YTtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IHBheWxvYWQudHlwZTtcbiAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQocGF5bG9hZC5oZWlnaHQgPyBgJHtwYXlsb2FkLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiBwYXlsb2FkLm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmluaXRGbG93cyA9IGNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMoKTtcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIik7XG4gICAgICBjb25zdCBzcGFuID0gdHJhY2VyLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IFNwYW5LaW5kLkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZXh0LndpdGgodHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBzcGFuKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNkZUJyaWRnZUlmcmFtZSA9IHRoaXMuY3JlYXRlRWxlbWVudChFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRSk7XG4gICAgICAgICAgY2RlQnJpZGdlSWZyYW1lLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiO1xuICAgICAgICAgIGNkZUJyaWRnZUlmcmFtZS5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIjtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGNkZUJyaWRnZUlmcmFtZS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZGVCcmlkZ2VJZnJhbWUubW91bnQoXCJib2R5XCIpO1xuICAgICAgICAgIGxvZ19fKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIik7XG4gICAgICAgICAgbG9nX18oXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBHRU5FUklDX0NPTk5fRVJSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nX18oXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIik7XG4gICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjZGVDb25uU3BhbiA9IHRyYWNlcj8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBjb250ZXh0LmFjdGl2ZSgpKTtcbiAgICAgICAgICBjb25zdCBhbnlDZGVDb25uID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjZGVDb25uU3Bhbj8uZW5kKCk7XG4gICAgICAgICAgc3Bhbj8uYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpO1xuICAgICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICAgIGF3YWl0IHNldFVzZXJEZXZpY2VUb2tlbihhbnlDZGVDb25uLCB0aGlzLmRldmljZVRva2VuKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCBvanNDb250ZXh0ID0gT3BlblBheUZvcm0uYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgICAgYW55Q2RlQ29ubixcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KG9qc0NvbnRleHQpO1xuICAgICAgICAgIHNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgICBhd2FpdCBzdGFydEFsbEluaXRGbG93cyh0aGlzLmluaXRGbG93cywgb2pzQ29udGV4dCwgdGhpcy5mb3JtQ2FsbGJhY2tzKTtcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjZGVMb2FkZWQudG90YWxBbW91bnRBdG9tcywgY2RlTG9hZGVkLmN1cnJlbmN5KTtcbiAgICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgICAgIHNwYW4/LnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuICAgICAgICAgIHRyYWNrKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICAgIHNwYW4/LnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVycl9fKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIHRyYWNrKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc3Bhbj8uZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRUeXBlRW51bS5DREVfQlJJREdFKSByZXR1cm47XG4gICAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZGVkID0gKHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KHBheWxvYWQpO1xuICAgICAgICB0cmFjayhcImNkZV9sb2FkZWRcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGVyck1zZykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZXJyTXNnKSwgZXJyTXNnKTtcbiAgICAgICAgdHJhY2soXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGVyck1zZ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICAgIGNvbnN0IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke2ZyYW1lLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nLnRvU3RyaW5nKCk7XG4gICAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRFbGVtZW50ID0gdGhpcy5yZWdpc3RlcklmcmFtZSh0eXBlLCBmcmFtZSk7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZEVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKHR5cGUsIGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlOiBmcmFtZSxcbiAgICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSk7XG4gICAgICAgICAgdHJhY2soXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiB0eXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0RFX0JSSURHRV06IHZvaWQgMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKTtcbiAgICAgICAgICBjb25uLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlbGVtZW50LnR5cGUsIGNvbm4pO1xuICAgICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudFR5cGVFbnVtLkNERV9CUklER0UpIHtcbiAgICAgICAgICAgIHRoaXMuYW55Q2RlQ29ubi5zZXQoY29ubik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApLmNhdGNoKChlcnIpID0+IGVycl9fKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBlcnIpKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9O1xuICAgIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlcnJfXyhcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVHJhY2tpbmdTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBwYXJhbXM/LnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cmFjayhcInN1Ym1pdF9jYXJkXCIsIHsgLi4ucGFyYW1zIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQyID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFjb250ZXh0Mikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHBhcmFtcz8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIHJldHVybiBjcmVhdGVUcmFja2luZ1NwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWNvbnRleHQyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogYXBwbGVQYXlQcm9jZXNzb3JzLCBpc0F2YWlsYWJsZTogaXNBcHBsZVBheUF2YWlsYWJsZSB9ID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycywgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlIH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKFxuICAgICAgICAgICAgdGhpcy5pbml0Rmxvd3NcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGNvbnN0IHBheXBhbEF2YWlsYWJsZSA9IHBheXBhbEZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlID8/IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IHBvY2t5dFBheXBhbEF2YWlsYWJsZSA9IGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMuc29tZShcbiAgICAgICAgICAgIChtZXRob2QpID0+IG1ldGhvZC5wcm9jZXNzb3JfbmFtZSA9PT0gXCJwb2NreXRcIiAmJiBtZXRob2QucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxvb3BGbG93UmVzdWx0ID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgY29uc3QgbG9vcENyeXB0b0F2YWlsYWJsZSA9IGxvb3BGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmFwcGxlUGF5LFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBhcHBsZVBheVByb2Nlc3NvcnMsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBpc0FwcGxlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLmdvb2dsZVBheSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5UHJvY2Vzc29ycyxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IGlzR29vZ2xlUGF5QXZhaWxhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogcGF5cGFsQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5wYXlwYWxdIDogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBwYXlwYWxBdmFpbGFibGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFN1Ym1pdE1ldGhvZHMucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBwb2NreXRQYXlwYWxBdmFpbGFibGUgPyBbUGF5bWVudFByb2Nlc3Nvci5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgICAgaXNBdmFpbGFibGU6IHBvY2t5dFBheXBhbEF2YWlsYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogU3VibWl0TWV0aG9kcy5sb29wQ3J5cHRvLFxuICAgICAgICAgICAgICBwcm9jZXNzb3JzOiBsb29wQ3J5cHRvQXZhaWxhYmxlID8gW1BheW1lbnRQcm9jZXNzb3IuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogbG9vcENyeXB0b0F2YWlsYWJsZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaW5pdEZsb3dOYW1lTWFwID0ge1xuICAgICAgICAgICAgcGF5cGFsOiBTdWJtaXRNZXRob2RzLnBheXBhbCxcbiAgICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICAgIGFkeWVuR29vZ2xlUGF5OiBTdWJtaXRNZXRob2RzLmFkeWVuR29vZ2xlUGF5LFxuICAgICAgICAgICAgYWR5ZW5BcHBsZVBheTogU3VibWl0TWV0aG9kcy5hZHllbkFwcGxlUGF5XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBtZXRob2RzX29sZCA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtrZXksIGZsb3ddKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbG93UmVzdWx0ID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5pdEZsb3dOYW1lTWFwW2tleV0gPz8ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmFtZTogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmbG93UmVzdWx0Py5pc0F2YWlsYWJsZSA/PyBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gWy4uLm1ldGhvZHNfb2xkLCAuLi5tZXRob2RzXTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChtZXRob2QsIHNldHRpbmdzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZXJyX18oXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYWNraW5nU3BhbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJhY2soXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kLCBzZXR0aW5ncyB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gT2pzRmxvd3MucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3MgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMubG9vcENyeXB0bzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3cgfSA9IGdldEFwcGxlUGF5UHJvY2Vzc29ycyh0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93IH0gPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4R29vZ2xlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFpcndhbGxleEdvb2dsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWlyd2FsbGV4R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWlyd2FsbGV4QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhaXJ3YWxsZXhBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhaXJ3YWxsZXhBcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRob3JpemVOZXRHb29nbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghYXV0aG9yaXplTmV0R29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0R29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplTmV0QXBwbGVQYXkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpemVOZXRBcHBsZVBheSkge1xuICAgICAgICAgICAgICAgICAgZXJyX18oXG4gICAgICAgICAgICAgICAgICAgIGBhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXV0aG9yaXplTmV0QXBwbGVQYXkuc3RhcnRGbG93KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkdvb2dsZVBheSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFkeWVuR29vZ2xlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkeWVuR29vZ2xlUGF5LnN0YXJ0RmxvdyhzZXR0aW5ncyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZHllbkFwcGxlUGF5ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhZHllbkFwcGxlUGF5KSB7XG4gICAgICAgICAgICAgICAgICBlcnJfXyhcbiAgICAgICAgICAgICAgICAgICAgYGFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWR5ZW5BcHBsZVBheS5zdGFydEZsb3coc2V0dGluZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dDIsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFBheW1lbnRQcm92aWRlclR5cGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFN1Ym1pdE1ldGhvZHMuYWlyd2FsbGV4RUZUOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0Mi5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBTdWJtaXRNZXRob2RzLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLmFpcndhbGxleEJBQ1MucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQyLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0Mi5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBQYXltZW50UHJvdmlkZXJUeXBlLkJBQ1MsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dDIuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgU3VibWl0TWV0aG9kcy5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBPanNGbG93cy5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0MixcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudFByb3ZpZGVyVHlwZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQyLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkO1xuICAgIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpO1xuICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICAgIGRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGw7XG4gICAgICBkZWxldGUgd2luZG93W1wib2pzXCJdO1xuICAgICAgdHJhY2soXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuOVwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuNS45XCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZGV2aWNlVG9rZW4gPSBnZXREZXZpY2VUb2tlbigpO1xuICAgIGF0dGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcmssIHZlcnNpb24gfSA9IGdldEZyYW1ld29ya0luZm8oKTtcbiAgICBnZXRDdXJyZW50RW52KHRoaXMuYmFzZVVybCkudGhlbigoZW52aXJvbm1lbnQpID0+IHtcbiAgICAgIGlmICghbWV0cmljc1B1Ymxpc2hlci5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICAgIGZyYW1ld29yayxcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgbWV0cmljc1B1Ymxpc2hlci5zZXQobWV0cmljc0NvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyYWNrKFwiZm9ybV9pbml0XCIpO1xuICAgIGNvbnNvbGUubG9nKFwiT0pTIFZFUlNJT05cIiwgdGhpcy5vanNWZXJzaW9uKTtcbiAgICBpZiAoY29uZmlnLmFsbG93VHJhY2luZyA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdFRyYWNlclNhZmUodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBPcGVuUGF5Rm9ybUV2ZW50SGFuZGxlcih0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IGNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBjb25maWcucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShjYWxsZXIgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGVidWdJbmZvID0ge1xuICAgICAgY2FsbGVyLFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiBjdXJyZW50SW5zdGFuY2U/LmZvcm1JZCB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH07XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke2NhbGxlcn1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7ZGVidWdJbmZvLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtkZWJ1Z0luZm8uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke2RlYnVnSW5mby5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgIGVycl9fKGVycm9yTWVzc2FnZSk7XG4gICAgICB0cmFjayhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSB8fCBjdXJyZW50SW5zdGFuY2UuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCkge1xuICAgICAgZXJyX18oZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRyYWNrKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENvbnRleHRBUEkgYXMgQywgRGlhZ0FQSSBhcyBELCBGaWVsZE5hbWUgYXMgRiwgSU5WQUxJRF9TUEFOX0NPTlRFWFQgYXMgSSwgT3BlblBheUZvcm0gYXMgTywgUHJveHlUcmFjZXIgYXMgUCwgUk9PVF9DT05URVhUIGFzIFIsIFNwYW5LaW5kIGFzIFMsIFRyYWNlRmxhZ3MgYXMgVCwgRGlhZ0xvZ0xldmVsIGFzIGEsIGNyZWF0ZUNvbnRleHRLZXkgYXMgYiwgY29udGV4dCBhcyBjLCBpc1ZhbGlkVHJhY2VJZCBhcyBkLCBpc1ZhbGlkU3BhbklkIGFzIGUsIFNwYW5TdGF0dXNDb2RlIGFzIGYsIGdldEdsb2JhbCBhcyBnLCBJTlZBTElEX1NQQU5JRCBhcyBoLCBpc1NwYW5Db250ZXh0VmFsaWQgYXMgaSwgSU5WQUxJRF9UUkFDRUlEIGFzIGosIFByb3h5VHJhY2VyUHJvdmlkZXIgYXMgaywgU3VibWl0TWV0aG9kcyBhcyBsLCByZWdpc3Rlckdsb2JhbCBhcyByLCB0cmFjZSBhcyB0LCB1bnJlZ2lzdGVyR2xvYmFsIGFzIHUgfTsiXSwKICAi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Q0Y7QUFqRUlpMUIsR0FBSyxXQUFXelUsR0FHaEJ5VSxHQUFLLG9CQUFvQixDQUFDelEsTUFBUztBQUNqQyxNQUFJeVEsR0FBWSxZQUFZO0FBQzFCLFVBQU0sSUFBSSxNQUFNLGdFQUFnRTtBQUVsRixTQUFPLE1BQVN6UTtBQUNsQixHQUdBeVEsR0FBSyxjQUFjLE1BQ1YsT0FBTyxPQUFVLE1BTzFCQSxHQUFLLHNCQUFzQixDQUFDNWhDLEdBQVFra0MsR0FBa0JyYyxHQUFrQnRKLE9BQy9EO0FBQUEsRUFDTCxxQkFBcUJ2ZSxFQUFPO0FBQUEsRUFDNUIsU0FBUyxJQUFJLElBQUlBLEVBQU8sV0FBVzhiLEVBQWMsRUFBRTtBQUFBLEVBQ25ELFNBQUF5QztBQUFBLEVBQ0EsbUJBQW1CMmxCLEVBQWlCO0FBQUEsRUFDcEMsd0JBQXdCQSxFQUFpQjtBQUFBLEVBQ3pDLGtCQUFBcmM7QUFBQSxFQUNBLGtCQUFrQjduQixFQUFPLG9CQUFvQixDQUFDO0FBQUEsRUFDOUMsbUNBQW1DQSxFQUFPO0FBQzVDO0FBbm1CTixJQUFNbWtDLEtBQU52QzsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiIsICJjaGFsayIsICJ2NCIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImZuIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiRWxlbWVudFR5cGUiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJFbGVtZW50RXZlbnQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJUb2tlbml6ZUNhcmRSZXNwb25zZSIsICJUaHJlZURTU3RhdHVzIiwgIlRocmVlRFNTdGF0dXMyIiwgIlBpbmczRFNTdGF0dXNSZXNwb25zZSIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJFRlRGb3JtRGF0YSIsICJCQUNTRm9ybURhdGEiLCAiU0VQQUZvcm1EYXRhIiwgIkFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIkJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAiUHJlcGFyZVBheW1lbnRGbG93UmVzcG9uc2UiLCAiU2V0VXNlckRldmljZVRva2VuUmVzcG9uc2UiLCAiVXNlckFjdGlvbkZFUGF5bG9hZCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJvYmoiLCAiZTIiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJzdW0iLCAiYXJyIiwgImEiLCAiYmVmb3JlVW5sb2FkSGFuZGxlciIsICJldmVudCIsICJwcmV2ZW50TmF2aWdhdGlvbiIsICJzdG9wUHJldmVudE5hdmlnYXRpb24iLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJpc1N1Ym1pdHRpbmciLCAicGFyYW1zIiwgIl9hIiwgIl9iIiwgInRyYWNrIiwgImZsb3dSZXN1bHQiLCAiZm9yY2VQcm9jZXNzTWV0cmljc1F1ZXVlIiwgImVycm9yTWVzc2FnZSIsICJlcnJvckNvZGUiLCAic2FmZWx5R2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlIiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQkNCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkNCIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImkiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSQ0IiwgIl9fcmVhZCQ0IiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgIk9qc0Vudmlyb25tZW50IiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJlbnZDYWNoZSIsICJnZXRDdXJyZW50RW52IiwgImJhc2VVcmwiLCAicmVzcG9uc2UiLCAicmVzIiwgImV4Y2x1ZGVQcm9wcyIsICJwcm9wcyIsICJrZXkiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJHUiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJ0cmFjayIsICJmb3JjZVByb2Nlc3NNZXRyaWNzUXVldWUiLCAib25VbmhhbmRsZWRSZWplY3Rpb25FcnJvciIsICJlcnJvck1lc3NhZ2UiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIm9uVW5jYXVnaHRFcnJvciIsICJwYWdlTGlmZWN5Y2xlIiwgImxvYWRQYWdlTGlmZWN5Y2xlIiwgInBhZ2VMaWZlY3ljbGVTdGF0ZUNoYW5nZUhhbmRsZXIiLCAiYXR0YWNoQW5hbHl0aWNzRXZlbnRMaXN0ZW5lcnMiLCAibGlmZWN5Y2xlIiwgImRldGFjaEFuYWx5dGljc0V2ZW50TGlzdGVuZXJzIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpc1N0cmlwZUpzUHJlc2VudCIsICJzbGVlcCIsICJjcmVhdGVTdHJpcGVFbGVtZW50cyIsICJzdHJpcGVQdWJLZXkiLCAiZWxlbWVudHNPcHRpb25zIiwgInN0cmlwZSIsICJjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbEFtb3VudEF0b20iLCAiY3VycmVuY3kiLCAiaXNBbW91bnRQZW5kaW5nIiwgImlzTGlua09ubHkiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgInJlc3VsdFN0YXR1cyIsICJfZ2xvYmFsVGhpcyIsICJWRVJTSU9OIiwgInJlIiwgIl9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrIiwgIm93blZlcnNpb24iLCAiYWNjZXB0ZWRWZXJzaW9ucyIsICJyZWplY3RlZFZlcnNpb25zIiwgIm15VmVyc2lvbk1hdGNoIiwgIm93blZlcnNpb25QYXJzZWQiLCAiZ2xvYmFsVmVyc2lvbiIsICJfcmVqZWN0IiwgInYiLCAiX2FjY2VwdCIsICJnbG9iYWxWZXJzaW9uTWF0Y2giLCAiZ2xvYmFsVmVyc2lvblBhcnNlZCIsICJpc0NvbXBhdGlibGUiLCAibWFqb3IiLCAiR0xPQkFMX09QRU5URUxFTUVUUllfQVBJX0tFWSIsICJfZ2xvYmFsIiwgInJlZ2lzdGVyR2xvYmFsIiwgInR5cGUiLCAiZGlhZyIsICJhbGxvd092ZXJyaWRlIiwgImFwaSIsICJnZXRHbG9iYWwiLCAidW5yZWdpc3Rlckdsb2JhbCIsICJfX3JlYWQkMyIsICJvIiwgIm4iLCAibSIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkkMyIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJEaWFnQ29tcG9uZW50TG9nZ2VyIiwgImxvZ1Byb3h5IiwgImZ1bmNOYW1lIiwgIm5hbWVzcGFjZSIsICJsb2dnZXIiLCAiRGlhZ0xvZ0xldmVsIiwgImNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlciIsICJtYXhMZXZlbCIsICJfZmlsdGVyRnVuYyIsICJ0aGVMZXZlbCIsICJ0aGVGdW5jIiwgIl9fcmVhZCQyIiwgIl9fc3ByZWFkQXJyYXkkMiIsICJBUElfTkFNRSQyIiwgIkRpYWdBUEkiLCAiX2xvZ1Byb3h5IiwgInNlbGYiLCAic2V0TG9nZ2VyIiwgIm9wdGlvbnNPckxvZ0xldmVsIiwgIm9sZExvZ2dlciIsICJuZXdMb2dnZXIiLCAic3RhY2siLCAib3B0aW9ucyIsICJjcmVhdGVDb250ZXh0S2V5IiwgImRlc2NyaXB0aW9uIiwgIkJhc2VDb250ZXh0IiwgInBhcmVudENvbnRleHQiLCAiUk9PVF9DT05URVhUIiwgIl9fcmVhZCQxIiwgIl9fc3ByZWFkQXJyYXkkMSIsICJOb29wQ29udGV4dE1hbmFnZXIiLCAiX2NvbnRleHQiLCAidGFyZ2V0IiwgIl9fcmVhZCIsICJfX3NwcmVhZEFycmF5IiwgIkFQSV9OQU1FJDEiLCAiTk9PUF9DT05URVhUX01BTkFHRVIiLCAiQ29udGV4dEFQSSIsICJjb250ZXh0TWFuYWdlciIsICJUcmFjZUZsYWdzIiwgIklOVkFMSURfU1BBTklEIiwgIklOVkFMSURfVFJBQ0VJRCIsICJJTlZBTElEX1NQQU5fQ09OVEVYVCIsICJOb25SZWNvcmRpbmdTcGFuIiwgIl9zcGFuQ29udGV4dCIsICJfa2V5IiwgIl9hdHRyaWJ1dGVzIiwgIl9uYW1lIiwgIl9saW5rIiwgIl9saW5rcyIsICJfc3RhdHVzIiwgIl9lbmRUaW1lIiwgIl9leGNlcHRpb24iLCAiX3RpbWUiLCAiU1BBTl9LRVkiLCAiZ2V0U3BhbiIsICJnZXRBY3RpdmVTcGFuIiwgInNldFNwYW4iLCAic3BhbiIsICJkZWxldGVTcGFuIiwgInNldFNwYW5Db250ZXh0IiwgInNwYW5Db250ZXh0IiwgImdldFNwYW5Db250ZXh0IiwgIlZBTElEX1RSQUNFSURfUkVHRVgiLCAiVkFMSURfU1BBTklEX1JFR0VYIiwgImlzVmFsaWRUcmFjZUlkIiwgInRyYWNlSWQiLCAiaXNWYWxpZFNwYW5JZCIsICJzcGFuSWQiLCAiaXNTcGFuQ29udGV4dFZhbGlkIiwgIndyYXBTcGFuQ29udGV4dCIsICJjb250ZXh0QXBpIiwgIk5vb3BUcmFjZXIiLCAibmFtZSIsICJyb290IiwgInBhcmVudEZyb21Db250ZXh0IiwgImlzU3BhbkNvbnRleHQiLCAiYXJnMiIsICJhcmczIiwgImFyZzQiLCAib3B0cyIsICJjdHgiLCAiY29udGV4dFdpdGhTcGFuU2V0IiwgIk5PT1BfVFJBQ0VSIiwgIlByb3h5VHJhY2VyIiwgIl9wcm92aWRlciIsICJ2ZXJzaW9uIiwgIl9vcHRpb25zIiwgIl9mbiIsICJ0cmFjZXIiLCAiTm9vcFRyYWNlclByb3ZpZGVyIiwgIl92ZXJzaW9uIiwgIk5PT1BfVFJBQ0VSX1BST1ZJREVSIiwgIlByb3h5VHJhY2VyUHJvdmlkZXIiLCAiU3BhbktpbmQiLCAiU3BhblN0YXR1c0NvZGUiLCAiQVBJX05BTUUiLCAiVHJhY2VBUEkiLCAicHJvdmlkZXIiLCAic3VjY2VzcyIsICJ0cmFjZSIsICJjcmVhdGVDREVTcGFuIiwgImNkZUNvbm4iLCAiZGF0YSIsICJvcGVyYXRpb24iLCAicmVzdWx0IiwgImNyZWF0ZVRyYWNraW5nU3BhbiIsICJDZGVFcnJvciIsICJDdXN0b21FcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAicmVzcG9uc2VTY2hlbWEiLCAidHJhY2tpbmdLZXkiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNvbm5lY3Rpb24iLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiZ2V0UHJlZmlsbCIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAic3RhcnRQYXltZW50RmxvdyIsICJwYXlsb2FkIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJzdGFydFBheW1lbnRGbG93Rm9yQ0MiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3RhcnRQYXltZW50Rmxvd0ZvclBSIiwgImNvbmZpcm1QYXltZW50RmxvdyIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5hbGl6ZVNldHVwUGF5bWVudE1ldGhvZCIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJnZXRDaGVja291dFZhbHVlIiwgInNlY3VyZVRva2VuIiwgInByb21vQ29kZSIsICJjaGVja291dFByZXZpZXciLCAiY3VycmVuY2llcyIsICJpbnYiLCAiYW1vdW50QXRvbSIsICJzdW0iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvclN0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAicmVzcG9uc2VNb2RlbCIsICJjb25uZWN0aW9uT2JqIiwgImNvbm5lY3RUb0NoaWxkIiwgInByZXBhcmVQYXltZW50RmxvdyIsICJQcmVwYXJlUGF5bWVudEZsb3dSZXNwb25zZSIsICJzYWZlbHlHZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGUiLCAiQ2hlY2tvdXRTdGFuZGFyZEVycm9yUmVzcG9uc2UiLCAic2V0VXNlckRldmljZVRva2VuIiwgImRldmljZVRva2VuIiwgIlNldFVzZXJEZXZpY2VUb2tlblJlc3BvbnNlIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJpc1Jlc3VsdFZhbGlkIiwgImlzVmFsaWQiLCAiRlJBTUVfQkFTRV9VUkwiLCAiRU5DT0RJTkciLCAiRU5DT0RJTkdfTEVOIiwgIlJBTkRPTV9MRU4iLCAiVElNRV9MRU4iLCAiVElNRV9NQVgiLCAiVUxJREVycm9yQ29kZSIsICJVTElERXJyb3IiLCAiZXJyb3JDb2RlIiwgIm1lc3NhZ2UiLCAicmFuZG9tQ2hhciIsICJwcm5nIiwgInJhbmQiLCAiZGV0ZWN0UFJORyIsICJyb290TG9va3VwIiwgImRldGVjdFJvb3QiLCAiZ2xvYmFsQ3J5cHRvIiwgImJ1ZmZlciIsICJpbldlYldvcmtlciIsICJlbmNvZGVSYW5kb20iLCAibGVuIiwgInN0ciIsICJlbmNvZGVUaW1lIiwgIm1vZCIsICJjdXJyZW50TGVuIiwgInVsaWQiLCAic2VlZFRpbWUiLCAiY3VycmVudFBSTkciLCAic2VlZCIsICJDT09LSUVfTkFNRSIsICJnZXREZXZpY2VUb2tlbiIsICJleGlzdGluZ0Nvb2tpZSIsICJjb29raWUiLCAidG9rZW4iLCAic2V0RGV2aWNlVG9rZW4iLCAib25lWWVhckZyb21Ob3ciLCAiZXh0cmFjdElzc3Vlc1BlckZpZWxkIiwgImlzc3Vlc1BlckZpZWxkIiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiRWxlbWVudEV2ZW50IiwgImdlbmVyYXRlQW5vbnltb3VzVmFsdWVzIiwgImdlbmVyYXRlQmlsbGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImZpZWxkcyIsICJGaWVsZE5hbWUiLCAiZ2VuZXJhdGVTaGlwcGluZ0FkZHJlc3NGcm9tRmllbGRzIiwgImNoZWNrb3V0X3NldHRpbmdzIiwgImdldEZ1bGxOYW1lIiwgImZpcnN0TmFtZSIsICJsYXN0TmFtZSIsICJzdHlsZXMiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImJhbmtTZWxlY3RvclN0eWxlcyIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRpdGxlIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAiY3JlYXRlQW5kT3BlbkJhbmtTZWxlY3RvciIsICJiYW5rcyIsICJiYW5rTGlzdEh0bWwiLCAiYmFuayIsICJsb2dvSHRtbCIsICJiYW5rSXRlbXMiLCAiY2xlYW51cCIsICJjcmVhdGVBbmRPcGVuTWljcm9EZXBvc2l0Rm9ybSIsICJwYXltZW50TWV0aG9kVHlwZSIsICJlbGVtZW50cyIsICJoYW5kbGVDYW5jZWwiLCAib25TdWNjZXNzIiwgInBvbGxpbmdJbnRlcnZhbCIsICJzdGFydFBvbGxpbmciLCAiTWljcm9EZXBvc2l0U3RhdHVzUmVzcG9uc2UiLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgIm9yaWdpbmFsSGFuZGxlQ2FuY2VsIiwgIndyYXBwZWRIYW5kbGVDYW5jZWwiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAiaGFuZGxlRXZlbnRzIiwgIlRocmVlRFNTdGF0dXMiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAicGFyYW1zIiwgImZyYW1lV2lkdGgiLCAiZnJhbWVIZWlnaHQiLCAiZnJhbWVUaXRsZSIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAiZXJyX18iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAiZGV0ZWN0TGFuZ3VhZ2UiLCAibGFuZ3VhZ2VzIiwgImxhbmd1YWdlIiwgImxvZ19fJHQiLCAiZXJyX18kcyIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgImxvZ19fJHMiLCAiZXJyX18kciIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJ2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0IiwgInBhcnNlZCIsICJBbGxGaWVsZE5hbWVzIiwgImxvZ19fJHIiLCAiZXJyX18kcSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgInBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgIlBheW1lbnRQcm9jZXNzb3IiLCAibG9hZFNjcmlwdCIsICJzY3JpcHRJZCIsICJzcmMiLCAiY2hlY2tMb2FkZWRGbiIsICJldmVudExpc3RlbmVyQ29udHJvbGxlciIsICJzY3JpcHQiLCAiZXhpc3RpbmdTY3JpcHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiaW5pdGlhbFByZXZpZXciLCAib3ZlcnJpZGVQYXltZW50UmVxdWVzdCIsICJ0b3RhbFByaWNlIiwgImN1cnJlbmN5Q29kZSIsICJiYXNlUmVxdWVzdCIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInBheW1lbnRzQ2xpZW50IiwgImdldEdvb2dsZVBheUVudmlyb25tZW50IiwgImdldEdvb2dsZVBheW1lbnRzQ2xpZW50IiwgInBheW1lbnREYXRhUmVxdWVzdCIsICJlbnZpcm9ubWVudCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJjb21tb25BY3Rpb24iLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5IiwgImZvcm1JbnB1dHMiLCAicGF5bWVudERhdGEiLCAiaW5wdXRzIiwgImJpbGxpbmdBZGRyZXNzIiwgInNoaXBwaW5nQWRkcmVzcyIsICJwYXllckZpcnN0TmFtZSIsICJsYXN0TmFtZVBhcnRzIiwgInBheWVyTGFzdE5hbWUiLCAibG9nX18kcSIsICJlcnJfXyRwIiwgInJ1bkFpcndhbGxleEJBQ1NGbG93IiwgImFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmb3JtQ2FsbGJhY2tzIiwgImN1c3RvbVBhcmFtcyIsICJub25DZGVGb3JtRmllbGRzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAidmVyaWZpY2F0aW9uTWV0aG9kIiwgIm1pY3JvRGVwb3NpdERhdGEiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgImNvbnNlbnRJZCIsICJhdmFpbGFibGVCYW5rcyIsICJzZWxlY3RlZEJhbmsiLCAiZGlyZWN0RGViaXREYXRhIiwgInJlZGlyZWN0VXJsIiwgIm5ld0NvbmZpcm1SZXN1bHQiLCAibG9nX18kcCIsICJlcnJfXyRvIiwgInJ1bkFpcndhbGxleEVGVEZsb3ciLCAibG9nX18kbyIsICJlcnJfXyRuIiwgInJ1bkFpcndhbGxleFNFUEFGbG93IiwgImxvZ19fJG4iLCAiZXJyX18kbSIsICJBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQzIiwgImVycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzdWx0IiwgImZyaWVuZGx5RXJyIiwgImRldkVyciIsICJjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMiLCAicGFyc2VJbnRlbnRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAiaW50ZW50SWQiLCAicnVuQWlyd2FsbGV4M2RzRmxvdyIsICJoZWFkZXJzIiwgImluaXRpYWxJbnRlbnRJZCIsICJBcHBsZVBheUNwbSQyIiwgIkdvb2dsZVBheUNwbSQyIiwgImxvYWRBcHBsZVBheVNjcmlwdCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5IiwgImFwcGxlUGF5UGF5bWVudCIsICJwbUJpbGxpbmdDb250YWN0IiwgImJpbGxpbmdDb250YWN0IiwgInNoaXBwaW5nQ29udGFjdCIsICJjcmVhdGVSZWN1cnJpbmdQYXltZW50UmVxdWVzdCIsICJ0b3RhbCIsICJsaW5lSXRlbSIsICJjcmVhdGVBcHBsZVBheVRvdGFsIiwgImRlZmF1bHRMYWJlbCIsICJhbW91bnQiLCAiZ2V0QXBwbGVQYXlQYXltZW50UmVxdWVzdCIsICJBZHllbkVudmlyb25tZW50IiwgIkFkeWVuTG9jYWxlIiwgImxvZ19fJG0iLCAiZXJyX18kbCIsICJBZHllbjNkc1Jlc3BvbnNlSGVhZGVycyIsICJwYXJzZVJlc3BvbnNlSGVhZGVycyQyIiwgImRlY29kZUFkeWVuQWN0aW9uIiwgImlzQWR5ZW5BdmFpbGFibGUiLCAiZ2V0QWR5ZW5DaGVja291dCIsICJoYW5kbGVBZHllbjNkcyIsICJsb2NhbGUiLCAiY291bnRyeUNvZGUiLCAiY29tcG9uZW50IiwgIm9uQ2FuY2VsIiwgIm9uUGF5bWVudEZhaWxlZCIsICJvbkFkZGl0aW9uYWxEZXRhaWxzIiwgIl8iLCAiX18iLCAiYWR5ZW5DaGVja291dCIsICJjaGVja291dCIsICJkZXRlcm1pbmVMb2NhbGUiLCAicHJlZmlsbExvY2FsZSIsICJicm93c2VyTG9jYWxlIiwgImNoZWNrSWZSZXF1aXJlc0FkeWVuM2RzIiwgInJ1bkFkeWVuM2RzRmxvdyIsICJBcHBsZVBheUNwbSQxIiwgIkdvb2dsZVBheUNwbSQxIiwgImxvZ19fJGwiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQyIiwgInBheW1lbnRTZXNzaW9uUmVzcG9uc2UiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQkMiIsICJnZXRGcmF1ZE1ldGFkYXRhIiwgImxvZ19fJGsiLCAiZXJyX18kayIsICJpbml0QWR5ZW5BcHBsZVBheUZsb3ciLCAiYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCIsICJ1bmF2YWlsYWJsZVJlc3VsdCIsICJhcHBsZVBheUNwbSIsICJvbkFwcGxlUGF5U3RhcnRGbG93IiwgIk9qc0Zsb3dzIiwgInJ1bkFkeWVuQXBwbGVQYXlGbG93IiwgInNlc3Npb24iLCAic2Vzc2lvbkNvbnRleHQiLCAidXBkYXRlIiwgImxvZ19fJGoiLCAiZXJyX18kaiIsICJpbml0QWR5ZW5Hb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImNsaWVudCIsICJpc1JlYWR5VG9QYXkiLCAib25Hb29nbGVQYXlTdGFydEZsb3ciLCAicnVuQWR5ZW5Hb29nbGVQYXlGbG93IiwgIl9lIiwgIl9mIiwgIl9nIiwgIl9oIiwgIm1lcmdlZElucHV0cyIsICJvdXJQbUlkIiwgImxvZ19fJGkiLCAiZXJyX18kaSIsICJydW5BaXJ3YWxsZXhBQ0hGbG93IiwgImxvZ19fJGgiLCAiaGFuZGxlVmFsaWRhdGVNZXJjaGFudCQxIiwgImhhbmRsZTNEUyIsICJoYW5kbGVQYXltZW50QXV0aG9yaXplZCQxIiwgImxvZ19fJGciLCAiZXJyX18kaCIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJsb2dfXyRmIiwgImVycl9fJGciLCAiaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3ciLCAicnVuQWlyd2FsbGV4R29vZ2xlUGF5RmxvdyIsICJlbmNyeXB0ZWRQYXltZW50VG9rZW4iLCAiQXBwbGVQYXlDcG0iLCAiR29vZ2xlUGF5Q3BtIiwgImhhbmRsZVZhbGlkYXRlTWVyY2hhbnQiLCAiaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQiLCAibW9iaWxlV2FsbGV0UGF5bWVudERhdGEiLCAibG9nX18kZSIsICJlcnJfXyRmIiwgImluaXRBdXRobmV0QXBwbGVQYXlGbG93IiwgInJ1bkF1dGhuZXRBcHBsZVBheUZsb3ciLCAibG9nX18kZCIsICJlcnJfXyRlIiwgImluaXRBdXRobmV0R29vZ2xlUGF5RmxvdyIsICJydW5BdXRobmV0R29vZ2xlUGF5RmxvdyIsICJsb2dfXyRjIiwgImVycl9fJGQiLCAiUG9ja3l0M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMkMSIsICJwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiIsICJ2YXVsdElkIiwgInBhcnNlQXJnRnJvbUhyZWYiLCAiYXJnTmFtZSIsICJjaGVja0lmUmVxdWlyZXNQb2NreXQzZHMiLCAicnVuUG9ja3l0M2RzRmxvdyIsICJsb2dfXyRiIiwgImVycl9fJGMiLCAiYXR0YWNoRGV2aWNlRGF0YUNvbGxlY3RvciIsICJwb3N0VXJsIiwgImFjY2Vzc1Rva2VuIiwgImZvcm0iLCAicnVuRGV2aWNlRGF0YUNvbGxlY3Rpb24iLCAiZXhwZWN0ZWRPcmlnaW4iLCAiZGV0YWNoIiwgImhhbmRsZUNvbGxlY3Rpb25FdmVudCIsICJydW5QYXllckF1dGgiLCAic3RlcFVwVXJsIiwgIm1lcmNoYW50RGF0YSIsICJ0b2tlbklucHV0IiwgIm1kSW5wdXQiLCAibG9nX18kYSIsICJlcnJfXyRiIiwgIkN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRlJJRU5ETFlfRVJSIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzIiwgInVzZXJBY3Rpb24iLCAiY2hlY2tJZlJlcXVpcmVzQ3liZXJzb3VyY2UzZHMiLCAiaGFuZGxlQ3liZXJzb3VyY2UzZHMiLCAiY2xlYW51cFBvbGxpbmciLCAicnVuQ3liZXJzb3VyY2UzZHNGbG93IiwgInN0ZXBfdXBfdXJsIiwgImFjY2Vzc190b2tlbiIsICJkZF91cmwiLCAiZGRfdG9rZW4iLCAibWVyY2hhbnRfZGF0YSIsICJjb2xsZWN0aW9uUmVzdWx0IiwgInN0cmlwZUxvZ19fIiwgIlN0cmlwZTNEU01ldGFkYXRhUGF5bG9hZCIsICJzdHJpcGVDQzNEU0Zsb3ciLCAicGFyc2VVc2VyRkVQYXlsb2FkIiwgIk1BWF9DT05GSVJNX0xPT1BfSVRFUkFUSU9OUyIsICJsb2dfXyQ5IiwgImVycl9fJGEiLCAidW5zYWZlbHlSdW5VbmlmaWVkQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAic3RhcnRQZlJlc3VsdCIsICJyZXR1cm5TdWNjZXNzUmVzdWx0IiwgInJ1bkNvbmZpcm1Mb29wIiwgImNoZWNrb3V0QXR0ZW1wdElkIiwgInBmUmVzdWx0IiwgInZhbGlkYXRlUGZSZXN1bHRVc2VyQWN0aW9uIiwgInVzZXJBY3Rpb25SZXN1bHQiLCAicnVuUmVxdWlyZWRVc2VyQWN0aW9uIiwgImNoZWNrSWZMZWdhY3kzRFNQYXRoIiwgImNvbW1vbkNDM0RTRmxvdyIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJVc2VyQWN0aW9uRkVQYXlsb2FkIiwgInByZWZpbGxNb2RlIiwgInBheW1lbnRNZXRob2RJZCIsICJsb2dfXyQ4IiwgImVycl9fJDkiLCAicnVuQ29tbW9uQ2NGbG93IiwgInVuaWZpZWRDQ1JvbGxvdXRSYXRpbyIsICJyb2xsIiwgInVzZVVuaWZpZWRDQ0Zsb3ciLCAidWNjUm9sbFRyYWNraW5nTWV0YWRhdGEiLCAiZXJySGVhZGVycyIsICJyZXF1aXJlc1BvY2t5dDNkcyIsICJwb2NreXRNZXRhZGF0YUZvckNoZWNrb3V0IiwgImFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAiYWR5ZW5NZXRhZGF0YUZvckNoZWNrb3V0IiwgImN5YmVyc291cmNlQWN0aW9uIiwgImN5YmVyc291cmNlQWN0aW9uUGF5bG9hZCIsICJjeWJlcnNvdXJjZU1ldGFkYXRhRm9yQ2hlY2tvdXQiLCAic2hvdWxkVXNlU3RyaXBlRmxvdyIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjY1BtSWQiLCAic3RyaXBlQWN0aW9uIiwgImNvbW1vbjNEU0FjdGlvblR5cGVzIiwgInJlcXVpcmVkX3VzZXJfYWN0aW9ucyIsICJDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiTG9vcENyeXB0b0NwbSIsICJsb2dfXyQ3IiwgImVycl9fJDgiLCAiaW5pdExvb3BGbG93IiwgInByZUZsb3dOZXh0QWN0aW9uTWV0YWRhdGEiLCAicGF5bWVudFNldHVwSW5mbyIsICJzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50IiwgIm1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQiLCAiYWxsb3dDdXN0b21lclRvQ2hvb3NlQXV0aCIsICJjaGFyZ2VBbW91bnRVc2RBdG9tIiwgInBheW1lbnRVc2RBbW91bnQiLCAiY3VzdG9tZXJSZWZJZCIsICJ3aWRnZXRQcm9wcyIsICJpbml0TG9vcENvbm5lY3RQcm9wcyIsICJydW5Mb29wRmxvdyIsICJpc0NoZWNrb3V0TW9kZSIsICJjdXN0b21lckZpZWxkcyIsICJsb2dfXyQ2IiwgImVycl9fJDciLCAiUGF5cGFsQ3BtIiwgImluaXRQYXlwYWxGbG93IiwgInBheXBhbENwbSIsICJydW5QYXlwYWxGbG93IiwgImlzQW5vbnltb3VzIiwgInVzZVJlZGlyZWN0RmxvdyIsICJuZXdDdXN0b21lckZpZWxkcyIsICJmcm9udGVuZFRva2VuRm9yUmVkaXJlY3RGbG93IiwgImlzUGF5Rmlyc3RGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dSZXF1ZXN0IiwgInByZUFjdGlvblVybCIsICJlbmNvZGVkUmVxdWVzdCIsICJzZWFyY2hQYXJhbXMiLCAicGF5cGFsRmxvd1Jlc3VsdCIsICJhcHByb3ZhbFNlc3Npb25JZCIsICJsb2dfXyQ1IiwgImVycl9fJDYiLCAiUG9ja3l0UGF5cGFsQ3BtIiwgImluaXRQb2NreXRQYXlwYWxGbG93IiwgInBvY2t5dFBheXBhbENwbSIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgInNldHRpbmdzIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kNCIsICJlcnJfXyQ1IiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSIsICJvdXJFeGlzdGluZ1BtSWQiLCAicGF5ZXJMYXN0TmFtZVBhcnRzIiwgImdldEVsZW1lbnQiLCAiZWxlbWVudCIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3cyIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAicnVuU3RyaXBlUHJGbG93JDEiLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJhcHBsZVBheVBheW1lbnRSZXF1ZXN0IiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImlzUGVuZGluZyIsICJzdHJpcGVBcHBsZVBheSIsICJsYWJlbCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAibWF0Y2hlc1Byb2Nlc3NvciIsICJtYXRjaGVzUHJvdmlkZXIiLCAibG9nX18kMiIsICJlcnJfXyQzIiwgImNyZWF0ZUluaXRGbG93UHVibGlzaGVyIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgInB1Ymxpc2hlciIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJmbG93IiwgImNyZWF0ZUluaXRGbG93c1B1Ymxpc2hlcnMiLCAiZXJyX18kMiIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiZGV0ZWN0RnJhbWV3b3JrIiwgIndpbmRvdyIsICJuZXh0V2luZG93IiwgIm51eHRXaW5kb3ciLCAibm9kZSIsICJ2dWVXaW5kb3ciLCAiZ2V0RnJhbWV3b3JrVmVyc2lvbiIsICJmcmFtZXdvcmsiLCAiZG9jdW1lbnQyIiwgIm5nVmVyc2lvbkVsIiwgImdldEZyYW1ld29ya0luZm8iLCAic2NyZWVuX2hlaWdodCIsICJzY3JlZW5fd2lkdGgiLCAiY29sb3JfZGVwdGgiLCAiamF2YV9lbmFibGVkIiwgInVzZXJfYWdlbnQiLCAiYWNjZXB0X2hlYWRlciIsICJ0aW1lX3pvbmVfb2Zmc2V0IiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUGF5bWVudFByb3ZpZGVyVHlwZSIsICJQYXltZW50UHJvdmlkZXJUeXBlMiIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiaW5pdFRyYWNlclNhZmUiLCAiaW5pdFRyYWNlclVuc2FmZSIsICJnbG9iYWxUcmFjZXIiLCAic2RrVHJhY2VXZWIiLCAiQ29uc29sZVNwYW5FeHBvcnRlciIsICJTaW1wbGVTcGFuUHJvY2Vzc29yIiwgIldlYlRyYWNlclByb3ZpZGVyIiwgImluc3RydW1lbnRhdGlvbkZldGNoIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgImNvbnRleHRab25lIiwgIlpvbmVDb250ZXh0TWFuYWdlciIsICJpbnN0cnVtZW50YXRpb24iLCAicmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zIiwgInJlc291cmNlcyIsICJSZXNvdXJjZSIsICJkZXRlY3RSZXNvdXJjZXMiLCAiZGV0ZWN0UmVzb3VyY2VzU3luYyIsICJleHBvcnRlclRyYWNlT3RscCIsICJPVExQVHJhY2VFeHBvcnRlciIsICJwcm9wYWdhdG9yQjMiLCAiQjNQcm9wYWdhdG9yIiwgIkIzSW5qZWN0RW5jb2RpbmciLCAic2RrVHJhY2VCYXNlIiwgIkJhdGNoU3BhblByb2Nlc3NvciIsICJjb2xsZWN0b3JVcmwiLCAiZ2V0Q29sbGVjdG9yVXJsIiwgImV4cG9ydGVyIiwgImJhc2VBdHRycyIsICJmcm9tQmFzZVVybCIsICJiYXNlSG9zdG5hbWUiLCAiT3BlblBheUZvcm1FdmVudEhhbmRsZXIiLCAiZm9ybUlkIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImdldENsZWFuT3JpZ2luIiwgImVsZW1lbnRJZCIsICJldmVudFR5cGUiLCAiY3JlYXRlQ29ubmVjdGlvbiIsICJpc1ZhbGlkT2JqZWN0IiwgIkNvbm5lY3Rpb25NYW5hZ2VyIiwgInNldHVwUGF5bWVudFJlcXVlc3RIYW5kbGVycyIsICJpbml0UHJGbG93cyIsICJjYWxsYmFja3MiLCAic3RyaXBlUFIiLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgImZpbmFsU3RhdHVzIiwgInVzZXJQYXJhbXMiLCAicnVuU3RyaXBlUHJGbG93IiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUJyaWRnZUlmcmFtZSIsICJFbGVtZW50VHlwZUVudW0iLCAiY2RlTG9hZGVkIiwgImNkZUNvbm5TcGFuIiwgImFueUNkZUNvbm4iLCAib2pzQ29udGV4dCIsICJlbGVtZW50VmFsdWUiLCAiRWxlbWVudFR5cGUiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAic2VsZWN0b3IiLCAiY29ubiIsICJjb250ZXh0MiIsICJhcHBsZVBheVByb2Nlc3NvcnMiLCAiaXNBcHBsZVBheUF2YWlsYWJsZSIsICJnb29nbGVQYXlQcm9jZXNzb3JzIiwgImlzR29vZ2xlUGF5QXZhaWxhYmxlIiwgInBheXBhbEF2YWlsYWJsZSIsICJwb2NreXRQYXlwYWxBdmFpbGFibGUiLCAibWV0aG9kIiwgImxvb3BGbG93UmVzdWx0IiwgImxvb3BDcnlwdG9BdmFpbGFibGUiLCAibWV0aG9kcyIsICJpbml0Rmxvd05hbWVNYXAiLCAiZmxvd1Jlc3VsdCIsICJzdGFydEZsb3ciLCAiYWlyd2FsbGV4R29vZ2xlUGF5IiwgImFpcndhbGxleEFwcGxlUGF5IiwgImF1dGhvcml6ZU5ldEdvb2dsZVBheSIsICJhdXRob3JpemVOZXRBcHBsZVBheSIsICJhZHllbkdvb2dsZVBheSIsICJhZHllbkFwcGxlUGF5IiwgIm5ld0NhbGxiYWNrcyIsICJtZXRyaWNzQ29udGV4dCIsICJjYWxsZXIiLCAiY3VycmVudEluc3RhbmNlIiwgImRlYnVnSW5mbyIsICJjZGVMb2FkZWRQYXlsb2FkIiwgIk9wZW5QYXlGb3JtIl0KfQo=
|