@dbx-tools/appkit-mastra 0.9.110 → 0.9.111

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.
@@ -184,7 +184,7 @@ function workspaceTools(configured) {
184
184
  };
185
185
  }
186
186
  function resolveWorkspaceSandbox(selection, workspaceId, workspaceName) {
187
- const configured = selection ?? false;
187
+ const configured = selection ?? "monty";
188
188
  if (configured === false)
189
189
  return undefined;
190
190
  if (configured === "monty")
@@ -740,4 +740,4 @@ function contributionResolver(resolvers) {
740
740
  return pending;
741
741
  };
742
742
  }
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsSUFBSSxnQkFBZ0IsR0FHL0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUNMLEVBQUUsSUFBSSxRQUFRLEVBQ2QsU0FBUyxFQUtULGdCQUFnQixHQUNqQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTCxTQUFTLEdBT1YsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsY0FBYyxHQUVmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsMEJBQTBCLEdBRTNCLE1BQU0sa0JBQWtCLENBQUM7QUFD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KiBNYXN0cmEgd29ya3NwYWNlIGZhY3RvcnkgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBCdWlsZHMgbmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBmcm9tIERhdGFicmlja3MgcGF0aHMuIFBhdGhzXG4gKiBtb3VudCBhdCB0aGUgc2FtZSBwYXRoIGJ5IGRlZmF1bHQsIGB+YCByZXNvbHZlcyB0byB0aGUgY3VycmVudCB1c2VyJ3NcbiAqIERhdGFicmlja3Mgd29ya3NwYWNlIGhvbWUsIGFuZCBgL3RtcFsvc3VicGF0aF1gIHJlc29sdmVzIHRvIHN0YWJsZVxuICogdXNlci1zY29wZWQgc3RvcmFnZSB1bmRlciB0aGUgaG9zdCdzIGVwaGVtZXJhbCB0ZW1wIGRpcmVjdG9yeS5cbiAqXG4gKiBEYXRhYnJpY2tzIG1vdW50cyB1c2UgYEBkYngtdG9vbHMvZGF0YWJyaWNrc2Age0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfVxuICogd3JhcHBlZCBieSB7QGxpbmsgZmlsZXN5c3RlbXN9OyBpbmFjY2Vzc2libGUgcm9vdHMgYXJlIHNraXBwZWQgaW5kZXBlbmRlbnRseS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXBwa2l0LCBwbHVnaW5SZWdpc3RyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgZmlsZXNDYWNoZSBhcyBmaWxlc0NhY2hlUGx1Z2luLFxuICB0eXBlIEZpbGVzQ2FjaGVFeHBvcnRzLFxuICB0eXBlIEZpbGVzQ2FjaGVTY29wZSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0L2ZpbGVzLWNhY2hlXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzRmlsZVN5c3RlbSwgd29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuaW1wb3J0IHsgTG9jYWxGaWxlU3lzdGVtIH0gZnJvbSBcIkBkYngtdG9vbHMvZnNcIjtcbmltcG9ydCB7IG1hdGNoLCB0eXBlIFBhdGhNYXRjaElucHV0IH0gZnJvbSBcIkBkYngtdG9vbHMvcGF0aFwiO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBmcyBhcyBzaGFyZWRGUyxcbiAgcG9zaXhQYXRoLFxuICB0eXBlIENhY2hlYWJsZUZpbGVTeXN0ZW1PcGVyYXRpb24sXG4gIHR5cGUgRmlsZVN5c3RlbSxcbiAgdHlwZSBGaWxlU3lzdGVtQ2FjaGUsXG4gIHR5cGUgRmlsZVN5c3RlbUNhY2hlT3B0aW9ucyxcbiAgTWVtb3J5RmlsZVN5c3RlbSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gIFdvcmtzcGFjZSxcbiAgdHlwZSBTa2lsbHNSZXNvbHZlcixcbiAgdHlwZSBXb3Jrc3BhY2VDb25maWcsXG4gIHR5cGUgV29ya3NwYWNlRmlsZXN5c3RlbSxcbiAgdHlwZSBXb3Jrc3BhY2VTYW5kYm94LFxuICB0eXBlIFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlcixcbiAgdHlwZSBXb3Jrc3BhY2VUb29sc0NvbmZpZyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcblxuaW1wb3J0IHtcbiAgTUFTVFJBX1NDT1BFU19LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgTUFTVFJBX1VTRVJfS0VZLFxuICByZXNvbHZlVXNlcktleSxcbiAgdHlwZSBVc2VyLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIGZpbGVzeXN0ZW1zLFxuICBNb3VudGVkQ29tcG9zaXRlRmlsZXN5c3RlbSxcbiAgdHlwZSBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMsXG59IGZyb20gXCIuL2ZpbGVzeXN0ZW1zLnRzXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9tb250eS1zYW5kYm94LnRzXCI7XG5pbXBvcnQgdHlwZSB7IExvY2FsU2tpbGxNb3VudCB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcbmltcG9ydCB7IERhdGFicmlja3NTYW5kYm94LCB0eXBlIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NhbmRib3gudHNcIjtcbmltcG9ydCB7IE9SR0FOSVpBVElPTl9BU1NJU1RBTlRfUEFUSCwgcGVyc29uYWxXb3Jrc3BhY2VQYXRoIH0gZnJvbSBcIi4vc2tpbGwtcGF0aHMudHNcIjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIE9BdXRoIHNjb3BlcyB0aGF0IGdhdGUgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgZmlsZSBtb3VudHMuICovXG5jb25zdCBXT1JLU1BBQ0VfRklMRV9TQ09QRVMgPSBbXCJ3b3Jrc3BhY2VcIiwgXCJ3b3Jrc3BhY2Uud29ya3NwYWNlXCIsIFwiYWxsLWFwaXNcIl0gYXMgY29uc3Q7XG5jb25zdCBTQ1JBVENIX01PVU5UID0gXCIvdG1wXCI7XG5jb25zdCBDQUNIRUFCTEVfRklMRVNZU1RFTV9PUEVSQVRJT05TID0gW1xuICBcImV4aXN0c1wiLFxuICBcInJlYWRGaWxlXCIsXG4gIFwicmVhZGRpclwiLFxuICBcInN0YXRcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENhY2hlYWJsZUZpbGVTeXN0ZW1PcGVyYXRpb25bXTtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS93b3Jrc3BhY2VzXCIpO1xubGV0IHdvcmtzcGFjZVNvdXJjZVNlcXVlbmNlID0gMDtcbmNvbnN0IGRhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zID0gbmV3IFdlYWtNYXA8V29ya3NwYWNlLCBEYXRhYnJpY2tzV29ya3NwYWNlT3B0aW9ucz4oKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIFBlci1yZXF1ZXN0IGNvbnRleHQgZm9yIHdvcmtzcGFjZSBwYXRoIHJlc29sdmVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQge1xuICByZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0O1xufVxuXG4vKipcbiAqIE9uZSBEYXRhYnJpY2tzIHBhdGggbW91bnRlZCBpbnRvIGEgTWFzdHJhIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnMge1xuICAvKiogQWJzb2x1dGUgRGF0YWJyaWNrcyBwYXRoIG9yIGB+YCBzaG9ydGN1dCBmb3IgdGhlIGN1cnJlbnQgdXNlcidzIHdvcmtzcGFjZSBob21lLiAqL1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1mcmllbmRseSBtb3VudCBuYW1lIHNob3duIGluIGZpbGVzeXN0ZW0gbGlzdGluZ3MuICovXG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICAvKiogTW91bnQgZGVzY3JpcHRpb24gc2hvd24gaW4gZmlsZXN5c3RlbSBsaXN0aW5ncyBhbmQgd29ya3NwYWNlIGluc3RydWN0aW9ucy4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTa2lsbCBwYXRocyByZWxhdGl2ZSB0byB0aGlzIGluY2x1ZGVkIGZpbGVzeXN0ZW0gcGF0aC4gT21pdCBmb3IgYVxuICAgKiBmaWxlLW9ubHkgbW91bnQuIEVhY2ggZW50cnkgaXMgam9pbmVkIHRvIHRoZSBhY3R1YWwgbW91bnQgcGF0aCBiZWZvcmVcbiAgICogTWFzdHJhIHJlY2VpdmVzIGl0LlxuICAgKi9cbiAgc2tpbGxzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBbGxvdyB3cml0ZSBhdHRlbXB0cyB0byBhIHtAbGluayBwYXRofSBtb3VudC4gRGVmYXVsdHMgdG8gYHRydWVgIGZvclxuICAgKiBgL1dvcmtzcGFjZWAgcm9vdHMgYW5kIGBmYWxzZWAgZWxzZXdoZXJlLiBEYXRhYnJpY2tzIHBlcm1pc3Npb25zIHN0aWxsXG4gICAqIGRldGVybWluZSB3aGV0aGVyIGVhY2ggbXV0YXRpb24gc3VjY2VlZHMuXG4gICAqL1xuICB3cml0YWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB3cml0YWJsZSB7QGxpbmsgcGF0aH0gcm9vdCB3aGVuIG1pc3NpbmcuIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayB3cml0YWJsZX07IHNldCBgZmFsc2VgIGZvciBwcmUtZXhpc3Rpbmcgcm9vdHMgd2l0aCBjb25kaXRpb25hbCBhY2Nlc3MuXG4gICAqL1xuICBjcmVhdGVSb290PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IHBvaW50IGluIHRoZSBjb21wb3NpdGUgbmFtZXNwYWNlLiBEYXRhYnJpY2tzIHBhdGhzIGRlZmF1bHQgdG8gdGhlaXIgYWN0dWFsIHJvb3QuICovXG4gIG1vdW50Pzogc3RyaW5nO1xufVxuXG4vKiogU3RyaW5nIHNob3J0aGFuZCBvciBmdWxsIG9wdGlvbnMgZm9yIG9uZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBwYXRoLiAqL1xuZXhwb3J0IHR5cGUgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGggPSBzdHJpbmcgfCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnM7XG5cbi8qKiBGaXhlZCBvciByZXF1ZXN0LWRlcGVuZGVudCBEYXRhYnJpY2tzIHBhdGggZW50cnkuICovXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFZhbHVlID1cbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFxuICB8IGZhbHNlXG4gIHwgKChcbiAgICAgIGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LFxuICAgICkgPT5cbiAgICAgIHwgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhcbiAgICAgIHwgZmFsc2VcbiAgICAgIHwgdW5kZWZpbmVkXG4gICAgICB8IFByb21pc2U8RGF0YWJyaWNrc1dvcmtzcGFjZVBhdGggfCBmYWxzZSB8IHVuZGVmaW5lZD4pO1xuXG4vKiogT3BlcmF0aW9ucyBhbmQgcGF0aCBnbG9icyBjYWNoZWQgYnkgdGhlIERhdGFicmlja3MgZmlsZXN5c3RlbSBzaG9ydGN1dC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyIHtcbiAgLyoqIENhY2hlZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuIE9taXQgZm9yIGBleGlzdHNgLCBgcmVhZEZpbGVgLCBgcmVhZGRpcmAsIGFuZCBgc3RhdGAuICovXG4gIG9wZXJhdGlvbnM/OiBDYWNoZWFibGVGaWxlU3lzdGVtT3BlcmF0aW9uIHwgcmVhZG9ubHkgQ2FjaGVhYmxlRmlsZVN5c3RlbU9wZXJhdGlvbltdO1xuICAvKiogQWJzb2x1dGUgb3Igcm9vdC1yZWxhdGl2ZSBnbG9icyBhbmQgcHJlZGljYXRlcy4gYH5gIGV4cGFuZHMgcGVyIHJlcXVlc3QuICovXG4gIHBhdGhzPzogUGF0aE1hdGNoSW5wdXQgfCByZWFkb25seSBQYXRoTWF0Y2hJbnB1dFtdO1xufVxuXG4vKiogRml4ZWQgb3IgcmVxdWVzdC1kZXBlbmRlbnQgZmlsZXN5c3RlbSBjYWNoZSBzZWxlY3Rpb24uICovXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGUgPVxuICB8IGJvb2xlYW5cbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJcbiAgfCByZWFkb25seSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJbXVxuICB8ICgoXG4gICAgICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgICApID0+XG4gICAgICB8IGJvb2xlYW5cbiAgICAgIHwgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyXG4gICAgICB8IHJlYWRvbmx5IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZUZpbHRlcltdXG4gICAgICB8IHVuZGVmaW5lZFxuICAgICAgfCBQcm9taXNlPFxuICAgICAgICAgIHwgYm9vbGVhblxuICAgICAgICAgIHwgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyXG4gICAgICAgICAgfCByZWFkb25seSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJbXVxuICAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgID4pO1xuXG4vKiogTW91bnQgbWFwIHBsdXMgb3B0aW9uYWwgTWFzdHJhIHNraWxsIHNjYW4gcm9vdHMgcmVzb2x2ZWQgZm9yIG9uZSByZXF1ZXN0LiAqL1xuaW50ZXJmYWNlIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHtcbiAgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPjtcbiAgLyoqIFBhdGhzIHdpdGhpbiB0aGUgY29tcG9zaXRlIG5hbWVzcGFjZSB3aGVyZSBgU0tJTEwubWRgIGZpbGVzIGFyZSBzY2FubmVkLiAqL1xuICBza2lsbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKiBJbnRlcm5hbCBmaWxlc3lzdGVtIGNvbnRyaWJ1dGlvbiByZXNvbHZlci4gKi9cbnR5cGUgV29ya3NwYWNlTW91bnRSZXNvbHZlciA9IChcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4pID0+IFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHwgUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj47XG5cbi8qKlxuICogU2FuZGJveCBzZWxlY3Rpb24gZm9yIHtAbGluayBkYXRhYnJpY2tzV29ya3NwYWNlfS4gQ29tbWFuZCBleGVjdXRpb24gaXNcbiAqIGRpc2FibGVkIGJ5IGRlZmF1bHQ7IE1vbnR5LCBEYXRhYnJpY2tzIFNhbmRib3gsIG9yIGEgTWFzdHJhIHByb3ZpZGVyL3Jlc29sdmVyXG4gKiBtdXN0IGJlIHNlbGVjdGVkIGV4cGxpY2l0bHkuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24gPVxuICB8IGZhbHNlXG4gIHwgXCJkYXRhYnJpY2tzXCJcbiAgfCBcIm1vbnR5XCJcbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnNcbiAgfCBXb3Jrc3BhY2VTYW5kYm94XG4gIHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyO1xuXG4vKiogTmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2Ugb3B0aW9ucyBwbHVzIERhdGFicmlja3MgcGF0aCBzaG9ydGN1dHMuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zIGV4dGVuZHMgT21pdDxcbiAgV29ya3NwYWNlQ29uZmlnLFxuICBcImZpbGVzeXN0ZW1cIiB8IFwibW91bnRzXCIgfCBcInNhbmRib3hcIiB8IFwic2tpbGxzXCJcbj4ge1xuICAvKipcbiAgICogU3RhcnQgZnJvbSB7QGxpbmsgREVGQVVMVF9EQVRBQlJJQ0tTX1dPUktTUEFDRV9QQVRIU30uIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIGFzc2lzdGFudFBhdGhzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERhdGFicmlja3MgcGF0aHMgYXBwZW5kZWQgYWZ0ZXIgdGhlIGRlZmF1bHRzLiBBIHN0cmluZyBpcyBzaG9ydGhhbmQgZm9yXG4gICAqIGB7IHBhdGggfWA7IGEgcmVzb2x2ZXIgbWF5IHJldHVybiBlaXRoZXIgZm9ybSBwZXIgcmVxdWVzdC5cbiAgICovXG4gIHBhdGhzPzogcmVhZG9ubHkgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZVtdO1xuICAvKiogTmF0aXZlIE1hc3RyYSBmaWxlc3lzdGVtcyBjb21wb3NlZCBiZXNpZGUgdGhlIERhdGFicmlja3MgcGF0aHMuICovXG4gIG1vdW50cz86IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+O1xuICAvKiogTmF0aXZlIE1hc3RyYSBza2lsbCBwYXRocyBvciByZXNvbHZlciBjb21wb3NlZCB3aXRoIHBhdGgtZGVjbGFyZWQgc2tpbGxzLiAqL1xuICBza2lsbHM/OiBTa2lsbHNSZXNvbHZlcjtcbiAgLyoqIEZpbGVzeXN0ZW0gY2FjaGUgZmlsdGVycy4gSWdub3JlZCB3aGVuIHRoZSBBcHBLaXQgZmlsZXMtY2FjaGUgcGx1Z2luIGlzIGFic2VudC4gKi9cbiAgY2FjaGU/OiBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGU7XG4gIC8qKiBBcHBLaXQgcGx1Z2luIGNvbnRleHQgdXNlZCB0byBkaXNjb3ZlciBvcHRpb25hbCBzaWJsaW5nIGNhcGFiaWxpdGllcy4gKi9cbiAgcGx1Z2luQ29udGV4dD86IHBsdWdpblJlZ2lzdHJ5LlBsdWdpbkNvbnRleHRMaWtlO1xuICAvKipcbiAgICogQ29tbWFuZCBzYW5kYm94LiBEaXNhYmxlZCBieSBkZWZhdWx0LiBQYXNzIGBcIm1vbnR5XCJgLCBgXCJkYXRhYnJpY2tzXCJgLCBvclxuICAgKiBEYXRhYnJpY2tzIFNhbmRib3ggb3B0aW9ucyB0byBlbmFibGUgb25lIG9mIHRoZSBidWlsdC1pbiBwcm92aWRlcnMsIG9yIHBhc3NcbiAgICogYW4gZXhwbGljaXQgTWFzdHJhIHNhbmRib3gvcHJvdmlkZXIgcmVzb2x2ZXIuXG4gICAqL1xuICBzYW5kYm94PzogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbjtcbiAgLyoqIEFkZCB1c2VyLXNjb3BlZCBgL3RtcGAgb25seSB3aGVuIG5vIGNvbmZpZ3VyZWQgRGF0YWJyaWNrcyBwYXRoIG1vdW50cyB3cml0YWJsZS4gKi9cbiAgZmFsbGJhY2tUb1RtcD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeHRyYSBMT0NBTCBza2lsbCB0cmVlcyBtb3VudGVkIHJlYWQtb25seSBmb3IgZXZlcnkgcmVxdWVzdCdzIHNraWxsXG4gICAqIGRpc2NvdmVyeS4gVXNlZCBieSB0aGUgcGx1Z2luIHRvIGV4cG9zZSByZW1vdGUgc2tpbGxzIGZyb20gbG9jYWwgYmFja2luZ1xuICAgKiBzdG9yYWdlIGF0IHN0YWJsZSB2aXJ0dWFsIHBhdGhzIChzZWUgYHJlbW90ZS1za2lsbHMudHNgKS4gRGF0YWJyaWNrcy1ob3N0ZWRcbiAgICogcmVtb3RlIHNraWxscyBuZWVkIG5vIGVudHJ5IGhlcmUgYmVjYXVzZSB0aGUgYnVpbHQtaW4gQXNzaXN0YW50IG1vdW50XG4gICAqIGFscmVhZHkgc2NhbnMgdGhlbS5cbiAgICovXG4gIGV4dHJhU2tpbGxNb3VudHM/OiBMb2NhbFNraWxsTW91bnRbXTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZWZhdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogRGVmYXVsdCBEYXRhYnJpY2tzIHBhdGhzIGZvciBzaGFyZWQgYW5kIGN1cnJlbnQtdXNlciBBZ2VudCBTa2lsbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0RBVEFCUklDS1NfV09SS1NQQUNFX1BBVEhTOiByZWFkb25seSBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnNbXSA9IFtcbiAge1xuICAgIHBhdGg6IE9SR0FOSVpBVElPTl9BU1NJU1RBTlRfUEFUSCxcbiAgICBza2lsbHM6IFtcInNraWxsc1wiXSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjcmVhdGVSb290OiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIHBhdGg6IFwiflwiLFxuICAgIHNraWxsczogW1wiLmFzc2lzdGFudC9za2lsbHNcIl0sXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY3JlYXRlUm9vdDogZmFsc2UsXG4gIH0sXG5dO1xuXG4vKipcbiAqIENyZWF0ZSBhIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfSB3aXRoIHBlci1yZXF1ZXN0IERhdGFicmlja3MgbW91bnRzLlxuICpcbiAqIEBleGFtcGxlIERlZmF1bHQgRGF0YWJyaWNrcyBwYXRoc1xuICogYGBgdHNcbiAqIGRhdGFicmlja3NXb3Jrc3BhY2UoKVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgVXNlIG9ubHkgZXhwbGljaXQgcGF0aHNcbiAqIGBgYHRzXG4gKiBkYXRhYnJpY2tzV29ya3NwYWNlKHtcbiAqICAgYXNzaXN0YW50UGF0aHM6IGZhbHNlLFxuICogICBwYXRoczogW1wifi9wcm9qZWN0XCIsIFwiL3RtcC9wcm9qZWN0XCIsIFwiL1ZvbHVtZXMvbWFpbi9kZWZhdWx0L2RhdGFcIl0sXG4gKiB9KVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQnVpbGQgYSBzdGFuZGFyZCBNYXN0cmEgd29ya3NwYWNlIHlvdXJzZWxmXG4gKiBgYGB0c1xuICogbmV3IFdvcmtzcGFjZSh7XG4gKiAgIC4uLmRhdGFicmlja3NXb3Jrc3BhY2VDb25maWcoeyBwYXRoczogW1wifi9wcm9qZWN0XCJdIH0pLFxuICogICBzYW5kYm94OiBteVNhbmRib3gsXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhYnJpY2tzV29ya3NwYWNlQ29uZmlnKFxuICBvcHRpb25zOiBEYXRhYnJpY2tzV29ya3NwYWNlT3B0aW9ucyA9IHt9LFxuKTogV29ya3NwYWNlQ29uZmlnIHtcbiAgY29uc3QgeyBpZCwgbmFtZSB9ID0gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnMpO1xuICBjb25zdCBmaWxlc3lzdGVtU291cmNlS2V5ID0gYCR7aWR9OiR7Kyt3b3Jrc3BhY2VTb3VyY2VTZXF1ZW5jZX1gO1xuICBjb25zdCBwYXRocyA9IHJlc29sdmVEYXRhYnJpY2tzV29ya3NwYWNlUGF0aHMob3B0aW9ucyk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRQYXRocyA9IHBhdGhzLmxlbmd0aDtcbiAgY29uc3QgZXh0cmFTa2lsbE1vdW50cyA9IG9wdGlvbnMuZXh0cmFTa2lsbE1vdW50cyA/PyBbXTtcbiAgY29uc3QgZmlsZXNDYWNoZSA9IHBsdWdpblJlZ2lzdHJ5Lmluc3RhbmNlKG9wdGlvbnMucGx1Z2luQ29udGV4dCwgZmlsZXNDYWNoZVBsdWdpbik/LmV4cG9ydHMoKTtcbiAgY29uc3QgY29uZmlndXJlZENhY2hlID0gb3B0aW9ucy5jYWNoZTtcbiAgY29uc3QgbW91bnRGaWxlc0NhY2hlID0gY29uZmlndXJlZENhY2hlID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGZpbGVzQ2FjaGU7XG4gIGNvbnN0IHJldGFpbkZpbGVzeXN0ZW1Tb3VyY2UgPVxuICAgIG1vdW50RmlsZXNDYWNoZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIGNvbmZpZ3VyZWRDYWNoZSAhPT0gXCJmdW5jdGlvblwiICYmXG4gICAgcGF0aHMuZXZlcnkoKHBhdGgpID0+IHR5cGVvZiBwYXRoICE9PSBcImZ1bmN0aW9uXCIpO1xuICBjb25zdCByZXNvbHZlcnMgPSBidWlsZE1vdW50UmVzb2x2ZXJzKFxuICAgIHBhdGhzLFxuICAgIG9wdGlvbnMubW91bnRzLFxuICAgIGxvY2FsU2tpbGxNb3VudFJlc29sdmVycyhleHRyYVNraWxsTW91bnRzKSxcbiAgICBtb3VudEZpbGVzQ2FjaGUsXG4gICAgY29uZmlndXJlZENhY2hlLFxuICAgIG9wdGlvbnMuZmFsbGJhY2tUb1RtcCA9PT0gdHJ1ZSxcbiAgKTtcbiAgY29uc3QgcmVzb2x2ZUNvbnRyaWJ1dGlvbiA9IGNvbnRyaWJ1dGlvblJlc29sdmVyKHJlc29sdmVycyk7XG4gIGNvbnN0IHJlc29sdmVGaWxlc3lzdGVtID0gKGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0KSA9PlxuICAgIHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKFxuICAgICAgcmVzb2x2ZUNvbnRyaWJ1dGlvbixcbiAgICAgIGNvbnRleHQsXG4gICAgICByZXRhaW5GaWxlc3lzdGVtU291cmNlID8gbW91bnRGaWxlc0NhY2hlIDogdW5kZWZpbmVkLFxuICAgICAgZmlsZXN5c3RlbVNvdXJjZUtleSxcbiAgICApO1xuICBjb25zdCBoYXNTa2lsbFBhdGhzID0gcGF0aHMuc29tZShwYXRoTWF5UHJvdmlkZVNraWxscykgfHwgZXh0cmFTa2lsbE1vdW50cy5sZW5ndGggPiAwO1xuICBjb25zdCBza2lsbHM6IFNraWxsc1Jlc29sdmVyID1cbiAgICBvcHRpb25zLnNraWxscyA/P1xuICAgIChhc3luYyAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyByZXF1ZXN0Q29udGV4dCB9O1xuICAgICAgY29uc3QgY29udHJpYnV0aW9uID0gYXdhaXQgcmVzb2x2ZUNvbnRyaWJ1dGlvbihjb250ZXh0KTtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzdGluY3RTa2lsbFBhdGhzKFxuICAgICAgICBhd2FpdCByZXNvbHZlRmlsZXN5c3RlbShjb250ZXh0KSxcbiAgICAgICAgY29udHJpYnV0aW9uLnNraWxsUGF0aHMgPz8gW10sXG4gICAgICApO1xuICAgIH0pO1xuICBjb25zdCBjaGVja1NraWxsRmlsZU10aW1lID0gb3B0aW9ucy5jaGVja1NraWxsRmlsZU10aW1lID8/IGZhbHNlO1xuICBjb25zdCBibTI1ID0gb3B0aW9ucy5ibTI1ID8/IHRydWU7XG4gIGNvbnN0IHNhbmRib3ggPSByZXNvbHZlV29ya3NwYWNlU2FuZGJveChvcHRpb25zLnNhbmRib3gsIGlkLCBuYW1lKTtcbiAgY29uc3QgdG9vbHMgPSB3b3Jrc3BhY2VUb29scyhvcHRpb25zLnRvb2xzKTtcbiAgbG9nZ2VyLmRlYnVnKFwid29ya3NwYWNlOmNyZWF0ZVwiLCB7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICByZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICAgIGNvbmZpZ3VyZWRQYXRocyxcbiAgICBjdXN0b21Nb3VudHM6IE9iamVjdC5rZXlzKG9wdGlvbnMubW91bnRzID8/IHt9KS5sZW5ndGgsXG4gICAgc2tpbGxzQ29uZmlndXJlZDogb3B0aW9ucy5za2lsbHMgIT09IHVuZGVmaW5lZCB8fCBoYXNTa2lsbFBhdGhzLFxuICAgIGN1c3RvbVNraWxsc1Jlc29sdmVyOiBvcHRpb25zLnNraWxscyAhPT0gdW5kZWZpbmVkLFxuICAgIGNoZWNrU2tpbGxGaWxlTXRpbWUsXG4gICAgYm0yNSxcbiAgICBleHRyYVNraWxsTW91bnRzOiBleHRyYVNraWxsTW91bnRzLmxlbmd0aCxcbiAgICBzYW5kYm94OiBzYW5kYm94ID8gc2FuZGJveE5hbWUob3B0aW9ucy5zYW5kYm94KSA6IFwiZGlzYWJsZWRcIixcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGFzc2lzdGFudFBhdGhzOiBfYXNzaXN0YW50UGF0aHMsXG4gICAgcGF0aHM6IF9wYXRocyxcbiAgICBtb3VudHM6IF9tb3VudHMsXG4gICAgc2tpbGxzOiBfc2tpbGxzLFxuICAgIGNhY2hlOiBfY2FjaGUsXG4gICAgcGx1Z2luQ29udGV4dDogX3BsdWdpbkNvbnRleHQsXG4gICAgc2FuZGJveDogX3NhbmRib3gsXG4gICAgZmFsbGJhY2tUb1RtcDogX2ZhbGxiYWNrVG9UbXAsXG4gICAgZXh0cmFTa2lsbE1vdW50czogX2V4dHJhU2tpbGxNb3VudHMsXG4gICAgLi4ud29ya3NwYWNlT3B0aW9uc1xuICB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIHtcbiAgICAuLi53b3Jrc3BhY2VPcHRpb25zLFxuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgZmlsZXN5c3RlbTogcmVzb2x2ZUZpbGVzeXN0ZW0sXG4gICAgLi4uKG9wdGlvbnMuc2tpbGxzICE9PSB1bmRlZmluZWQgfHwgaGFzU2tpbGxQYXRoc1xuICAgICAgPyB7XG4gICAgICAgICAgc2tpbGxzLFxuICAgICAgICAgIGNoZWNrU2tpbGxGaWxlTXRpbWUsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihzYW5kYm94XG4gICAgICA/IHtcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIGluc3RydWN0aW9uczogeyBkeW5hbWljU2FuZGJveDogXCJyZXNvbHZlXCIgYXMgY29uc3QgfSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgYm0yNSxcbiAgICB0b29scyxcbiAgfTtcbn1cblxuLyoqIENyZWF0ZSBhIG5hdGl2ZSBNYXN0cmEge0BsaW5rIFdvcmtzcGFjZX0gZnJvbSB7QGxpbmsgZGF0YWJyaWNrc1dvcmtzcGFjZUNvbmZpZ30uICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YWJyaWNrc1dvcmtzcGFjZShvcHRpb25zOiBEYXRhYnJpY2tzV29ya3NwYWNlT3B0aW9ucyA9IHt9KTogV29ya3NwYWNlIHtcbiAgY29uc3Qgd29ya3NwYWNlID0gbmV3IFdvcmtzcGFjZShkYXRhYnJpY2tzV29ya3NwYWNlQ29uZmlnKG9wdGlvbnMpKTtcbiAgZGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMuc2V0KHdvcmtzcGFjZSwgb3B0aW9ucyk7XG4gIHJldHVybiB3b3Jrc3BhY2U7XG59XG5cbi8qKiBAaW50ZXJuYWwgQmluZCBhIGNhbGxlci1jcmVhdGVkIERhdGFicmlja3Mgd29ya3NwYWNlIHRvIGl0cyBBcHBLaXQgcGx1Z2luIGNvbnRleHQuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0KFxuICB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcbiAgcGx1Z2luQ29udGV4dDogcGx1Z2luUmVnaXN0cnkuUGx1Z2luQ29udGV4dExpa2UgfCB1bmRlZmluZWQsXG4pOiBXb3Jrc3BhY2Uge1xuICBjb25zdCBvcHRpb25zID0gZGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMuZ2V0KHdvcmtzcGFjZSk7XG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnBsdWdpbkNvbnRleHQgIT09IHVuZGVmaW5lZCB8fCBwbHVnaW5Db250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlO1xuICB9XG4gIHJldHVybiBkYXRhYnJpY2tzV29ya3NwYWNlKHsgLi4ub3B0aW9ucywgcGx1Z2luQ29udGV4dCB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGRlZmF1bHQgYW5kIGNhbGxlci1wcm92aWRlZCBEYXRhYnJpY2tzIHBhdGhzIGluIHByaW9yaXR5IG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZURhdGFicmlja3NXb3Jrc3BhY2VQYXRocyhcbiAgb3B0aW9uczogUGljazxEYXRhYnJpY2tzV29ya3NwYWNlT3B0aW9ucywgXCJhc3Npc3RhbnRQYXRoc1wiIHwgXCJwYXRoc1wiPiA9IHt9LFxuKTogRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZVtdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi4ob3B0aW9ucy5hc3Npc3RhbnRQYXRocyA9PT0gZmFsc2UgPyBbXSA6IERFRkFVTFRfREFUQUJSSUNLU19XT1JLU1BBQ0VfUEFUSFMpLFxuICAgIC4uLihvcHRpb25zLnBhdGhzID8/IFtdKSxcbiAgXTtcbn1cblxuLyoqIFdoZXRoZXIgb25lIGluY2x1ZGVkIHBhdGggY2FuIGNvbnRyaWJ1dGUgTWFzdHJhIHNraWxsIHBhdGhzLiAqL1xuZnVuY3Rpb24gcGF0aE1heVByb3ZpZGVTa2lsbHMocGF0aDogRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gIGlmIChwYXRoID09PSBmYWxzZSB8fCB0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKHBhdGguc2tpbGxzPy5sZW5ndGggPz8gMCkgPiAwO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByaXZhdGUgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVRvb2xzKGNvbmZpZ3VyZWQ6IFdvcmtzcGFjZVRvb2xzQ29uZmlnIHwgdW5kZWZpbmVkKTogV29ya3NwYWNlVG9vbHNDb25maWcge1xuICByZXR1cm4ge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcmVxdWlyZUFwcHJvdmFsOiBmYWxzZSxcbiAgICAuLi5jb25maWd1cmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlU2FuZGJveChcbiAgc2VsZWN0aW9uOiBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uIHwgdW5kZWZpbmVkLFxuICB3b3Jrc3BhY2VJZDogc3RyaW5nLFxuICB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsXG4pOiBXb3Jrc3BhY2VTYW5kYm94IHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29uZmlndXJlZCA9IHNlbGVjdGlvbiA/PyBmYWxzZTtcbiAgaWYgKGNvbmZpZ3VyZWQgPT09IGZhbHNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoY29uZmlndXJlZCA9PT0gXCJtb250eVwiKSByZXR1cm4gbmV3IE1vbnR5U2FuZGJveCgpO1xuICBpZiAodHlwZW9mIGNvbmZpZ3VyZWQgPT09IFwiZnVuY3Rpb25cIiB8fCBpc1NhbmRib3goY29uZmlndXJlZCkpIHJldHVybiBjb25maWd1cmVkO1xuXG4gIGNvbnN0IG9wdGlvbnM6IERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyA9XG4gICAgY29uZmlndXJlZCA9PT0gXCJkYXRhYnJpY2tzXCIgPyB7IHByb3ZpZGVyOiBcImRhdGFicmlja3NcIiB9IDogY29uZmlndXJlZDtcbiAgcmV0dXJuICh7IHJlcXVlc3RDb250ZXh0IH0pID0+IHtcbiAgICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgICAgICBcIkRhdGFicmlja3Mgc2FuZGJveCB1c2VyIGNvbnRleHRcIixcbiAgICAgICAgXCJJbnZva2UgY29tbWFuZCB0b29scyBmcm9tIGFuIGFnZW50IHR1cm4gc2VydmVkIGJ5IHRoZSBNYXN0cmEgcGx1Z2luLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlndXJlZElkID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnNhbmRib3hJZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gb3B0aW9ucy5zYW5kYm94SWQoeyByZXF1ZXN0Q29udGV4dCB9KVxuICAgICAgICA6IG9wdGlvbnMuc2FuZGJveElkO1xuICAgIGNvbnN0IHNhbmRib3hJZCA9IGNvbmZpZ3VyZWRJZCA/PyBkZWZhdWx0U2FuZGJveElkKHdvcmtzcGFjZUlkLCB1c2VyLmlkKTtcbiAgICBjb25zdCBjbGllbnQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuY2xpZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBvcHRpb25zLmNsaWVudCh7IHJlcXVlc3RDb250ZXh0IH0pXG4gICAgICAgIDogKG9wdGlvbnMuY2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpKTtcbiAgICBjb25zdCB7XG4gICAgICBwcm92aWRlcjogX3Byb3ZpZGVyLFxuICAgICAgc2FuZGJveElkOiBfc2FuZGJveElkLFxuICAgICAgY2xpZW50OiBfY2xpZW50LFxuICAgICAgLi4uc2FuZGJveE9wdGlvbnNcbiAgICB9ID0gb3B0aW9ucztcbiAgICByZXR1cm4gbmV3IERhdGFicmlja3NTYW5kYm94KHtcbiAgICAgIC4uLnNhbmRib3hPcHRpb25zLFxuICAgICAgY2xpZW50LFxuICAgICAgc2FuZGJveElkLFxuICAgICAgZGlzcGxheU5hbWU6IG9wdGlvbnMuZGlzcGxheU5hbWUgPz8gYE1hc3RyYSAke3dvcmtzcGFjZU5hbWV9YCxcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFNhbmRib3hJZCh3b3Jrc3BhY2VJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAudXBkYXRlKG9iamVjdC50b1N0YWJsZUtleSh7IHdvcmtzcGFjZUlkLCB1c2VySWQgfSkpXG4gICAgLmRpZ2VzdChcImhleFwiKVxuICAgIC5zbGljZSgwLCAzMik7XG4gIHJldHVybiBgbWFzdHJhLSR7ZGlnZXN0fWA7XG59XG5cbmZ1bmN0aW9uIGlzU2FuZGJveCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdvcmtzcGFjZVNhbmRib3gge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJpZFwiIGluIHZhbHVlICYmIFwicHJvdmlkZXJcIiBpbiB2YWx1ZSAmJiBcInN0YXR1c1wiIGluIHZhbHVlLFxuICApO1xufVxuXG5mdW5jdGlvbiBzYW5kYm94TmFtZShzZWxlY3Rpb246IFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9uID09PSBmYWxzZSkgcmV0dXJuIFwiZGlzYWJsZWRcIjtcbiAgaWYgKHNlbGVjdGlvbiA9PT0gXCJtb250eVwiKSByZXR1cm4gXCJtb250eVwiO1xuICBpZiAoc2VsZWN0aW9uID09PSBcImRhdGFicmlja3NcIikgcmV0dXJuIFwiZGF0YWJyaWNrc1wiO1xuICBpZiAodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gXCJyZXNvbHZlclwiO1xuICByZXR1cm4gaXNTYW5kYm94KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24ucHJvdmlkZXIgOiAoc2VsZWN0aW9uLnByb3ZpZGVyID8/IFwiZGF0YWJyaWNrc1wiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgcmVxdWVzdCB0b2tlbiBjYXJyaWVzIGEgc2NvcGUgdGhhdCBhbGxvd3Mgd29ya3NwYWNlXG4gKiBmaWxlIEFQSSBhY2Nlc3MgKGB3b3Jrc3BhY2VgIG9yIGBhbGwtYXBpc2Agb24ge0BsaW5rIE1BU1RSQV9TQ09QRVNfS0VZfSkuXG4gKi9cbmZ1bmN0aW9uIGhhc1dvcmtzcGFjZUZpbGVTY29wZShyZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRva2VuLmluY2x1ZGVzQWNjZXNzVG9rZW5TY29wZShcbiAgICByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9TQ09QRVNfS0VZKSxcbiAgICBXT1JLU1BBQ0VfRklMRV9TQ09QRVMsXG4gICk7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSByZXF1ZXN0IGNsaWVudCBhbmQgYXV0aG9yaXphdGlvbi1zYWZlIGZpbGVzLWNhY2hlIHNjb3BlLiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZpbGVzQ2FjaGVTY29wZShjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCk6IFByb21pc2U8XG4gIHwge1xuICAgICAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQ7XG4gICAgICBzY29wZTogRmlsZXNDYWNoZVNjb3BlO1xuICAgIH1cbiAgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IGNvbnRleHQucmVxdWVzdENvbnRleHQ7XG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xpZW50ID0gdXNlcj8uZXhlY3V0aW9uQ29udGV4dC5jbGllbnQgYXMgV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuICBpZiAoIXJlcXVlc3RDb250ZXh0IHx8ICF1c2VyIHx8ICFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgY2xpZW50LFxuICAgIHNjb3BlOiB7XG4gICAgICBob3N0OiAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCksXG4gICAgICB1c2VyS2V5OiByZXNvbHZlVXNlcktleShyZXF1ZXN0Q29udGV4dCksXG4gICAgICAuLi4ocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19XT1JLU1BBQ0VfSUQ/LnRyaW0oKVxuICAgICAgICA/IHsgd29ya3NwYWNlSWQ6IHByb2Nlc3MuZW52LkRBVEFCUklDS1NfV09SS1NQQUNFX0lELnRyaW0oKSB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBKb2luIG9uZSByZWxhdGl2ZSBza2lsbCBwYXRoIHRvIGl0cyBhY3R1YWwgY29tcG9zaXRlIG1vdW50IHBhdGguICovXG5mdW5jdGlvbiBtb3VudGVkU2tpbGxQYXRoKG1vdW50OiBzdHJpbmcsIHNraWxsUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHBvc2l4UGF0aC5pc0Fic29sdXRlKHNraWxsUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBTa2lsbCBwYXRoIG11c3QgYmUgcmVsYXRpdmUgdG8gaXRzIG1vdW50OiAke3NraWxsUGF0aH1gKTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gcG9zaXhQYXRoLm5vcm1hbGl6ZShza2lsbFBhdGgpO1xuICBpZiAoIW5vcm1hbGl6ZWQub2spIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBTa2lsbCBwYXRoIGVzY2FwZXMgaXRzIG1vdW50OiAke3NraWxsUGF0aH1gKTtcbiAgfVxuICByZXR1cm4gcG9zaXhQYXRoLmpvaW4ocG9zaXhQYXRoLm5vcm1hbGl6ZVJvb3QobW91bnQpLCBub3JtYWxpemVkLnBhdGguc2xpY2UoMSkpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgYSBEYXRhYnJpY2tzIHBhdGggYmVsb25ncyB0byB0aGUgd3JpdGFibGUgV29ya3NwYWNlIG5hbWVzcGFjZS4gKi9cbmZ1bmN0aW9uIGlzV29ya3NwYWNlUm9vdChyb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBvc2l4UGF0aC5ub3JtYWxpemVSb290KHJvb3QpO1xuICByZXR1cm4gbm9ybWFsaXplZCA9PT0gXCIvV29ya3NwYWNlXCIgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKFwiL1dvcmtzcGFjZS9cIik7XG59XG5cbi8qKlxuICogTW91bnQgcmVzb2x2ZXIgZm9yIGNvbmZpZ3VyZWQgRGF0YWJyaWNrcyBhbmQgdGVtcG9yYXJ5IHBhdGhzLlxuICpcbiAqIEdhdGVzIG9uIHdvcmtzcGFjZSBmaWxlIHNjb3BlIChvciBkZXZlbG9wbWVudCBtb2RlKSwgdGhlbiBtb3VudHMgZXZlcnlcbiAqIGZvbGRlciB3aG9zZSBsb2NhdGlvbiByZXNvbHZlcyBmb3IgdGhpcyByZXF1ZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlUGF0aE1vdW50cyhcbiAgcGF0aHM6IHJlYWRvbmx5IERhdGFicmlja3NXb3Jrc3BhY2VQYXRoVmFsdWVbXSxcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4gIGZpbGVzQ2FjaGU6IEZpbGVzQ2FjaGVFeHBvcnRzIHwgdW5kZWZpbmVkLFxuICBjYWNoZUNvbmZpZzogRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlIHwgdW5kZWZpbmVkLFxuICBmYWxsYmFja1RvVG1wOiBib29sZWFuLFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+ID0ge307XG4gIGNvbnN0IHNraWxsUGF0aHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBoYXNXcml0YWJsZU1vdW50ID0gZmFsc2U7XG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gY29udGV4dC5yZXF1ZXN0Q29udGV4dDtcblxuICBjb25zdCBjYW5Nb3VudERhdGFicmlja3MgPSBCb29sZWFuKHJlcXVlc3RDb250ZXh0ICYmIHNob3VsZE1vdW50U2tpbGxGb2xkZXJzKHJlcXVlc3RDb250ZXh0KSk7XG4gIGNvbnN0IHNjb3BlZCA9IGNhbk1vdW50RGF0YWJyaWNrcyA/IGF3YWl0IHJlc29sdmVGaWxlc0NhY2hlU2NvcGUoY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNsaWVudCA9IHNjb3BlZD8uY2xpZW50O1xuICBjb25zdCBmaWxlU3lzdGVtQ2FjaGUgPVxuICAgIGZpbGVzQ2FjaGUgJiYgc2NvcGVkID8gYXdhaXQgZmlsZXNDYWNoZS5mb3JTY29wZShzY29wZWQuc2NvcGUpIDogdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBwYXRoXSBvZiBwYXRocy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBjb25maWd1cmVkID0gYXdhaXQgcmVzb2x2ZURhdGFicmlja3NXb3Jrc3BhY2VQYXRoKHBhdGgsIGNvbnRleHQpO1xuICAgIGlmICghY29uZmlndXJlZCkgY29udGludWU7XG4gICAgaWYgKHBvc2l4UGF0aC5pc1dpdGhpblJvb3QoU0NSQVRDSF9NT1VOVCwgY29uZmlndXJlZC5wYXRoKSkge1xuICAgICAgY29uc3QgbW91bnQgPSBjb25maWd1cmVkLm1vdW50ID8/IGNvbmZpZ3VyZWQucGF0aDtcbiAgICAgIG1vdW50c1ttb3VudF0gPSB1c2VyVGVtcEZpbGVzeXN0ZW0oY29udGV4dCwgY29uZmlndXJlZC5wYXRoKTtcbiAgICAgIGhhc1dyaXRhYmxlTW91bnQgPSB0cnVlO1xuICAgICAgc2tpbGxQYXRocy5wdXNoKC4uLihjb25maWd1cmVkLnNraWxscyA/PyBbXSkubWFwKChwYXRoKSA9PiBtb3VudGVkU2tpbGxQYXRoKG1vdW50LCBwYXRoKSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghY2FuTW91bnREYXRhYnJpY2tzKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ3b3Jrc3BhY2UtcGF0aDpza2lwcGVkXCIsIHtcbiAgICAgICAgcGF0aDogY29uZmlndXJlZC5wYXRoLFxuICAgICAgICByZWFzb246ICFyZXF1ZXN0Q29udGV4dCA/IFwibm8tcmVxdWVzdC1jb250ZXh0XCIgOiBcIm1pc3Npbmctd29ya3NwYWNlLXNjb3BlXCIsXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVTa2lsbEZvbGRlckZpbGVzeXN0ZW0oY29uZmlndXJlZCwgY29udGV4dCwgY2FjaGVDb25maWcsIHtcbiAgICAgIGNsaWVudCxcbiAgICAgIGZpbGVTeXN0ZW1DYWNoZSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc29sdmVkKSBjb250aW51ZTtcbiAgICBjb25zdCBtb3VudCA9IGNvbmZpZ3VyZWQubW91bnQgPz8gcmVzb2x2ZWQucm9vdDtcbiAgICBpZiAoIW1vdW50KSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ3b3Jrc3BhY2UtcGF0aDpza2lwcGVkXCIsIHsgaW5kZXgsIHJlYXNvbjogXCJtaXNzaW5nLW1vdW50XCIgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbW91bnRzW21vdW50XSA9IHJlc29sdmVkLmZpbGVzeXN0ZW07XG4gICAgaGFzV3JpdGFibGVNb3VudCB8fD0gcmVzb2x2ZWQud3JpdGFibGU7XG4gICAgc2tpbGxQYXRocy5wdXNoKC4uLihjb25maWd1cmVkLnNraWxscyA/PyBbXSkubWFwKChwYXRoKSA9PiBtb3VudGVkU2tpbGxQYXRoKG1vdW50LCBwYXRoKSkpO1xuICB9XG5cbiAgaWYgKGZhbGxiYWNrVG9UbXAgJiYgIWhhc1dyaXRhYmxlTW91bnQpIHtcbiAgICBtb3VudHNbU0NSQVRDSF9NT1VOVF0gPSB1c2VyVGVtcEZpbGVzeXN0ZW0oY29udGV4dCwgU0NSQVRDSF9NT1VOVCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJ3b3Jrc3BhY2UtcGF0aHM6bW91bnRlZFwiLCB7XG4gICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhtb3VudHMpLFxuICAgIHNraWxsUGF0aHMsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbW91bnRzLFxuICAgIHNraWxsUGF0aHMsXG4gIH07XG59XG5cbmludGVyZmFjZSBSZXNvbHZlZERhdGFicmlja3NXb3Jrc3BhY2VQYXRoIHtcbiAgcGF0aDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNraWxscz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICB3cml0YWJsZT86IGJvb2xlYW47XG4gIGNyZWF0ZVJvb3Q/OiBib29sZWFuO1xuICBtb3VudD86IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURhdGFicmlja3NXb3Jrc3BhY2VQYXRoKFxuICB2YWx1ZTogRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZSxcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4pOiBQcm9taXNlPFJlc29sdmVkRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGggfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGF3YWl0IHZhbHVlKGNvbnRleHQpIDogdmFsdWU7XG4gIGlmIChzZWxlY3RlZCA9PT0gZmFsc2UgfHwgc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgY29uZmlndXJlZCA9IHR5cGVvZiBzZWxlY3RlZCA9PT0gXCJzdHJpbmdcIiA/IHsgcGF0aDogc2VsZWN0ZWQgfSA6IHNlbGVjdGVkO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHJlcXVlc3RDb250ZXh0VmFsdWVzKGNvbnRleHQucmVxdWVzdENvbnRleHQpO1xuICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlSG9tZVBhdGgoY29uZmlndXJlZC5wYXRoLCByZXF1ZXN0Q29udGV4dCk7XG4gIGlmICghcmVzb2x2ZWRQYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZXNvbHZlZE1vdW50ID0gcmVzb2x2ZUhvbWVQYXRoKGNvbmZpZ3VyZWQubW91bnQsIHJlcXVlc3RDb250ZXh0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb25maWd1cmVkLFxuICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAuLi4ocmVzb2x2ZWRNb3VudCA/IHsgbW91bnQ6IHJlc29sdmVkTW91bnQgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBza2lsbCBmb2xkZXIgdG8gYSBNYXN0cmEgZmlsZXN5c3RlbSwgb3IgYHVuZGVmaW5lZGAgdG8gc2tpcCBpdFxuICogZm9yIHRoaXMgcmVxdWVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVyRmlsZXN5c3RlbShcbiAgZm9sZGVyOiBSZXNvbHZlZERhdGFicmlja3NXb3Jrc3BhY2VQYXRoLFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgY2FjaGVDb25maWc6IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZSB8IHVuZGVmaW5lZCxcbiAgY2FjaGU6IHtcbiAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcbiAgICBmaWxlU3lzdGVtQ2FjaGU6IEZpbGVTeXN0ZW1DYWNoZSB8IHVuZGVmaW5lZDtcbiAgfSxcbik6IFByb21pc2U8XG4gIHwge1xuICAgICAgZmlsZXN5c3RlbTogV29ya3NwYWNlRmlsZXN5c3RlbTtcbiAgICAgIHJvb3Q/OiBzdHJpbmc7XG4gICAgICB3cml0YWJsZTogYm9vbGVhbjtcbiAgICB9XG4gIHwgdW5kZWZpbmVkXG4+IHtcbiAgLy8gQSBwYXRoIG1vdW50IG5lZWRzIHRoZSByZXF1ZXN0J3MgT0JPIGNsaWVudCB0byByZWFjaCB0aGUgd29ya3NwYWNlLlxuICBpZiAoIWNhY2hlLmNsaWVudCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIndvcmtzcGFjZS1wYXRoOnNraXBwZWRcIiwge1xuICAgICAgcGF0aDogZm9sZGVyLnBhdGgsXG4gICAgICByZWFzb246IFwibWlzc2luZy1vYm8tY2xpZW50XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByb290ID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChmb2xkZXIucGF0aCk7XG4gIGlmICghcm9vdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgd3JpdGFibGUgPSBmb2xkZXIud3JpdGFibGUgPz8gaXNXb3Jrc3BhY2VSb290KHJvb3QpO1xuICBjb25zdCBjYWNoZU9wdGlvbnMgPSBjYWNoZS5maWxlU3lzdGVtQ2FjaGVcbiAgICA/IGF3YWl0IHJlc29sdmVGaWxlQ2FjaGVPcHRpb25zKGNhY2hlQ29uZmlnLCBjb250ZXh0LCByb290LCBmb2xkZXIuc2tpbGxzID8/IFtdKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICAgIGNhY2hlLmNsaWVudCxcbiAgICByb290LFxuICAgICF3cml0YWJsZSxcbiAgICBmb2xkZXIuY3JlYXRlUm9vdCA/PyBmb2xkZXIud3JpdGFibGUgPT09IHRydWUsXG4gICAgY2FjaGUuZmlsZVN5c3RlbUNhY2hlLFxuICAgIGNhY2hlT3B0aW9ucyxcbiAgICB7XG4gICAgICAuLi4oZm9sZGVyLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogZm9sZGVyLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi4oZm9sZGVyLmRpc3BsYXlOYW1lID8geyBkaXNwbGF5TmFtZTogZm9sZGVyLmRpc3BsYXlOYW1lIH0gOiB7fSksXG4gICAgfSxcbiAgKTtcbiAgcmV0dXJuIHJlc29sdmVkID8geyAuLi5yZXNvbHZlZCwgcm9vdCwgd3JpdGFibGUgfSA6IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNhY2hlQ29uZmlnKFxuICB2YWx1ZTogRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlIHwgdW5kZWZpbmVkLFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbik6IFByb21pc2U8XG4gIGJvb2xlYW4gfCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXIgfCByZWFkb25seSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJbXSB8IHVuZGVmaW5lZFxuPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHZhbHVlKGNvbnRleHQpIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RDb250ZXh0VmFsdWVzKHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHJlcXVlc3RDb250ZXh0Py50b0pTT04oKSA/PyB7fTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUhvbWVQYXRoKFxuICBpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICByZXF1ZXN0Q29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoaW5wdXQpO1xuICBpZiAoIXZhbHVlIHx8ICh2YWx1ZSAhPT0gXCJ+XCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJ+L1wiKSkpIHJldHVybiB2YWx1ZSA/PyB1bmRlZmluZWQ7XG4gIGNvbnN0IGVtYWlsVmFsdWUgPSByZXF1ZXN0Q29udGV4dFtNQVNUUkFfVVNFUl9FTUFJTF9LRVldO1xuICBjb25zdCBlbWFpbCA9IHR5cGVvZiBlbWFpbFZhbHVlID09PSBcInN0cmluZ1wiID8gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChlbWFpbFZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbWFpbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgaG9tZSA9IHBlcnNvbmFsV29ya3NwYWNlUGF0aChlbWFpbCk7XG4gIHJldHVybiB2YWx1ZSA9PT0gXCJ+XCIgPyBob21lIDogYCR7aG9tZX0vJHt2YWx1ZS5zbGljZSgyKX1gO1xufVxuXG5mdW5jdGlvbiB0b1BvbGljeUFycmF5PFQ+KHZhbHVlOiBUIHwgcmVhZG9ubHkgVFtdIHwgdW5kZWZpbmVkKTogcmVhZG9ubHkgVFtdIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gKHZhbHVlIGFzIHJlYWRvbmx5IFRbXSkgOiBbdmFsdWUgYXMgVF07XG59XG5cbmZ1bmN0aW9uIGNhY2hlRmlsdGVyTWF0Y2hlcyhcbiAgcG9saWN5OiBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXIsXG4gIG9wZXJhdGlvbjogQ2FjaGVhYmxlRmlsZVN5c3RlbU9wZXJhdGlvbixcbiAgcGF0aDogc3RyaW5nLFxuICByZXF1ZXN0Q29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJvb3Q/OiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgY29uc3Qgb3BlcmF0aW9ucyA9IHRvUG9saWN5QXJyYXkocG9saWN5Lm9wZXJhdGlvbnMgPz8gQ0FDSEVBQkxFX0ZJTEVTWVNURU1fT1BFUkFUSU9OUyk7XG4gIGlmICghb3BlcmF0aW9ucy5pbmNsdWRlcyhvcGVyYXRpb24pKSByZXR1cm4gZmFsc2U7XG4gIGlmIChwb2xpY3kucGF0aHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGlucHV0czogUGF0aE1hdGNoSW5wdXRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIHRvUG9saWN5QXJyYXk8UGF0aE1hdGNoSW5wdXQ+KHBvbGljeS5wYXRocykpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBpbnB1dHMucHVzaChpbnB1dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXhwYW5kZWQgPSByZXNvbHZlSG9tZVBhdGgoaW5wdXQsIHJlcXVlc3RDb250ZXh0KTtcbiAgICBpZiAoIWV4cGFuZGVkKSBjb250aW51ZTtcbiAgICBpbnB1dHMucHVzaChcbiAgICAgICFyb290IHx8IHBvc2l4UGF0aC5pc0Fic29sdXRlKGV4cGFuZGVkKSB8fCBleHBhbmRlZC5zdGFydHNXaXRoKFwiKipcIilcbiAgICAgICAgPyBleHBhbmRlZFxuICAgICAgICA6IGAke3Bvc2l4UGF0aC5ub3JtYWxpemVSb290KHJvb3QpfS8ke2V4cGFuZGVkLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKX1gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGlucHV0cy5sZW5ndGggPiAwICYmIG1hdGNoLnRvUGF0aE1hdGNoZXIoLi4uaW5wdXRzKShwYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZpbGVDYWNoZU9wdGlvbnMoXG4gIGNvbmZpZ3VyZWQ6IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZSB8IHVuZGVmaW5lZCxcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4gIHJvb3Q6IHN0cmluZyxcbiAgc2tpbGxQYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBQcm9taXNlPEZpbGVTeXN0ZW1DYWNoZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcmVxdWVzdENvbnRleHQgPSByZXF1ZXN0Q29udGV4dFZhbHVlcyhjb250ZXh0LnJlcXVlc3RDb250ZXh0KTtcbiAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlQ2FjaGVDb25maWcoY29uZmlndXJlZCwgY29udGV4dCk7XG4gIGlmIChyZXNvbHZlZCA9PT0gZmFsc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChyZXNvbHZlZCA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkID09PSB0cnVlKSB7XG4gICAgY29uc3Qgcm9vdHMgPSBza2lsbFBhdGhzLm1hcCgocGF0aCkgPT4gbW91bnRlZFNraWxsUGF0aChyb290LCBwYXRoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdGlvbnM6IENBQ0hFQUJMRV9GSUxFU1lTVEVNX09QRVJBVElPTlMsXG4gICAgICBmaWx0ZXI6IChvcGVyYXRpb24sIHBhdGgpID0+XG4gICAgICAgIG9wZXJhdGlvbiAhPT0gXCJyZWFkRmlsZVwiIHx8XG4gICAgICAgIHJvb3RzLnNvbWUoKHNraWxsUm9vdCkgPT4gcG9zaXhQYXRoLmlzV2l0aGluUm9vdChza2lsbFJvb3QsIHBhdGgpKSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHBvbGljaWVzID0gdG9Qb2xpY3lBcnJheShyZXNvbHZlZCk7XG4gIGlmIChwb2xpY2llcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IG9wZXJhdGlvbnMgPSBbXG4gICAgLi4ubmV3IFNldChcbiAgICAgIHBvbGljaWVzLmZsYXRNYXAoKHBvbGljeSkgPT5cbiAgICAgICAgdG9Qb2xpY3lBcnJheShwb2xpY3kub3BlcmF0aW9ucyA/PyBDQUNIRUFCTEVfRklMRVNZU1RFTV9PUEVSQVRJT05TKSxcbiAgICAgICksXG4gICAgKSxcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBvcGVyYXRpb25zLFxuICAgIGZpbHRlcjogKG9wZXJhdGlvbiwgcGF0aCkgPT5cbiAgICAgIHBvbGljaWVzLnNvbWUoKHBvbGljeSkgPT4gY2FjaGVGaWx0ZXJNYXRjaGVzKHBvbGljeSwgb3BlcmF0aW9uLCBwYXRoLCByZXF1ZXN0Q29udGV4dCwgcm9vdCkpLFxuICB9O1xufVxuXG4vKipcbiAqIEZpbGwgaW4gYGlkYCBhbmQgYG5hbWVgIHdoZW4gZWl0aGVyIGlzIG9taXR0ZWQgb24ge0BsaW5rIERhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zfS5cbiAqIFNsdWdpZmllcyBgbmFtZWAgaW50byBgaWRgOyB0b2tlbml6ZXMgYGlkYCBpbnRvIGEgZGlzcGxheSBgbmFtZWAuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VJZGVudGl0eShvcHRpb25zOiBEYXRhYnJpY2tzV29ya3NwYWNlT3B0aW9ucyk6IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufSB7XG4gIGxldCBpZCA9IG9wdGlvbnMuaWQ7XG4gIGxldCBuYW1lID0gb3B0aW9ucy5uYW1lO1xuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBuYW1lID8gc3RyaW5nVXRpbHMudG9TbHVnKG5hbWUpIDogXCJ3b3Jrc3BhY2VcIjtcbiAgfVxuICBpZiAoIW5hbWUpIHtcbiAgICBuYW1lID0gQXJyYXkuZnJvbShzdHJpbmdVdGlscy50b2tlbml6ZShpZCkpLmpvaW4oXCIgXCIpO1xuICB9XG4gIHJldHVybiB7IGlkLCBuYW1lIH07XG59XG5cbi8qKiBDb2xsZWN0IHRoZSBEYXRhYnJpY2tzIHBhdGggcmVzb2x2ZXIgYW5kIGFueSBjYWxsZXItc3VwcGxpZWQgbW91bnRzLiAqL1xuZnVuY3Rpb24gYnVpbGRNb3VudFJlc29sdmVycyhcbiAgcGF0aHM6IHJlYWRvbmx5IERhdGFicmlja3NXb3Jrc3BhY2VQYXRoVmFsdWVbXSxcbiAgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPiB8IHVuZGVmaW5lZCxcbiAgbG9jYWxNb3VudHM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgZmlsZXNDYWNoZTogRmlsZXNDYWNoZUV4cG9ydHMgfCB1bmRlZmluZWQsXG4gIGNhY2hlQ29uZmlnOiBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGUgfCB1bmRlZmluZWQsXG4gIGZhbGxiYWNrVG9UbXA6IGJvb2xlYW4sXG4pOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10ge1xuICBjb25zdCByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSA9IFtdO1xuICBjb25zdCBwYXRoQ291bnQgPSBwYXRocy5sZW5ndGg7XG4gIGlmIChwYXRoQ291bnQgPiAwIHx8IGZhbGxiYWNrVG9UbXApIHtcbiAgICByZXNvbHZlcnMucHVzaCgoY29udGV4dCkgPT5cbiAgICAgIHJlc29sdmVXb3Jrc3BhY2VQYXRoTW91bnRzKHBhdGhzLCBjb250ZXh0LCBmaWxlc0NhY2hlLCBjYWNoZUNvbmZpZywgZmFsbGJhY2tUb1RtcCksXG4gICAgKTtcbiAgfVxuICBpZiAobW91bnRzICYmIE9iamVjdC5rZXlzKG1vdW50cykubGVuZ3RoID4gMCkgcmVzb2x2ZXJzLnB1c2goKCkgPT4gKHsgbW91bnRzIH0pKTtcbiAgcmVzb2x2ZXJzLnB1c2goLi4ubG9jYWxNb3VudHMpO1xuICBsb2dnZXIuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJzXCIsIHtcbiAgICBwYXRoQ291bnQsXG4gICAgY3VzdG9tTW91bnRDb3VudDogT2JqZWN0LmtleXMobW91bnRzID8/IHt9KS5sZW5ndGgsXG4gICAgbG9jYWxNb3VudENvdW50OiBsb2NhbE1vdW50cy5sZW5ndGgsXG4gICAgdG90YWxSZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHJlc29sdmVycztcbn1cblxuLyoqIFN0YWJsZSB1c2VyLXNjb3BlZCBsb2NhbCBzdG9yYWdlIHVuZGVyIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0ncyB0ZW1wIGRpcmVjdG9yeS4gKi9cbmZ1bmN0aW9uIHVzZXJUZW1wRmlsZXN5c3RlbShcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4gIHdvcmtzcGFjZVBhdGg6IHN0cmluZyxcbik6IFdvcmtzcGFjZUZpbGVzeXN0ZW0ge1xuICBjb25zdCB1c2VyS2V5ID0gcmVzb2x2ZVVzZXJLZXkoY29udGV4dC5yZXF1ZXN0Q29udGV4dCk7XG4gIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAudXBkYXRlKG9iamVjdC50b1N0YWJsZUtleSh7IHBhY2thZ2U6IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCIsIHVzZXJLZXkgfSkpXG4gICAgLmRpZ2VzdChcImhleFwiKVxuICAgIC5zbGljZSgwLCAxNik7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBwb3NpeFBhdGgubm9ybWFsaXplUm9vdCh3b3Jrc3BhY2VQYXRoKTtcbiAgY29uc3QgcmVsYXRpdmUgPSBub3JtYWxpemVkID09PSBTQ1JBVENIX01PVU5UID8gXCJcIiA6IG5vcm1hbGl6ZWQuc2xpY2UoYCR7U0NSQVRDSF9NT1VOVH0vYC5sZW5ndGgpO1xuICBjb25zdCBzb3VyY2UgPSBuZXcgTG9jYWxGaWxlU3lzdGVtKHtcbiAgICByb290OiBqb2luKHRtcGRpcigpLCBcImRieC10b29sc1wiLCBcIm1hc3RyYVwiLCBkaWdlc3QsIHJlbGF0aXZlKSxcbiAgICByZWFkT25seTogZmFsc2UsXG4gICAgY3JlYXRlUm9vdDogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiBmaWxlc3lzdGVtcyhzb3VyY2UsIHtcbiAgICBkaXNwbGF5TmFtZTogXCJUZW1wb3JhcnkgRmlsZXNcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVXNlci1zY29wZWQgdGVtcG9yYXJ5IGZpbGVzIHJldGFpbmVkIHdoaWxlIHRoZSBob3N0IGtlZXBzIGl0cyBlcGhlbWVyYWwgdGVtcCBzdG9yYWdlLlwiLFxuICB9KTtcbn1cblxuLyoqIE1vdW50IHN0YXJ0dXAtcHJvdmlzaW9uZWQgbG9jYWwgc2tpbGwgdHJlZXMgaW50byBNYXN0cmEncyB3b3Jrc3BhY2UgZmlsZXN5c3RlbS4gKi9cbmZ1bmN0aW9uIGxvY2FsU2tpbGxNb3VudFJlc29sdmVycyhtb3VudHM6IHJlYWRvbmx5IExvY2FsU2tpbGxNb3VudFtdKTogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdIHtcbiAgY29uc3QgdW5pcXVlID0gbmV3IE1hcDxzdHJpbmcsIExvY2FsU2tpbGxNb3VudD4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBtb3VudHMpIHtcbiAgICBjb25zdCByb290ID0gZW50cnkucm9vdC50cmltKCk7XG4gICAgaWYgKCFyb290KSBjb250aW51ZTtcbiAgICB1bmlxdWUuc2V0KGAke2VudHJ5Lm1vdW50UGF0aH1cXDAke3Jvb3R9YCwgeyByb290LCBtb3VudFBhdGg6IGVudHJ5Lm1vdW50UGF0aCB9KTtcbiAgfVxuICByZXR1cm4gWy4uLnVuaXF1ZS52YWx1ZXMoKV0ubWFwKCh7IHJvb3QsIG1vdW50UGF0aCB9KSA9PiB7XG4gICAgY29uc3QgbW91bnQgPSBwb3NpeFBhdGgubm9ybWFsaXplUm9vdChtb3VudFBhdGgpO1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBMb2NhbEZpbGVTeXN0ZW0oe1xuICAgICAgcm9vdCxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgY3JlYXRlUm9vdDogZmFsc2UsXG4gICAgfSk7XG4gICAgY29uc3QgZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW1zKHNvdXJjZSwgeyByZWFkT25seTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgIG1vdW50czogeyBbbW91bnRdOiBmaWxlc3lzdGVtIH0sXG4gICAgICBza2lsbFBhdGhzOiBbbW91bnRdLFxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHYXRlIHNraWxsLWZvbGRlciBtb3VudHMgb24gdGhlIHJlcXVlc3QncyB0b2tlbi5cbiAqXG4gKiBBbHdheXMgYWxsb3dzIG1vdW50cyBpbiBkZXZlbG9wbWVudDsgaW4gb3RoZXIgZW52aXJvbm1lbnRzIHJlcXVpcmVzXG4gKiB7QGxpbmsgaGFzV29ya3NwYWNlRmlsZVNjb3BlfS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KTogYm9vbGVhbiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGhhc1dvcmtzcGFjZUZpbGVTY29wZShyZXF1ZXN0Q29udGV4dCk7XG59XG5cbi8qKlxuICogV3JhcCBhIHtAbGluayBEYXRhYnJpY2tzRmlsZVN5c3RlbX0gYXMgYSBNYXN0cmEgZmlsZXN5c3RlbS4gTWlzc2luZyBvclxuICogaW5hY2Nlc3NpYmxlIHJvb3RzIHJldHVybiBgdW5kZWZpbmVkYCBzbyBvdGhlciBhY2Nlc3NpYmxlIHJvb3RzIHJlbWFpblxuICogdXNhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBkYXRhYnJpY2tzRmlsZXN5c3RlbShcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIHJvb3Q6IHN0cmluZyxcbiAgcmVhZE9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuICBjcmVhdGVSb290OiBib29sZWFuID0gIXJlYWRPbmx5LFxuICBmaWxlU3lzdGVtQ2FjaGU/OiBGaWxlU3lzdGVtQ2FjaGUsXG4gIGNhY2hlT3B0aW9ucz86IEZpbGVTeXN0ZW1DYWNoZU9wdGlvbnMsXG4gIGFkYXB0ZXJPcHRpb25zOiBQaWNrPE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyT3B0aW9ucywgXCJkZXNjcmlwdGlvblwiIHwgXCJkaXNwbGF5TmFtZVwiPiA9IHt9LFxuKTogUHJvbWlzZTxcbiAgfCB7XG4gICAgICBmaWxlc3lzdGVtOiBXb3Jrc3BhY2VGaWxlc3lzdGVtO1xuICAgIH1cbiAgfCB1bmRlZmluZWRcbj4ge1xuICBjb25zdCBmcyA9IG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7XG4gICAgY2xpZW50OiAoKSA9PiB3b3Jrc3BhY2VDbGllbnQudG9MZWdhY3lXb3Jrc3BhY2VDbGllbnQocmVxdWVzdFdvcmtzcGFjZUNsaWVudChjbGllbnQpKSxcbiAgICByb290LFxuICAgIHJlYWRPbmx5LFxuICAgIGNyZWF0ZVJvb3QsXG4gIH0pO1xuICBjb25zdCBjYWNoZWQgPVxuICAgIGZpbGVTeXN0ZW1DYWNoZSAmJiBjYWNoZU9wdGlvbnMgPyBzaGFyZWRGUy5jYWNoZShmcywgZmlsZVN5c3RlbUNhY2hlLCBjYWNoZU9wdGlvbnMpIDogZnM7XG4gIGNvbnN0IHNvdXJjZSA9IHZlcmlmeUZpcnN0RmlsZVN5c3RlbUFjY2VzcyhjYWNoZWQsICgpID0+IGZzLnN0YXQoXCIuXCIpLCByb290KTtcbiAgY29uc3QgZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW1zKHNvdXJjZSwgeyAuLi5hZGFwdGVyT3B0aW9ucywgcmVhZE9ubHkgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZmlsZXN5c3RlbS5pbml0KCk7XG4gICAgaWYgKGF3YWl0IGZpbGVzeXN0ZW0uZXhpc3RzKFwiLlwiKSkge1xuICAgICAgcmV0dXJuIHsgZmlsZXN5c3RlbSB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZGF0YWJyaWNrcy1tb3VudDpza2lwcGVkXCIsIHtcbiAgICAgIHJvb3QsXG4gICAgICByZWFkT25seSxcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBAaW50ZXJuYWwgS2VlcCBzZXJ2aWNlIGNvbnRleHQgZnJvbSByZXBsYWNpbmcgdGhlIHJlcXVlc3Qtc2NvcGVkIHdvcmtzcGFjZSBjbGllbnQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFdvcmtzcGFjZUNsaWVudChcbiAgaW5pdGlhbENsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBleGVjdXRpb25Db250ZXh0OiBSZXR1cm5UeXBlPFxuICAgIHR5cGVvZiBhcHBraXQudHJ5R2V0RXhlY3V0aW9uQ29udGV4dFxuICA+ID0gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKSxcbik6IFdvcmtzcGFjZUNsaWVudCB7XG4gIGlmIChcbiAgICBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgXCJpc1VzZXJDb250ZXh0XCIgaW4gZXhlY3V0aW9uQ29udGV4dCAmJlxuICAgIGV4ZWN1dGlvbkNvbnRleHQuaXNVc2VyQ29udGV4dCA9PT0gdHJ1ZVxuICApIHtcbiAgICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dC5jbGllbnQ7XG4gIH1cbiAgcmV0dXJuIGluaXRpYWxDbGllbnQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUZpcnN0RmlsZVN5c3RlbUFjY2VzczxURmlsZVN5c3RlbSBleHRlbmRzIEZpbGVTeXN0ZW0+KFxuICBmaWxlc3lzdGVtOiBURmlsZVN5c3RlbSxcbiAgcmVhZFByb2JlOiAoKSA9PiBQcm9taXNlPHVua25vd24+LFxuICByb290OiBzdHJpbmcsXG4pOiBURmlsZVN5c3RlbSB7XG4gIGxldCByZWFkQ2hlY2s6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gIGxldCB3cml0ZVZlcmlmaWVkID0gZmFsc2U7XG4gIGNvbnN0IGJvdW5kTWV0aG9kcyA9IG5ldyBNYXA8UHJvcGVydHlLZXksIHVua25vd24+KCk7XG4gIGNvbnN0IHJlYWRPcGVyYXRpb25zID0gbmV3IFNldDxQcm9wZXJ0eUtleT4oW1wiZXhpc3RzXCIsIFwicmVhZEZpbGVcIiwgXCJyZWFkZGlyXCIsIFwic3RhdFwiXSk7XG4gIGNvbnN0IHdyaXRlT3BlcmF0aW9ucyA9IG5ldyBTZXQ8UHJvcGVydHlLZXk+KFtcbiAgICBcImFwcGVuZEZpbGVcIixcbiAgICBcImNvcHlGaWxlXCIsXG4gICAgXCJkZWxldGVGaWxlXCIsXG4gICAgXCJta2RpclwiLFxuICAgIFwibW92ZUZpbGVcIixcbiAgICBcInJtZGlyXCIsXG4gICAgXCJ3cml0ZUZpbGVcIixcbiAgXSk7XG4gIGNvbnN0IHZlcmlmeVJlYWQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgcmVhZENoZWNrID8/PSBQcm9taXNlLnJlc29sdmUocmVhZFByb2JlKCkpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVhZENoZWNrO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZWFkQ2hlY2sgPSB1bmRlZmluZWQ7XG4gICAgICBsb2dnZXIuZGVidWcoXCJkYXRhYnJpY2tzLW1vdW50OnJlYWQtY2hlY2stZmFpbGVkXCIsIHtcbiAgICAgICAgcm9vdCxcbiAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXcgUHJveHkoZmlsZXN5c3RlbSwge1xuICAgIGdldCh0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHksIHRhcmdldCk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgIGlmIChib3VuZE1ldGhvZHMuaGFzKHByb3BlcnR5KSkgcmV0dXJuIGJvdW5kTWV0aG9kcy5nZXQocHJvcGVydHkpO1xuICAgICAgY29uc3QgZGVsZWdhdGVkID0gdmFsdWUuYmluZCh0YXJnZXQpIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG4gICAgICBsZXQgbWV0aG9kID0gZGVsZWdhdGVkO1xuICAgICAgaWYgKHJlYWRPcGVyYXRpb25zLmhhcyhwcm9wZXJ0eSkpIHtcbiAgICAgICAgbWV0aG9kID0gYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgIGF3YWl0IHZlcmlmeVJlYWQoKTtcbiAgICAgICAgICByZXR1cm4gZGVsZWdhdGVkKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh3cml0ZU9wZXJhdGlvbnMuaGFzKHByb3BlcnR5KSkge1xuICAgICAgICBtZXRob2QgPSBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlbGVnYXRlZCguLi5hcmdzKTtcbiAgICAgICAgICAgIGlmICghd3JpdGVWZXJpZmllZCkge1xuICAgICAgICAgICAgICB3cml0ZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiZGF0YWJyaWNrcy1tb3VudDp3cml0ZS1jaGVjay1wYXNzZWRcIiwgeyByb290IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKCF3cml0ZVZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcImRhdGFicmlja3MtbW91bnQ6d3JpdGUtY2hlY2stZmFpbGVkXCIsIHtcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnJvciksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYm91bmRNZXRob2RzLnNldChwcm9wZXJ0eSwgbWV0aG9kKTtcbiAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogUnVuIGV2ZXJ5IG1vdW50IHJlc29sdmVyIGZvciBvbmUgcmVxdWVzdCBhbmQgbWVyZ2UgbW91bnRzIHBsdXMgc2tpbGwgcGF0aHMuXG4gKiBMYXRlciByZXNvbHZlcnMgb3ZlcndyaXRlIG1vdW50IGtleXMgZnJvbSBlYXJsaWVyIG9uZXMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24oXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbik6IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+IHtcbiAgY29uc3QgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPiA9IHt9O1xuICBjb25zdCBza2lsbFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCByZXNvbHZlcl0gb2YgcmVzb2x2ZXJzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbiA9IGF3YWl0IHJlc29sdmVyKGNvbnRleHQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czpyZXNvbHZlclwiLCB7XG4gICAgICBpbmRleCxcbiAgICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMoY29udHJpYnV0aW9uLm1vdW50cyksXG4gICAgICBza2lsbFBhdGhzOiBjb250cmlidXRpb24uc2tpbGxQYXRocyA/PyBbXSxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKG1vdW50cywgY29udHJpYnV0aW9uLm1vdW50cyk7XG4gICAgaWYgKGNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzPy5sZW5ndGgpIHtcbiAgICAgIHNraWxsUGF0aHMucHVzaCguLi5jb250cmlidXRpb24uc2tpbGxQYXRocyk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFwibW91bnRzOm1lcmdlZFwiLCB7XG4gICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhtb3VudHMpLFxuICAgIHNraWxsUGF0aHMsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbW91bnRzLFxuICAgIHNraWxsUGF0aHMsXG4gIH07XG59XG5cbi8qKlxuICogRHluYW1pYyBmaWxlc3lzdGVtIHJlc29sdmVyIHBhc3NlZCB0byBNYXN0cmEge0BsaW5rIFdvcmtzcGFjZX0uXG4gKlxuICogUmV0dXJucyBhIHtAbGluayBDb21wb3NpdGVGaWxlc3lzdGVtfSBvdmVyIGV2ZXJ5IHBhdGggdGhhdCByZXNvbHZlZCBmb3IgdGhlXG4gKiByZXF1ZXN0LiBBbiBlbXB0eSBjb21wb3NpdGUgZXhwb3NlcyBubyBpbXBsaWNpdCBsb2NhbCBzdG9yYWdlLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlRmlsZXN5c3RlbShcbiAgcmVzb2x2ZUNvbnRyaWJ1dGlvbjogKGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0KSA9PiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPixcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4gIGZpbGVzQ2FjaGU/OiBGaWxlc0NhY2hlRXhwb3J0cyxcbiAgc291cmNlS2V5Pzogc3RyaW5nLFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPiB7XG4gIGNvbnN0IHsgbW91bnRzIH0gPSBhd2FpdCByZXNvbHZlQ29udHJpYnV0aW9uKGNvbnRleHQpO1xuICBjb25zdCBtb3VudEtleXMgPSBPYmplY3Qua2V5cyhtb3VudHMpO1xuICBpZiAobW91bnRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06ZW1wdHlcIiwge1xuICAgICAgaGFzUmVxdWVzdENvbnRleHQ6IEJvb2xlYW4oY29udGV4dC5yZXF1ZXN0Q29udGV4dCksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbGVzeXN0ZW1zKG5ldyBNZW1vcnlGaWxlU3lzdGVtKHsgcm9vdDogXCIvXCIsIHJlYWRPbmx5OiB0cnVlIH0pLCB7XG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJmaWxlc3lzdGVtOmNvbXBvc2l0ZVwiLCB7IG1vdW50S2V5cyB9KTtcbiAgY29uc3QgbG9hZCA9ICgpID0+IG5ldyBNb3VudGVkQ29tcG9zaXRlRmlsZXN5c3RlbSh7IG1vdW50cyB9KTtcbiAgaWYgKCFmaWxlc0NhY2hlKSByZXR1cm4gbG9hZCgpO1xuICBjb25zdCBzY29wZWQgPSBhd2FpdCByZXNvbHZlRmlsZXNDYWNoZVNjb3BlKGNvbnRleHQpO1xuICBpZiAoIXNjb3BlZCkgcmV0dXJuIGxvYWQoKTtcbiAgcmV0dXJuIGZpbGVzQ2FjaGUuZm9yRmlsZVN5c3RlbShzY29wZWQuc2NvcGUsIHsgcGF0aHM6IG1vdW50S2V5cywga2V5OiBzb3VyY2VLZXkgfSwgbG9hZCk7XG59XG5cbi8qKlxuICogRXhwYW5kIGNvbmZpZ3VyZWQgc2tpbGwgcGF0aHMgaW50byBjb25jcmV0ZSBza2lsbCBkaXJlY3RvcmllcyBhbmQga2VlcCB0aGUgZmlyc3RcbiAqIHNhbWUtbmFtZWQgZGlyZWN0b3J5LiBNYXN0cmEgc3RpbGwgb3ducyBwYXJzaW5nLCBpbmRleGluZywgYW5kIHJlZnJlc2hlcyxcbiAqIHdoaWxlIGVhcmxpZXIgY29uZmlndXJlZCByb290cyByZXRhaW4gcHJlY2VkZW5jZSBvdmVyIGxhdGVyIHJvb3RzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGlzdGluY3RTa2lsbFBhdGhzKFxuICBmaWxlc3lzdGVtOiBXb3Jrc3BhY2VGaWxlc3lzdGVtLFxuICBwYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmaWxlc3lzdGVtLnJlYWRkaXIocGF0aCk7XG4gICAgICBpZiAoZW50cmllcy5zb21lKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gXCJmaWxlXCIgJiYgZW50cnkubmFtZSA9PT0gXCJTS0lMTC5tZFwiKSkge1xuICAgICAgICBjb25zdCBuYW1lID0gcG9zaXhQYXRoLmJhc2VuYW1lKHBhdGgpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkLmhhcyhuYW1lKSkgc2VsZWN0ZWQuc2V0KG5hbWUsIHBhdGgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoZW50cnkudHlwZSAhPT0gXCJkaXJlY3RvcnlcIiB8fCBzZWxlY3RlZC5oYXMoZW50cnkubmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBzZWxlY3RlZC5zZXQoZW50cnkubmFtZSwgcG9zaXhQYXRoLmpvaW4ocGF0aCwgZW50cnkubmFtZSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJza2lsbC1wYXRoOnNraXBwZWRcIiwge1xuICAgICAgICBwYXRoLFxuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4uc2VsZWN0ZWQudmFsdWVzKCldO1xufVxuXG4vKiogTWVtb2l6ZSBvbmUgY29tcGxldGUgbW91bnQgY29udHJpYnV0aW9uIGZvciBlYWNoIHJlcXVlc3QgY29udGV4dC4gKi9cbmZ1bmN0aW9uIGNvbnRyaWJ1dGlvblJlc29sdmVyKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbik6IChjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCkgPT4gUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBzY29wZWQgPSBuZXcgV2Vha01hcDxSZXF1ZXN0Q29udGV4dCwgUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4+KCk7XG4gIGxldCB1bnNjb3BlZDogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4gfCB1bmRlZmluZWQ7XG4gIHJldHVybiAoY29udGV4dCkgPT4ge1xuICAgIGlmICghY29udGV4dC5yZXF1ZXN0Q29udGV4dCkge1xuICAgICAgdW5zY29wZWQgPz89IHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24ocmVzb2x2ZXJzLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiB1bnNjb3BlZDtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzY29wZWQuZ2V0KGNvbnRleHQucmVxdWVzdENvbnRleHQpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIGNvbnN0IHBlbmRpbmcgPSByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKHJlc29sdmVycywgY29udGV4dCk7XG4gICAgc2NvcGVkLnNldChjb250ZXh0LnJlcXVlc3RDb250ZXh0LCBwZW5kaW5nKTtcbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn1cbiJdfQ==
743
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUNMLFVBQVUsSUFBSSxnQkFBZ0IsR0FHL0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUNMLEVBQUUsSUFBSSxRQUFRLEVBQ2QsU0FBUyxFQUtULGdCQUFnQixHQUNqQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTCxTQUFTLEdBT1YsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsY0FBYyxHQUVmLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsMEJBQTBCLEdBRTNCLE1BQU0sa0JBQWtCLENBQUM7QUFD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KiBNYXN0cmEgd29ya3NwYWNlIGZhY3RvcnkgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBCdWlsZHMgbmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBmcm9tIERhdGFicmlja3MgcGF0aHMuIFBhdGhzXG4gKiBtb3VudCBhdCB0aGUgc2FtZSBwYXRoIGJ5IGRlZmF1bHQsIGB+YCByZXNvbHZlcyB0byB0aGUgY3VycmVudCB1c2VyJ3NcbiAqIERhdGFicmlja3Mgd29ya3NwYWNlIGhvbWUsIGFuZCBgL3RtcFsvc3VicGF0aF1gIHJlc29sdmVzIHRvIHN0YWJsZVxuICogdXNlci1zY29wZWQgc3RvcmFnZSB1bmRlciB0aGUgaG9zdCdzIGVwaGVtZXJhbCB0ZW1wIGRpcmVjdG9yeS5cbiAqXG4gKiBEYXRhYnJpY2tzIG1vdW50cyB1c2UgYEBkYngtdG9vbHMvZGF0YWJyaWNrc2Age0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfVxuICogd3JhcHBlZCBieSB7QGxpbmsgZmlsZXN5c3RlbXN9OyBpbmFjY2Vzc2libGUgcm9vdHMgYXJlIHNraXBwZWQgaW5kZXBlbmRlbnRseS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXBwa2l0LCBwbHVnaW5SZWdpc3RyeSB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgZmlsZXNDYWNoZSBhcyBmaWxlc0NhY2hlUGx1Z2luLFxuICB0eXBlIEZpbGVzQ2FjaGVFeHBvcnRzLFxuICB0eXBlIEZpbGVzQ2FjaGVTY29wZSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0L2ZpbGVzLWNhY2hlXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzRmlsZVN5c3RlbSwgd29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuaW1wb3J0IHsgTG9jYWxGaWxlU3lzdGVtIH0gZnJvbSBcIkBkYngtdG9vbHMvZnNcIjtcbmltcG9ydCB7IG1hdGNoLCB0eXBlIFBhdGhNYXRjaElucHV0IH0gZnJvbSBcIkBkYngtdG9vbHMvcGF0aFwiO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBmcyBhcyBzaGFyZWRGUyxcbiAgcG9zaXhQYXRoLFxuICB0eXBlIENhY2hlYWJsZUZpbGVTeXN0ZW1PcGVyYXRpb24sXG4gIHR5cGUgRmlsZVN5c3RlbSxcbiAgdHlwZSBGaWxlU3lzdGVtQ2FjaGUsXG4gIHR5cGUgRmlsZVN5c3RlbUNhY2hlT3B0aW9ucyxcbiAgTWVtb3J5RmlsZVN5c3RlbSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWZzXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gIFdvcmtzcGFjZSxcbiAgdHlwZSBTa2lsbHNSZXNvbHZlcixcbiAgdHlwZSBXb3Jrc3BhY2VDb25maWcsXG4gIHR5cGUgV29ya3NwYWNlRmlsZXN5c3RlbSxcbiAgdHlwZSBXb3Jrc3BhY2VTYW5kYm94LFxuICB0eXBlIFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlcixcbiAgdHlwZSBXb3Jrc3BhY2VUb29sc0NvbmZpZyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcblxuaW1wb3J0IHtcbiAgTUFTVFJBX1NDT1BFU19LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgTUFTVFJBX1VTRVJfS0VZLFxuICByZXNvbHZlVXNlcktleSxcbiAgdHlwZSBVc2VyLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIGZpbGVzeXN0ZW1zLFxuICBNb3VudGVkQ29tcG9zaXRlRmlsZXN5c3RlbSxcbiAgdHlwZSBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMsXG59IGZyb20gXCIuL2ZpbGVzeXN0ZW1zLnRzXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9tb250eS1zYW5kYm94LnRzXCI7XG5pbXBvcnQgdHlwZSB7IExvY2FsU2tpbGxNb3VudCB9IGZyb20gXCIuL3JlbW90ZS1za2lsbHMudHNcIjtcbmltcG9ydCB7IERhdGFicmlja3NTYW5kYm94LCB0eXBlIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NhbmRib3gudHNcIjtcbmltcG9ydCB7IE9SR0FOSVpBVElPTl9BU1NJU1RBTlRfUEFUSCwgcGVyc29uYWxXb3Jrc3BhY2VQYXRoIH0gZnJvbSBcIi4vc2tpbGwtcGF0aHMudHNcIjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIE9BdXRoIHNjb3BlcyB0aGF0IGdhdGUgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgZmlsZSBtb3VudHMuICovXG5jb25zdCBXT1JLU1BBQ0VfRklMRV9TQ09QRVMgPSBbXCJ3b3Jrc3BhY2VcIiwgXCJ3b3Jrc3BhY2Uud29ya3NwYWNlXCIsIFwiYWxsLWFwaXNcIl0gYXMgY29uc3Q7XG5jb25zdCBTQ1JBVENIX01PVU5UID0gXCIvdG1wXCI7XG5jb25zdCBDQUNIRUFCTEVfRklMRVNZU1RFTV9PUEVSQVRJT05TID0gW1xuICBcImV4aXN0c1wiLFxuICBcInJlYWRGaWxlXCIsXG4gIFwicmVhZGRpclwiLFxuICBcInN0YXRcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENhY2hlYWJsZUZpbGVTeXN0ZW1PcGVyYXRpb25bXTtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS93b3Jrc3BhY2VzXCIpO1xubGV0IHdvcmtzcGFjZVNvdXJjZVNlcXVlbmNlID0gMDtcbmNvbnN0IGRhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zID0gbmV3IFdlYWtNYXA8V29ya3NwYWNlLCBEYXRhYnJpY2tzV29ya3NwYWNlT3B0aW9ucz4oKTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIFBlci1yZXF1ZXN0IGNvbnRleHQgZm9yIHdvcmtzcGFjZSBwYXRoIHJlc29sdmVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQge1xuICByZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0O1xufVxuXG4vKipcbiAqIE9uZSBEYXRhYnJpY2tzIHBhdGggbW91bnRlZCBpbnRvIGEgTWFzdHJhIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnMge1xuICAvKiogQWJzb2x1dGUgRGF0YWJyaWNrcyBwYXRoIG9yIGB+YCBzaG9ydGN1dCBmb3IgdGhlIGN1cnJlbnQgdXNlcidzIHdvcmtzcGFjZSBob21lLiAqL1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1mcmllbmRseSBtb3VudCBuYW1lIHNob3duIGluIGZpbGVzeXN0ZW0gbGlzdGluZ3MuICovXG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICAvKiogTW91bnQgZGVzY3JpcHRpb24gc2hvd24gaW4gZmlsZXN5c3RlbSBsaXN0aW5ncyBhbmQgd29ya3NwYWNlIGluc3RydWN0aW9ucy4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTa2lsbCBwYXRocyByZWxhdGl2ZSB0byB0aGlzIGluY2x1ZGVkIGZpbGVzeXN0ZW0gcGF0aC4gT21pdCBmb3IgYVxuICAgKiBmaWxlLW9ubHkgbW91bnQuIEVhY2ggZW50cnkgaXMgam9pbmVkIHRvIHRoZSBhY3R1YWwgbW91bnQgcGF0aCBiZWZvcmVcbiAgICogTWFzdHJhIHJlY2VpdmVzIGl0LlxuICAgKi9cbiAgc2tpbGxzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBbGxvdyB3cml0ZSBhdHRlbXB0cyB0byBhIHtAbGluayBwYXRofSBtb3VudC4gRGVmYXVsdHMgdG8gYHRydWVgIGZvclxuICAgKiBgL1dvcmtzcGFjZWAgcm9vdHMgYW5kIGBmYWxzZWAgZWxzZXdoZXJlLiBEYXRhYnJpY2tzIHBlcm1pc3Npb25zIHN0aWxsXG4gICAqIGRldGVybWluZSB3aGV0aGVyIGVhY2ggbXV0YXRpb24gc3VjY2VlZHMuXG4gICAqL1xuICB3cml0YWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB3cml0YWJsZSB7QGxpbmsgcGF0aH0gcm9vdCB3aGVuIG1pc3NpbmcuIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayB3cml0YWJsZX07IHNldCBgZmFsc2VgIGZvciBwcmUtZXhpc3Rpbmcgcm9vdHMgd2l0aCBjb25kaXRpb25hbCBhY2Nlc3MuXG4gICAqL1xuICBjcmVhdGVSb290PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IHBvaW50IGluIHRoZSBjb21wb3NpdGUgbmFtZXNwYWNlLiBEYXRhYnJpY2tzIHBhdGhzIGRlZmF1bHQgdG8gdGhlaXIgYWN0dWFsIHJvb3QuICovXG4gIG1vdW50Pzogc3RyaW5nO1xufVxuXG4vKiogU3RyaW5nIHNob3J0aGFuZCBvciBmdWxsIG9wdGlvbnMgZm9yIG9uZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBwYXRoLiAqL1xuZXhwb3J0IHR5cGUgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGggPSBzdHJpbmcgfCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnM7XG5cbi8qKiBGaXhlZCBvciByZXF1ZXN0LWRlcGVuZGVudCBEYXRhYnJpY2tzIHBhdGggZW50cnkuICovXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFZhbHVlID1cbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFxuICB8IGZhbHNlXG4gIHwgKChcbiAgICAgIGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LFxuICAgICkgPT5cbiAgICAgIHwgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhcbiAgICAgIHwgZmFsc2VcbiAgICAgIHwgdW5kZWZpbmVkXG4gICAgICB8IFByb21pc2U8RGF0YWJyaWNrc1dvcmtzcGFjZVBhdGggfCBmYWxzZSB8IHVuZGVmaW5lZD4pO1xuXG4vKiogT3BlcmF0aW9ucyBhbmQgcGF0aCBnbG9icyBjYWNoZWQgYnkgdGhlIERhdGFicmlja3MgZmlsZXN5c3RlbSBzaG9ydGN1dC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyIHtcbiAgLyoqIENhY2hlZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuIE9taXQgZm9yIGBleGlzdHNgLCBgcmVhZEZpbGVgLCBgcmVhZGRpcmAsIGFuZCBgc3RhdGAuICovXG4gIG9wZXJhdGlvbnM/OiBDYWNoZWFibGVGaWxlU3lzdGVtT3BlcmF0aW9uIHwgcmVhZG9ubHkgQ2FjaGVhYmxlRmlsZVN5c3RlbU9wZXJhdGlvbltdO1xuICAvKiogQWJzb2x1dGUgb3Igcm9vdC1yZWxhdGl2ZSBnbG9icyBhbmQgcHJlZGljYXRlcy4gYH5gIGV4cGFuZHMgcGVyIHJlcXVlc3QuICovXG4gIHBhdGhzPzogUGF0aE1hdGNoSW5wdXQgfCByZWFkb25seSBQYXRoTWF0Y2hJbnB1dFtdO1xufVxuXG4vKiogRml4ZWQgb3IgcmVxdWVzdC1kZXBlbmRlbnQgZmlsZXN5c3RlbSBjYWNoZSBzZWxlY3Rpb24uICovXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGUgPVxuICB8IGJvb2xlYW5cbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJcbiAgfCByZWFkb25seSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJbXVxuICB8ICgoXG4gICAgICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgICApID0+XG4gICAgICB8IGJvb2xlYW5cbiAgICAgIHwgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyXG4gICAgICB8IHJlYWRvbmx5IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZUZpbHRlcltdXG4gICAgICB8IHVuZGVmaW5lZFxuICAgICAgfCBQcm9taXNlPFxuICAgICAgICAgIHwgYm9vbGVhblxuICAgICAgICAgIHwgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyXG4gICAgICAgICAgfCByZWFkb25seSBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXJbXVxuICAgICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICAgID4pO1xuXG4vKiogTW91bnQgbWFwIHBsdXMgb3B0aW9uYWwgTWFzdHJhIHNraWxsIHNjYW4gcm9vdHMgcmVzb2x2ZWQgZm9yIG9uZSByZXF1ZXN0LiAqL1xuaW50ZXJmYWNlIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHtcbiAgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPjtcbiAgLyoqIFBhdGhzIHdpdGhpbiB0aGUgY29tcG9zaXRlIG5hbWVzcGFjZSB3aGVyZSBgU0tJTEwubWRgIGZpbGVzIGFyZSBzY2FubmVkLiAqL1xuICBza2lsbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKiBJbnRlcm5hbCBmaWxlc3lzdGVtIGNvbnRyaWJ1dGlvbiByZXNvbHZlci4gKi9cbnR5cGUgV29ya3NwYWNlTW91bnRSZXNvbHZlciA9IChcbiAgY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsXG4pID0+IFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHwgUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj47XG5cbi8qKlxuICogU2FuZGJveCBzZWxlY3Rpb24gZm9yIHtAbGluayBkYXRhYnJpY2tzV29ya3NwYWNlfS4gTW9udHkgaXMgdGhlIGRlZmF1bHQ7XG4gKiBjb21tYW5kIGV4ZWN1dGlvbiBjYW4gYmUgZGlzYWJsZWQgb3IgcmVwbGFjZWQgd2l0aCBEYXRhYnJpY2tzIFNhbmRib3ggb3IgYW55XG4gKiBNYXN0cmEgcHJvdmlkZXIvcmVzb2x2ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24gPVxuICB8IGZhbHNlXG4gIHwgXCJkYXRhYnJpY2tzXCJcbiAgfCBcIm1vbnR5XCJcbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnNcbiAgfCBXb3Jrc3BhY2VTYW5kYm94XG4gIHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyO1xuXG4vKiogTmF0aXZlIE1hc3RyYSB3b3Jrc3BhY2Ugb3B0aW9ucyBwbHVzIERhdGFicmlja3MgcGF0aCBzaG9ydGN1dHMuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zIGV4dGVuZHMgT21pdDxcbiAgV29ya3NwYWNlQ29uZmlnLFxuICBcImZpbGVzeXN0ZW1cIiB8IFwibW91bnRzXCIgfCBcInNhbmRib3hcIiB8IFwic2tpbGxzXCJcbj4ge1xuICAvKipcbiAgICogU3RhcnQgZnJvbSB7QGxpbmsgREVGQVVMVF9EQVRBQlJJQ0tTX1dPUktTUEFDRV9QQVRIU30uIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIGFzc2lzdGFudFBhdGhzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERhdGFicmlja3MgcGF0aHMgYXBwZW5kZWQgYWZ0ZXIgdGhlIGRlZmF1bHRzLiBBIHN0cmluZyBpcyBzaG9ydGhhbmQgZm9yXG4gICAqIGB7IHBhdGggfWA7IGEgcmVzb2x2ZXIgbWF5IHJldHVybiBlaXRoZXIgZm9ybSBwZXIgcmVxdWVzdC5cbiAgICovXG4gIHBhdGhzPzogcmVhZG9ubHkgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZVtdO1xuICAvKiogTmF0aXZlIE1hc3RyYSBmaWxlc3lzdGVtcyBjb21wb3NlZCBiZXNpZGUgdGhlIERhdGFicmlja3MgcGF0aHMuICovXG4gIG1vdW50cz86IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+O1xuICAvKiogTmF0aXZlIE1hc3RyYSBza2lsbCBwYXRocyBvciByZXNvbHZlciBjb21wb3NlZCB3aXRoIHBhdGgtZGVjbGFyZWQgc2tpbGxzLiAqL1xuICBza2lsbHM/OiBTa2lsbHNSZXNvbHZlcjtcbiAgLyoqIEZpbGVzeXN0ZW0gY2FjaGUgZmlsdGVycy4gSWdub3JlZCB3aGVuIHRoZSBBcHBLaXQgZmlsZXMtY2FjaGUgcGx1Z2luIGlzIGFic2VudC4gKi9cbiAgY2FjaGU/OiBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGU7XG4gIC8qKiBBcHBLaXQgcGx1Z2luIGNvbnRleHQgdXNlZCB0byBkaXNjb3ZlciBvcHRpb25hbCBzaWJsaW5nIGNhcGFiaWxpdGllcy4gKi9cbiAgcGx1Z2luQ29udGV4dD86IHBsdWdpblJlZ2lzdHJ5LlBsdWdpbkNvbnRleHRMaWtlO1xuICAvKipcbiAgICogQ29tbWFuZCBzYW5kYm94LiBEZWZhdWx0cyB0byBNb250eS4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUgaXQsXG4gICAqIGBcImRhdGFicmlja3NcImAgb3IgRGF0YWJyaWNrcyBTYW5kYm94IG9wdGlvbnMgdG8gc2VsZWN0IHRoZSByZW1vdGUgcHJvdmlkZXIsXG4gICAqIG9yIGFuIGV4cGxpY2l0IE1hc3RyYSBzYW5kYm94L3Byb3ZpZGVyIHJlc29sdmVyLlxuICAgKi9cbiAgc2FuZGJveD86IFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb247XG4gIC8qKiBBZGQgdXNlci1zY29wZWQgYC90bXBgIG9ubHkgd2hlbiBubyBjb25maWd1cmVkIERhdGFicmlja3MgcGF0aCBtb3VudHMgd3JpdGFibGUuICovXG4gIGZhbGxiYWNrVG9UbXA/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0cmEgTE9DQUwgc2tpbGwgdHJlZXMgbW91bnRlZCByZWFkLW9ubHkgZm9yIGV2ZXJ5IHJlcXVlc3QncyBza2lsbFxuICAgKiBkaXNjb3ZlcnkuIFVzZWQgYnkgdGhlIHBsdWdpbiB0byBleHBvc2UgcmVtb3RlIHNraWxscyBmcm9tIGxvY2FsIGJhY2tpbmdcbiAgICogc3RvcmFnZSBhdCBzdGFibGUgdmlydHVhbCBwYXRocyAoc2VlIGByZW1vdGUtc2tpbGxzLnRzYCkuIERhdGFicmlja3MtaG9zdGVkXG4gICAqIHJlbW90ZSBza2lsbHMgbmVlZCBubyBlbnRyeSBoZXJlIGJlY2F1c2UgdGhlIGJ1aWx0LWluIEFzc2lzdGFudCBtb3VudFxuICAgKiBhbHJlYWR5IHNjYW5zIHRoZW0uXG4gICAqL1xuICBleHRyYVNraWxsTW91bnRzPzogTG9jYWxTa2lsbE1vdW50W107XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVmYXVsdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIERlZmF1bHQgRGF0YWJyaWNrcyBwYXRocyBmb3Igc2hhcmVkIGFuZCBjdXJyZW50LXVzZXIgQWdlbnQgU2tpbGxzLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9EQVRBQlJJQ0tTX1dPUktTUEFDRV9QQVRIUzogcmVhZG9ubHkgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhPcHRpb25zW10gPSBbXG4gIHtcbiAgICBwYXRoOiBPUkdBTklaQVRJT05fQVNTSVNUQU5UX1BBVEgsXG4gICAgc2tpbGxzOiBbXCJza2lsbHNcIl0sXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY3JlYXRlUm9vdDogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBwYXRoOiBcIn5cIixcbiAgICBza2lsbHM6IFtcIi5hc3Npc3RhbnQvc2tpbGxzXCJdLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNyZWF0ZVJvb3Q6IGZhbHNlLFxuICB9LFxuXTtcblxuLyoqXG4gKiBDcmVhdGUgYSBNYXN0cmEge0BsaW5rIFdvcmtzcGFjZX0gd2l0aCBwZXItcmVxdWVzdCBEYXRhYnJpY2tzIG1vdW50cy5cbiAqXG4gKiBAZXhhbXBsZSBEZWZhdWx0IERhdGFicmlja3MgcGF0aHNcbiAqIGBgYHRzXG4gKiBkYXRhYnJpY2tzV29ya3NwYWNlKClcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFVzZSBvbmx5IGV4cGxpY2l0IHBhdGhzXG4gKiBgYGB0c1xuICogZGF0YWJyaWNrc1dvcmtzcGFjZSh7XG4gKiAgIGFzc2lzdGFudFBhdGhzOiBmYWxzZSxcbiAqICAgcGF0aHM6IFtcIn4vcHJvamVjdFwiLCBcIi90bXAvcHJvamVjdFwiLCBcIi9Wb2x1bWVzL21haW4vZGVmYXVsdC9kYXRhXCJdLFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEJ1aWxkIGEgc3RhbmRhcmQgTWFzdHJhIHdvcmtzcGFjZSB5b3Vyc2VsZlxuICogYGBgdHNcbiAqIG5ldyBXb3Jrc3BhY2Uoe1xuICogICAuLi5kYXRhYnJpY2tzV29ya3NwYWNlQ29uZmlnKHsgcGF0aHM6IFtcIn4vcHJvamVjdFwiXSB9KSxcbiAqICAgc2FuZGJveDogbXlTYW5kYm94LFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YWJyaWNrc1dvcmtzcGFjZUNvbmZpZyhcbiAgb3B0aW9uczogRGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMgPSB7fSxcbik6IFdvcmtzcGFjZUNvbmZpZyB7XG4gIGNvbnN0IHsgaWQsIG5hbWUgfSA9IHJlc29sdmVXb3Jrc3BhY2VJZGVudGl0eShvcHRpb25zKTtcbiAgY29uc3QgZmlsZXN5c3RlbVNvdXJjZUtleSA9IGAke2lkfTokeysrd29ya3NwYWNlU291cmNlU2VxdWVuY2V9YDtcbiAgY29uc3QgcGF0aHMgPSByZXNvbHZlRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhzKG9wdGlvbnMpO1xuICBjb25zdCBjb25maWd1cmVkUGF0aHMgPSBwYXRocy5sZW5ndGg7XG4gIGNvbnN0IGV4dHJhU2tpbGxNb3VudHMgPSBvcHRpb25zLmV4dHJhU2tpbGxNb3VudHMgPz8gW107XG4gIGNvbnN0IGZpbGVzQ2FjaGUgPSBwbHVnaW5SZWdpc3RyeS5pbnN0YW5jZShvcHRpb25zLnBsdWdpbkNvbnRleHQsIGZpbGVzQ2FjaGVQbHVnaW4pPy5leHBvcnRzKCk7XG4gIGNvbnN0IGNvbmZpZ3VyZWRDYWNoZSA9IG9wdGlvbnMuY2FjaGU7XG4gIGNvbnN0IG1vdW50RmlsZXNDYWNoZSA9IGNvbmZpZ3VyZWRDYWNoZSA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBmaWxlc0NhY2hlO1xuICBjb25zdCByZXRhaW5GaWxlc3lzdGVtU291cmNlID1cbiAgICBtb3VudEZpbGVzQ2FjaGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR5cGVvZiBjb25maWd1cmVkQ2FjaGUgIT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHBhdGhzLmV2ZXJ5KChwYXRoKSA9PiB0eXBlb2YgcGF0aCAhPT0gXCJmdW5jdGlvblwiKTtcbiAgY29uc3QgcmVzb2x2ZXJzID0gYnVpbGRNb3VudFJlc29sdmVycyhcbiAgICBwYXRocyxcbiAgICBvcHRpb25zLm1vdW50cyxcbiAgICBsb2NhbFNraWxsTW91bnRSZXNvbHZlcnMoZXh0cmFTa2lsbE1vdW50cyksXG4gICAgbW91bnRGaWxlc0NhY2hlLFxuICAgIGNvbmZpZ3VyZWRDYWNoZSxcbiAgICBvcHRpb25zLmZhbGxiYWNrVG9UbXAgPT09IHRydWUsXG4gICk7XG4gIGNvbnN0IHJlc29sdmVDb250cmlidXRpb24gPSBjb250cmlidXRpb25SZXNvbHZlcihyZXNvbHZlcnMpO1xuICBjb25zdCByZXNvbHZlRmlsZXN5c3RlbSA9IChjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCkgPT5cbiAgICByZXNvbHZlV29ya3NwYWNlRmlsZXN5c3RlbShcbiAgICAgIHJlc29sdmVDb250cmlidXRpb24sXG4gICAgICBjb250ZXh0LFxuICAgICAgcmV0YWluRmlsZXN5c3RlbVNvdXJjZSA/IG1vdW50RmlsZXNDYWNoZSA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbGVzeXN0ZW1Tb3VyY2VLZXksXG4gICAgKTtcbiAgY29uc3QgaGFzU2tpbGxQYXRocyA9IHBhdGhzLnNvbWUocGF0aE1heVByb3ZpZGVTa2lsbHMpIHx8IGV4dHJhU2tpbGxNb3VudHMubGVuZ3RoID4gMDtcbiAgY29uc3Qgc2tpbGxzOiBTa2lsbHNSZXNvbHZlciA9XG4gICAgb3B0aW9ucy5za2lsbHMgPz9cbiAgICAoYXN5bmMgKHsgcmVxdWVzdENvbnRleHQgfSkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHsgcmVxdWVzdENvbnRleHQgfTtcbiAgICAgIGNvbnN0IGNvbnRyaWJ1dGlvbiA9IGF3YWl0IHJlc29sdmVDb250cmlidXRpb24oY29udGV4dCk7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3RpbmN0U2tpbGxQYXRocyhcbiAgICAgICAgYXdhaXQgcmVzb2x2ZUZpbGVzeXN0ZW0oY29udGV4dCksXG4gICAgICAgIGNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzID8/IFtdLFxuICAgICAgKTtcbiAgICB9KTtcbiAgY29uc3QgY2hlY2tTa2lsbEZpbGVNdGltZSA9IG9wdGlvbnMuY2hlY2tTa2lsbEZpbGVNdGltZSA/PyBmYWxzZTtcbiAgY29uc3QgYm0yNSA9IG9wdGlvbnMuYm0yNSA/PyB0cnVlO1xuICBjb25zdCBzYW5kYm94ID0gcmVzb2x2ZVdvcmtzcGFjZVNhbmRib3gob3B0aW9ucy5zYW5kYm94LCBpZCwgbmFtZSk7XG4gIGNvbnN0IHRvb2xzID0gd29ya3NwYWNlVG9vbHMob3B0aW9ucy50b29scyk7XG4gIGxvZ2dlci5kZWJ1ZyhcIndvcmtzcGFjZTpjcmVhdGVcIiwge1xuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgcmVzb2x2ZXJDb3VudDogcmVzb2x2ZXJzLmxlbmd0aCxcbiAgICBjb25maWd1cmVkUGF0aHMsXG4gICAgY3VzdG9tTW91bnRzOiBPYmplY3Qua2V5cyhvcHRpb25zLm1vdW50cyA/PyB7fSkubGVuZ3RoLFxuICAgIHNraWxsc0NvbmZpZ3VyZWQ6IG9wdGlvbnMuc2tpbGxzICE9PSB1bmRlZmluZWQgfHwgaGFzU2tpbGxQYXRocyxcbiAgICBjdXN0b21Ta2lsbHNSZXNvbHZlcjogb3B0aW9ucy5za2lsbHMgIT09IHVuZGVmaW5lZCxcbiAgICBjaGVja1NraWxsRmlsZU10aW1lLFxuICAgIGJtMjUsXG4gICAgZXh0cmFTa2lsbE1vdW50czogZXh0cmFTa2lsbE1vdW50cy5sZW5ndGgsXG4gICAgc2FuZGJveDogc2FuZGJveCA/IHNhbmRib3hOYW1lKG9wdGlvbnMuc2FuZGJveCkgOiBcImRpc2FibGVkXCIsXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhc3Npc3RhbnRQYXRoczogX2Fzc2lzdGFudFBhdGhzLFxuICAgIHBhdGhzOiBfcGF0aHMsXG4gICAgbW91bnRzOiBfbW91bnRzLFxuICAgIHNraWxsczogX3NraWxscyxcbiAgICBjYWNoZTogX2NhY2hlLFxuICAgIHBsdWdpbkNvbnRleHQ6IF9wbHVnaW5Db250ZXh0LFxuICAgIHNhbmRib3g6IF9zYW5kYm94LFxuICAgIGZhbGxiYWNrVG9UbXA6IF9mYWxsYmFja1RvVG1wLFxuICAgIGV4dHJhU2tpbGxNb3VudHM6IF9leHRyYVNraWxsTW91bnRzLFxuICAgIC4uLndvcmtzcGFjZU9wdGlvbnNcbiAgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgLi4ud29ya3NwYWNlT3B0aW9ucyxcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGZpbGVzeXN0ZW06IHJlc29sdmVGaWxlc3lzdGVtLFxuICAgIC4uLihvcHRpb25zLnNraWxscyAhPT0gdW5kZWZpbmVkIHx8IGhhc1NraWxsUGF0aHNcbiAgICAgID8ge1xuICAgICAgICAgIHNraWxscyxcbiAgICAgICAgICBjaGVja1NraWxsRmlsZU10aW1lLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4oc2FuZGJveFxuICAgICAgPyB7XG4gICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6IHsgZHluYW1pY1NhbmRib3g6IFwicmVzb2x2ZVwiIGFzIGNvbnN0IH0sXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIGJtMjUsXG4gICAgdG9vbHMsXG4gIH07XG59XG5cbi8qKiBDcmVhdGUgYSBuYXRpdmUgTWFzdHJhIHtAbGluayBXb3Jrc3BhY2V9IGZyb20ge0BsaW5rIGRhdGFicmlja3NXb3Jrc3BhY2VDb25maWd9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFicmlja3NXb3Jrc3BhY2Uob3B0aW9uczogRGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMgPSB7fSk6IFdvcmtzcGFjZSB7XG4gIGNvbnN0IHdvcmtzcGFjZSA9IG5ldyBXb3Jrc3BhY2UoZGF0YWJyaWNrc1dvcmtzcGFjZUNvbmZpZyhvcHRpb25zKSk7XG4gIGRhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zLnNldCh3b3Jrc3BhY2UsIG9wdGlvbnMpO1xuICByZXR1cm4gd29ya3NwYWNlO1xufVxuXG4vKiogQGludGVybmFsIEJpbmQgYSBjYWxsZXItY3JlYXRlZCBEYXRhYnJpY2tzIHdvcmtzcGFjZSB0byBpdHMgQXBwS2l0IHBsdWdpbiBjb250ZXh0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmREYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dChcbiAgd29ya3NwYWNlOiBXb3Jrc3BhY2UsXG4gIHBsdWdpbkNvbnRleHQ6IHBsdWdpblJlZ2lzdHJ5LlBsdWdpbkNvbnRleHRMaWtlIHwgdW5kZWZpbmVkLFxuKTogV29ya3NwYWNlIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGRhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zLmdldCh3b3Jrc3BhY2UpO1xuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5wbHVnaW5Db250ZXh0ICE9PSB1bmRlZmluZWQgfHwgcGx1Z2luQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZTtcbiAgfVxuICByZXR1cm4gZGF0YWJyaWNrc1dvcmtzcGFjZSh7IC4uLm9wdGlvbnMsIHBsdWdpbkNvbnRleHQgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBkZWZhdWx0IGFuZCBjYWxsZXItcHJvdmlkZWQgRGF0YWJyaWNrcyBwYXRocyBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVEYXRhYnJpY2tzV29ya3NwYWNlUGF0aHMoXG4gIG9wdGlvbnM6IFBpY2s8RGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMsIFwiYXNzaXN0YW50UGF0aHNcIiB8IFwicGF0aHNcIj4gPSB7fSxcbik6IERhdGFicmlja3NXb3Jrc3BhY2VQYXRoVmFsdWVbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uKG9wdGlvbnMuYXNzaXN0YW50UGF0aHMgPT09IGZhbHNlID8gW10gOiBERUZBVUxUX0RBVEFCUklDS1NfV09SS1NQQUNFX1BBVEhTKSxcbiAgICAuLi4ob3B0aW9ucy5wYXRocyA/PyBbXSksXG4gIF07XG59XG5cbi8qKiBXaGV0aGVyIG9uZSBpbmNsdWRlZCBwYXRoIGNhbiBjb250cmlidXRlIE1hc3RyYSBza2lsbCBwYXRocy4gKi9cbmZ1bmN0aW9uIHBhdGhNYXlQcm92aWRlU2tpbGxzKHBhdGg6IERhdGFicmlja3NXb3Jrc3BhY2VQYXRoVmFsdWUpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICBpZiAocGF0aCA9PT0gZmFsc2UgfHwgdHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIChwYXRoLnNraWxscz8ubGVuZ3RoID8/IDApID4gMDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcml2YXRlIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5mdW5jdGlvbiB3b3Jrc3BhY2VUb29scyhjb25maWd1cmVkOiBXb3Jrc3BhY2VUb29sc0NvbmZpZyB8IHVuZGVmaW5lZCk6IFdvcmtzcGFjZVRvb2xzQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIHJlcXVpcmVBcHByb3ZhbDogZmFsc2UsXG4gICAgLi4uY29uZmlndXJlZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZVNhbmRib3goXG4gIHNlbGVjdGlvbjogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiB8IHVuZGVmaW5lZCxcbiAgd29ya3NwYWNlSWQ6IHN0cmluZyxcbiAgd29ya3NwYWNlTmFtZTogc3RyaW5nLFxuKTogV29ya3NwYWNlU2FuZGJveCB8IFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBzZWxlY3Rpb24gPz8gXCJtb250eVwiO1xuICBpZiAoY29uZmlndXJlZCA9PT0gZmFsc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChjb25maWd1cmVkID09PSBcIm1vbnR5XCIpIHJldHVybiBuZXcgTW9udHlTYW5kYm94KCk7XG4gIGlmICh0eXBlb2YgY29uZmlndXJlZCA9PT0gXCJmdW5jdGlvblwiIHx8IGlzU2FuZGJveChjb25maWd1cmVkKSkgcmV0dXJuIGNvbmZpZ3VyZWQ7XG5cbiAgY29uc3Qgb3B0aW9uczogRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zID1cbiAgICBjb25maWd1cmVkID09PSBcImRhdGFicmlja3NcIiA/IHsgcHJvdmlkZXI6IFwiZGF0YWJyaWNrc1wiIH0gOiBjb25maWd1cmVkO1xuICByZXR1cm4gKHsgcmVxdWVzdENvbnRleHQgfSkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICAgIGlmICghdXNlcikge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiRGF0YWJyaWNrcyBzYW5kYm94IHVzZXIgY29udGV4dFwiLFxuICAgICAgICBcIkludm9rZSBjb21tYW5kIHRvb2xzIGZyb20gYW4gYWdlbnQgdHVybiBzZXJ2ZWQgYnkgdGhlIE1hc3RyYSBwbHVnaW4uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmVkSWQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuc2FuZGJveElkID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBvcHRpb25zLnNhbmRib3hJZCh7IHJlcXVlc3RDb250ZXh0IH0pXG4gICAgICAgIDogb3B0aW9ucy5zYW5kYm94SWQ7XG4gICAgY29uc3Qgc2FuZGJveElkID0gY29uZmlndXJlZElkID8/IGRlZmF1bHRTYW5kYm94SWQod29ya3NwYWNlSWQsIHVzZXIuaWQpO1xuICAgIGNvbnN0IGNsaWVudCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5jbGllbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IG9wdGlvbnMuY2xpZW50KHsgcmVxdWVzdENvbnRleHQgfSlcbiAgICAgICAgOiAob3B0aW9ucy5jbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCkpO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3ZpZGVyOiBfcHJvdmlkZXIsXG4gICAgICBzYW5kYm94SWQ6IF9zYW5kYm94SWQsXG4gICAgICBjbGllbnQ6IF9jbGllbnQsXG4gICAgICAuLi5zYW5kYm94T3B0aW9uc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc1NhbmRib3goe1xuICAgICAgLi4uc2FuZGJveE9wdGlvbnMsXG4gICAgICBjbGllbnQsXG4gICAgICBzYW5kYm94SWQsXG4gICAgICBkaXNwbGF5TmFtZTogb3B0aW9ucy5kaXNwbGF5TmFtZSA/PyBgTWFzdHJhICR7d29ya3NwYWNlTmFtZX1gLFxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0U2FuZGJveElkKHdvcmtzcGFjZUlkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGlnZXN0ID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgIC51cGRhdGUob2JqZWN0LnRvU3RhYmxlS2V5KHsgd29ya3NwYWNlSWQsIHVzZXJJZCB9KSlcbiAgICAuZGlnZXN0KFwiaGV4XCIpXG4gICAgLnNsaWNlKDAsIDMyKTtcbiAgcmV0dXJuIGBtYXN0cmEtJHtkaWdlc3R9YDtcbn1cblxuZnVuY3Rpb24gaXNTYW5kYm94KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya3NwYWNlU2FuZGJveCB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcImlkXCIgaW4gdmFsdWUgJiYgXCJwcm92aWRlclwiIGluIHZhbHVlICYmIFwic3RhdHVzXCIgaW4gdmFsdWUsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNhbmRib3hOYW1lKHNlbGVjdGlvbjogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb24gPT09IGZhbHNlKSByZXR1cm4gXCJkaXNhYmxlZFwiO1xuICBpZiAoc2VsZWN0aW9uID09PSBcIm1vbnR5XCIpIHJldHVybiBcIm1vbnR5XCI7XG4gIGlmIChzZWxlY3Rpb24gPT09IFwiZGF0YWJyaWNrc1wiKSByZXR1cm4gXCJkYXRhYnJpY2tzXCI7XG4gIGlmICh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBcInJlc29sdmVyXCI7XG4gIHJldHVybiBpc1NhbmRib3goc2VsZWN0aW9uKSA/IHNlbGVjdGlvbi5wcm92aWRlciA6IChzZWxlY3Rpb24ucHJvdmlkZXIgPz8gXCJkYXRhYnJpY2tzXCIpO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSByZXF1ZXN0IHRva2VuIGNhcnJpZXMgYSBzY29wZSB0aGF0IGFsbG93cyB3b3Jrc3BhY2VcbiAqIGZpbGUgQVBJIGFjY2VzcyAoYHdvcmtzcGFjZWAgb3IgYGFsbC1hcGlzYCBvbiB7QGxpbmsgTUFTVFJBX1NDT1BFU19LRVl9KS5cbiAqL1xuZnVuY3Rpb24gaGFzV29ya3NwYWNlRmlsZVNjb3BlKHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9rZW4uaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlKFxuICAgIHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1NDT1BFU19LRVkpLFxuICAgIFdPUktTUEFDRV9GSUxFX1NDT1BFUyxcbiAgKTtcbn1cblxuLyoqIFJlc29sdmUgdGhlIHJlcXVlc3QgY2xpZW50IGFuZCBhdXRob3JpemF0aW9uLXNhZmUgZmlsZXMtY2FjaGUgc2NvcGUuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRmlsZXNDYWNoZVNjb3BlKGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0KTogUHJvbWlzZTxcbiAgfCB7XG4gICAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudDtcbiAgICAgIHNjb3BlOiBGaWxlc0NhY2hlU2NvcGU7XG4gICAgfVxuICB8IHVuZGVmaW5lZFxuPiB7XG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gY29udGV4dC5yZXF1ZXN0Q29udGV4dDtcbiAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbGllbnQgPSB1c2VyPy5leGVjdXRpb25Db250ZXh0LmNsaWVudCBhcyBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG4gIGlmICghcmVxdWVzdENvbnRleHQgfHwgIXVzZXIgfHwgIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBjbGllbnQsXG4gICAgc2NvcGU6IHtcbiAgICAgIGhvc3Q6IChhd2FpdCBjbGllbnQuY29uZmlnLmdldEhvc3QoKSkudG9TdHJpbmcoKSxcbiAgICAgIHVzZXJLZXk6IHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0KSxcbiAgICAgIC4uLihwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX1dPUktTUEFDRV9JRD8udHJpbSgpXG4gICAgICAgID8geyB3b3Jrc3BhY2VJZDogcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19XT1JLU1BBQ0VfSUQudHJpbSgpIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIEpvaW4gb25lIHJlbGF0aXZlIHNraWxsIHBhdGggdG8gaXRzIGFjdHVhbCBjb21wb3NpdGUgbW91bnQgcGF0aC4gKi9cbmZ1bmN0aW9uIG1vdW50ZWRTa2lsbFBhdGgobW91bnQ6IHN0cmluZywgc2tpbGxQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocG9zaXhQYXRoLmlzQWJzb2x1dGUoc2tpbGxQYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFNraWxsIHBhdGggbXVzdCBiZSByZWxhdGl2ZSB0byBpdHMgbW91bnQ6ICR7c2tpbGxQYXRofWApO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBwb3NpeFBhdGgubm9ybWFsaXplKHNraWxsUGF0aCk7XG4gIGlmICghbm9ybWFsaXplZC5vaykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFNraWxsIHBhdGggZXNjYXBlcyBpdHMgbW91bnQ6ICR7c2tpbGxQYXRofWApO1xuICB9XG4gIHJldHVybiBwb3NpeFBhdGguam9pbihwb3NpeFBhdGgubm9ybWFsaXplUm9vdChtb3VudCksIG5vcm1hbGl6ZWQucGF0aC5zbGljZSgxKSk7XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBhIERhdGFicmlja3MgcGF0aCBiZWxvbmdzIHRvIHRoZSB3cml0YWJsZSBXb3Jrc3BhY2UgbmFtZXNwYWNlLiAqL1xuZnVuY3Rpb24gaXNXb3Jrc3BhY2VSb290KHJvb3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkID0gcG9zaXhQYXRoLm5vcm1hbGl6ZVJvb3Qocm9vdCk7XG4gIHJldHVybiBub3JtYWxpemVkID09PSBcIi9Xb3Jrc3BhY2VcIiB8fCBub3JtYWxpemVkLnN0YXJ0c1dpdGgoXCIvV29ya3NwYWNlL1wiKTtcbn1cblxuLyoqXG4gKiBNb3VudCByZXNvbHZlciBmb3IgY29uZmlndXJlZCBEYXRhYnJpY2tzIGFuZCB0ZW1wb3JhcnkgcGF0aHMuXG4gKlxuICogR2F0ZXMgb24gd29ya3NwYWNlIGZpbGUgc2NvcGUgKG9yIGRldmVsb3BtZW50IG1vZGUpLCB0aGVuIG1vdW50cyBldmVyeVxuICogZm9sZGVyIHdob3NlIGxvY2F0aW9uIHJlc29sdmVzIGZvciB0aGlzIHJlcXVlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VQYXRoTW91bnRzKFxuICBwYXRoczogcmVhZG9ubHkgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZVtdLFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgZmlsZXNDYWNoZTogRmlsZXNDYWNoZUV4cG9ydHMgfCB1bmRlZmluZWQsXG4gIGNhY2hlQ29uZmlnOiBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGUgfCB1bmRlZmluZWQsXG4gIGZhbGxiYWNrVG9UbXA6IGJvb2xlYW4sXG4pOiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB7XG4gIGNvbnN0IG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT4gPSB7fTtcbiAgY29uc3Qgc2tpbGxQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGhhc1dyaXRhYmxlTW91bnQgPSBmYWxzZTtcbiAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBjb250ZXh0LnJlcXVlc3RDb250ZXh0O1xuXG4gIGNvbnN0IGNhbk1vdW50RGF0YWJyaWNrcyA9IEJvb2xlYW4ocmVxdWVzdENvbnRleHQgJiYgc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQpKTtcbiAgY29uc3Qgc2NvcGVkID0gY2FuTW91bnREYXRhYnJpY2tzID8gYXdhaXQgcmVzb2x2ZUZpbGVzQ2FjaGVTY29wZShjb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xpZW50ID0gc2NvcGVkPy5jbGllbnQ7XG4gIGNvbnN0IGZpbGVTeXN0ZW1DYWNoZSA9XG4gICAgZmlsZXNDYWNoZSAmJiBzY29wZWQgPyBhd2FpdCBmaWxlc0NhY2hlLmZvclNjb3BlKHNjb3BlZC5zY29wZSkgOiB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHBhdGhdIG9mIHBhdGhzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSBhd2FpdCByZXNvbHZlRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGgocGF0aCwgY29udGV4dCk7XG4gICAgaWYgKCFjb25maWd1cmVkKSBjb250aW51ZTtcbiAgICBpZiAocG9zaXhQYXRoLmlzV2l0aGluUm9vdChTQ1JBVENIX01PVU5ULCBjb25maWd1cmVkLnBhdGgpKSB7XG4gICAgICBjb25zdCBtb3VudCA9IGNvbmZpZ3VyZWQubW91bnQgPz8gY29uZmlndXJlZC5wYXRoO1xuICAgICAgbW91bnRzW21vdW50XSA9IHVzZXJUZW1wRmlsZXN5c3RlbShjb250ZXh0LCBjb25maWd1cmVkLnBhdGgpO1xuICAgICAgaGFzV3JpdGFibGVNb3VudCA9IHRydWU7XG4gICAgICBza2lsbFBhdGhzLnB1c2goLi4uKGNvbmZpZ3VyZWQuc2tpbGxzID8/IFtdKS5tYXAoKHBhdGgpID0+IG1vdW50ZWRTa2lsbFBhdGgobW91bnQsIHBhdGgpKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFjYW5Nb3VudERhdGFicmlja3MpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIndvcmtzcGFjZS1wYXRoOnNraXBwZWRcIiwge1xuICAgICAgICBwYXRoOiBjb25maWd1cmVkLnBhdGgsXG4gICAgICAgIHJlYXNvbjogIXJlcXVlc3RDb250ZXh0ID8gXCJuby1yZXF1ZXN0LWNvbnRleHRcIiA6IFwibWlzc2luZy13b3Jrc3BhY2Utc2NvcGVcIixcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVNraWxsRm9sZGVyRmlsZXN5c3RlbShjb25maWd1cmVkLCBjb250ZXh0LCBjYWNoZUNvbmZpZywge1xuICAgICAgY2xpZW50LFxuICAgICAgZmlsZVN5c3RlbUNhY2hlLFxuICAgIH0pO1xuICAgIGlmICghcmVzb2x2ZWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1vdW50ID0gY29uZmlndXJlZC5tb3VudCA/PyByZXNvbHZlZC5yb290O1xuICAgIGlmICghbW91bnQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIndvcmtzcGFjZS1wYXRoOnNraXBwZWRcIiwgeyBpbmRleCwgcmVhc29uOiBcIm1pc3NpbmctbW91bnRcIiB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtb3VudHNbbW91bnRdID0gcmVzb2x2ZWQuZmlsZXN5c3RlbTtcbiAgICBoYXNXcml0YWJsZU1vdW50IHx8PSByZXNvbHZlZC53cml0YWJsZTtcbiAgICBza2lsbFBhdGhzLnB1c2goLi4uKGNvbmZpZ3VyZWQuc2tpbGxzID8/IFtdKS5tYXAoKHBhdGgpID0+IG1vdW50ZWRTa2lsbFBhdGgobW91bnQsIHBhdGgpKSk7XG4gIH1cblxuICBpZiAoZmFsbGJhY2tUb1RtcCAmJiAhaGFzV3JpdGFibGVNb3VudCkge1xuICAgIG1vdW50c1tTQ1JBVENIX01PVU5UXSA9IHVzZXJUZW1wRmlsZXN5c3RlbShjb250ZXh0LCBTQ1JBVENIX01PVU5UKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIndvcmtzcGFjZS1wYXRoczptb3VudGVkXCIsIHtcbiAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKG1vdW50cyksXG4gICAgc2tpbGxQYXRocyxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudHMsXG4gICAgc2tpbGxQYXRocyxcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGgge1xuICBwYXRoOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2tpbGxzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHdyaXRhYmxlPzogYm9vbGVhbjtcbiAgY3JlYXRlUm9vdD86IGJvb2xlYW47XG4gIG1vdW50Pzogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGgoXG4gIHZhbHVlOiBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFZhbHVlLFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbik6IFByb21pc2U8UmVzb2x2ZWREYXRhYnJpY2tzV29ya3NwYWNlUGF0aCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBzZWxlY3RlZCA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgdmFsdWUoY29udGV4dCkgOiB2YWx1ZTtcbiAgaWYgKHNlbGVjdGVkID09PSBmYWxzZSB8fCBzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjb25maWd1cmVkID0gdHlwZW9mIHNlbGVjdGVkID09PSBcInN0cmluZ1wiID8geyBwYXRoOiBzZWxlY3RlZCB9IDogc2VsZWN0ZWQ7XG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gcmVxdWVzdENvbnRleHRWYWx1ZXMoY29udGV4dC5yZXF1ZXN0Q29udGV4dCk7XG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVIb21lUGF0aChjb25maWd1cmVkLnBhdGgsIHJlcXVlc3RDb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZFBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlc29sdmVkTW91bnQgPSByZXNvbHZlSG9tZVBhdGgoY29uZmlndXJlZC5tb3VudCwgcmVxdWVzdENvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZ3VyZWQsXG4gICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgIC4uLihyZXNvbHZlZE1vdW50ID8geyBtb3VudDogcmVzb2x2ZWRNb3VudCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIHNraWxsIGZvbGRlciB0byBhIE1hc3RyYSBmaWxlc3lzdGVtLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIGl0XG4gKiBmb3IgdGhpcyByZXF1ZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2tpbGxGb2xkZXJGaWxlc3lzdGVtKFxuICBmb2xkZXI6IFJlc29sdmVkRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGgsXG4gIGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LFxuICBjYWNoZUNvbmZpZzogRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlIHwgdW5kZWZpbmVkLFxuICBjYWNoZToge1xuICAgIGNsaWVudDogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuICAgIGZpbGVTeXN0ZW1DYWNoZTogRmlsZVN5c3RlbUNhY2hlIHwgdW5kZWZpbmVkO1xuICB9LFxuKTogUHJvbWlzZTxcbiAgfCB7XG4gICAgICBmaWxlc3lzdGVtOiBXb3Jrc3BhY2VGaWxlc3lzdGVtO1xuICAgICAgcm9vdD86IHN0cmluZztcbiAgICAgIHdyaXRhYmxlOiBib29sZWFuO1xuICAgIH1cbiAgfCB1bmRlZmluZWRcbj4ge1xuICAvLyBBIHBhdGggbW91bnQgbmVlZHMgdGhlIHJlcXVlc3QncyBPQk8gY2xpZW50IHRvIHJlYWNoIHRoZSB3b3Jrc3BhY2UuXG4gIGlmICghY2FjaGUuY2xpZW50KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwid29ya3NwYWNlLXBhdGg6c2tpcHBlZFwiLCB7XG4gICAgICBwYXRoOiBmb2xkZXIucGF0aCxcbiAgICAgIHJlYXNvbjogXCJtaXNzaW5nLW9iby1jbGllbnRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGZvbGRlci5wYXRoKTtcbiAgaWYgKCFyb290KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB3cml0YWJsZSA9IGZvbGRlci53cml0YWJsZSA/PyBpc1dvcmtzcGFjZVJvb3Qocm9vdCk7XG4gIGNvbnN0IGNhY2hlT3B0aW9ucyA9IGNhY2hlLmZpbGVTeXN0ZW1DYWNoZVxuICAgID8gYXdhaXQgcmVzb2x2ZUZpbGVDYWNoZU9wdGlvbnMoY2FjaGVDb25maWcsIGNvbnRleHQsIHJvb3QsIGZvbGRlci5za2lsbHMgPz8gW10pXG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZGF0YWJyaWNrc0ZpbGVzeXN0ZW0oXG4gICAgY2FjaGUuY2xpZW50LFxuICAgIHJvb3QsXG4gICAgIXdyaXRhYmxlLFxuICAgIGZvbGRlci5jcmVhdGVSb290ID8/IGZvbGRlci53cml0YWJsZSA9PT0gdHJ1ZSxcbiAgICBjYWNoZS5maWxlU3lzdGVtQ2FjaGUsXG4gICAgY2FjaGVPcHRpb25zLFxuICAgIHtcbiAgICAgIC4uLihmb2xkZXIuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiBmb2xkZXIuZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgIC4uLihmb2xkZXIuZGlzcGxheU5hbWUgPyB7IGRpc3BsYXlOYW1lOiBmb2xkZXIuZGlzcGxheU5hbWUgfSA6IHt9KSxcbiAgICB9LFxuICApO1xuICByZXR1cm4gcmVzb2x2ZWQgPyB7IC4uLnJlc29sdmVkLCByb290LCB3cml0YWJsZSB9IDogdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ2FjaGVDb25maWcoXG4gIHZhbHVlOiBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGUgfCB1bmRlZmluZWQsXG4gIGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LFxuKTogUHJvbWlzZTxcbiAgYm9vbGVhbiB8IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZUZpbHRlciB8IHJlYWRvbmx5IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZUZpbHRlcltdIHwgdW5kZWZpbmVkXG4+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdmFsdWUoY29udGV4dCkgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdENvbnRleHRWYWx1ZXMocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gcmVxdWVzdENvbnRleHQ/LnRvSlNPTigpID8/IHt9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlSG9tZVBhdGgoXG4gIGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHJlcXVlc3RDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChpbnB1dCk7XG4gIGlmICghdmFsdWUgfHwgKHZhbHVlICE9PSBcIn5cIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIn4vXCIpKSkgcmV0dXJuIHZhbHVlID8/IHVuZGVmaW5lZDtcbiAgY29uc3QgZW1haWxWYWx1ZSA9IHJlcXVlc3RDb250ZXh0W01BU1RSQV9VU0VSX0VNQUlMX0tFWV07XG4gIGNvbnN0IGVtYWlsID0gdHlwZW9mIGVtYWlsVmFsdWUgPT09IFwic3RyaW5nXCIgPyBzdHJpbmdVdGlscy50cmltVG9OdWxsKGVtYWlsVmFsdWUpIDogdW5kZWZpbmVkO1xuICBpZiAoIWVtYWlsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBob21lID0gcGVyc29uYWxXb3Jrc3BhY2VQYXRoKGVtYWlsKTtcbiAgcmV0dXJuIHZhbHVlID09PSBcIn5cIiA/IGhvbWUgOiBgJHtob21lfS8ke3ZhbHVlLnNsaWNlKDIpfWA7XG59XG5cbmZ1bmN0aW9uIHRvUG9saWN5QXJyYXk8VD4odmFsdWU6IFQgfCByZWFkb25seSBUW10gfCB1bmRlZmluZWQpOiByZWFkb25seSBUW10ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAodmFsdWUgYXMgcmVhZG9ubHkgVFtdKSA6IFt2YWx1ZSBhcyBUXTtcbn1cblxuZnVuY3Rpb24gY2FjaGVGaWx0ZXJNYXRjaGVzKFxuICBwb2xpY3k6IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZUZpbHRlcixcbiAgb3BlcmF0aW9uOiBDYWNoZWFibGVGaWxlU3lzdGVtT3BlcmF0aW9uLFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcXVlc3RDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcm9vdD86IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBjb25zdCBvcGVyYXRpb25zID0gdG9Qb2xpY3lBcnJheShwb2xpY3kub3BlcmF0aW9ucyA/PyBDQUNIRUFCTEVfRklMRVNZU1RFTV9PUEVSQVRJT05TKTtcbiAgaWYgKCFvcGVyYXRpb25zLmluY2x1ZGVzKG9wZXJhdGlvbikpIHJldHVybiBmYWxzZTtcbiAgaWYgKHBvbGljeS5wYXRocyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgaW5wdXRzOiBQYXRoTWF0Y2hJbnB1dFtdID0gW107XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgdG9Qb2xpY3lBcnJheTxQYXRoTWF0Y2hJbnB1dD4ocG9saWN5LnBhdGhzKSkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlucHV0cy5wdXNoKGlucHV0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBleHBhbmRlZCA9IHJlc29sdmVIb21lUGF0aChpbnB1dCwgcmVxdWVzdENvbnRleHQpO1xuICAgIGlmICghZXhwYW5kZWQpIGNvbnRpbnVlO1xuICAgIGlucHV0cy5wdXNoKFxuICAgICAgIXJvb3QgfHwgcG9zaXhQYXRoLmlzQWJzb2x1dGUoZXhwYW5kZWQpIHx8IGV4cGFuZGVkLnN0YXJ0c1dpdGgoXCIqKlwiKVxuICAgICAgICA/IGV4cGFuZGVkXG4gICAgICAgIDogYCR7cG9zaXhQYXRoLm5vcm1hbGl6ZVJvb3Qocm9vdCl9LyR7ZXhwYW5kZWQucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gaW5wdXRzLmxlbmd0aCA+IDAgJiYgbWF0Y2gudG9QYXRoTWF0Y2hlciguLi5pbnB1dHMpKHBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRmlsZUNhY2hlT3B0aW9ucyhcbiAgY29uZmlndXJlZDogRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlIHwgdW5kZWZpbmVkLFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgcm9vdDogc3RyaW5nLFxuICBza2lsbFBhdGhzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFByb21pc2U8RmlsZVN5c3RlbUNhY2hlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHJlcXVlc3RDb250ZXh0VmFsdWVzKGNvbnRleHQucmVxdWVzdENvbnRleHQpO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVDYWNoZUNvbmZpZyhjb25maWd1cmVkLCBjb250ZXh0KTtcbiAgaWYgKHJlc29sdmVkID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHJlc29sdmVkID09PSB1bmRlZmluZWQgfHwgcmVzb2x2ZWQgPT09IHRydWUpIHtcbiAgICBjb25zdCByb290cyA9IHNraWxsUGF0aHMubWFwKChwYXRoKSA9PiBtb3VudGVkU2tpbGxQYXRoKHJvb3QsIHBhdGgpKTtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0aW9uczogQ0FDSEVBQkxFX0ZJTEVTWVNURU1fT1BFUkFUSU9OUyxcbiAgICAgIGZpbHRlcjogKG9wZXJhdGlvbiwgcGF0aCkgPT5cbiAgICAgICAgb3BlcmF0aW9uICE9PSBcInJlYWRGaWxlXCIgfHxcbiAgICAgICAgcm9vdHMuc29tZSgoc2tpbGxSb290KSA9PiBwb3NpeFBhdGguaXNXaXRoaW5Sb290KHNraWxsUm9vdCwgcGF0aCkpLFxuICAgIH07XG4gIH1cbiAgY29uc3QgcG9saWNpZXMgPSB0b1BvbGljeUFycmF5KHJlc29sdmVkKTtcbiAgaWYgKHBvbGljaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgb3BlcmF0aW9ucyA9IFtcbiAgICAuLi5uZXcgU2V0KFxuICAgICAgcG9saWNpZXMuZmxhdE1hcCgocG9saWN5KSA9PlxuICAgICAgICB0b1BvbGljeUFycmF5KHBvbGljeS5vcGVyYXRpb25zID8/IENBQ0hFQUJMRV9GSUxFU1lTVEVNX09QRVJBVElPTlMpLFxuICAgICAgKSxcbiAgICApLFxuICBdO1xuICByZXR1cm4ge1xuICAgIG9wZXJhdGlvbnMsXG4gICAgZmlsdGVyOiAob3BlcmF0aW9uLCBwYXRoKSA9PlxuICAgICAgcG9saWNpZXMuc29tZSgocG9saWN5KSA9PiBjYWNoZUZpbHRlck1hdGNoZXMocG9saWN5LCBvcGVyYXRpb24sIHBhdGgsIHJlcXVlc3RDb250ZXh0LCByb290KSksXG4gIH07XG59XG5cbi8qKlxuICogRmlsbCBpbiBgaWRgIGFuZCBgbmFtZWAgd2hlbiBlaXRoZXIgaXMgb21pdHRlZCBvbiB7QGxpbmsgRGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnN9LlxuICogU2x1Z2lmaWVzIGBuYW1lYCBpbnRvIGBpZGA7IHRva2VuaXplcyBgaWRgIGludG8gYSBkaXNwbGF5IGBuYW1lYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnM6IERhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zKToge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59IHtcbiAgbGV0IGlkID0gb3B0aW9ucy5pZDtcbiAgbGV0IG5hbWUgPSBvcHRpb25zLm5hbWU7XG4gIGlmICghaWQpIHtcbiAgICBpZCA9IG5hbWUgPyBzdHJpbmdVdGlscy50b1NsdWcobmFtZSkgOiBcIndvcmtzcGFjZVwiO1xuICB9XG4gIGlmICghbmFtZSkge1xuICAgIG5hbWUgPSBBcnJheS5mcm9tKHN0cmluZ1V0aWxzLnRva2VuaXplKGlkKSkuam9pbihcIiBcIik7XG4gIH1cbiAgcmV0dXJuIHsgaWQsIG5hbWUgfTtcbn1cblxuLyoqIENvbGxlY3QgdGhlIERhdGFicmlja3MgcGF0aCByZXNvbHZlciBhbmQgYW55IGNhbGxlci1zdXBwbGllZCBtb3VudHMuICovXG5mdW5jdGlvbiBidWlsZE1vdW50UmVzb2x2ZXJzKFxuICBwYXRoczogcmVhZG9ubHkgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZVtdLFxuICBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+IHwgdW5kZWZpbmVkLFxuICBsb2NhbE1vdW50czogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBmaWxlc0NhY2hlOiBGaWxlc0NhY2hlRXhwb3J0cyB8IHVuZGVmaW5lZCxcbiAgY2FjaGVDb25maWc6IERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZSB8IHVuZGVmaW5lZCxcbiAgZmFsbGJhY2tUb1RtcDogYm9vbGVhbixcbik6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSB7XG4gIGNvbnN0IHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdID0gW107XG4gIGNvbnN0IHBhdGhDb3VudCA9IHBhdGhzLmxlbmd0aDtcbiAgaWYgKHBhdGhDb3VudCA+IDAgfHwgZmFsbGJhY2tUb1RtcCkge1xuICAgIHJlc29sdmVycy5wdXNoKChjb250ZXh0KSA9PlxuICAgICAgcmVzb2x2ZVdvcmtzcGFjZVBhdGhNb3VudHMocGF0aHMsIGNvbnRleHQsIGZpbGVzQ2FjaGUsIGNhY2hlQ29uZmlnLCBmYWxsYmFja1RvVG1wKSxcbiAgICApO1xuICB9XG4gIGlmIChtb3VudHMgJiYgT2JqZWN0LmtleXMobW91bnRzKS5sZW5ndGggPiAwKSByZXNvbHZlcnMucHVzaCgoKSA9PiAoeyBtb3VudHMgfSkpO1xuICByZXNvbHZlcnMucHVzaCguLi5sb2NhbE1vdW50cyk7XG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czpyZXNvbHZlcnNcIiwge1xuICAgIHBhdGhDb3VudCxcbiAgICBjdXN0b21Nb3VudENvdW50OiBPYmplY3Qua2V5cyhtb3VudHMgPz8ge30pLmxlbmd0aCxcbiAgICBsb2NhbE1vdW50Q291bnQ6IGxvY2FsTW91bnRzLmxlbmd0aCxcbiAgICB0b3RhbFJlc29sdmVyQ291bnQ6IHJlc29sdmVycy5sZW5ndGgsXG4gIH0pO1xuICByZXR1cm4gcmVzb2x2ZXJzO1xufVxuXG4vKiogU3RhYmxlIHVzZXItc2NvcGVkIGxvY2FsIHN0b3JhZ2UgdW5kZXIgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbSdzIHRlbXAgZGlyZWN0b3J5LiAqL1xuZnVuY3Rpb24gdXNlclRlbXBGaWxlc3lzdGVtKFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgd29ya3NwYWNlUGF0aDogc3RyaW5nLFxuKTogV29ya3NwYWNlRmlsZXN5c3RlbSB7XG4gIGNvbnN0IHVzZXJLZXkgPSByZXNvbHZlVXNlcktleShjb250ZXh0LnJlcXVlc3RDb250ZXh0KTtcbiAgY29uc3QgZGlnZXN0ID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgIC51cGRhdGUob2JqZWN0LnRvU3RhYmxlS2V5KHsgcGFja2FnZTogXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIiwgdXNlcktleSB9KSlcbiAgICAuZGlnZXN0KFwiaGV4XCIpXG4gICAgLnNsaWNlKDAsIDE2KTtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBvc2l4UGF0aC5ub3JtYWxpemVSb290KHdvcmtzcGFjZVBhdGgpO1xuICBjb25zdCByZWxhdGl2ZSA9IG5vcm1hbGl6ZWQgPT09IFNDUkFUQ0hfTU9VTlQgPyBcIlwiIDogbm9ybWFsaXplZC5zbGljZShgJHtTQ1JBVENIX01PVU5UfS9gLmxlbmd0aCk7XG4gIGNvbnN0IHNvdXJjZSA9IG5ldyBMb2NhbEZpbGVTeXN0ZW0oe1xuICAgIHJvb3Q6IGpvaW4odG1wZGlyKCksIFwiZGJ4LXRvb2xzXCIsIFwibWFzdHJhXCIsIGRpZ2VzdCwgcmVsYXRpdmUpLFxuICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICBjcmVhdGVSb290OiB0cnVlLFxuICB9KTtcbiAgcmV0dXJuIGZpbGVzeXN0ZW1zKHNvdXJjZSwge1xuICAgIGRpc3BsYXlOYW1lOiBcIlRlbXBvcmFyeSBGaWxlc1wiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJVc2VyLXNjb3BlZCB0ZW1wb3JhcnkgZmlsZXMgcmV0YWluZWQgd2hpbGUgdGhlIGhvc3Qga2VlcHMgaXRzIGVwaGVtZXJhbCB0ZW1wIHN0b3JhZ2UuXCIsXG4gIH0pO1xufVxuXG4vKiogTW91bnQgc3RhcnR1cC1wcm92aXNpb25lZCBsb2NhbCBza2lsbCB0cmVlcyBpbnRvIE1hc3RyYSdzIHdvcmtzcGFjZSBmaWxlc3lzdGVtLiAqL1xuZnVuY3Rpb24gbG9jYWxTa2lsbE1vdW50UmVzb2x2ZXJzKG1vdW50czogcmVhZG9ubHkgTG9jYWxTa2lsbE1vdW50W10pOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10ge1xuICBjb25zdCB1bmlxdWUgPSBuZXcgTWFwPHN0cmluZywgTG9jYWxTa2lsbE1vdW50PigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1vdW50cykge1xuICAgIGNvbnN0IHJvb3QgPSBlbnRyeS5yb290LnRyaW0oKTtcbiAgICBpZiAoIXJvb3QpIGNvbnRpbnVlO1xuICAgIHVuaXF1ZS5zZXQoYCR7ZW50cnkubW91bnRQYXRofVxcMCR7cm9vdH1gLCB7IHJvb3QsIG1vdW50UGF0aDogZW50cnkubW91bnRQYXRoIH0pO1xuICB9XG4gIHJldHVybiBbLi4udW5pcXVlLnZhbHVlcygpXS5tYXAoKHsgcm9vdCwgbW91bnRQYXRoIH0pID0+IHtcbiAgICBjb25zdCBtb3VudCA9IHBvc2l4UGF0aC5ub3JtYWxpemVSb290KG1vdW50UGF0aCk7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IExvY2FsRmlsZVN5c3RlbSh7XG4gICAgICByb290LFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICBjcmVhdGVSb290OiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCBmaWxlc3lzdGVtID0gZmlsZXN5c3RlbXMoc291cmNlLCB7IHJlYWRPbmx5OiB0cnVlIH0pO1xuICAgIHJldHVybiAoKSA9PiAoe1xuICAgICAgbW91bnRzOiB7IFttb3VudF06IGZpbGVzeXN0ZW0gfSxcbiAgICAgIHNraWxsUGF0aHM6IFttb3VudF0sXG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdhdGUgc2tpbGwtZm9sZGVyIG1vdW50cyBvbiB0aGUgcmVxdWVzdCdzIHRva2VuLlxuICpcbiAqIEFsd2F5cyBhbGxvd3MgbW91bnRzIGluIGRldmVsb3BtZW50OyBpbiBvdGhlciBlbnZpcm9ubWVudHMgcmVxdWlyZXNcbiAqIHtAbGluayBoYXNXb3Jrc3BhY2VGaWxlU2NvcGV9LlxuICovXG5mdW5jdGlvbiBzaG91bGRNb3VudFNraWxsRm9sZGVycyhyZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaGFzV29ya3NwYWNlRmlsZVNjb3BlKHJlcXVlc3RDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBXcmFwIGEge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfSBhcyBhIE1hc3RyYSBmaWxlc3lzdGVtLiBNaXNzaW5nIG9yXG4gKiBpbmFjY2Vzc2libGUgcm9vdHMgcmV0dXJuIGB1bmRlZmluZWRgIHNvIG90aGVyIGFjY2Vzc2libGUgcm9vdHMgcmVtYWluXG4gKiB1c2FibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgcm9vdDogc3RyaW5nLFxuICByZWFkT25seTogYm9vbGVhbiA9IHRydWUsXG4gIGNyZWF0ZVJvb3Q6IGJvb2xlYW4gPSAhcmVhZE9ubHksXG4gIGZpbGVTeXN0ZW1DYWNoZT86IEZpbGVTeXN0ZW1DYWNoZSxcbiAgY2FjaGVPcHRpb25zPzogRmlsZVN5c3RlbUNhY2hlT3B0aW9ucyxcbiAgYWRhcHRlck9wdGlvbnM6IFBpY2s8TWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXJPcHRpb25zLCBcImRlc2NyaXB0aW9uXCIgfCBcImRpc3BsYXlOYW1lXCI+ID0ge30sXG4pOiBQcm9taXNlPFxuICB8IHtcbiAgICAgIGZpbGVzeXN0ZW06IFdvcmtzcGFjZUZpbGVzeXN0ZW07XG4gICAgfVxuICB8IHVuZGVmaW5lZFxuPiB7XG4gIGNvbnN0IGZzID0gbmV3IERhdGFicmlja3NGaWxlU3lzdGVtKHtcbiAgICBjbGllbnQ6ICgpID0+IHdvcmtzcGFjZUNsaWVudC50b0xlZ2FjeVdvcmtzcGFjZUNsaWVudChyZXF1ZXN0V29ya3NwYWNlQ2xpZW50KGNsaWVudCkpLFxuICAgIHJvb3QsXG4gICAgcmVhZE9ubHksXG4gICAgY3JlYXRlUm9vdCxcbiAgfSk7XG4gIGNvbnN0IGNhY2hlZCA9XG4gICAgZmlsZVN5c3RlbUNhY2hlICYmIGNhY2hlT3B0aW9ucyA/IHNoYXJlZEZTLmNhY2hlKGZzLCBmaWxlU3lzdGVtQ2FjaGUsIGNhY2hlT3B0aW9ucykgOiBmcztcbiAgY29uc3Qgc291cmNlID0gdmVyaWZ5Rmlyc3RGaWxlU3lzdGVtQWNjZXNzKGNhY2hlZCwgKCkgPT4gZnMuc3RhdChcIi5cIiksIHJvb3QpO1xuICBjb25zdCBmaWxlc3lzdGVtID0gZmlsZXN5c3RlbXMoc291cmNlLCB7IC4uLmFkYXB0ZXJPcHRpb25zLCByZWFkT25seSB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmaWxlc3lzdGVtLmluaXQoKTtcbiAgICBpZiAoYXdhaXQgZmlsZXN5c3RlbS5leGlzdHMoXCIuXCIpKSB7XG4gICAgICByZXR1cm4geyBmaWxlc3lzdGVtIH07XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJkYXRhYnJpY2tzLW1vdW50OnNraXBwZWRcIiwge1xuICAgICAgcm9vdCxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEBpbnRlcm5hbCBLZWVwIHNlcnZpY2UgY29udGV4dCBmcm9tIHJlcGxhY2luZyB0aGUgcmVxdWVzdC1zY29wZWQgd29ya3NwYWNlIGNsaWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0V29ya3NwYWNlQ2xpZW50KFxuICBpbml0aWFsQ2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIGV4ZWN1dGlvbkNvbnRleHQ6IFJldHVyblR5cGU8XG4gICAgdHlwZW9mIGFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0XG4gID4gPSBhcHBraXQudHJ5R2V0RXhlY3V0aW9uQ29udGV4dCgpLFxuKTogV29ya3NwYWNlQ2xpZW50IHtcbiAgaWYgKFxuICAgIGV4ZWN1dGlvbkNvbnRleHQgJiZcbiAgICBcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0ICYmXG4gICAgZXhlY3V0aW9uQ29udGV4dC5pc1VzZXJDb250ZXh0ID09PSB0cnVlXG4gICkge1xuICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0LmNsaWVudDtcbiAgfVxuICByZXR1cm4gaW5pdGlhbENsaWVudDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Rmlyc3RGaWxlU3lzdGVtQWNjZXNzPFRGaWxlU3lzdGVtIGV4dGVuZHMgRmlsZVN5c3RlbT4oXG4gIGZpbGVzeXN0ZW06IFRGaWxlU3lzdGVtLFxuICByZWFkUHJvYmU6ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4gIHJvb3Q6IHN0cmluZyxcbik6IFRGaWxlU3lzdGVtIHtcbiAgbGV0IHJlYWRDaGVjazogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgbGV0IHdyaXRlVmVyaWZpZWQgPSBmYWxzZTtcbiAgY29uc3QgYm91bmRNZXRob2RzID0gbmV3IE1hcDxQcm9wZXJ0eUtleSwgdW5rbm93bj4oKTtcbiAgY29uc3QgcmVhZE9wZXJhdGlvbnMgPSBuZXcgU2V0PFByb3BlcnR5S2V5PihbXCJleGlzdHNcIiwgXCJyZWFkRmlsZVwiLCBcInJlYWRkaXJcIiwgXCJzdGF0XCJdKTtcbiAgY29uc3Qgd3JpdGVPcGVyYXRpb25zID0gbmV3IFNldDxQcm9wZXJ0eUtleT4oW1xuICAgIFwiYXBwZW5kRmlsZVwiLFxuICAgIFwiY29weUZpbGVcIixcbiAgICBcImRlbGV0ZUZpbGVcIixcbiAgICBcIm1rZGlyXCIsXG4gICAgXCJtb3ZlRmlsZVwiLFxuICAgIFwicm1kaXJcIixcbiAgICBcIndyaXRlRmlsZVwiLFxuICBdKTtcbiAgY29uc3QgdmVyaWZ5UmVhZCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZWFkQ2hlY2sgPz89IFByb21pc2UucmVzb2x2ZShyZWFkUHJvYmUoKSkudGhlbigoKSA9PiB1bmRlZmluZWQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZWFkQ2hlY2s7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlYWRDaGVjayA9IHVuZGVmaW5lZDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImRhdGFicmlja3MtbW91bnQ6cmVhZC1jaGVjay1mYWlsZWRcIiwge1xuICAgICAgICByb290LFxuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm94eShmaWxlc3lzdGVtLCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdGFyZ2V0KTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbHVlO1xuICAgICAgaWYgKGJvdW5kTWV0aG9kcy5oYXMocHJvcGVydHkpKSByZXR1cm4gYm91bmRNZXRob2RzLmdldChwcm9wZXJ0eSk7XG4gICAgICBjb25zdCBkZWxlZ2F0ZWQgPSB2YWx1ZS5iaW5kKHRhcmdldCkgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbiAgICAgIGxldCBtZXRob2QgPSBkZWxlZ2F0ZWQ7XG4gICAgICBpZiAocmVhZE9wZXJhdGlvbnMuaGFzKHByb3BlcnR5KSkge1xuICAgICAgICBtZXRob2QgPSBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdmVyaWZ5UmVhZCgpO1xuICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZWQoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHdyaXRlT3BlcmF0aW9ucy5oYXMocHJvcGVydHkpKSB7XG4gICAgICAgIG1ldGhvZCA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVsZWdhdGVkKC4uLmFyZ3MpO1xuICAgICAgICAgICAgaWYgKCF3cml0ZVZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgIHdyaXRlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoXCJkYXRhYnJpY2tzLW1vdW50OndyaXRlLWNoZWNrLXBhc3NlZFwiLCB7IHJvb3QgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoIXdyaXRlVmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiZGF0YWJyaWNrcy1tb3VudDp3cml0ZS1jaGVjay1mYWlsZWRcIiwge1xuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBib3VuZE1ldGhvZHMuc2V0KHByb3BlcnR5LCBtZXRob2QpO1xuICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBSdW4gZXZlcnkgbW91bnQgcmVzb2x2ZXIgZm9yIG9uZSByZXF1ZXN0IGFuZCBtZXJnZSBtb3VudHMgcGx1cyBza2lsbCBwYXRocy5cbiAqIExhdGVyIHJlc29sdmVycyBvdmVyd3JpdGUgbW91bnQga2V5cyBmcm9tIGVhcmxpZXIgb25lcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihcbiAgcmVzb2x2ZXJzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10sXG4gIGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+ID0ge307XG4gIGNvbnN0IHNraWxsUGF0aHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJlc29sdmVyXSBvZiByZXNvbHZlcnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgY29udHJpYnV0aW9uID0gYXdhaXQgcmVzb2x2ZXIoY29udGV4dCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibW91bnRzOnJlc29sdmVyXCIsIHtcbiAgICAgIGluZGV4LFxuICAgICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhjb250cmlidXRpb24ubW91bnRzKSxcbiAgICAgIHNraWxsUGF0aHM6IGNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzID8/IFtdLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24obW91bnRzLCBjb250cmlidXRpb24ubW91bnRzKTtcbiAgICBpZiAoY29udHJpYnV0aW9uLnNraWxsUGF0aHM/Lmxlbmd0aCkge1xuICAgICAgc2tpbGxQYXRocy5wdXNoKC4uLmNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJtb3VudHM6bWVyZ2VkXCIsIHtcbiAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKG1vdW50cyksXG4gICAgc2tpbGxQYXRocyxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudHMsXG4gICAgc2tpbGxQYXRocyxcbiAgfTtcbn1cblxuLyoqXG4gKiBEeW5hbWljIGZpbGVzeXN0ZW0gcmVzb2x2ZXIgcGFzc2VkIHRvIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfS5cbiAqXG4gKiBSZXR1cm5zIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IG92ZXIgZXZlcnkgcGF0aCB0aGF0IHJlc29sdmVkIGZvciB0aGVcbiAqIHJlcXVlc3QuIEFuIGVtcHR5IGNvbXBvc2l0ZSBleHBvc2VzIG5vIGltcGxpY2l0IGxvY2FsIHN0b3JhZ2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKFxuICByZXNvbHZlQ29udHJpYnV0aW9uOiAoY29udGV4dDogRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQpID0+IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+LFxuICBjb250ZXh0OiBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCxcbiAgZmlsZXNDYWNoZT86IEZpbGVzQ2FjaGVFeHBvcnRzLFxuICBzb3VyY2VLZXk/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+IHtcbiAgY29uc3QgeyBtb3VudHMgfSA9IGF3YWl0IHJlc29sdmVDb250cmlidXRpb24oY29udGV4dCk7XG4gIGNvbnN0IG1vdW50S2V5cyA9IE9iamVjdC5rZXlzKG1vdW50cyk7XG4gIGlmIChtb3VudEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZmlsZXN5c3RlbTplbXB0eVwiLCB7XG4gICAgICBoYXNSZXF1ZXN0Q29udGV4dDogQm9vbGVhbihjb250ZXh0LnJlcXVlc3RDb250ZXh0KSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZXN5c3RlbXMobmV3IE1lbW9yeUZpbGVTeXN0ZW0oeyByb290OiBcIi9cIiwgcmVhZE9ubHk6IHRydWUgfSksIHtcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgIH0pO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06Y29tcG9zaXRlXCIsIHsgbW91bnRLZXlzIH0pO1xuICBjb25zdCBsb2FkID0gKCkgPT4gbmV3IE1vdW50ZWRDb21wb3NpdGVGaWxlc3lzdGVtKHsgbW91bnRzIH0pO1xuICBpZiAoIWZpbGVzQ2FjaGUpIHJldHVybiBsb2FkKCk7XG4gIGNvbnN0IHNjb3BlZCA9IGF3YWl0IHJlc29sdmVGaWxlc0NhY2hlU2NvcGUoY29udGV4dCk7XG4gIGlmICghc2NvcGVkKSByZXR1cm4gbG9hZCgpO1xuICByZXR1cm4gZmlsZXNDYWNoZS5mb3JGaWxlU3lzdGVtKHNjb3BlZC5zY29wZSwgeyBwYXRoczogbW91bnRLZXlzLCBrZXk6IHNvdXJjZUtleSB9LCBsb2FkKTtcbn1cblxuLyoqXG4gKiBFeHBhbmQgY29uZmlndXJlZCBza2lsbCBwYXRocyBpbnRvIGNvbmNyZXRlIHNraWxsIGRpcmVjdG9yaWVzIGFuZCBrZWVwIHRoZSBmaXJzdFxuICogc2FtZS1uYW1lZCBkaXJlY3RvcnkuIE1hc3RyYSBzdGlsbCBvd25zIHBhcnNpbmcsIGluZGV4aW5nLCBhbmQgcmVmcmVzaGVzLFxuICogd2hpbGUgZWFybGllciBjb25maWd1cmVkIHJvb3RzIHJldGFpbiBwcmVjZWRlbmNlIG92ZXIgbGF0ZXIgcm9vdHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEaXN0aW5jdFNraWxsUGF0aHMoXG4gIGZpbGVzeXN0ZW06IFdvcmtzcGFjZUZpbGVzeXN0ZW0sXG4gIHBhdGhzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IGZpbGVzeXN0ZW0ucmVhZGRpcihwYXRoKTtcbiAgICAgIGlmIChlbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSBcImZpbGVcIiAmJiBlbnRyeS5uYW1lID09PSBcIlNLSUxMLm1kXCIpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBwb3NpeFBhdGguYmFzZW5hbWUocGF0aCk7XG4gICAgICAgIGlmICghc2VsZWN0ZWQuaGFzKG5hbWUpKSBzZWxlY3RlZC5zZXQobmFtZSwgcGF0aCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS50eXBlICE9PSBcImRpcmVjdG9yeVwiIHx8IHNlbGVjdGVkLmhhcyhlbnRyeS5uYW1lKSkgY29udGludWU7XG4gICAgICAgIHNlbGVjdGVkLnNldChlbnRyeS5uYW1lLCBwb3NpeFBhdGguam9pbihwYXRoLCBlbnRyeS5uYW1lKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNraWxsLXBhdGg6c2tpcHBlZFwiLCB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5zZWxlY3RlZC52YWx1ZXMoKV07XG59XG5cbi8qKiBNZW1vaXplIG9uZSBjb21wbGV0ZSBtb3VudCBjb250cmlidXRpb24gZm9yIGVhY2ggcmVxdWVzdCBjb250ZXh0LiAqL1xuZnVuY3Rpb24gY29udHJpYnV0aW9uUmVzb2x2ZXIoXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuKTogKGNvbnRleHQ6IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0KSA9PiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB7XG4gIGNvbnN0IHNjb3BlZCA9IG5ldyBXZWFrTWFwPFJlcXVlc3RDb250ZXh0LCBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPj4oKTtcbiAgbGV0IHVuc2NvcGVkOiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChjb250ZXh0KSA9PiB7XG4gICAgaWYgKCFjb250ZXh0LnJlcXVlc3RDb250ZXh0KSB7XG4gICAgICB1bnNjb3BlZCA/Pz0gcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIHVuc2NvcGVkO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHNjb3BlZC5nZXQoY29udGV4dC5yZXF1ZXN0Q29udGV4dCk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgY29uc3QgcGVuZGluZyA9IHJlc29sdmVXb3Jrc3BhY2VDb250cmlidXRpb24ocmVzb2x2ZXJzLCBjb250ZXh0KTtcbiAgICBzY29wZWQuc2V0KGNvbnRleHQucmVxdWVzdENvbnRleHQsIHBlbmRpbmcpO1xuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufVxuIl19
package/package.json CHANGED
@@ -34,20 +34,20 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@databricks/appkit": "0.81.0",
37
- "@dbx-tools/appkit": "^0.9.110",
38
- "@dbx-tools/core": "^0.9.110",
39
- "@dbx-tools/databricks": "^0.9.110",
40
- "@dbx-tools/fs": "^0.9.110",
41
- "@dbx-tools/genie": "^0.9.110",
42
- "@dbx-tools/model": "^0.9.110",
43
- "@dbx-tools/model-protocol": "^0.9.110",
44
- "@dbx-tools/path": "^0.9.110",
45
- "@dbx-tools/postgres": "^0.9.110",
46
- "@dbx-tools/shared-core": "^0.9.110",
47
- "@dbx-tools/shared-fs": "^0.9.110",
48
- "@dbx-tools/shared-genie": "^0.9.110",
49
- "@dbx-tools/shared-mastra": "^0.9.110",
50
- "@dbx-tools/shared-model": "^0.9.110",
37
+ "@dbx-tools/appkit": "^0.9.111",
38
+ "@dbx-tools/core": "^0.9.111",
39
+ "@dbx-tools/databricks": "^0.9.111",
40
+ "@dbx-tools/fs": "^0.9.111",
41
+ "@dbx-tools/genie": "^0.9.111",
42
+ "@dbx-tools/model": "^0.9.111",
43
+ "@dbx-tools/model-protocol": "^0.9.111",
44
+ "@dbx-tools/path": "^0.9.111",
45
+ "@dbx-tools/postgres": "^0.9.111",
46
+ "@dbx-tools/shared-core": "^0.9.111",
47
+ "@dbx-tools/shared-fs": "^0.9.111",
48
+ "@dbx-tools/shared-genie": "^0.9.111",
49
+ "@dbx-tools/shared-mastra": "^0.9.111",
50
+ "@dbx-tools/shared-model": "^0.9.111",
51
51
  "@mastra/ai-sdk": "1.10.5",
