@getopenpay/openpay-js 0.1.8-alpha.8cf0044 → 0.1.8

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/index.es.js CHANGED
@@ -1634,7 +1634,7 @@ const I = class I {
1634
1634
  customParams: { provider: r, overridePaymentRequest: s == null ? void 0 : s.overridePaymentRequest },
1635
1635
  initResult: o
1636
1636
  });
1637
- }, I.assignAsSingleton(this), this.config = { ...e, baseUrl: e.baseUrl ?? "https://cde.getopenpay.com" }, this.elements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referer = window.location.origin, this.formTarget = e.formTarget ?? "body", this.formProperties = { height: "1px" }, this.cdeLoadedPayload = null, this.ojsFlowsInitialization = null, this.checkoutFired = !1, this.connectionManager = new Wn(), this.eventHandler = new Zn(this), this.ojsVersion = "0.1.8", this.ojsReleaseVersion = "0.1.8-alpha.8cf0044", window.addEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
1637
+ }, I.assignAsSingleton(this), this.config = { ...e, baseUrl: e.baseUrl ?? "https://cde.getopenpay.com" }, this.elements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referer = window.location.origin, this.formTarget = e.formTarget ?? "body", this.formProperties = { height: "1px" }, this.cdeLoadedPayload = null, this.ojsFlowsInitialization = null, this.checkoutFired = !1, this.connectionManager = new Wn(), this.eventHandler = new Zn(this), this.ojsVersion = "0.1.8", this.ojsReleaseVersion = "0.1.8", window.addEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
1638
1638
  }