52
52
  "@mastra/core": "1.71.0",
53
53
  "@mastra/express": "1.5.15",
@@ -219,7 +219,7 @@
219
219
  "./package.json": "./package.json"
220
220
  }
221
221
  },
222
- "version": "0.9.110",
222
+ "version": "0.9.111",
223
223
  "types": "./lib/index.d.ts",
224
224
  "dbxToolsConfig": {
225
225
  "tags": [
package/src/agents.ts CHANGED
@@ -486,6 +486,17 @@ export const DEFAULT_TOOL_WORKFLOW_INSTRUCTIONS = [
486
486
  "Keep calls sequential when a later input depends on an earlier result or when calls mutate the same resource.",
487
487
  ].join("\n");
488
488
 
489
+ /** Hybrid routing guidance appended after Mastra's generated Code Mode contract. */
490
+ export const CODE_MODE_ROUTING_INSTRUCTIONS = [
491
+ "Tool routing:",
492
+ "The Code Mode contract above explains how to use execute_typescript when selected; it does not require using Code Mode for every tool call.",
493
+ "Call a directly exposed tool directly when one ordinary call is sufficient.",
494
+ "Call independent tools directly in parallel when their results do not require code-side transformation.",
495
+ "Keep dependent calls as direct sequential tool calls when code-side transformation is unnecessary.",
496
+ "Use execute_typescript when the user explicitly requests Code Mode or when code is useful for loops, filtering, joins, random selection, aggregation, arithmetic, dynamic fan-out, or keeping substantial intermediate results out of model context.",
497
+ "Do not wrap a single ordinary tool call in execute_typescript.",
498
+ ].join("\n");
499
+
489
500
  /**
490
501
  * Style guardrails appended to every agent's `instructions` to curb
491
502
  * common LLM-isms (em dashes, emojis, sycophantic openers, excessive
@@ -555,7 +566,12 @@ function composeInstructions<TRequestContext extends Record<string, unknown> | u
555
566
  ): AgentConfig<string, ToolsInput, undefined, TRequestContext>["instructions"] {
556
567
  const append = (instructions: AgentInstructions, codeModeInstructions?: string) => {
557
568
  const composed = appendDefaultInstructions(instructions, style);
558
- return codeModeInstructions ? appendInstructionBlock(composed, codeModeInstructions) : composed;
569
+ return codeModeInstructions
570
+ ? appendInstructionBlock(
571
+ composed,
572
+ `${codeModeInstructions}\n\n${CODE_MODE_ROUTING_INSTRUCTIONS}`,
573
+ )
574
+ : composed;
559
575
  };
560
576
  if (typeof agentInstructions !== "function" && !resolveCodeMode) {
561
577
  return append(agentInstructions) as AgentConfig<
package/src/config.ts CHANGED
@@ -234,10 +234,10 @@ export interface MastraPluginConfig extends BasePluginConfig {
234
234
  */
235
235
  codeMode?: boolean | MastraCodeModeConfig;
236
236
  /**
237
- * Sandbox for auto-created agent workspaces. Disabled by default. `"monty"`
238
- * selects Monty; `true`, `"databricks"`, or an object selects/configures
239
- * Databricks Sandbox. An agent with an explicit custom `workspace` keeps that
240
- * workspace and its sandbox.
237
+ * Sandbox for auto-created agent workspaces. Defaults to Monty. `false`
238
+ * disables command execution; `true`, `"databricks"`, or an object
239
+ * selects/configures Databricks Sandbox. An agent with an explicit custom
240
+ * `workspace` keeps that workspace and its sandbox.
241
241
  */
242
242
  sandbox?: boolean | "databricks" | "monty" | DatabricksWorkspaceSandboxOptions;
243
243
  /** Add user-scoped `/tmp` only when no configured workspace path mounts writable. */
@@ -697,7 +697,7 @@ export const MASTRA_CONFIG_SCHEMA: ConfigSchema = {
697
697
  sandbox: {
698
698
  type: ["boolean", "string", "object"],
699
699
  description:
700
- 'Command sandbox for auto-created agent workspaces. Disabled by default. "monty" selects Monty; true, "databricks", or an object selects/configures Databricks Sandbox.',
700
+ 'Command sandbox for auto-created agent workspaces. Defaults to Monty. False disables command execution; true, "databricks", or an object selects/configures Databricks Sandbox.',
701
701
  },
702
702
  workspaceFallbackToTmp: {
703
703
  type: "boolean",
package/src/workspaces.ts CHANGED
@@ -173,9 +173,9 @@ type WorkspaceMountResolver = (
173
173
  ) => WorkspaceMountContribution | Promise<WorkspaceMountContribution>;
174
174
 
175
175
  /**
176
- * Sandbox selection for {@link databricksWorkspace}. Command execution is
177
- * disabled by default; Monty, Databricks Sandbox, or a Mastra provider/resolver
178
- * must be selected explicitly.
176
+ * Sandbox selection for {@link databricksWorkspace}. Monty is the default;
177
+ * command execution can be disabled or replaced with Databricks Sandbox or any
178
+ * Mastra provider/resolver.
179
179
  */
180
180
  export type WorkspaceSandboxSelection =
181
181
  | false
@@ -208,9 +208,9 @@ export interface DatabricksWorkspaceOptions extends Omit<
208
208
  /** AppKit plugin context used to discover optional sibling capabilities. */
209
209
  pluginContext?: pluginRegistry.PluginContextLike;
210
210
  /**
211
- * Command sandbox. Disabled by default. Pass `"monty"`, `"databricks"`, or
212
- * Databricks Sandbox options to enable one of the built-in providers, or pass
213
- * an explicit Mastra sandbox/provider resolver.
211
+ * Command sandbox. Defaults to Monty. Pass `false` to disable it,
212
+ * `"databricks"` or Databricks Sandbox options to select the remote provider,
213
+ * or an explicit Mastra sandbox/provider resolver.
214
214
  */
215
215
  sandbox?: WorkspaceSandboxSelection;
216
216
  /** Add user-scoped `/tmp` only when no configured Databricks path mounts writable. */
@@ -416,7 +416,7 @@ function resolveWorkspaceSandbox(
416
416
  workspaceId: string,
417
417
  workspaceName: string,
418
418
  ): WorkspaceSandbox | WorkspaceSandboxResolver | undefined {
419
- const configured = selection ?? false;
419
+ const configured = selection ?? "monty";
420
420
  if (configured === false) return undefined;
421
421
  if (configured === "monty") return new MontySandbox();
422
422
  if (typeof configured === "function" || isSandbox(configured)) return configured;