1639
1639
  /**
1640
1640
  * Assign the instance to the window as a singleton
@@ -1746,4 +1746,4 @@ export {
1746
1746
  m as FieldName,
1747
1747
  ue as OpenPayForm
1748
1748
  };
1749
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAoZTIpIHtcbiAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlICsgXCJcIjtcbiAgfVxufTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIDsgZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NvbmZpcm1SZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgPz8gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICBjb25zdCBpbmNsdWRlZElucHV0cyA9IEFycmF5LmZyb20oZm9ybURpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pO1xuICBjb25zdCBleHRyYURhdGEgPSBpbmNsdWRlZElucHV0cy5yZWR1Y2UoKGFjYywgaW5wdXQpID0+IHtcbiAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgaWYgKCFrZXkpIHJldHVybiBhY2M7XG4gICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogaW5wdXQudmFsdWUgfTtcbiAgfSwge30pO1xuICByZXR1cm4gZXh0cmFEYXRhO1xufTtcbmNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBFbGVtZW50RXZlbnQucGFyc2UoZXZlbnREYXRhKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IGVtaXRFdmVudCA9ICh0YXJnZXQsIGZvcm1JZCwgZWxlbWVudElkLCBwYXlsb2FkLCBiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IGV2ZW50ID0ge1xuICAgIHBheWxvYWQsXG4gICAgbm9uY2U6IHY0KCksXG4gICAgZm9ybUlkLFxuICAgIGVsZW1lbnRJZFxuICB9O1xuICB0YXJnZXQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpLCBiYXNlVXJsKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuXG5jb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG59O1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgW2NkZS1jbGllbnRdIEVycm9yIHF1ZXJ5aW5nIENERTogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gIH1cbiAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3KGNkZUNvbm4sIHtcbiAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgfSk7XG4gIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2N1cnJlbmNpZXMuc2l6ZX1gKTtcbiAgfVxuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBzdW0oY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeSxcbiAgICBhbW91bnRBdG9tXG4gIH07XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50ID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBpc1NldHVwTW9kZSwgcHJvbW9Db2RlKSA9PiB7XG4gIGlmIChpc1NldHVwTW9kZSkge1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGNoZWNrb3V0UHJldmlldy5hbW91bnRBdG9tLCBjdXJyZW5jeTogY2hlY2tvdXRQcmV2aWV3LmN1cnJlbmN5IH07XG4gIH1cbn07XG5jb25zdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zID0gYXN5bmMgKGFsbENkZUNvbm5lY3Rpb25zLCBwYXlsb2FkKSA9PiB7XG4gIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgIChjZGVDb25uKSA9PiBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkIH0sIFRva2VuaXplQ2FyZFJlc3BvbnNlKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlcztcbn07XG5jb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgdGltZW91dDogQ0RFX1BPTExJTkdfSU5URVJWQUwsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjb25uZWN0aW9uT2JqLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3VsdC5zdGF0dXM7XG59O1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdGFydGVkKCk7XG4gICAgICBjb25zdCBmbG93UmVzdWx0ID0gYXdhaXQgc2ltcGxlT2pzRmxvdyhwYXJhbXMpO1xuICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBlcnJfXyhlcnJvcik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuY29uc3QgcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufTtcbmNvbnN0IGZpbmRDcG1NYXRjaGluZ1R5cGUgPSAoYWxsQ1BNcywgem9kTW9kZWwpID0+IHtcbiAgY29uc3QgY3BtID0gYWxsQ1BNcy5maW5kKChjcG0yKSA9PiB6b2RNb2RlbC5zYWZlUGFyc2UoY3BtMikuc3VjY2Vzcyk7XG4gIGlmICghY3BtKSB7XG4gICAgZXJyX18kNShgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6YCwgYWxsQ1BNcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbGApO1xuICB9XG4gIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IFJlcXVpcmVkRm9ybUZpZWxkcy5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcGF5bG9hZC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJDQoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZC5kYXRhO1xufTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kNChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ0KGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IE9KU19TVFJJUEVfTElOS19CVE5fSUQgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIjtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1saW5rXCIpO1xuY29uc3QgU3RyaXBlTGlua0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUxpbmtGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZmxvd0NhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDMoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kMyhgTW91bnRpbmcgcGF5bWVudCBlbGVtZW50Li4uYCk7XG4gICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIik7XG4gICAgICBpZiAoY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluay5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kMyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMyhcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZsb3dDYWxsYmFja3Mub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDMoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZsb3dDYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogdHJ1ZSB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZsb3dDYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0obm9uQ2RlRm9ybUlucHV0cywgY3VzdG9tUGFyYW1zLnN0cmlwZVBNKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQzKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkXG4gICAgfSk7XG4gICAgbG9nX18kMyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQzKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdHJpcGVQbVtcImxpbmtcIl0/LmVtYWlsIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICB1cmwsXG4gIGJhc2VVcmxcbn0pIHtcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQyKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHNcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMihg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQyKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VOZXdGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7c2hvdWxkVXNlTmV3Rmxvd31gKTtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7c2hvdWxkVXNlTmV3RmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhc2hvdWxkVXNlTmV3Rmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDIoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQxKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kMShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDEoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMShgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICB9XG4gICAgbG9nX18kMShgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDEoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDEoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQxKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDEoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDEoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZykgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gdHJ1ZSA7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvd1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUxpbmtGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzICh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG59XG5cbnZhciBPYnNlcnZhYmxlJDIgPSB7fTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGUkMiwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSB2b2lkIDA7XG5cbi8vID09PSBTeW1ib2wgU3VwcG9ydCA9PT1cbmNvbnN0IGhhc1N5bWJvbCA9IG5hbWUgPT4gQm9vbGVhbihTeW1ib2xbbmFtZV0pO1xuXG5jb25zdCBnZXRTeW1ib2wgPSBuYW1lID0+IGhhc1N5bWJvbChuYW1lKSA/IFN5bWJvbFtuYW1lXSA6ICdAQCcgKyBuYW1lO1xuXG5jb25zdCBTeW1ib2xJdGVyYXRvciA9IGdldFN5bWJvbCgnaXRlcmF0b3InKTtcbmNvbnN0IFN5bWJvbE9ic2VydmFibGUgPSBnZXRTeW1ib2woJ29ic2VydmFibGUnKTtcbmNvbnN0IFN5bWJvbFNwZWNpZXMgPSBnZXRTeW1ib2woJ3NwZWNpZXMnKTsgLy8gPT09IEFic3RyYWN0IE9wZXJhdGlvbnMgPT09XG5cbmZ1bmN0aW9uIGdldE1ldGhvZChvYmosIGtleSkge1xuICBsZXQgdmFsdWUgPSBvYmpba2V5XTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2llcyhvYmopIHtcbiAgbGV0IGN0b3IgPSBvYmouY29uc3RydWN0b3I7XG5cbiAgaWYgKGN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0b3IgPSBjdG9yW1N5bWJvbFNwZWNpZXNdO1xuXG4gICAgaWYgKGN0b3IgPT09IG51bGwpIHtcbiAgICAgIGN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN0b3IgIT09IHVuZGVmaW5lZCA/IGN0b3IgOiBPYnNlcnZhYmxlJDE7XG59XG5cbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZSh4KSB7XG4gIHJldHVybiB4IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSQxOyAvLyBTUEVDOiBCcmFuZCBjaGVja1xufVxuXG5mdW5jdGlvbiBob3N0UmVwb3J0RXJyb3IoZSkge1xuICBpZiAoaG9zdFJlcG9ydEVycm9yLmxvZykge1xuICAgIGhvc3RSZXBvcnRFcnJvci5sb2coZSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVucXVldWUoZm4pIHtcbiAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIGxldCBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jbGVhbnVwO1xuICBpZiAoY2xlYW51cCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHN1YnNjcmlwdGlvbi5fY2xlYW51cCA9IHVuZGVmaW5lZDtcblxuICBpZiAoIWNsZWFudXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdW5zdWJzY3JpYmUgPSBnZXRNZXRob2QoY2xlYW51cCwgJ3Vuc3Vic2NyaWJlJyk7XG5cbiAgICAgIGlmICh1bnN1YnNjcmliZSkge1xuICAgICAgICB1bnN1YnNjcmliZS5jYWxsKGNsZWFudXApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgc3Vic2NyaXB0aW9uLl9vYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdjbG9zZWQnO1xufVxuXG5mdW5jdGlvbiBmbHVzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgbGV0IHF1ZXVlID0gc3Vic2NyaXB0aW9uLl9xdWV1ZTtcblxuICBpZiAoIXF1ZXVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHF1ZXVlW2ldLnR5cGUsIHF1ZXVlW2ldLnZhbHVlKTtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKSB7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAncnVubmluZyc7XG4gIGxldCBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXI7XG5cbiAgdHJ5IHtcbiAgICBsZXQgbSA9IGdldE1ldGhvZChvYnNlcnZlciwgdHlwZSk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtlbHNlIHRocm93IHZhbHVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICB9XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7ZWxzZSBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ3J1bm5pbmcnKSBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3JlYWR5Jztcbn1cblxuZnVuY3Rpb24gb25Ob3RpZnkoc3Vic2NyaXB0aW9uLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHJldHVybjtcblxuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2J1ZmZlcmluZycpIHtcbiAgICBzdWJzY3JpcHRpb24uX3F1ZXVlLnB1c2goe1xuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSAhPT0gJ3JlYWR5Jykge1xuICAgIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnYnVmZmVyaW5nJztcbiAgICBzdWJzY3JpcHRpb24uX3F1ZXVlID0gW3tcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZVxuICAgIH1dO1xuICAgIGVucXVldWUoKCkgPT4gZmx1c2hTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbm90aWZ5U3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpO1xufVxuXG5jbGFzcyBTdWJzY3JpcHRpb24ge1xuICBjb25zdHJ1Y3RvcihvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICAgIC8vIEFTU0VSVDogb2JzZXJ2ZXIgaXMgYW4gb2JqZWN0XG4gICAgLy8gQVNTRVJUOiBzdWJzY3JpYmVyIGlzIGNhbGxhYmxlXG4gICAgdGhpcy5fY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgIHRoaXMuX3F1ZXVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N0YXRlID0gJ2luaXRpYWxpemluZyc7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBzdWJzY3JpcHRpb25PYnNlcnZlciA9IHtcbiAgICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgICB9LFxuXG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICduZXh0JywgdmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3IodmFsdWUpIHtcbiAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ2Vycm9yJywgdmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICdjb21wbGV0ZScpO1xuICAgICAgfVxuXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9jbGVhbnVwID0gc3Vic2NyaWJlci5jYWxsKHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2luaXRpYWxpemluZycpIHRoaXMuX3N0YXRlID0gJ3JlYWR5JztcbiAgfVxuXG4gIGdldCBjbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnY2xvc2VkJztcbiAgfVxuXG4gIHVuc3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbiAgICB9XG4gIH1cblxufVxuXG5sZXQgT2JzZXJ2YWJsZSQxID0gY2xhc3MgT2JzZXJ2YWJsZSB7XG4gIGNvbnN0cnVjdG9yKHN1YnNjcmliZXIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ09ic2VydmFibGUgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uJyk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpYmVyICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYnNlcnZhYmxlIGluaXRpYWxpemVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgIHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICB9XG5cbiAgc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgIG9ic2VydmVyID0ge1xuICAgICAgICBuZXh0OiBvYnNlcnZlcixcbiAgICAgICAgZXJyb3I6IGFyZ3VtZW50c1sxXSxcbiAgICAgICAgY29tcGxldGU6IGFyZ3VtZW50c1syXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fc3Vic2NyaWJlcik7XG4gIH1cblxuICBmb3JFYWNoKGZuKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4odmFsdWUsIGRvbmUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBtYXAoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICBmaWx0ZXIoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZm4odmFsdWUpKSByZXR1cm47XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICB9LFxuXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgIH0pKTtcbiAgfVxuXG4gIHJlZHVjZShmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIGxldCBoYXNTZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDE7XG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgbGV0IHNlZWQgPSBhcmd1bWVudHNbMV07XG4gICAgbGV0IGFjYyA9IHNlZWQ7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gIWhhc1ZhbHVlO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFmaXJzdCB8fCBoYXNTZWVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFjYyA9IGZuKGFjYywgdmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICB9LFxuXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKCFoYXNWYWx1ZSAmJiAhaGFzU2VlZCkgcmV0dXJuIG9ic2VydmVyLmVycm9yKG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZWR1Y2UgYW4gZW1wdHkgc2VxdWVuY2UnKSk7XG4gICAgICAgIG9ic2VydmVyLm5leHQoYWNjKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGFsbCgpIHtcbiAgICBsZXQgdmFsdWVzID0gW107XG4gICAgYXdhaXQgdGhpcy5mb3JFYWNoKHZhbHVlID0+IHZhbHVlcy5wdXNoKHZhbHVlKSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIGNvbmNhdCguLi5zb3VyY2VzKSB7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9uO1xuICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgZnVuY3Rpb24gc3RhcnROZXh0KG5leHQpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uID0gbmV4dC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQodikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBzb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFydE5leHQoQy5mcm9tKHNvdXJjZXNbaW5kZXgrK10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0TmV4dCh0aGlzKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmbGF0TWFwKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgIGxldCBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICBsZXQgb3V0ZXIgPSB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlubmVyID0gQy5mcm9tKHZhbHVlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBzdWJzY3JpcHRpb25zLmluZGV4T2YoaW5uZXIpO1xuICAgICAgICAgICAgICBpZiAoaSA+PSAwKSBzdWJzY3JpcHRpb25zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgY29tcGxldGVJZkRvbmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChpbm5lcik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkge1xuICAgICAgICBpZiAob3V0ZXIuY2xvc2VkICYmIHN1YnNjcmlwdGlvbnMubGVuZ3RoID09PSAwKSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICBvdXRlci51bnN1YnNjcmliZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIFtTeW1ib2xPYnNlcnZhYmxlXSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHgpIHtcbiAgICBsZXQgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6IE9ic2VydmFibGU7XG4gICAgaWYgKHggPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgbGV0IG1ldGhvZCA9IGdldE1ldGhvZCh4LCBTeW1ib2xPYnNlcnZhYmxlKTtcblxuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIGxldCBvYnNlcnZhYmxlID0gbWV0aG9kLmNhbGwoeCk7XG4gICAgICBpZiAoT2JqZWN0KG9ic2VydmFibGUpICE9PSBvYnNlcnZhYmxlKSB0aHJvdyBuZXcgVHlwZUVycm9yKG9ic2VydmFibGUgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgIGlmIChpc09ic2VydmFibGUob2JzZXJ2YWJsZSkgJiYgb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzU3ltYm9sKCdpdGVyYXRvcicpKSB7XG4gICAgICBtZXRob2QgPSBnZXRNZXRob2QoeCwgU3ltYm9sSXRlcmF0b3IpO1xuXG4gICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbWV0aG9kLmNhbGwoeCkpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtKTtcbiAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHhbaV0pO1xuICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBub3Qgb2JzZXJ2YWJsZScpO1xuICB9XG5cbiAgc3RhdGljIG9mKC4uLml0ZW1zKSB7XG4gICAgbGV0IEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBPYnNlcnZhYmxlO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2ldKTtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IFtTeW1ib2xTcGVjaWVzXSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG59O1xuXG5PYnNlcnZhYmxlJDIuT2JzZXJ2YWJsZSA9IE9ic2VydmFibGUkMTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDEsIFN5bWJvbCgnZXh0ZW5zaW9ucycpLCB7XG4gIHZhbHVlOiB7XG4gICAgc3ltYm9sOiBTeW1ib2xPYnNlcnZhYmxlLFxuICAgIGhvc3RSZXBvcnRFcnJvclxuICB9LFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG52YXIgemVuT2JzZXJ2YWJsZSA9IE9ic2VydmFibGUkMi5PYnNlcnZhYmxlO1xuXG5jb25zdCBPYnNlcnZhYmxlID0gLypAX19QVVJFX18qL2dldERlZmF1bHRFeHBvcnRGcm9tQ2pzKHplbk9ic2VydmFibGUpO1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgZ2V0T2pzSW5pdFJlc3VsdHNEZWJ1Z09iamVjdCA9ICgpID0+IHtcbiAgaWYgKCEoXCJvanNfaW5pdF9yZXN1bHRzXCIgaW4gd2luZG93KSkge1xuICAgIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl0gPSB7fTtcbiAgfVxuICByZXR1cm4gd2luZG93W1wib2pzX2luaXRfcmVzdWx0c1wiXTtcbn07XG5jb25zdCBpbml0aWFsaXplT2pzRmxvd3MgPSAoY29udGV4dCwgZmxvd0NhbGxiYWNrcykgPT4ge1xuICBjb25zdCBpbml0UGFyYW1zID0geyBjb250ZXh0LCBmbG93Q2FsbGJhY2tzIH07XG4gIHJldHVybiB7XG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlKFwic3RyaXBlUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdChpbml0UGFyYW1zKSksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZUxpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KGluaXRQYXJhbXMpKVxuICAgIC8vIPCfkYkgQWRkIGluaXRpYWxpemF0aW9uIGZsb3dzIGhlcmVcbiAgfTtcbn07XG5jb25zdCBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgIGluaXRGbG93LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJsb2FkZWRcIiwgcmVzdWx0IH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJlcnJvclwiLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICBnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0KClbZmxvd05hbWVdID0gcmVzdWx0O1xuICAgIH0sXG4gICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18oYCR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZXJyb3I6XG4ke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYnNlcnZhYmxlO1xufTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuY29uc3QgUFJfRVJST1IgPSB7XG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNsYXNzIE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoZm9ybUluc3RhbmNlKSB7XG4gICAgdGhpcy5mb3JtSW5zdGFuY2UgPSBmb3JtSW5zdGFuY2U7XG4gICAgdGhpcy5jb25maWcgPSBmb3JtSW5zdGFuY2UuY29uZmlnO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUluc3RhbmNlLmZvcm1JZDtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgfVxuICBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5zb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGZvdW5kYCk7XG4gICAgfVxuICAgIGlmIChldmVudC5vcmlnaW4gIT09IHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5fZnJhbWVVcmw/Lm9yaWdpbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInBlbnBhbFwiXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgY29uc3QgeyBlbGVtZW50SWQsIHBheWxvYWQgfSA9IGV2ZW50RGF0YTtcbiAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVMYXlvdXRFdmVudChwYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVGb2N1c0V2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVCbHVyRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICB0aGlzLmhhbmRsZUxvYWRlZEV2ZW50KGV2ZW50LnNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICB0aGlzLmhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yRXZlbnQocGF5bG9hZCwgZWxlbWVudElkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKSB7XG4gICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUluc3RhbmNlLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaGFuZGxlTGF5b3V0RXZlbnQocGF5bG9hZCkge1xuICAgIGNvbnN0IGhlaWdodCA9IHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCI7XG4gICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2V0Rm9ybUhlaWdodChoZWlnaHQpO1xuICB9XG4gIGhhbmRsZUZvY3VzRXZlbnQoZWxlbWVudElkLCBmaWVsZCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkZvY3VzKSB0aGlzLmNvbmZpZy5vbkZvY3VzKGVsZW1lbnRJZCwgZmllbGQpO1xuICB9XG4gIGhhbmRsZUJsdXJFdmVudChlbGVtZW50SWQsIGZpZWxkKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uQmx1cikgdGhpcy5jb25maWcub25CbHVyKGVsZW1lbnRJZCwgZmllbGQpO1xuICB9XG4gIGhhbmRsZUNoYW5nZUV2ZW50KGVsZW1lbnRJZCwgZmllbGQsIGVycm9ycykge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkNoYW5nZSkgdGhpcy5jb25maWcub25DaGFuZ2UoZWxlbWVudElkLCBmaWVsZCwgZXJyb3JzKTtcbiAgfVxuICBhc3luYyBoYW5kbGVMb2FkZWRFdmVudChzb3VyY2UsIGVsZW1lbnRJZCwgcGF5bG9hZCkge1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBzb3VyY2U7XG4gICAgdGhpcy5mb3JtSW5zdGFuY2Uub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uTG9hZCkge1xuICAgICAgdGhpcy5jb25maWcub25Mb2FkKHBheWxvYWQudG90YWxBbW91bnRBdG9tcywgcGF5bG9hZC5jdXJyZW5jeSk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpIHtcbiAgICBpZiAodGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uTG9hZEVycm9yKSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25Mb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgfVxuICBoYW5kbGVWYWxpZGF0aW9uRXJyb3JFdmVudChwYXlsb2FkLCBlbGVtZW50SWQpIHtcbiAgICBpZiAodGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG4gIC8vIGFzeW5jIGhhbmRsZUVycm9yRXZlbnQocGF5bG9hZDogRXJyb3JFdmVudFBheWxvYWQpIHtcbiAgLy8gICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnM0RTX1JFUVVJUkVEJykge1xuICAvLyAgICAgY29uc3QgdGhyZWVEU1VybCA9IHBheWxvYWQuaGVhZGVycz8uWyd4LTNkcy1hdXRoLXVybCddID8/IFNJTVVMQVRFXzNEU19VUkw7XG4gIC8vICAgICAvLyBUaGlzIHdpbGwgb3BlbiBhIHBvcHVwIGFuZCBwcm9jZXNzIHRoZSAzRFMgZmxvd1xuICAvLyAgICAgLy8gd2lsbCByZXR1cm4gYSBzdGF0dXMgYHN1Y2Nlc3NgIHwgYGZhaWx1cmVgIHwgYGNhbmNlbGxlZGAgd2hpY2ggd2UgY2FuIGNvbnRpbnVlIHdpdGhcbiAgLy8gICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiB0aHJlZURTVXJsLCBiYXNlVXJsOiB0aGlzLmNvbmZpZy5iYXNlVXJsISB9KTtcbiAgLy8gICAgIGNvbnNvbGUubG9nKCfwn5SQIDNEUyBzdGF0dXM6Jywgc3RhdHVzKTtcbiAgLy8gICAgIC8vIFRPRE86IGNvbnRpbnVlIHdpdGggc3RhdHVzXG4gIC8vICAgICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcz8uZmluZCgoY3BtKSA9PiBjcG0ucHJvdmlkZXIgPT09ICdjcmVkaXRfY2FyZCcpO1xuICAvLyAgICAgaWYgKCF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHwgIXRoaXMuZm9ybUluc3RhbmNlLmZvcm1UYXJnZXQgfHwgIXRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yIHx8ICFjYXJkQ3BtKVxuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gIC8vICAgICAgIGlmICghdGFyZ2V0KSBjb250aW51ZTtcbiAgLy8gICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAvLyAgICAgICAgIEV2ZW50VHlwZS5lbnVtLlNUQVJUX1BBWU1FTlRfRkxPVyxcbiAgLy8gICAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQsXG4gIC8vICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAvLyAgICAgICAgIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yLFxuICAvLyAgICAgICAgIHsgLi4uY2FyZENwbSwgcHJvY2Vzc29yX25hbWU6ICdzdHJpcGUnIH0sXG4gIC8vICAgICAgICAgZmFsc2VcbiAgLy8gICAgICAgKTtcbiAgLy8gICAgICAgaWYgKCFzdGFydFBheW1lbnRGbG93RXZlbnQpIGNvbnRpbnVlO1xuICAvLyAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gdHJ1ZTtcbiAgLy8gICAgICAgdGhpcy50b2tlbml6ZWREYXRhID0gc3RhcnRQYXltZW50Rmxvd0V2ZW50O1xuICAvLyAgICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUodGFyZ2V0LCBlbGVtZW50SWQsIHN0YXJ0UGF5bWVudEZsb3dFdmVudCk7XG4gIC8vICAgICAgIGJyZWFrO1xuICAvLyAgICAgfVxuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gIC8vICAgICBpZiAodGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcikgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAvLyAgIH1cbiAgLy8gfVxuICAvLyBoYW5kbGVGb3JtU3VibWl0KCkge1xuICAvLyAgIGlmIChcbiAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHxcbiAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzPy5sZW5ndGggfHxcbiAgLy8gICAgICF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvclxuICAvLyAgICkge1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gIC8vICAgaWYgKCFjYXJkQ3BtKSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhcmQgbm90IGF2YWlsYWJsZSBhcyBhIHBheW1lbnQgbWV0aG9kIGluIGNoZWNrb3V0Jyk7XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHRva2VuaXplRGF0YSA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgLy8gICAgIEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFLFxuICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkISxcbiAgLy8gICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgLy8gICAgIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yLFxuICAvLyAgICAgY2FyZENwbSxcbiAgLy8gICAgIGZhbHNlXG4gIC8vICAgKTtcbiAgLy8gICBpZiAoIXRva2VuaXplRGF0YSkge1xuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBjb25zdHJ1Y3RpbmcgdG9rZW5pemUgZGF0YScpO1xuICAvLyAgIH1cbiAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gIC8vICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUodGFyZ2V0LCBlbGVtZW50SWQsIHRva2VuaXplRGF0YSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMudG9rZW5pemVkRGF0YSA9IHRva2VuaXplRGF0YTtcbiAgLy8gfVxuICAvLyBhc3luYyBvblVzZXJDb21wbGV0ZVBheW1lbnRSZXF1ZXN0VUkoXG4gIC8vICAgc3RyaXBlUG06IFBheW1lbnRSZXF1ZXN0UGF5bWVudE1ldGhvZEV2ZW50LFxuICAvLyAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG4gIC8vICk6IFByb21pc2U8dm9pZD4ge1xuICAvLyAgIGlmICghdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IgfHwgIXRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCB8fCAhdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcylcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzID8/IHt9KSkge1xuICAvLyAgICAgY29uc3QgcGF5bWVudEZsb3dNZXRhZGF0YSA9IHsgc3RyaXBlUG1JZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZCB9O1xuICAvLyAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAvLyAgICAgICBFdmVudFR5cGUuZW51bS5TVEFSVF9QQVlNRU5UX0ZMT1csXG4gIC8vICAgICAgIHRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCxcbiAgLy8gICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAvLyAgICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgLy8gICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAvLyAgICAgICBmYWxzZSxcbiAgLy8gICAgICAgcGF5bWVudEZsb3dNZXRhZGF0YVxuICAvLyAgICAgKTtcbiAgLy8gICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgLy8gICAgIHRoaXMuc3RyaXBlUG0gPSBzdHJpcGVQbTtcbiAgLy8gICAgIHRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0RmlyZWQgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5zZXRUb2tlbml6ZWREYXRhKHN0YXJ0UGF5bWVudEZsb3dFdmVudCk7XG4gIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUoZWxlbWVudCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAvLyAgICAgLy8gZW1pdEV2ZW50KGVsZW1lbnQubm9kZS5jb250ZW50V2luZG93ISwgdGhpcy5mb3JtSWQsIGVsZW1lbnRJZCwgc3RhcnRQYXltZW50Rmxvd0V2ZW50LCB0aGlzLmNvbmZpZy5iYXNlVXJsISk7XG4gIC8vICAgICBicmVhaztcbiAgLy8gICB9XG4gIC8vIH1cbiAgcG9zdEV2ZW50VG9GcmFtZShzb3VyY2UsIGVsZW1lbnRJZCwgZGF0YSkge1xuICAgIGVtaXRFdmVudChzb3VyY2UsIHRoaXMuZm9ybUlkLCBlbGVtZW50SWQsIGRhdGEsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy50cnlJbml0T2pzRmxvd3MgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3ModGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpLCB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSk7XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24uc3RyaXBlUFIuc3Vic2NyaWJlKChzdGF0dXMpID0+IHRoaXMub25TdHJpcGVQUlN0YXR1c0NoYW5nZShzdGF0dXMpKTtcbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2RlTG9hZGVkUGF5bG9hZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNkZUxvYWRlZFBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgdGhpcy50cnlJbml0T2pzRmxvd3MoKTtcbiAgICB9O1xuICAgIHRoaXMub25TdHJpcGVQUlN0YXR1c0NoYW5nZSA9IChpbml0U3RhdHVzKSA9PiB7XG4gICAgICBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0xPQURJTkcsIGdvb2dsZV9wYXk6IFBSX0xPQURJTkcgfSk7XG4gICAgICB9IGVsc2UgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgdGhpcy5jb25maWcub25QYXltZW50UmVxdWVzdExvYWQ/Lih7IGFwcGxlX3BheTogUFJfRVJST1IsIGdvb2dsZV9wYXk6IFBSX0VSUk9SIH0pO1xuICAgICAgfSBlbHNlIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gaW5pdFN0YXR1cy5yZXN1bHQ7XG4gICAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oe1xuICAgICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkFwcGxlUGF5ID8gdGhpcy5zdWJtaXRQYXltZW50UmVxdWVzdChcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5Hb29nbGVQYXkgPyB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZU9qc0Zsb3dDb250ZXh0KCk7XG4gICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZmxvd0NhbGxiYWNrczogdGhpcy5jcmVhdGVPanNGbG93Q2FsbGJhY2tzKCksXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiIH07XG4gICAgdGhpcy5lbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7d2luZG93LmNyeXB0by5yYW5kb21VVUlEKCl9YDtcbiAgICB0aGlzLnJlZmVyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9O1xuICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IG51bGw7XG4gICAgdGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uID0gbnVsbDtcbiAgICB0aGlzLmNoZWNrb3V0RmlyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjEuOFwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuMS44LWFscGhhLjhjZjAwNDRcIjtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbiB0aGUgaW5zdGFuY2UgdG8gdGhlIHdpbmRvdyBhcyBhIHNpbmdsZXRvblxuICAgKiBAcGFyYW0gZm9ybSAtIFRoZSBPcGVuUGF5Rm9ybSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGFzc2lnbkFzU2luZ2xldG9uKGZvcm0pIHtcbiAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgfVxuICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIE9wZW5QYXlGb3JtXG4gICAqIEByZXR1cm5zIFRoZSBPcGVuUGF5Rm9ybSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKCkge1xuICAgIHJldHVybiB3aW5kb3dbXCJvanNcIl0gPz8gbnVsbDtcbiAgfVxuICBnZXRDb25uZWN0aW9uTWFuYWdlcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uTWFuYWdlcjtcbiAgfVxuICBzZXRGb3JtSGVpZ2h0KGhlaWdodCkge1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGlmICh0aGlzLmVsZW1lbnRzKSB7XG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuZWxlbWVudHMpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgZWxlbWVudC5ub2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjcmVhdGVFbGVtZW50KGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBjb25zdCB0eXBlID0gRWxlbWVudFR5cGUucGFyc2UoZWxlbWVudFZhbHVlKTtcbiAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucyk7XG4gICAgZnJhbWUubmFtZSA9IGAke3R5cGV9LWVsZW1lbnRgO1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfWAsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgIGZyYW1lLnNyYyA9IHVybC5ocmVmO1xuICAgIHRoaXMuY29uZmlnLl9mcmFtZVVybCA9IHVybDtcbiAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICBmcmFtZS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICB0eXBlLFxuICAgICAgbm9kZTogZnJhbWUsXG4gICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpXG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKHRoaXMuZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbdHlwZV0gPSBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRzID0geyBbdHlwZV06IGVsZW1lbnQgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVyZXIpO1xuICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCk7XG4gICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICB9XG4gICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICB9XG4gIGNvbm5lY3RUb0VsZW1lbnQoZWxlbWVudCkge1xuICAgIGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKS50aGVuKChjb25uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZWxlbWVudC50eXBlLCBjb25uKTtcbiAgICAgIHRoaXMudHJ5SW5pdE9qc0Zsb3dzKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4gdm9pZCAwKTtcbiAgfVxuICBnZXRGb3JtRGl2KCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgfVxuICBjcmVhdGVPanNGbG93Q29udGV4dCgpIHtcbiAgICBjb25zdCBjZGVDb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKTtcbiAgICBpZiAoIXRoaXMuY2RlTG9hZGVkUGF5bG9hZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVxdWVzdGVkIGNvbnRleHQgd2hpbGUgQ0RFIG5vdCB5ZXQgbG9hZGVkXCIpO1xuICAgIH1cbiAgICBpZiAoY2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYmFzZVVybDogbmV3IFVSTCh0aGlzLmNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICBmb3JtRGl2OiB0aGlzLmdldEZvcm1EaXYoKSxcbiAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiB0aGlzLmNkZUxvYWRlZFBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogdGhpcy5jZGVMb2FkZWRQYXlsb2FkLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICBjZGVDb25uZWN0aW9ucyxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHRoaXMuY29uZmlnLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbiAgICB9O1xuICB9XG4gIGNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSB7XG4gICAgY29uc3Qgbm9PcCA9ICgpID0+IHtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBvbkNoZWNrb3V0RXJyb3I6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0RXJyb3JcIiwgdGhpcy5jb25maWcub25DaGVja291dEVycm9yID8/IG5vT3ApLFxuICAgICAgb25DaGVja291dFN0YXJ0ZWQ6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0U3RhcnRlZFwiLCB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0U3RhcnRlZCA/PyBub09wKSxcbiAgICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25DaGVja291dFN1Y2Nlc3NcIiwgdGhpcy5jb25maWcub25DaGVja291dFN1Y2Nlc3MgPz8gbm9PcCksXG4gICAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXG4gICAgICAgIFwib25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzXCIsXG4gICAgICAgIHRoaXMuY29uZmlnLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyA/PyBub09wXG4gICAgICApLFxuICAgICAgb25WYWxpZGF0aW9uRXJyb3I6IG1ha2VDYWxsYmFja1NhZmUoXCJvblZhbGlkYXRpb25FcnJvclwiLCB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciA/PyBub09wKVxuICAgIH07XG4gIH1cbiAgc3VibWl0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZU9qc0Zsb3dDb250ZXh0KCk7XG4gICAgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICBmbG93Q2FsbGJhY2tzOiB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSxcbiAgICAgIGN1c3RvbVBhcmFtczogdm9pZCAwLFxuICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGN1c3RvbSBwYXJhbXNcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgfSk7XG4gIH1cbiAgb25QYXltZW50UmVxdWVzdEVycm9yKGVyck1zZykge1xuICAgIHRoaXMuY2hlY2tvdXRGaXJlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IpIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcihlcnJNc2cpO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXModGhpcy5lbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgIGVsZW1lbnQubm9kZS5yZW1vdmUoKTtcbiAgICB9XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICB9XG59XG5cbmV4cG9ydCB7IEZpZWxkTmFtZSwgT3BlblBheUZvcm0gfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUFBLFNBQVM7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLE9BQVc7QUFFbEIsTUFBTUMsS0FBaUIsOEJBRWpCQyxLQUE0QkwsRUFBRSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBRSxPQUFPO0FBQUEsRUFDZixLQUFLQSxFQUFFLE1BQU1BLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDdkIsS0FBS0EsRUFBRSxPQUFPO0FBQUEsRUFDZCxLQUFLQSxFQUFFLE9BQU87QUFDaEIsQ0FBQyxHQUNLTSxLQUFrQ04sRUFBRSxNQUFNSyxFQUF5QixHQUNuRUUsS0FBZ0JQLEVBQUUsT0FBTztBQUFBLEVBQzdCLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsU0FBU0EsRUFBRSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUMxQixDQUFDLEdBQ0tRLEtBQWlCUixFQUFFLE1BQU1PLEVBQWEsR0FDdENFLEtBQWtDO0FBQUEsRUFDdEMsbUJBQW1CO0FBQ3JCLEdBQ01DLElBQTBCLENBQUNDLE1BQW1CO0FBQ2xELFFBQU1DLElBQU1ELEVBQWUsWUFBWSxFQUFFLEtBQUs7QUFDOUMsU0FBT0YsR0FBZ0NHLENBQUcsS0FBS0Q7QUFDakQsR0FDTUUsS0FBMEIsQ0FBQ0Ms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QixhQUFhO0FBQUEsTUFDcEcsa0JBQWtCckksRUFBeUJxSSxFQUFRLE9BQU87QUFBQSxNQUMxRCxlQUFlLEtBQUssdUJBQXVCO0FBQUEsTUFDM0MsY0FBYztBQUFBO0FBQUEsTUFFZCxZQUFZO0FBQUE7QUFBQSxJQUVkLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFDQSxzQkFBc0JzSyxHQUFRO0FBQzVCLFNBQUssZ0JBQWdCLElBQ2pCLEtBQUssT0FBTyxtQkFBaUIsS0FBSyxPQUFPLGdCQUFnQkEsQ0FBTTtBQUFBLEVBQ3JFO0FBQUEsRUFDQSxVQUFVO0FBQ1IsZUFBV1IsS0FBVyxPQUFPLE9BQU8sS0FBSyxZQUFZLENBQUMsQ0FBQztBQUNyRCxNQUFBQSxFQUFRLEtBQUssT0FBTztBQUV0QixXQUFPLG9CQUFvQixXQUFXLEtBQUssYUFBYSxjQUFjLEtBQUssS0FBSyxZQUFZLENBQUM7QUFBQSxFQUMvRjtBQUNGO0FBaElJVCxFQUFLLFdBQVc3STtBQXpFcEIsSUFBTStKLEtBQU5sQjsiLAogICJuYW1lcyI6IFsieiIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJjaGFsayIsICJGUkFNRV9CQVNFX1VSTCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UiLCAiWm9kRmllbGRFcnJvciIsICJab2RGaWVsZEVycm9ycyIsICJNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFIiwgImdldEh1bWFuRnJpZW5kbHlNZXNzYWdlIiwgIm9nRXJyb3JNZXNzYWdlIiwgImtleSIsICJpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCIsICJzdHIiLCAiY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJyZXNwb25zZSIsICJlcnIiLCAiY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyIsICJlcnJvcnMiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgImUiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImFyZ3MiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJlcnJvciIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJyZXN1bHRTdGF0dXMiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJpbnB1dCIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiZW1pdEV2ZW50IiwgInRhcmdldCIsICJmb3JtSWQiLCAiZWxlbWVudElkIiwgInBheWxvYWQiLCAiYmFzZVVybCIsICJldmVudCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3VtIiwgImFyciIsICJhIiwgImIiLCAiZml4UHJvdG8iLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIkNkZUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJnZXRQcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJzaW1wbGVPanNGbG93IiwgInBhcmFtcyIsICJmbG93UmVzdWx0IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImxvZ19fJDUiLCAiZXJyX18kNSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJsb2dfXyQ0IiwgImVycl9fJDQiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kMyIsICJlcnJfXyQzIiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImNvbnRleHQiLCAiZmxvd0NhbGxiYWNrcyIsICJzdHJpcGVMaW5rQ3BtIiwgImFueUNkZUNvbm5lY3Rpb24iLCAicHJlZmlsbCIsICJpbml0aWFsUHJldmlldyIsICJlbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIk9qc0Zsb3dzIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAic3RhcnRQb2xsaW5nIiwgIm9uU3VjY2VzcyIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAiaGFuZGxlRXZlbnRzIiwgImhhbmRsZUNhbmNlbCIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAibG9nX18kMiIsICJlcnJfXyQyIiwgInN0cmlwZUxvZ19fIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInNob3VsZFVzZU5ld0Zsb3ciLCAic3RhcnRQZlJlc3VsdCIsICJjb21tb25DQzNEU0Zsb3ciLCAic3RyaXBlQ0MzRFNGbG93IiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyIsICJpbml0UmVzdWx0IiwgIm92ZXJyaWRlIiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImFtb3VudCIsICJpc1BlbmRpbmciLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAiZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMiLCAieCIsICJPYnNlcnZhYmxlJDIiLCAiaGFzU3ltYm9sIiwgIm5hbWUiLCAiZ2V0U3ltYm9sIiwgIlN5bWJvbEl0ZXJhdG9yIiwgIlN5bWJvbE9ic2VydmFibGUiLCAiU3ltYm9sU3BlY2llcyIsICJnZXRNZXRob2QiLCAiZ2V0U3BlY2llcyIsICJjdG9yIiwgIk9ic2VydmFibGUkMSIsICJpc09ic2VydmFibGUiLCAiaG9zdFJlcG9ydEVycm9yIiwgImVucXVldWUiLCAiY2xlYW51cFN1YnNjcmlwdGlvbiIsICJzdWJzY3JpcHRpb24iLCAiY2xlYW51cCIsICJ1bnN1YnNjcmliZSIsICJjbG9zZVN1YnNjcmlwdGlvbiIsICJmbHVzaFN1YnNjcmlwdGlvbiIsICJxdWV1ZSIsICJub3RpZnlTdWJzY3JpcHRpb24iLCAidHlwZSIsICJvYnNlcnZlciIsICJtIiwgIm9uTm90aWZ5IiwgIlN1YnNjcmlwdGlvbiIsICJzdWJzY3JpYmVyIiwgInNlbGYiLCAic3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCAiT2JzZXJ2YWJsZSIsICJkb25lIiwgIkMiLCAiaGFzU2VlZCIsICJoYXNWYWx1ZSIsICJmaXJzdCIsICJ2YWx1ZXMiLCAic291cmNlcyIsICJpbmRleCIsICJzdGFydE5leHQiLCAibmV4dCIsICJ2IiwgInN1YnNjcmlwdGlvbnMiLCAib3V0ZXIiLCAiaW5uZXIiLCAiY29tcGxldGVJZkRvbmUiLCAicyIsICJtZXRob2QiLCAib2JzZXJ2YWJsZSIsICJpdGVtIiwgIml0ZW1zIiwgInplbk9ic2VydmFibGUiLCAibG9nX18iLCAiZ2V0T2pzSW5pdFJlc3VsdHNEZWJ1Z09iamVjdCIsICJpbml0aWFsaXplT2pzRmxvd3MiLCAiaW5pdFBhcmFtcyIsICJydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJQUl9MT0FESU5HIiwgIlBSX0VSUk9SIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JbnN0YW5jZSIsICJoZWlnaHQiLCAiZmllbGQiLCAic291cmNlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJpZCIsICJjb25uZWN0aW9uIiwgIl9PcGVuUGF5Rm9ybSIsICJjb25maWciLCAiaW5pdFN0YXR1cyIsICJfZiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAidXNlclBhcmFtcyIsICJwcm92aWRlciIsICJmb3JtIiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY2RlQ29ubmVjdGlvbnMiLCAibm9PcCIsICJlcnJNc2ciLCAiT3BlblBheUZvcm0iXQp9Cg==
1749
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAoZTIpIHtcbiAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlICsgXCJcIjtcbiAgfVxufTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0gei5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogei5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHoubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogei5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHNcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgSlMgbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUocHVibGlzaGFibGVLZXkpO1xuICByZXR1cm4gc3RyaXBlO1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzID0gYXN5bmMgKHN0cmlwZVB1YktleSwgZWxlbWVudHNPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBzdHJpcGUuZWxlbWVudHMoZWxlbWVudHNPcHRpb25zKSxcbiAgICBzdHJpcGVcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVQYXltZW50UmVxdWVzdCA9IGFzeW5jIChzdHJpcGVQdWJLZXksIHRvdGFsQW1vdW50QXRvbSwgY3VycmVuY3ksIGlzQW1vdW50UGVuZGluZywgaXNMaW5rT25seSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgY29uc3Qgc3RyaXBlQ3VycmVuY3kgPSBvdXJDdXJyZW5jeVRvVGhlaXJzW2N1cnJlbmN5LnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgY29uc3QgcGF5bWVudFJlcXVlc3QgPSBzdHJpcGUucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzdHJpcGVDdXJyZW5jeSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdG90YWxBbW91bnRBdG9tLFxuICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIDsgZWxzZSBpZiAocmVzdWx0U3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2NvbmZpcm1SZXN1bHQuZXJyb3I/Lm1lc3NhZ2UgPz8gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8ubGFzdF9zZXR1cF9lcnJvcj8ubWVzc2FnZSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSA9IChmb3JtRGl2LCBpbml0aWFsRGljdCkgPT4ge1xuICBjb25zdCBpbmNsdWRlZElucHV0cyA9IEFycmF5LmZyb20oZm9ybURpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pO1xuICBjb25zdCBleHRyYURhdGEgPSBpbmNsdWRlZElucHV0cy5yZWR1Y2UoKGFjYywgaW5wdXQpID0+IHtcbiAgICBjb25zdCBrZXkgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gICAgaWYgKCFrZXkpIHJldHVybiBhY2M7XG4gICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogaW5wdXQudmFsdWUgfTtcbiAgfSwge30pO1xuICByZXR1cm4gZXh0cmFEYXRhO1xufTtcbmNvbnN0IHBhcnNlRXZlbnRQYXlsb2FkID0gKGV2ZW50RGF0YSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBFbGVtZW50RXZlbnQucGFyc2UoZXZlbnREYXRhKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbmNvbnN0IGVtaXRFdmVudCA9ICh0YXJnZXQsIGZvcm1JZCwgZWxlbWVudElkLCBwYXlsb2FkLCBiYXNlVXJsKSA9PiB7XG4gIGNvbnN0IGV2ZW50ID0ge1xuICAgIHBheWxvYWQsXG4gICAgbm9uY2U6IHY0KCksXG4gICAgZm9ybUlkLFxuICAgIGVsZW1lbnRJZFxuICB9O1xuICB0YXJnZXQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpLCBiYXNlVXJsKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuY29uc3QgaXNSZXN1bHRWYWxpZCA9IChvYmosIGlzVmFsaWQpID0+IHtcbiAgcmV0dXJuICEhb2JqICYmIGlzVmFsaWQ7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuXG5jb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG59O1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgW2NkZS1jbGllbnRdIEVycm9yIHF1ZXJ5aW5nIENERTogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBDZGVFcnJvcihyZXNwb25zZSk7XG4gIH1cbiAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIik7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5jb25zdCBjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSA9ICh2YWx1ZSwgc2NoZW1hKSA9PiB7XG4gIHJldHVybiBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGlzQ0RFUmVzcG9uc2VFcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICByZXR1cm4gQ0RFUmVzcG9uc2VFcnJvci5zYWZlUGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3M7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3ID0gYXN5bmMgKGNkZUNvbm4sIHJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByZXF1ZXN0IH0sIFByZXZpZXdDaGVja291dFJlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRQcmVmaWxsID0gYXN5bmMgKGNkZUNvbm4pID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBQYXltZW50Rm9ybVByZWZpbGwpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkIH0sIENvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3KGNkZUNvbm4sIHtcbiAgICBzZWN1cmVfdG9rZW46IHNlY3VyZVRva2VuLFxuICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgfSk7XG4gIGNvbnN0IGN1cnJlbmNpZXMgPSBuZXcgU2V0KGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYuY3VycmVuY3kpKTtcbiAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2N1cnJlbmNpZXMuc2l6ZX1gKTtcbiAgfVxuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gIGNvbnN0IGFtb3VudEF0b20gPSBzdW0oY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeSxcbiAgICBhbW91bnRBdG9tXG4gIH07XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50ID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBpc1NldHVwTW9kZSwgcHJvbW9Db2RlKSA9PiB7XG4gIGlmIChpc1NldHVwTW9kZSkge1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIH0gZWxzZSB7XG4gICAgcHJvbW9Db2RlID0gIXByb21vQ29kZSA/IHZvaWQgMCA6IHByb21vQ29kZTtcbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGNoZWNrb3V0UHJldmlldy5hbW91bnRBdG9tLCBjdXJyZW5jeTogY2hlY2tvdXRQcmV2aWV3LmN1cnJlbmN5IH07XG4gIH1cbn07XG5jb25zdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zID0gYXN5bmMgKGFsbENkZUNvbm5lY3Rpb25zLCBwYXlsb2FkKSA9PiB7XG4gIGlmIChhbGxDZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgIChjZGVDb25uKSA9PiBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkIH0sIFRva2VuaXplQ2FyZFJlc3BvbnNlKVxuICAgIClcbiAgKTtcbiAgcmV0dXJuIHJlc3BvbnNlcztcbn07XG5jb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IHRydWUsXG4gICAgdGltZW91dDogQ0RFX1BPTExJTkdfSU5URVJWQUwsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBxdWVyeUNERShjb25uZWN0aW9uT2JqLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgUGluZzNEU1N0YXR1c1Jlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3VsdC5zdGF0dXM7XG59O1xuXG5jb25zdCBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyA9IChzaW1wbGVPanNGbG93KSA9PiB7XG4gIHJldHVybiBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdGFydGVkKCk7XG4gICAgICBjb25zdCBmbG93UmVzdWx0ID0gYXdhaXQgc2ltcGxlT2pzRmxvdyhwYXJhbXMpO1xuICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBlcnJfXyhlcnJvcik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSwgZXJyX186IGVycl9fJDUgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uXCIpO1xuY29uc3QgcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICBpZiAocmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufTtcbmNvbnN0IGZpbmRDcG1NYXRjaGluZ1R5cGUgPSAoYWxsQ1BNcywgem9kTW9kZWwpID0+IHtcbiAgY29uc3QgY3BtID0gYWxsQ1BNcy5maW5kKChjcG0yKSA9PiB6b2RNb2RlbC5zYWZlUGFyc2UoY3BtMikuc3VjY2Vzcyk7XG4gIGlmICghY3BtKSB7XG4gICAgZXJyX18kNShgTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6YCwgYWxsQ1BNcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbGApO1xuICB9XG4gIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNCwgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IFJlcXVpcmVkRm9ybUZpZWxkcy5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcGF5bG9hZC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJDQoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gcGF5bG9hZC5kYXRhO1xufTtcbmNvbnN0IHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyA9ICh0b2tlbml6ZVJlc3VsdHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgaWYgKHRva2VuaXplUmVzdWx0LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICB0b2tlbml6ZVJlc3VsdC5lcnJvcnMuZm9yRWFjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgZXJyX18kNChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke2Vycm9yLmVsZW1lbnRUeXBlfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnNlZC5kYXRhO1xuICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3IuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsb2dfXyQ0KGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0b2tlbml6ZVJlc3VsdC5lcnJvcnMpfWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IE9KU19TVFJJUEVfTElOS19CVE5fSUQgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIjtcbmNvbnN0IHsgbG9nX186IGxvZ19fJDMsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1saW5rXCIpO1xuY29uc3QgU3RyaXBlTGlua0NwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgaW5pdFN0cmlwZUxpbmtGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZmxvd0NhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDMoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kMyhgTW91bnRpbmcgcGF5bWVudCBlbGVtZW50Li4uYCk7XG4gICAgY29uc3QgZXhwcmVzc0NoZWNrb3V0RWxlbWVudCA9IGVsZW1lbnRzLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGNvbnRleHQuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm9uKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIik7XG4gICAgICBpZiAoY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBjb250ZXh0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluay5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kMyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kMyhcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZsb3dDYWxsYmFja3Mub25DaGVja291dEVycm9yKHJlc3VsdC5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDMoXCJwYXltZW50TWV0aG9kXCIsIHJlc3VsdC5wYXltZW50TWV0aG9kKTtcbiAgICAgICAgT2pzRmxvd3Muc3RyaXBlTGluay5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBzdHJpcGVMaW5rQ3BtLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICAgIGZsb3dDYWxsYmFja3MsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiByZXN1bHQucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6IHRydWUgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogdHJ1ZSB9O1xuICB9XG4pO1xuY29uc3QgcnVuU3RyaXBlTGlua0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgIGZsb3dDYWxsYmFja3MsXG4gICAgY3VzdG9tUGFyYW1zXG4gIH0pID0+IHtcbiAgICBsb2dfXyQzKGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgbG9nX18kMyhgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0obm9uQ2RlRm9ybUlucHV0cywgY3VzdG9tUGFyYW1zLnN0cmlwZVBNKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQzKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkXG4gICAgfSk7XG4gICAgbG9nX18kMyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICAgIGNvbnN0IG91ckV4aXN0aW5nUG1JZCA9IG5leHRBY3Rpb25NZXRhZGF0YVswXS5vdXJfZXhpc3RpbmdfcG1faWQ7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQzKGBEb2luZyBwYXltZW50IHNldHVwLi4uYCk7XG4gICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogb3VyRXhpc3RpbmdQbUlkXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyQzKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgIH1cbiAgfVxuKTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0gPSAoZm9ybUlucHV0cywgc3RyaXBlUG0pID0+IHtcbiAgY29uc3QgaW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gIGNvbnN0IFtwYXllckZpcnN0TmFtZSwgLi4ucGF5ZXJMYXN0TmFtZVBhcnRzXSA9IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gIGNvbnN0IHBheWVyTGFzdE5hbWUgPSBwYXllckxhc3ROYW1lUGFydHMuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBwYXllckZpcnN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBwYXllckxhc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5FTUFJTF0gPSBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdHJpcGVQbVtcImxpbmtcIl0/LmVtYWlsIHx8IHN0cmlwZVBtLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LnBvc3RhbF9jb2RlIHx8IFwiMDAwMDBcIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBsb2dfXyQzKGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICB1cmwsXG4gIGJhc2VVcmxcbn0pIHtcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQyKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHNcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMihg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQyKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VOZXdGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7c2hvdWxkVXNlTmV3Rmxvd31gKTtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7c2hvdWxkVXNlTmV3RmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhc2hvdWxkVXNlTmV3Rmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDIoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQxKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kMShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDEoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMShgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICB9XG4gICAgbG9nX18kMShgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDEoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDEoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQxKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDEoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDEoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZykgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gdHJ1ZSA7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7d2l0aFByb3ZpZGVyfScgYW5kIHByb2Nlc3NvciAnJHt3aXRoUHJvY2Vzc29yfSdgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlc1swXTtcbn07XG5jb25zdCBPanNGbG93cyA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZVByRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZVByRmxvd1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUxpbmtGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzICh4KSB7XG5cdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG59XG5cbnZhciBPYnNlcnZhYmxlJDIgPSB7fTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGUkMiwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSB2b2lkIDA7XG5cbi8vID09PSBTeW1ib2wgU3VwcG9ydCA9PT1cbmNvbnN0IGhhc1N5bWJvbCA9IG5hbWUgPT4gQm9vbGVhbihTeW1ib2xbbmFtZV0pO1xuXG5jb25zdCBnZXRTeW1ib2wgPSBuYW1lID0+IGhhc1N5bWJvbChuYW1lKSA/IFN5bWJvbFtuYW1lXSA6ICdAQCcgKyBuYW1lO1xuXG5jb25zdCBTeW1ib2xJdGVyYXRvciA9IGdldFN5bWJvbCgnaXRlcmF0b3InKTtcbmNvbnN0IFN5bWJvbE9ic2VydmFibGUgPSBnZXRTeW1ib2woJ29ic2VydmFibGUnKTtcbmNvbnN0IFN5bWJvbFNwZWNpZXMgPSBnZXRTeW1ib2woJ3NwZWNpZXMnKTsgLy8gPT09IEFic3RyYWN0IE9wZXJhdGlvbnMgPT09XG5cbmZ1bmN0aW9uIGdldE1ldGhvZChvYmosIGtleSkge1xuICBsZXQgdmFsdWUgPSBvYmpba2V5XTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IodmFsdWUgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2llcyhvYmopIHtcbiAgbGV0IGN0b3IgPSBvYmouY29uc3RydWN0b3I7XG5cbiAgaWYgKGN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgIGN0b3IgPSBjdG9yW1N5bWJvbFNwZWNpZXNdO1xuXG4gICAgaWYgKGN0b3IgPT09IG51bGwpIHtcbiAgICAgIGN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN0b3IgIT09IHVuZGVmaW5lZCA/IGN0b3IgOiBPYnNlcnZhYmxlJDE7XG59XG5cbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZSh4KSB7XG4gIHJldHVybiB4IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSQxOyAvLyBTUEVDOiBCcmFuZCBjaGVja1xufVxuXG5mdW5jdGlvbiBob3N0UmVwb3J0RXJyb3IoZSkge1xuICBpZiAoaG9zdFJlcG9ydEVycm9yLmxvZykge1xuICAgIGhvc3RSZXBvcnRFcnJvci5sb2coZSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVucXVldWUoZm4pIHtcbiAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIGxldCBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jbGVhbnVwO1xuICBpZiAoY2xlYW51cCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHN1YnNjcmlwdGlvbi5fY2xlYW51cCA9IHVuZGVmaW5lZDtcblxuICBpZiAoIWNsZWFudXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdW5zdWJzY3JpYmUgPSBnZXRNZXRob2QoY2xlYW51cCwgJ3Vuc3Vic2NyaWJlJyk7XG5cbiAgICAgIGlmICh1bnN1YnNjcmliZSkge1xuICAgICAgICB1bnN1YnNjcmliZS5jYWxsKGNsZWFudXApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgc3Vic2NyaXB0aW9uLl9vYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdjbG9zZWQnO1xufVxuXG5mdW5jdGlvbiBmbHVzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgbGV0IHF1ZXVlID0gc3Vic2NyaXB0aW9uLl9xdWV1ZTtcblxuICBpZiAoIXF1ZXVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHF1ZXVlW2ldLnR5cGUsIHF1ZXVlW2ldLnZhbHVlKTtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKSB7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAncnVubmluZyc7XG4gIGxldCBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXI7XG5cbiAgdHJ5IHtcbiAgICBsZXQgbSA9IGdldE1ldGhvZChvYnNlcnZlciwgdHlwZSk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtlbHNlIHRocm93IHZhbHVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICB9XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7ZWxzZSBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ3J1bm5pbmcnKSBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3JlYWR5Jztcbn1cblxuZnVuY3Rpb24gb25Ob3RpZnkoc3Vic2NyaXB0aW9uLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHJldHVybjtcblxuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2J1ZmZlcmluZycpIHtcbiAgICBzdWJzY3JpcHRpb24uX3F1ZXVlLnB1c2goe1xuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSAhPT0gJ3JlYWR5Jykge1xuICAgIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnYnVmZmVyaW5nJztcbiAgICBzdWJzY3JpcHRpb24uX3F1ZXVlID0gW3tcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZVxuICAgIH1dO1xuICAgIGVucXVldWUoKCkgPT4gZmx1c2hTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbm90aWZ5U3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpO1xufVxuXG5jbGFzcyBTdWJzY3JpcHRpb24ge1xuICBjb25zdHJ1Y3RvcihvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICAgIC8vIEFTU0VSVDogb2JzZXJ2ZXIgaXMgYW4gb2JqZWN0XG4gICAgLy8gQVNTRVJUOiBzdWJzY3JpYmVyIGlzIGNhbGxhYmxlXG4gICAgdGhpcy5fY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgIHRoaXMuX3F1ZXVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N0YXRlID0gJ2luaXRpYWxpemluZyc7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBzdWJzY3JpcHRpb25PYnNlcnZlciA9IHtcbiAgICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgICB9LFxuXG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICduZXh0JywgdmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3IodmFsdWUpIHtcbiAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ2Vycm9yJywgdmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICdjb21wbGV0ZScpO1xuICAgICAgfVxuXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9jbGVhbnVwID0gc3Vic2NyaWJlci5jYWxsKHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2luaXRpYWxpemluZycpIHRoaXMuX3N0YXRlID0gJ3JlYWR5JztcbiAgfVxuXG4gIGdldCBjbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlID09PSAnY2xvc2VkJztcbiAgfVxuXG4gIHVuc3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbiAgICB9XG4gIH1cblxufVxuXG5sZXQgT2JzZXJ2YWJsZSQxID0gY2xhc3MgT2JzZXJ2YWJsZSB7XG4gIGNvbnN0cnVjdG9yKHN1YnNjcmliZXIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ09ic2VydmFibGUgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uJyk7XG4gICAgaWYgKHR5cGVvZiBzdWJzY3JpYmVyICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYnNlcnZhYmxlIGluaXRpYWxpemVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgIHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICB9XG5cbiAgc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgIG9ic2VydmVyID0ge1xuICAgICAgICBuZXh0OiBvYnNlcnZlcixcbiAgICAgICAgZXJyb3I6IGFyZ3VtZW50c1sxXSxcbiAgICAgICAgY29tcGxldGU6IGFyZ3VtZW50c1syXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fc3Vic2NyaWJlcik7XG4gIH1cblxuICBmb3JFYWNoKGZuKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4odmFsdWUsIGRvbmUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBtYXAoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICBmaWx0ZXIoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZm4odmFsdWUpKSByZXR1cm47XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICB9LFxuXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgIH0pKTtcbiAgfVxuXG4gIHJlZHVjZShmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIGxldCBoYXNTZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDE7XG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgbGV0IHNlZWQgPSBhcmd1bWVudHNbMV07XG4gICAgbGV0IGFjYyA9IHNlZWQ7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gIWhhc1ZhbHVlO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFmaXJzdCB8fCBoYXNTZWVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFjYyA9IGZuKGFjYywgdmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICB9LFxuXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKCFoYXNWYWx1ZSAmJiAhaGFzU2VlZCkgcmV0dXJuIG9ic2VydmVyLmVycm9yKG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCByZWR1Y2UgYW4gZW1wdHkgc2VxdWVuY2UnKSk7XG4gICAgICAgIG9ic2VydmVyLm5leHQoYWNjKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGFsbCgpIHtcbiAgICBsZXQgdmFsdWVzID0gW107XG4gICAgYXdhaXQgdGhpcy5mb3JFYWNoKHZhbHVlID0+IHZhbHVlcy5wdXNoKHZhbHVlKSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIGNvbmNhdCguLi5zb3VyY2VzKSB7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9uO1xuICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgZnVuY3Rpb24gc3RhcnROZXh0KG5leHQpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uID0gbmV4dC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQodikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBzb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBzdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFydE5leHQoQy5mcm9tKHNvdXJjZXNbaW5kZXgrK10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0TmV4dCh0aGlzKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmbGF0TWFwKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgIGxldCBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICBsZXQgb3V0ZXIgPSB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlubmVyID0gQy5mcm9tKHZhbHVlKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBzdWJzY3JpcHRpb25zLmluZGV4T2YoaW5uZXIpO1xuICAgICAgICAgICAgICBpZiAoaSA+PSAwKSBzdWJzY3JpcHRpb25zLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgY29tcGxldGVJZkRvbmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChpbm5lcik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkge1xuICAgICAgICBpZiAob3V0ZXIuY2xvc2VkICYmIHN1YnNjcmlwdGlvbnMubGVuZ3RoID09PSAwKSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICBvdXRlci51bnN1YnNjcmliZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIFtTeW1ib2xPYnNlcnZhYmxlXSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHgpIHtcbiAgICBsZXQgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6IE9ic2VydmFibGU7XG4gICAgaWYgKHggPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgbGV0IG1ldGhvZCA9IGdldE1ldGhvZCh4LCBTeW1ib2xPYnNlcnZhYmxlKTtcblxuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIGxldCBvYnNlcnZhYmxlID0gbWV0aG9kLmNhbGwoeCk7XG4gICAgICBpZiAoT2JqZWN0KG9ic2VydmFibGUpICE9PSBvYnNlcnZhYmxlKSB0aHJvdyBuZXcgVHlwZUVycm9yKG9ic2VydmFibGUgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgIGlmIChpc09ic2VydmFibGUob2JzZXJ2YWJsZSkgJiYgb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzU3ltYm9sKCdpdGVyYXRvcicpKSB7XG4gICAgICBtZXRob2QgPSBnZXRNZXRob2QoeCwgU3ltYm9sSXRlcmF0b3IpO1xuXG4gICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbWV0aG9kLmNhbGwoeCkpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtKTtcbiAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KHhbaV0pO1xuICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBub3Qgb2JzZXJ2YWJsZScpO1xuICB9XG5cbiAgc3RhdGljIG9mKC4uLml0ZW1zKSB7XG4gICAgbGV0IEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBPYnNlcnZhYmxlO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2ldKTtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IFtTeW1ib2xTcGVjaWVzXSgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG59O1xuXG5PYnNlcnZhYmxlJDIuT2JzZXJ2YWJsZSA9IE9ic2VydmFibGUkMTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDEsIFN5bWJvbCgnZXh0ZW5zaW9ucycpLCB7XG4gIHZhbHVlOiB7XG4gICAgc3ltYm9sOiBTeW1ib2xPYnNlcnZhYmxlLFxuICAgIGhvc3RSZXBvcnRFcnJvclxuICB9LFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG52YXIgemVuT2JzZXJ2YWJsZSA9IE9ic2VydmFibGUkMi5PYnNlcnZhYmxlO1xuXG5jb25zdCBPYnNlcnZhYmxlID0gLypAX19QVVJFX18qL2dldERlZmF1bHRFeHBvcnRGcm9tQ2pzKHplbk9ic2VydmFibGUpO1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuY29uc3QgZ2V0T2pzSW5pdFJlc3VsdHNEZWJ1Z09iamVjdCA9ICgpID0+IHtcbiAgaWYgKCEoXCJvanNfaW5pdF9yZXN1bHRzXCIgaW4gd2luZG93KSkge1xuICAgIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl0gPSB7fTtcbiAgfVxuICByZXR1cm4gd2luZG93W1wib2pzX2luaXRfcmVzdWx0c1wiXTtcbn07XG5jb25zdCBpbml0aWFsaXplT2pzRmxvd3MgPSAoY29udGV4dCwgZmxvd0NhbGxiYWNrcykgPT4ge1xuICBjb25zdCBpbml0UGFyYW1zID0geyBjb250ZXh0LCBmbG93Q2FsbGJhY2tzIH07XG4gIHJldHVybiB7XG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlKFwic3RyaXBlUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdChpbml0UGFyYW1zKSksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZUxpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KGluaXRQYXJhbXMpKVxuICAgIC8vIPCfkYkgQWRkIGluaXRpYWxpemF0aW9uIGZsb3dzIGhlcmVcbiAgfTtcbn07XG5jb25zdCBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgIGluaXRGbG93LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJsb2FkZWRcIiwgcmVzdWx0IH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJlcnJvclwiLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICBnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0KClbZmxvd05hbWVdID0gcmVzdWx0O1xuICAgIH0sXG4gICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18oYCR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZXJyb3I6XG4ke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYnNlcnZhYmxlO1xufTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuY29uc3QgUFJfRVJST1IgPSB7XG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNsYXNzIE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoZm9ybUluc3RhbmNlKSB7XG4gICAgdGhpcy5mb3JtSW5zdGFuY2UgPSBmb3JtSW5zdGFuY2U7XG4gICAgdGhpcy5jb25maWcgPSBmb3JtSW5zdGFuY2UuY29uZmlnO1xuICAgIHRoaXMuZm9ybUlkID0gZm9ybUluc3RhbmNlLmZvcm1JZDtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgfVxuICBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5zb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGZvdW5kYCk7XG4gICAgfVxuICAgIGlmIChldmVudC5vcmlnaW4gIT09IHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5fZnJhbWVVcmw/Lm9yaWdpbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQuZGF0YVtcInBlbnBhbFwiXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBldmVudERhdGEgPSBwYXJzZUV2ZW50UGF5bG9hZChKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgY29uc3QgeyBlbGVtZW50SWQsIHBheWxvYWQgfSA9IGV2ZW50RGF0YTtcbiAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVMYXlvdXRFdmVudChwYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVGb2N1c0V2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgdGhpcy5oYW5kbGVCbHVyRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlRXZlbnQoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICB0aGlzLmhhbmRsZUxvYWRlZEV2ZW50KGV2ZW50LnNvdXJjZSwgZWxlbWVudElkLCBwYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICB0aGlzLmhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yRXZlbnQocGF5bG9hZCwgZWxlbWVudElkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKSB7XG4gICAgaWYgKGV2ZW50RGF0YS5mb3JtSWQgIT09IHRoaXMuZm9ybUluc3RhbmNlLmZvcm1JZCB8fCAhZXZlbnREYXRhLmVsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5ub25jZXMuaGFzKGV2ZW50RGF0YS5ub25jZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5ub25jZXMuYWRkKGV2ZW50RGF0YS5ub25jZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaGFuZGxlTGF5b3V0RXZlbnQocGF5bG9hZCkge1xuICAgIGNvbnN0IGhlaWdodCA9IHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCI7XG4gICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2V0Rm9ybUhlaWdodChoZWlnaHQpO1xuICB9XG4gIGhhbmRsZUZvY3VzRXZlbnQoZWxlbWVudElkLCBmaWVsZCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkZvY3VzKSB0aGlzLmNvbmZpZy5vbkZvY3VzKGVsZW1lbnRJZCwgZmllbGQpO1xuICB9XG4gIGhhbmRsZUJsdXJFdmVudChlbGVtZW50SWQsIGZpZWxkKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uQmx1cikgdGhpcy5jb25maWcub25CbHVyKGVsZW1lbnRJZCwgZmllbGQpO1xuICB9XG4gIGhhbmRsZUNoYW5nZUV2ZW50KGVsZW1lbnRJZCwgZmllbGQsIGVycm9ycykge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkNoYW5nZSkgdGhpcy5jb25maWcub25DaGFuZ2UoZWxlbWVudElkLCBmaWVsZCwgZXJyb3JzKTtcbiAgfVxuICBhc3luYyBoYW5kbGVMb2FkZWRFdmVudChzb3VyY2UsIGVsZW1lbnRJZCwgcGF5bG9hZCkge1xuICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBzb3VyY2U7XG4gICAgdGhpcy5mb3JtSW5zdGFuY2Uub25DZGVMb2FkZWQocGF5bG9hZCk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uTG9hZCkge1xuICAgICAgdGhpcy5jb25maWcub25Mb2FkKHBheWxvYWQudG90YWxBbW91bnRBdG9tcywgcGF5bG9hZC5jdXJyZW5jeSk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpIHtcbiAgICBpZiAodGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uTG9hZEVycm9yKSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25Mb2FkRXJyb3IocGF5bG9hZC5tZXNzYWdlKTtcbiAgfVxuICBoYW5kbGVWYWxpZGF0aW9uRXJyb3JFdmVudChwYXlsb2FkLCBlbGVtZW50SWQpIHtcbiAgICBpZiAodGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25WYWxpZGF0aW9uRXJyb3IocGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMsIGVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG4gIC8vIGFzeW5jIGhhbmRsZUVycm9yRXZlbnQocGF5bG9hZDogRXJyb3JFdmVudFBheWxvYWQpIHtcbiAgLy8gICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnM0RTX1JFUVVJUkVEJykge1xuICAvLyAgICAgY29uc3QgdGhyZWVEU1VybCA9IHBheWxvYWQuaGVhZGVycz8uWyd4LTNkcy1hdXRoLXVybCddID8/IFNJTVVMQVRFXzNEU19VUkw7XG4gIC8vICAgICAvLyBUaGlzIHdpbGwgb3BlbiBhIHBvcHVwIGFuZCBwcm9jZXNzIHRoZSAzRFMgZmxvd1xuICAvLyAgICAgLy8gd2lsbCByZXR1cm4gYSBzdGF0dXMgYHN1Y2Nlc3NgIHwgYGZhaWx1cmVgIHwgYGNhbmNlbGxlZGAgd2hpY2ggd2UgY2FuIGNvbnRpbnVlIHdpdGhcbiAgLy8gICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiB0aHJlZURTVXJsLCBiYXNlVXJsOiB0aGlzLmNvbmZpZy5iYXNlVXJsISB9KTtcbiAgLy8gICAgIGNvbnNvbGUubG9nKCfwn5SQIDNEUyBzdGF0dXM6Jywgc3RhdHVzKTtcbiAgLy8gICAgIC8vIFRPRE86IGNvbnRpbnVlIHdpdGggc3RhdHVzXG4gIC8vICAgICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcz8uZmluZCgoY3BtKSA9PiBjcG0ucHJvdmlkZXIgPT09ICdjcmVkaXRfY2FyZCcpO1xuICAvLyAgICAgaWYgKCF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHwgIXRoaXMuZm9ybUluc3RhbmNlLmZvcm1UYXJnZXQgfHwgIXRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yIHx8ICFjYXJkQ3BtKVxuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gIC8vICAgICAgIGlmICghdGFyZ2V0KSBjb250aW51ZTtcbiAgLy8gICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAvLyAgICAgICAgIEV2ZW50VHlwZS5lbnVtLlNUQVJUX1BBWU1FTlRfRkxPVyxcbiAgLy8gICAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQsXG4gIC8vICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAvLyAgICAgICAgIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yLFxuICAvLyAgICAgICAgIHsgLi4uY2FyZENwbSwgcHJvY2Vzc29yX25hbWU6ICdzdHJpcGUnIH0sXG4gIC8vICAgICAgICAgZmFsc2VcbiAgLy8gICAgICAgKTtcbiAgLy8gICAgICAgaWYgKCFzdGFydFBheW1lbnRGbG93RXZlbnQpIGNvbnRpbnVlO1xuICAvLyAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gdHJ1ZTtcbiAgLy8gICAgICAgdGhpcy50b2tlbml6ZWREYXRhID0gc3RhcnRQYXltZW50Rmxvd0V2ZW50O1xuICAvLyAgICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUodGFyZ2V0LCBlbGVtZW50SWQsIHN0YXJ0UGF5bWVudEZsb3dFdmVudCk7XG4gIC8vICAgICAgIGJyZWFrO1xuICAvLyAgICAgfVxuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gIC8vICAgICBpZiAodGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcikgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAvLyAgIH1cbiAgLy8gfVxuICAvLyBoYW5kbGVGb3JtU3VibWl0KCkge1xuICAvLyAgIGlmIChcbiAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHxcbiAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzPy5sZW5ndGggfHxcbiAgLy8gICAgICF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvclxuICAvLyAgICkge1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gIC8vICAgaWYgKCFjYXJkQ3BtKSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhcmQgbm90IGF2YWlsYWJsZSBhcyBhIHBheW1lbnQgbWV0aG9kIGluIGNoZWNrb3V0Jyk7XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHRva2VuaXplRGF0YSA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgLy8gICAgIEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFLFxuICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkISxcbiAgLy8gICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgLy8gICAgIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yLFxuICAvLyAgICAgY2FyZENwbSxcbiAgLy8gICAgIGZhbHNlXG4gIC8vICAgKTtcbiAgLy8gICBpZiAoIXRva2VuaXplRGF0YSkge1xuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBjb25zdHJ1Y3RpbmcgdG9rZW5pemUgZGF0YScpO1xuICAvLyAgIH1cbiAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gIC8vICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUodGFyZ2V0LCBlbGVtZW50SWQsIHRva2VuaXplRGF0YSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMudG9rZW5pemVkRGF0YSA9IHRva2VuaXplRGF0YTtcbiAgLy8gfVxuICAvLyBhc3luYyBvblVzZXJDb21wbGV0ZVBheW1lbnRSZXF1ZXN0VUkoXG4gIC8vICAgc3RyaXBlUG06IFBheW1lbnRSZXF1ZXN0UGF5bWVudE1ldGhvZEV2ZW50LFxuICAvLyAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG4gIC8vICk6IFByb21pc2U8dm9pZD4ge1xuICAvLyAgIGlmICghdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IgfHwgIXRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCB8fCAhdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcylcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzID8/IHt9KSkge1xuICAvLyAgICAgY29uc3QgcGF5bWVudEZsb3dNZXRhZGF0YSA9IHsgc3RyaXBlUG1JZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZCB9O1xuICAvLyAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAvLyAgICAgICBFdmVudFR5cGUuZW51bS5TVEFSVF9QQVlNRU5UX0ZMT1csXG4gIC8vICAgICAgIHRoaXMuZm9ybUluc3RhbmNlLnNlc3Npb25JZCxcbiAgLy8gICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAvLyAgICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgLy8gICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAvLyAgICAgICBmYWxzZSxcbiAgLy8gICAgICAgcGF5bWVudEZsb3dNZXRhZGF0YVxuICAvLyAgICAgKTtcbiAgLy8gICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgLy8gICAgIHRoaXMuc3RyaXBlUG0gPSBzdHJpcGVQbTtcbiAgLy8gICAgIHRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0RmlyZWQgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5zZXRUb2tlbml6ZWREYXRhKHN0YXJ0UGF5bWVudEZsb3dFdmVudCk7XG4gIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUoZWxlbWVudCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAvLyAgICAgLy8gZW1pdEV2ZW50KGVsZW1lbnQubm9kZS5jb250ZW50V2luZG93ISwgdGhpcy5mb3JtSWQsIGVsZW1lbnRJZCwgc3RhcnRQYXltZW50Rmxvd0V2ZW50LCB0aGlzLmNvbmZpZy5iYXNlVXJsISk7XG4gIC8vICAgICBicmVhaztcbiAgLy8gICB9XG4gIC8vIH1cbiAgcG9zdEV2ZW50VG9GcmFtZShzb3VyY2UsIGVsZW1lbnRJZCwgZGF0YSkge1xuICAgIGVtaXRFdmVudChzb3VyY2UsIHRoaXMuZm9ybUlkLCBlbGVtZW50SWQsIGRhdGEsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IGlzVmFsaWRPYmplY3QgPSBhd2FpdCBjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0KGNvbm5lY3Rpb25PYmopO1xuICBpZiAoIWlzUmVzdWx0VmFsaWQoY29ubmVjdGlvbk9iaiwgaXNWYWxpZE9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICB9XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKGlkLCBjb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5cbmNsYXNzIE9wZW5QYXlGb3JtIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy50cnlJbml0T2pzRmxvd3MgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCkuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3ModGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpLCB0aGlzLmNyZWF0ZU9qc0Zsb3dDYWxsYmFja3MoKSk7XG4gICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24uc3RyaXBlUFIuc3Vic2NyaWJlKChzdGF0dXMpID0+IHRoaXMub25TdHJpcGVQUlN0YXR1c0NoYW5nZShzdGF0dXMpKTtcbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkZWQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2RlTG9hZGVkUGF5bG9hZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNkZUxvYWRlZFBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgdGhpcy50cnlJbml0T2pzRmxvd3MoKTtcbiAgICB9O1xuICAgIHRoaXMub25TdHJpcGVQUlN0YXR1c0NoYW5nZSA9IChpbml0U3RhdHVzKSA9PiB7XG4gICAgICBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oeyBhcHBsZV9wYXk6IFBSX0xPQURJTkcsIGdvb2dsZV9wYXk6IFBSX0xPQURJTkcgfSk7XG4gICAgICB9IGVsc2UgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgdGhpcy5jb25maWcub25QYXltZW50UmVxdWVzdExvYWQ/Lih7IGFwcGxlX3BheTogUFJfRVJST1IsIGdvb2dsZV9wYXk6IFBSX0VSUk9SIH0pO1xuICAgICAgfSBlbHNlIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gaW5pdFN0YXR1cy5yZXN1bHQ7XG4gICAgICAgIGNvbnN0IGNhbkFwcGxlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICAgICAgY29uc3QgY2FuR29vZ2xlUGF5ID0gaW5pdFJlc3VsdC5pc0F2YWlsYWJsZSAmJiBpbml0UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oe1xuICAgICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkFwcGxlUGF5ID8gdGhpcy5zdWJtaXRQYXltZW50UmVxdWVzdChcImFwcGxlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5Hb29nbGVQYXksXG4gICAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5Hb29nbGVQYXkgPyB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZU9qc0Zsb3dDb250ZXh0KCk7XG4gICAgICByZXR1cm4gT2pzRmxvd3Muc3RyaXBlUFIucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgZmxvd0NhbGxiYWNrczogdGhpcy5jcmVhdGVPanNGbG93Q2FsbGJhY2tzKCksXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgIGluaXRSZXN1bHRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiIH07XG4gICAgdGhpcy5lbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7d2luZG93LmNyeXB0by5yYW5kb21VVUlEKCl9YDtcbiAgICB0aGlzLnJlZmVyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9O1xuICAgIHRoaXMuY2RlTG9hZGVkUGF5bG9hZCA9IG51bGw7XG4gICAgdGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uID0gbnVsbDtcbiAgICB0aGlzLmNoZWNrb3V0RmlyZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjEuOFwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuMS44XCI7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIC8qKlxuICAgKiBBc3NpZ24gdGhlIGluc3RhbmNlIHRvIHRoZSB3aW5kb3cgYXMgYSBzaW5nbGV0b25cbiAgICogQHBhcmFtIGZvcm0gLSBUaGUgT3BlblBheUZvcm0gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBhc3NpZ25Bc1NpbmdsZXRvbihmb3JtKSB7XG4gICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgIH1cbiAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBPcGVuUGF5Rm9ybVxuICAgKiBAcmV0dXJucyBUaGUgT3BlblBheUZvcm0gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk1hbmFnZXI7XG4gIH1cbiAgc2V0Rm9ybUhlaWdodChoZWlnaHQpIHtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICBpZiAodGhpcy5lbGVtZW50cykge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmVsZW1lbnRzKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY3JlYXRlRWxlbWVudChlbGVtZW50VmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgY29uc3QgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpO1xuICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7ZnJhbWUubmFtZX1gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmcudG9TdHJpbmcoKTtcbiAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICB0aGlzLmNvbmZpZy5fZnJhbWVVcmwgPSB1cmw7XG4gICAgZnJhbWUuc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICBjb25zdCBlbGVtZW50ID0ge1xuICAgICAgdHlwZSxcbiAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgbW91bnQ6IChzZWxlY3RvcikgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik/LmFwcGVuZENoaWxkKGZyYW1lKVxuICAgIH07XG4gICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICh0aGlzLmVsZW1lbnRzKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW3R5cGVdID0gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbGVtZW50cyA9IHsgW3R5cGVdOiBlbGVtZW50IH07XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIGJ1aWxkUXVlcnlTdHJpbmcob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcmVyKTtcbiAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic3R5bGVzXCIsIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMuc3R5bGVzKSk7XG4gICAgfVxuICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgfVxuICBjb25uZWN0VG9FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQubm9kZSkudGhlbigoY29ubikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICB0aGlzLnRyeUluaXRPanNGbG93cygpO1xuICAgIH0pLmNhdGNoKChlcnIpID0+IHZvaWQgMCk7XG4gIH1cbiAgZ2V0Rm9ybURpdigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHk7XG4gIH1cbiAgY3JlYXRlT2pzRmxvd0NvbnRleHQoKSB7XG4gICAgY29uc3QgY2RlQ29ubmVjdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCk7XG4gICAgaWYgKCF0aGlzLmNkZUxvYWRlZFBheWxvYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3RlZCBjb250ZXh0IHdoaWxlIENERSBub3QgeWV0IGxvYWRlZFwiKTtcbiAgICB9XG4gICAgaWYgKGNkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VVcmw6IG5ldyBVUkwodGhpcy5jb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgZm9ybURpdjogdGhpcy5nZXRGb3JtRGl2KCksXG4gICAgICBlbGVtZW50c1Nlc3Npb25JZDogdGhpcy5jZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHRoaXMuY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgY2RlQ29ubmVjdGlvbnMsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiB0aGlzLmNvbmZpZy5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG4gICAgfTtcbiAgfVxuICBjcmVhdGVPanNGbG93Q2FsbGJhY2tzKCkge1xuICAgIGNvbnN0IG5vT3AgPSAoKSA9PiB7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb25DaGVja291dEVycm9yOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25DaGVja291dEVycm9yXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvciA/PyBub09wKSxcbiAgICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25DaGVja291dFN0YXJ0ZWRcIiwgdGhpcy5jb25maWcub25DaGVja291dFN0YXJ0ZWQgPz8gbm9PcCksXG4gICAgICBvbkNoZWNrb3V0U3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdWNjZXNzXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdWNjZXNzID8/IG5vT3ApLFxuICAgICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBtYWtlQ2FsbGJhY2tTYWZlKFxuICAgICAgICBcIm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzc1wiLFxuICAgICAgICB0aGlzLmNvbmZpZy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPz8gbm9PcFxuICAgICAgKSxcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yOiBtYWtlQ2FsbGJhY2tTYWZlKFwib25WYWxpZGF0aW9uRXJyb3JcIiwgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IgPz8gbm9PcClcbiAgICB9O1xuICB9XG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpO1xuICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgZmxvd0NhbGxiYWNrczogdGhpcy5jcmVhdGVPanNGbG93Q2FsbGJhY2tzKCksXG4gICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBjdXN0b20gcGFyYW1zXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgIH0pO1xuICB9XG4gIG9uUGF5bWVudFJlcXVlc3RFcnJvcihlcnJNc2cpIHtcbiAgICB0aGlzLmNoZWNrb3V0RmlyZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmNvbmZpZy5vbkNoZWNrb3V0RXJyb3IoZXJyTXNnKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKHRoaXMuZWxlbWVudHMgPz8ge30pKSB7XG4gICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgfVxufVxuXG5leHBvcnQgeyBGaWVsZE5hbWUsIE9wZW5QYXlGb3JtIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFBQSxTQUFTO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxPQUFXO0FBRWxCLE1BQU1DLEtBQWlCLDhCQUVqQkMsS0FBNEJMLEVBQUUsT0FBTztBQUFBLEVBQ3pDLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsS0FBS0EsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3ZCLEtBQUtBLEVBQUUsT0FBTztBQUFBLEVBQ2QsS0FBS0EsRUFBRSxPQUFPO0FBQ2hCLENBQUMsR0FDS00sS0FBa0NOLEVBQUUsTUFBTUssRUFBeUIsR0FDbkVFLEtBQWdCUCxFQUFFLE9BQU87QUFBQSxFQUM3QixNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLFNBQVNBLEVBQUUsT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUUsTUFBTUEsRUFBRSxPQUFPLENBQUM7QUFDMUIsQ0FBQyxHQUNLUSxLQUFpQlIsRUFBRSxNQUFNTyxFQUFhLEdBQ3RDRSxLQUFrQztBQUFBLEVBQ3RDLG1CQUFtQjtBQUNyQixHQUNNQyxJQUEwQixDQUFDQyxNQUFtQjtBQUNsRCxRQUFNQyxJQUFNRCxFQUFlLFlBQVksRUFBRSxLQUFLO0FBQzlDLFNBQU9GLEdBQWdDRyxDQUFHLEtBQUtEO0FBQ2pELEdBQ01FLEtBQTBCLENBQUNDLE1BQVE7QUFDdkMsTUFB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cEcsa0JBQWtCckksRUFBeUJxSSxFQUFRLE9BQU87QUFBQSxNQUMxRCxlQUFlLEtBQUssdUJBQXVCO0FBQUEsTUFDM0MsY0FBYztBQUFBO0FBQUEsTUFFZCxZQUFZO0FBQUE7QUFBQSxJQUVkLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFDQSxzQkFBc0JzSyxHQUFRO0FBQzVCLFNBQUssZ0JBQWdCLElBQ2pCLEtBQUssT0FBTyxtQkFBaUIsS0FBSyxPQUFPLGdCQUFnQkEsQ0FBTTtBQUFBLEVBQ3JFO0FBQUEsRUFDQSxVQUFVO0FBQ1IsZUFBV1IsS0FBVyxPQUFPLE9BQU8sS0FBSyxZQUFZLENBQUMsQ0FBQztBQUNyRCxNQUFBQSxFQUFRLEtBQUssT0FBTztBQUV0QixXQUFPLG9CQUFvQixXQUFXLEtBQUssYUFBYSxjQUFjLEtBQUssS0FBSyxZQUFZLENBQUM7QUFBQSxFQUMvRjtBQUNGO0FBaElJVCxFQUFLLFdBQVc3STtBQXpFcEIsSUFBTStKLEtBQU5sQjsiLAogICJuYW1lcyI6IFsieiIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJjaGFsayIsICJGUkFNRV9CQVNFX1VSTCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UiLCAiWm9kRmllbGRFcnJvciIsICJab2RGaWVsZEVycm9ycyIsICJNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFIiwgImdldEh1bWFuRnJpZW5kbHlNZXNzYWdlIiwgIm9nRXJyb3JNZXNzYWdlIiwgImtleSIsICJpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCIsICJzdHIiLCAiY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJyZXNwb25zZSIsICJlcnIiLCAiY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyIsICJlcnJvcnMiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgImUiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImFyZ3MiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJlcnJvciIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiY29uZmlybVN0cmlwZVByUE0iLCAibmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtIiwgImNvbmZpcm1SZXN1bHQiLCAibGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJyZXN1bHRTdGF0dXMiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybSIsICJmb3JtRGl2IiwgImluaXRpYWxEaWN0IiwgImFjYyIsICJpbnB1dCIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJldmVudERhdGEiLCAiZW1pdEV2ZW50IiwgInRhcmdldCIsICJmb3JtSWQiLCAiZWxlbWVudElkIiwgInBheWxvYWQiLCAiYmFzZVVybCIsICJldmVudCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJudWxsT3JVbmRlZk9yIiwgIkNERVJlc3BvbnNlRXJyb3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIlNldHVwQ2hlY2tvdXRSZXNwb25zZSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJTdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAiU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UiLCAic3VtIiwgImFyciIsICJhIiwgImIiLCAiZml4UHJvdG8iLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiQ3VzdG9tRXJyb3IiLCAiX3N1cGVyIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIkNkZUVycm9yIiwgImZyaWVuZGx5TWVzc2FnZSIsICJxdWVyeUNERSIsICJjZGVDb25uIiwgImRhdGEiLCAicmVzcG9uc2VTY2hlbWEiLCAiaXNDREVSZXNwb25zZUVycm9yIiwgImNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hIiwgInNjaGVtYSIsICJnZXRDaGVja291dFByZXZpZXciLCAicmVxdWVzdCIsICJnZXRQcmVmaWxsIiwgInN0YXJ0UGF5bWVudEZsb3ciLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJzaW1wbGVPanNGbG93IiwgInBhcmFtcyIsICJmbG93UmVzdWx0IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImxvZ19fJDUiLCAiZXJyX18kNSIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJsb2dfXyQ0IiwgImVycl9fJDQiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgIk9KU19TVFJJUEVfTElOS19CVE5fSUQiLCAibG9nX18kMyIsICJlcnJfXyQzIiwgIlN0cmlwZUxpbmtDcG0iLCAiU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMiLCAiaW5pdFN0cmlwZUxpbmtGbG93IiwgImNvbnRleHQiLCAiZmxvd0NhbGxiYWNrcyIsICJzdHJpcGVMaW5rQ3BtIiwgImFueUNkZUNvbm5lY3Rpb24iLCAicHJlZmlsbCIsICJpbml0aWFsUHJldmlldyIsICJlbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIk9qc0Zsb3dzIiwgInJ1blN0cmlwZUxpbmtGbG93IiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAic3RhcnRQb2xsaW5nIiwgIm9uU3VjY2VzcyIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAiaGFuZGxlRXZlbnRzIiwgImhhbmRsZUNhbmNlbCIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAibG9nX18kMiIsICJlcnJfXyQyIiwgInN0cmlwZUxvZ19fIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJ0b2tlbml6ZUNhcmRSZXN1bHRzIiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInNob3VsZFVzZU5ld0Zsb3ciLCAic3RhcnRQZlJlc3VsdCIsICJjb21tb25DQzNEU0Zsb3ciLCAic3RyaXBlQ0MzRFNGbG93IiwgImNyZWF0ZWRQYXltZW50TWV0aG9kIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDEiLCAiZXJyX18kMSIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyIsICJpbml0UmVzdWx0IiwgIm92ZXJyaWRlIiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAiZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQbSIsICJwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZVBtRXZ0IiwgImFtb3VudCIsICJpc1BlbmRpbmciLCAiZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCIsICJjcG1zIiwgIndpdGhQcm92aWRlciIsICJ3aXRoUHJvY2Vzc29yIiwgIm1hdGNoZXMiLCAiZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMiLCAieCIsICJPYnNlcnZhYmxlJDIiLCAiaGFzU3ltYm9sIiwgIm5hbWUiLCAiZ2V0U3ltYm9sIiwgIlN5bWJvbEl0ZXJhdG9yIiwgIlN5bWJvbE9ic2VydmFibGUiLCAiU3ltYm9sU3BlY2llcyIsICJnZXRNZXRob2QiLCAiZ2V0U3BlY2llcyIsICJjdG9yIiwgIk9ic2VydmFibGUkMSIsICJpc09ic2VydmFibGUiLCAiaG9zdFJlcG9ydEVycm9yIiwgImVucXVldWUiLCAiY2xlYW51cFN1YnNjcmlwdGlvbiIsICJzdWJzY3JpcHRpb24iLCAiY2xlYW51cCIsICJ1bnN1YnNjcmliZSIsICJjbG9zZVN1YnNjcmlwdGlvbiIsICJmbHVzaFN1YnNjcmlwdGlvbiIsICJxdWV1ZSIsICJub3RpZnlTdWJzY3JpcHRpb24iLCAidHlwZSIsICJvYnNlcnZlciIsICJtIiwgIm9uTm90aWZ5IiwgIlN1YnNjcmlwdGlvbiIsICJzdWJzY3JpYmVyIiwgInNlbGYiLCAic3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCAiT2JzZXJ2YWJsZSIsICJkb25lIiwgIkMiLCAiaGFzU2VlZCIsICJoYXNWYWx1ZSIsICJmaXJzdCIsICJ2YWx1ZXMiLCAic291cmNlcyIsICJpbmRleCIsICJzdGFydE5leHQiLCAibmV4dCIsICJ2IiwgInN1YnNjcmlwdGlvbnMiLCAib3V0ZXIiLCAiaW5uZXIiLCAiY29tcGxldGVJZkRvbmUiLCAicyIsICJtZXRob2QiLCAib2JzZXJ2YWJsZSIsICJpdGVtIiwgIml0ZW1zIiwgInplbk9ic2VydmFibGUiLCAibG9nX18iLCAiZ2V0T2pzSW5pdFJlc3VsdHNEZWJ1Z09iamVjdCIsICJpbml0aWFsaXplT2pzRmxvd3MiLCAiaW5pdFBhcmFtcyIsICJydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJQUl9MT0FESU5HIiwgIlBSX0VSUk9SIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JbnN0YW5jZSIsICJoZWlnaHQiLCAiZmllbGQiLCAic291cmNlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJpZCIsICJjb25uZWN0aW9uIiwgIl9PcGVuUGF5Rm9ybSIsICJjb25maWciLCAiaW5pdFN0YXR1cyIsICJfZiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAidXNlclBhcmFtcyIsICJwcm92aWRlciIsICJmb3JtIiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY2RlQ29ubmVjdGlvbnMiLCAibm9PcCIsICJlcnJNc2ciLCAiT3BlblBheUZvcm0iXQp9Cg==