sliftutils 1.8.5 → 1.8.7

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.
Files changed (49) hide show
  1. package/dist/treeSummary.ts.cache +2 -2
  2. package/misc/dist/getSecret.ts.cache +2 -2
  3. package/package.json +1 -1
  4. package/render-utils/dist/LocalStorageParam.ts.cache +62 -0
  5. package/security/authorizedKeys/daemon/dist/revocation.ts.cache +6 -4
  6. package/security/authorizedKeys/daemon/revocation.ts +4 -2
  7. package/security/authorizedKeys/dist/unrevokeCli.ts.cache +6 -3
  8. package/security/authorizedKeys/unrevoke.ts +31 -8
  9. package/security/authorizedKeys/unrevokeCli.ts +17 -2
  10. package/security/machines/addMachine.ts +2 -2
  11. package/security/machines/dist/machines.ts.cache +13 -6
  12. package/security/machines/dist/printMachineId.ts.cache +6 -3
  13. package/security/machines/machines.ts +11 -4
  14. package/security/machines/printMachineId.ts +2 -1
  15. package/security/signedFiles/signFilesCli.ts +2 -1
  16. package/storage/dist/ArchivesDisk.ts.cache +2 -2
  17. package/storage/dist/IArchives.ts.cache +2 -2
  18. package/storage/dist/StreamingLogs.ts.cache +2 -2
  19. package/storage/dist/TransactionFile.ts.cache +2 -2
  20. package/storage/dist/archiveHelpers.ts.cache +2 -2
  21. package/storage/dist/backblaze.ts.cache +2 -2
  22. package/storage/proxydatabase/dist/ivfEmbeddingDatabase.ts.cache +19 -4
  23. package/storage/proxydatabase/ivfEmbeddingDatabase.ts +16 -2
  24. package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +2 -2
  25. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
  26. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
  27. package/storage/remoteStorage/dist/accessStats.ts.cache +2 -2
  28. package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
  29. package/storage/remoteStorage/dist/bucketDisk.ts.cache +2 -2
  30. package/storage/remoteStorage/dist/certTrustModal.tsx.cache +2 -2
  31. package/storage/remoteStorage/dist/chainStartup.ts.cache +2 -2
  32. package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
  33. package/storage/remoteStorage/dist/createArchives.ts.cache +2 -2
  34. package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
  35. package/storage/remoteStorage/dist/intermediateManagement.ts.cache +2 -2
  36. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  37. package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
  38. package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
  39. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +2 -2
  40. package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
  41. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  42. package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
  43. package/storage/remoteStorage/dist/storageLogs.ts.cache +2 -2
  44. package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
  45. package/storage/remoteStorage/dist/storeConfig.ts.cache +2 -2
  46. package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
  47. package/storage/remoteStorage/dist/storeSources.ts.cache +2 -2
  48. package/storage/remoteStorage/dist/storeSync.ts.cache +2 -2
  49. package/storage/remoteStorage/dist/validation.ts.cache +2 -2
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.RoutingRewriteLoop = exports.writeRoutingToAllStores = exports.chooseStartupConfig = exports.disposeProbes = exports.probeSources = exports.ChainStateManager = exports.CONFIG_WRITE_REFRESH_INTERVAL = exports.CONFIG_WRITE_RETRY_INTERVAL = void 0;
4
4
  const misc_1 = require("socket-function/src/misc");
@@ -476,4 +476,4 @@ class RoutingRewriteLoop {
476
476
  }
477
477
  exports.RoutingRewriteLoop = RoutingRewriteLoop;
478
478
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW5TdGFydHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2hhaW5TdGFydHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFrRDtBQUNsRCxrRUFBK0U7QUFFL0UsaURBQStIO0FBQy9ILG1EQUFrRztBQUNsRywrREFBbUU7QUFDbkUsdUVBQXFGO0FBRXJGLDRkQUE0ZDtBQUU1ZCxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQyxzTkFBc047QUFDek0sUUFBQSwyQkFBMkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RCxnSEFBZ0g7QUFDbkcsUUFBQSw2QkFBNkIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQU81RCxtT0FBbU87QUFDbk8sTUFBYSxpQkFBaUI7SUFjMUIsWUFBb0IsTUFLbkI7UUFMbUIsV0FBTSxHQUFOLE1BQU0sQ0FLekI7UUFaTyxtQkFBYyxHQUFHLGlDQUFpQixDQUFDO1FBR25DLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFzTmpCLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQTVNaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksa0JBQWtCLENBQUM7WUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVc7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUEsZ0RBQXNCLEVBQUMsR0FBRyxFQUFF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T0FBTyxLQUFLLHlCQUF5QixtQ0FBMkIsR0FBRyxJQUFJLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMVAsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQ0FBMkIsQ0FBQyxDQUFDO1lBQzNDLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQ0FBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDSjtBQWhFRCxnREFnRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBmb3JtYXREYXRlVGltZURldGFpbGVkIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IFJlbW90ZUNvbmZpZywgU291cmNlQ29uZmlnIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgUk9VVElOR19GSUxFLCBnZXRDb25maWdWZXJzaW9uLCBzZXJpYWxpemVSZW1vdGVDb25maWcsIG5vcm1hbGl6ZVJlbW90ZUNvbmZpZywgbm9ybWFsaXplU291cmNlIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyBTb3VyY2VXcmFwcGVyLCBSRVRSWV9TVEFSVF9ERUxBWSwgUkVUUllfTUFYX0RFTEFZLCBSRVRSWV9HUk9XVEggfSBmcm9tIFwiLi9zb3VyY2VXcmFwcGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyB9IGZyb20gXCIuL2ludGVybWVkaWF0ZVNvdXJjZXNcIjtcbmltcG9ydCB7IG9uU2VydmVyUm91dGluZ0NoYW5nZWQsIHRyYWNrQ2hhaW5Db25maWcgfSBmcm9tIFwiLi9zdG9yYWdlQ2xpZW50Q29udHJvbGxlclwiO1xuXG4vLyBUaGUgTElGRUNZQ0xFIG9mIGFuIEFyY2hpdmVzQ2hhaW4ncyBzdGF0ZSwgYW5kIG5vdGhpbmcgZWxzZTogaW5pdGlhbGl6aW5nIGl0IChwcm9iaW5nIGV2ZXJ5IGNvbmZpZ3VyZWQgc291cmNlLCBkZWNpZGluZyB3aGljaCByb3V0aW5nIGNvbmZpZyB0byBydW4sIHdyaXRpbmcgb3VycyBvdXQgd2hlbiBpdCBpcyB0aGUgbmV3ZXN0KSwgdGhlIHJldHJ5IHdoZW4gaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBwb2xsIHRoYXQgYWRvcHRzIG5ld2VyIGNvbmZpZ3MsIHRoZSBhdmFpbGFiaWxpdHkgcmVjaGVjaywgYW5kIHRoZSBsb29wIHRoYXQga2VlcHMgcmUtd3JpdGluZyBvdXIgY29uZmlnLiBOb25lIG9mIHRoaXMgaXMgcmVxdWVzdCBkaXNwYXRjaCAtIHRoZSBjaGFpbiAoY3JlYXRlQXJjaGl2ZXMudHMpIGFza3MgdGhlIENoYWluU3RhdGVNYW5hZ2VyIGZvciB0aGUgY3VycmVudCBzdGF0ZSBhbmQgZGlzcGF0Y2hlcyBvdmVyIGl0LlxuXG5jb25zdCBDT05GSUdfUE9MTF9JTlRFUlZBTCA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBBVkFJTEFCSUxJVFlfUkVDSEVDS19USFJPVFRMRSA9IDUgKiAxMDAwO1xuLy8gVGhlIHJvdXRpbmcgY29uZmlnIHdyaXRlIGlzIHJldHJpZWQgb24gdGhpcyBjYWRlbmNlIHdoaWxlIGl0IGlzIGZhaWxpbmcuIEEgc3RvcmUgdGhhdCBuZXZlciByZWNlaXZlZCB0aGUgY29uZmlnIHJlamVjdHMgZXZlcnkgd3JpdGUgYWltZWQgYXQgaXQsIHNvIHRoaXMgbm90IGxhbmRpbmcgaXMgYSBiaWcgZGVhbCAtIGVhY2ggZmFpbGVkIGF0dGVtcHQgaXMgbG9nZ2VkLlxuZXhwb3J0IGNvbnN0IENPTkZJR19XUklURV9SRVRSWV9JTlRFUlZBTCA9IDUgKiA2MCAqIDEwMDA7XG4vLyAuLi5hbmQgZXZlbiBhZnRlciBzdWNjZXNzIGl0IGlzIHJlLXdyaXR0ZW4gb24gdGhpcyBjYWRlbmNlLCBpbiBjYXNlIGEgc3RvcmUgbG9zdCBpdCBvciBhIHNlcnZlciBhcHBlYXJlZCBsYXRlXG5leHBvcnQgY29uc3QgQ09ORklHX1dSSVRFX1JFRlJFU0hfSU5URVJWQUwgPSA2MCAqIDYwICogMTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhaW5TdGF0ZSA9IHtcbiAgICBjb25maWc6IFJlbW90ZUNvbmZpZztcbiAgICBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW107XG59O1xuXG4vKiogVGhlIGNoYWluJ3Mgc3RhdGUgYW5kIGV2ZXJ5dGhpbmcgYWJvdXQgSEFWSU5HIG9uZTogaW5pdCAod2l0aCBpdHMgcmV0cnkpLCB0aGUgY29uZmlnIHBvbGwsIGF2YWlsYWJpbGl0eSByZWNoZWNrcywgYW5kIHRoZSByb3V0aW5nIHJld3JpdGUgbG9vcC4gVGhlIGNoYWluIGNvbnN0cnVjdHMgb25lLCBhc2tzIGl0IGdldFN0YXRlKCkgb24gZXZlcnkgY2FsbCwgYW5kIGRpc3Bvc2VzIGl0LiAqL1xuZXhwb3J0IGNsYXNzIENoYWluU3RhdGVNYW5hZ2VyIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlndXJlZDogUmVtb3RlQ29uZmlnO1xuICAgIC8qKiBUaGUgbmV3ZXN0IGFkb3B0ZWQgY29uZmlnIC0gd2hhdCBnZXREZWJ1Z05hbWUgYW5kIGRpc3BhdGNoIGRlY2lzaW9ucyByZWFkLiBTdGFydHMgYXMgdGhlIGNvbmZpZ3VyZWQgb25lIGFuZCBtb3ZlcyB3aXRoIGV2ZXJ5IGFkb3B0aW9uLiAqL1xuICAgIHB1YmxpYyBhY3RpdmVDb25maWc6IFJlbW90ZUNvbmZpZztcbiAgICBwcml2YXRlIHN0YXRlUHJvbWlzZTogUHJvbWlzZTxDaGFpblN0YXRlPiB8IHVuZGVmaW5lZDtcbiAgICAvLyBUaGUgcmVzb2x2ZWQgc3RhdGUsIGZvciBzeW5jaHJvbm91cyBhY2Nlc3MgKGdldEdldFVSTHMpIC0gYWx3YXlzIHRoZSBuZXdlc3QgYWRvcHRlZCBjb25maWcsIHdoZXJlIHN0YXRlUHJvbWlzZSBtYXkgYnJpZWZseSBsYWcgZHVyaW5nIGEgcmVidWlsZFxuICAgIHByaXZhdGUgbGF0ZXN0U3RhdGU6IENoYWluU3RhdGUgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBpbml0UmV0cnlEZWxheSA9IFJFVFJZX1NUQVJUX0RFTEFZO1xuICAgIHByaXZhdGUgaW5pdFJldHJ5VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcG9sbFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVSb3V0aW5nUHVzaDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcm91dGluZ1Jld3JpdGVyOiBSb3V0aW5nUmV3cml0ZUxvb3A7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzoge1xuICAgICAgICBjb25maWd1cmVkOiBSZW1vdGVDb25maWc7XG4gICAgICAgIGRlYnVnTmFtZTogKCkgPT4gc3RyaW5nO1xuICAgICAgICAvKiogU2VlIEFyY2hpdmVzQ2hhaW5PcHRpb25zLmRpcmVjdENvbm5lY3QuICovXG4gICAgICAgIGRpcmVjdENvbm5lY3Q/OiBib29sZWFuO1xuICAgIH0pIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmVkID0gY29uZmlnLmNvbmZpZ3VyZWQ7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gY29uZmlnLmNvbmZpZ3VyZWQ7XG4gICAgICAgIHRoaXMucm91dGluZ1Jld3JpdGVyID0gbmV3IFJvdXRpbmdSZXdyaXRlTG9vcCh7XG4gICAgICAgICAgICBjb25maWd1cmVkOiBjb25maWcuY29uZmlndXJlZCxcbiAgICAgICAgICAgIGRlYnVnTmFtZTogY29uZmlnLmRlYnVnTmFtZSxcbiAgICAgICAgICAgIGxhdGVzdDogKCkgPT4gdGhpcy5sYXRlc3RTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaCA9IG9uU2VydmVyUm91dGluZ0NoYW5nZWQoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnJlZnJlc2hBY3RpdmVDb25maWcoKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYENvbmZpZyByZWZyZXNoIGZhaWxlZCBmb3IgJHt0aGlzLmNvbmZpZy5kZWJ1Z05hbWUoKX06ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFNvIGEgc2VydmVyIGNhbiBhc2sgd2hhdCBjb25maWcgd2UgaW50ZW5kZWQgZm9yIGEgc3RvcmUgbmFtZSAoc2VlIFN0b3JhZ2VDbGllbnRDb250cm9sbGVyLmdldFJvdXRpbmdDb25maWdGb3JOYW1lKVxuICAgICAgICB0aGlzLnVudHJhY2tDb25maWcgPSB0cmFja0NoYWluQ29uZmlnKHsgY29uZmlndXJlZDogY29uZmlnLmNvbmZpZ3VyZWQsIGFjdGl2ZTogKCkgPT4gdGhpcy5hY3RpdmVDb25maWcgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnRyYWNrQ29uZmlnOiAoKSA9PiB2b2lkO1xuXG4gICAgLyoqIFRoZSBuZXdlc3QgYWRvcHRlZCBzdGF0ZSwgc3luY2hyb25vdXNseSAtIHVuZGVmaW5lZCB1bnRpbCB0aGUgZmlyc3QgaW5pdCBmaW5pc2hlcy4gKi9cbiAgICBwdWJsaWMgbGF0ZXN0KCk6IENoYWluU3RhdGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXRlc3RTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RhdGUoKTogUHJvbWlzZTxDaGFpblN0YXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBBcmNoaXZlc0NoYWluICR7dGhpcy5jb25maWcuZGVidWdOYW1lKCl9IGhhcyBiZWVuIGRpc3Bvc2VkYCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVByb21pc2UpIHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gdGhpcy5pbml0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlUHJvbWlzZSA9IHByb21pc2U7XG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5RGVsYXkgPSBSRVRSWV9TVEFSVF9ERUxBWTtcbiAgICAgICAgICAgIH0sIChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkIHx8IHRoaXMuaW5pdFJldHJ5VGltZXIpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTdG9yYWdlIGluaXQgZmFpbGVkIGZvciAke3RoaXMuY29uZmlnLmRlYnVnTmFtZSgpfSwgcmV0cnlpbmcgaW4gJHtNYXRoLnJvdW5kKHRoaXMuaW5pdFJldHJ5RGVsYXkgLyAxMDAwKX1zLiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlUHJvbWlzZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdGF0ZSgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5pbml0UmV0cnlEZWxheSk7XG4gICAgICAgICAgICAgICAgKHRoaXMuaW5pdFJldHJ5VGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5RGVsYXkgPSBNYXRoLm1pbihSRVRSWV9NQVhfREVMQVksIHRoaXMuaW5pdFJldHJ5RGVsYXkgKiBSRVRSWV9HUk9XVEgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVQcm9taXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPENoYWluU3RhdGU+IHtcbiAgICAgICAgbGV0IGNvbmZpZ3MgPSB0aGlzLmNvbmZpZ3VyZWQuc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKTtcbiAgICAgICAgbGV0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5KHRoaXMuY29uZmlndXJlZCk7XG4gICAgICAgIGxldCBwcm9iZXMgPSBhd2FpdCBwcm9iZVNvdXJjZXMoY29uZmlncywgcmVhZE9ubHkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHsgYWN0aXZlLCBuZWVkc1dyaXRlLCBleGlzdGluZyB9ID0gY2hvb3NlU3RhcnR1cENvbmZpZyh7IGNvbmZpZ3VyZWQ6IHRoaXMuY29uZmlndXJlZCwgcHJvYmVzLCBkZWJ1Z05hbWU6IHRoaXMuY29uZmlnLmRlYnVnTmFtZSgpIH0pO1xuICAgICAgICAgICAgbGV0IHNvdXJjZXMgPSBhd2FpdCB0aGlzLmJ1aWxkU291cmNlcyhhY3RpdmUpO1xuICAgICAgICAgICAgbGV0IGNvbmZpZ1dyaXRlRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAobmVlZHNXcml0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuY29uZmlnLmRlYnVnTmFtZSgpfSBpcyBvdXQgb2YgZGF0ZSAoc3RvcmVkIHZlcnNpb24gJHtleGlzdGluZyAmJiBnZXRDb25maWdWZXJzaW9uKGV4aXN0aW5nKSB8fCBcIm5vbmVcIn0sIG91cnMgJHtnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCl9KWApO1xuICAgICAgICAgICAgICAgIGxldCB7IGZhaWx1cmVzLCB0b3RhbCB9ID0gYXdhaXQgd3JpdGVSb3V0aW5nVG9BbGxTdG9yZXMoeyBjb25maWd1cmVkOiB0aGlzLmNvbmZpZ3VyZWQsIHNvdXJjZXMsIGRlYnVnTmFtZTogdGhpcy5jb25maWcuZGVidWdOYW1lKCkgfSk7XG4gICAgICAgICAgICAgICAgY29uZmlnV3JpdGVGYWlsZWQgPSBmYWlsdXJlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlcy5sZW5ndGggJiYgZmFpbHVyZXMubGVuZ3RoID09PSB0b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOb2JvZHkgaGFzIG91ciBjb25maWcsIHNvIHJ1bm5pbmcgb24gaXQgd291bGQganVzdCBkaXNhZ3JlZSB3aXRoIGV2ZXJ5IHNlcnZlci4gVGhlIHN0b3JlZCBvbmUgKHdoZW4gdGhlcmUgaXMgb25lKSBpcyB3aGF0IHRoZSBzZXJ2ZXJzIGFjdHVhbGx5IHJ1bi5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVGhlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgZm9yICR7dGhpcy5jb25maWcuZGVidWdOYW1lKCl9ICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpfSkgY291bGQgbm90IGJlIHdyaXR0ZW4gdG8gQU5ZIG9mIHRoZSAke3RvdGFsfSBzdG9yZXMuICR7ZXhpc3RpbmcgJiYgYFJ1bm5pbmcgb24gdGhlIHN0b3JlZCBjb25maWcgKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKGV4aXN0aW5nKX0pIHVudGlsIGEgd3JpdGUgc3VjY2VlZHMuYCB8fCBgTm8gc3RvcmVkIGNvbmZpZyBleGlzdHMgZWl0aGVyLCBzbyBzZXJ2ZXJzIHdpbGwgcmVqZWN0IHdyaXRlcyB1bnRpbCB0aGlzIHN1Y2NlZWRzLmB9IFJldHJ5aW5nIGluICR7Q09ORklHX1dSSVRFX1JFVFJZX0lOVEVSVkFMIC8gMTAwMH1zLiBGYWlsdXJlczogJHtmYWlsdXJlcy5qb2luKFwiIHwgXCIpfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGV4aXN0aW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IGF3YWl0IHRoaXMuYnVpbGRTb3VyY2VzKGFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZhaWx1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaGUgc3RvcmFnZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmNvbmZpZy5kZWJ1Z05hbWUoKX0gKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCl9KSB3YXMgd3JpdHRlbiB0byAke3RvdGFsIC0gZmFpbHVyZXMubGVuZ3RofSBvZiAke3RvdGFsfSBzdG9yZXMuIFJldHJ5aW5nIHRoZSByZXN0IGluICR7Q09ORklHX1dSSVRFX1JFVFJZX0lOVEVSVkFMIC8gMTAwMH1zICh0aGV5IGFsc28gcHVsbCBpdCBmcm9tIHRoZSBzdG9yZXMgdGhhdCBoYXZlIGl0KS4gRmFpbHVyZXM6ICR7ZmFpbHVyZXMuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgIGxldCBwcm9iZSA9IHByb2Jlcy5maW5kKHggPT4geC5yZXNwb25kZWQgJiYgeC5zb3VyY2VDb25maWcudXJsID09PSBzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgaWYgKHByb2JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zZWVkTGF0ZW5jeShwcm9iZS5sYXRlbmN5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IGFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb25maWdQb2xsKCk7XG4gICAgICAgICAgICBsZXQgc3RhdGU6IENoYWluU3RhdGUgPSB7IGNvbmZpZzogYWN0aXZlLCBzb3VyY2VzIH07XG4gICAgICAgICAgICB0aGlzLmxhdGVzdFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLnJvdXRpbmdSZXdyaXRlci5zdGFydChjb25maWdXcml0ZUZhaWxlZCk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBkaXNwb3NlUHJvYmVzKHByb2Jlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2xpZW50c2lkZSwgYSBjb25maWcgd2l0aCBwdWJsaWMgc291cmNlcyBpcyBzZXJ2ZWQgZW50aXJlbHkgb3ZlciBwbGFpbiBVUkwgZG93bmxvYWRzIC0gbm8gQVBJIGNvbm5lY3Rpb24sIG5vIGFjY2VzcyBncmFudCwgYW5kIG5vIHdyaXRpbmcuIGRpcmVjdENvbm5lY3Qgb3B0cyBvdXQgb2YgdGhhdC4gKi9cbiAgICBwcml2YXRlIGlzUmVhZE9ubHkoY29uZmlnOiBSZW1vdGVDb25maWcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRpcmVjdENvbm5lY3QgfHwgaXNOb2RlKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5zb3VyY2VzLm1hcChub3JtYWxpemVTb3VyY2UpLnNvbWUoeCA9PiB4LnB1YmxpYyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDaGFpblNvdXJjZShzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZywgcmVhZE9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPFNvdXJjZVdyYXBwZXI+IHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IGF3YWl0IFNvdXJjZVdyYXBwZXIuY3JlYXRlKHNvdXJjZUNvbmZpZywgeyByZWFkT25seSB9KTtcbiAgICAgICAgc291cmNlLnN0YXJ0UGluZ2luZygpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRTb3VyY2VzKGNvbmZpZzogUmVtb3RlQ29uZmlnKTogUHJvbWlzZTxTb3VyY2VXcmFwcGVyW10+IHtcbiAgICAgICAgbGV0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5KGNvbmZpZyk7XG4gICAgICAgIGxldCBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlQ29uZmlnIG9mIGNvbmZpZy5zb3VyY2VzLm1hcChub3JtYWxpemVTb3VyY2UpKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goYXdhaXQgdGhpcy5jcmVhdGVDaGFpblNvdXJjZShzb3VyY2VDb25maWcsIHJlYWRPbmx5KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvdXJjZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydENvbmZpZ1BvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBvbGxUaW1lciB8fCB0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgIHRoaXMucG9sbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnJlZnJlc2hBY3RpdmVDb25maWcoKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDaGVja2luZyBmb3IgYSBuZXcgc3RvcmFnZSByb3V0aW5nIGNvbmZpZyBmYWlsZWQgZm9yICR7dGhpcy5jb25maWcuZGVidWdOYW1lKCl9OiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBDT05GSUdfUE9MTF9JTlRFUlZBTCk7XG4gICAgICAgICh0aGlzLnBvbGxUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLy8gRGVkdXBsaWNhdGVzIGNvbmN1cnJlbnQgcmVmcmVzaGVzICh0aGUgcG9sbCB0aW1lciBhbmQgd3JvbmctdGFyZ2V0IHdyaXRlIHJldHJpZXMgc2hhcmUgdGhpcylcbiAgICBwcml2YXRlIGNvbmZpZ1JlZnJlc2hJbkZsaWdodDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgcmVmcmVzaEFjdGl2ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWdSZWZyZXNoSW5GbGlnaHQgPSB0aGlzLmNoZWNrRm9yTmV3Q29uZmlnKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWdSZWZyZXNoSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdSZWZyZXNoSW5GbGlnaHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmZXRjaExhdGVzdENvbmZpZyhzdGF0ZTogQ2hhaW5TdGF0ZSk6IFByb21pc2U8UmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBsYXRlc3QgPSBhd2FpdCBzb3VyY2UucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAobGF0ZXN0KSByZXR1cm4gbm9ybWFsaXplUmVtb3RlQ29uZmlnKGxhdGVzdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSBzdGF0ZS5zb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdG9yYWdlIHNvdXJjZSBjb3VsZCBnaXZlIHVzIHRoZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmNvbmZpZy5kZWJ1Z05hbWUoKX06ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrRm9yTmV3Q29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCAhdGhpcy5zdGF0ZVByb21pc2UpIHJldHVybjtcbiAgICAgICAgbGV0IHN0YXRlOiBDaGFpblN0YXRlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhdGVzdCA9IGF3YWl0IHRoaXMuZmV0Y2hMYXRlc3RDb25maWcoc3RhdGUpO1xuICAgICAgICBpZiAoIWxhdGVzdCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmFkb3B0TmV3Q29uZmlnKHN0YXRlLCBsYXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYWRvcHROZXdDb25maWcoc3RhdGU6IENoYWluU3RhdGUsIGxhdGVzdDogUmVtb3RlQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShsYXRlc3QpID09PSBKU09OLnN0cmluZ2lmeShzdGF0ZS5jb25maWcpKSByZXR1cm47XG4gICAgICAgIGxldCByZWNlaXZlZCA9IGZvcm1hdERhdGVUaW1lRGV0YWlsZWQoRGF0ZS5ub3coKSk7XG4gICAgICAgIGxldCBvbmx5SW50ZXJtZWRpYXRlc0NoYW5nZWQgPSBKU09OLnN0cmluZ2lmeShyZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyhsYXRlc3QpKSA9PT0gSlNPTi5zdHJpbmdpZnkocmVzb2x2ZUludGVybWVkaWF0ZVNvdXJjZXMoc3RhdGUuY29uZmlnKSk7XG4gICAgICAgIGlmIChvbmx5SW50ZXJtZWRpYXRlc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9yYWdlIHJvdXRpbmcgc3dpdGNob3ZlciB3aW5kb3dzIGNoYW5nZWQgKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKHN0YXRlLmNvbmZpZyl9IC0+ICR7Z2V0Q29uZmlnVmVyc2lvbihsYXRlc3QpfSksIHJlY2VpdmVkICR7cmVjZWl2ZWR9LCByZWJ1aWxkaW5nIHNvdXJjZXMuIE5ldyBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkobGF0ZXN0KX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9yYWdlIHJvdXRpbmcgY29uZmlnIGNoYW5nZWQgKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKHN0YXRlLmNvbmZpZyl9IC0+ICR7Z2V0Q29uZmlnVmVyc2lvbihsYXRlc3QpfSksIHJlY2VpdmVkICR7cmVjZWl2ZWR9LCByZWJ1aWxkaW5nIHNvdXJjZXMuIE5ldyBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkobGF0ZXN0KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyaXBwZWRLZXkgPSAoY29uZmlnOiBTb3VyY2VDb25maWcpID0+IEpTT04uc3RyaW5naWZ5KHsgLi4uY29uZmlnLCB2YWxpZFdpbmRvdzogdW5kZWZpbmVkIH0pO1xuICAgICAgICBsZXQgb2xkQnlDb25maWcgPSBuZXcgTWFwPHN0cmluZywgU291cmNlV3JhcHBlcltdPigpO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgbGV0IGtleSA9IHN0cmlwcGVkS2V5KHNvdXJjZS5jb25maWcpO1xuICAgICAgICAgICAgbGV0IGxpc3QgPSBvbGRCeUNvbmZpZy5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmICghbGlzdCkge1xuICAgICAgICAgICAgICAgIGxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBvbGRCeUNvbmZpZy5zZXQoa2V5LCBsaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpc3QucHVzaChzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWFkT25seSA9IHRoaXMuaXNSZWFkT25seShsYXRlc3QpO1xuICAgICAgICBsZXQgc291cmNlczogU291cmNlV3JhcHBlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZUNvbmZpZyBvZiBsYXRlc3Quc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKSkge1xuICAgICAgICAgICAgbGV0IG9sZCA9IG9sZEJ5Q29uZmlnLmdldChzdHJpcHBlZEtleShzb3VyY2VDb25maWcpKT8uc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvbGQpIHtcbiAgICAgICAgICAgICAgICBvbGQudXBkYXRlVmFsaWRXaW5kb3coc291cmNlQ29uZmlnLnZhbGlkV2luZG93KTtcbiAgICAgICAgICAgICAgICBzb3VyY2VzLnB1c2gob2xkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlcy5wdXNoKGF3YWl0IHRoaXMuY3JlYXRlQ2hhaW5Tb3VyY2Uoc291cmNlQ29uZmlnLCByZWFkT25seSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGxlZnRvdmVycyBvZiBvbGRCeUNvbmZpZy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbGVmdG92ZXIgb2YgbGVmdG92ZXJzKSB7XG4gICAgICAgICAgICAgICAgbGVmdG92ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gbGF0ZXN0O1xuICAgICAgICBsZXQgbmV3U3RhdGU6IENoYWluU3RhdGUgPSB7IGNvbmZpZzogbGF0ZXN0LCBzb3VyY2VzIH07XG4gICAgICAgIHRoaXMubGF0ZXN0U3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgdGhpcy5zdGF0ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobmV3U3RhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGFzdEF2YWlsYWJpbGl0eVJlY2hlY2sgPSAwO1xuICAgIHByaXZhdGUgYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0OiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIC8qKiBFdmVyeSBzb3VyY2UgZmFpbGVkOiByZS1jb250YWN0IGFsbCBvZiB0aGVtIChyb3V0aW5nIHJlLXJlYWQgKyBjb25uZWN0aW9uIHJlLWF0dGVtcHQpIGFuZCBhZG9wdCB3aGF0ZXZlciBjb25maWcgY29tZXMgYmFjay4gVGhyb3R0bGVkLCBhbmQgZGVkdXBsaWNhdGVkIGFjcm9zcyBjb25jdXJyZW50IGNhbGxlcnMuICovXG4gICAgcHVibGljIHJlY2hlY2tBdmFpbGFiaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodCkgcmV0dXJuIHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0O1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdEF2YWlsYWJpbGl0eVJlY2hlY2sgPCBBVkFJTEFCSUxJVFlfUkVDSEVDS19USFJPVFRMRSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB0aGlzLmxhc3RBdmFpbGFiaWxpdHlSZWNoZWNrID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQgPSB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHlOb3coKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0O1xuICAgIH1cbiAgICBwcml2YXRlIGFzeW5jIHJlY2hlY2tBdmFpbGFiaWxpdHlOb3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkIHx8ICF0aGlzLnN0YXRlUHJvbWlzZSkgcmV0dXJuO1xuICAgICAgICBsZXQgc3RhdGU6IENoYWluU3RhdGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGVQcm9taXNlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgRXZlcnkgc3RvcmFnZSBzb3VyY2UgZmFpbGVkIGZvciAke3RoaXMuY29uZmlnLmRlYnVnTmFtZSgpfTsgcmUtY29udGFjdGluZyBhbGwgJHtzdGF0ZS5zb3VyY2VzLmxlbmd0aH0gc291cmNlcyAocm91dGluZyByZS1yZWFkICsgY29ubmVjdGlvbiByZS1hdHRlbXB0KWApO1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHN0YXRlLnNvdXJjZXMubWFwKGFzeW5jIHNvdXJjZSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb3VyY2UucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGxhdGVzdCA9IHJlc3VsdHMuZmluZCh4ID0+IHgpO1xuICAgICAgICBpZiAoIWxhdGVzdCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmFkb3B0TmV3Q29uZmlnKHN0YXRlLCBsYXRlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51bnRyYWNrQ29uZmlnKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaD8uKCk7XG4gICAgICAgIGlmICh0aGlzLnBvbGxUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5pdFJldHJ5VGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluaXRSZXRyeVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRpbmdSZXdyaXRlci5kaXNwb3NlKCk7XG4gICAgICAgIGxldCBzdGF0ZVByb21pc2UgPSB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICAgICAgaWYgKHN0YXRlUHJvbWlzZSkge1xuICAgICAgICAgICAgdm9pZCBzdGF0ZVByb21pc2UudGhlbihzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoKSA9PiB7IH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBTb3VyY2VQcm9iZSA9IHtcbiAgICBwcm9iZTogU291cmNlV3JhcHBlcjtcbiAgICBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZztcbiAgICByZXNwb25kZWQ6IGJvb2xlYW47XG4gICAgbGF0ZW5jeTogbnVtYmVyO1xuICAgIGV4aXN0aW5nOiBSZW1vdGVDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgZXJyb3I6IHN0cmluZztcbn07XG5cbi8qKiBPbmUgdGhyb3dhd2F5IFNvdXJjZVdyYXBwZXIgcGVyIGNvbmZpZ3VyZWQgc291cmNlLCBlYWNoIGFza2VkIGZvciBpdHMgc3RvcmVkIHJvdXRpbmcgY29uZmlnIC0gd2hpY2ggYWxzbyBtZWFzdXJlcyBmaXJzdC1jb250YWN0IGxhdGVuY3ksIHNlZWRlZCBpbnRvIHRoZSByZWFsIHNvdXJjZXMgYWZ0ZXJ3YXJkcy4gVGhlIHByb2JlcyBNVVNUIGJlIGRpc3Bvc2VkIChkaXNwb3NlUHJvYmVzKSBvbmNlIHRoZSBjYWxsZXIgaXMgZG9uZSB3aXRoIHRoZW0uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvYmVTb3VyY2VzKGNvbmZpZ3M6IFNvdXJjZUNvbmZpZ1tdLCByZWFkT25seTogYm9vbGVhbik6IFByb21pc2U8U291cmNlUHJvYmVbXT4ge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChjb25maWdzLm1hcChhc3luYyBzb3VyY2VDb25maWcgPT4ge1xuICAgICAgICBsZXQgcHJvYmUgPSBhd2FpdCBTb3VyY2VXcmFwcGVyLmNyZWF0ZShzb3VyY2VDb25maWcsIHsgYmFja2dyb3VuZDogZmFsc2UsIHJlYWRPbmx5IH0pO1xuICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgcHJvYmUucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgIHJldHVybiB7IHByb2JlLCBzb3VyY2VDb25maWcsIHJlc3BvbmRlZDogdHJ1ZSwgbGF0ZW5jeTogRGF0ZS5ub3coKSAtIHN0YXJ0LCBleGlzdGluZywgZXJyb3I6IFwiXCIgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJvYmUsIHNvdXJjZUNvbmZpZywgcmVzcG9uZGVkOiBmYWxzZSwgbGF0ZW5jeTogMCwgZXhpc3Rpbmc6IHVuZGVmaW5lZCwgZXJyb3I6IGAke3NvdXJjZUNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWAgfTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VQcm9iZXMocHJvYmVzOiBTb3VyY2VQcm9iZVtdKTogdm9pZCB7XG4gICAgZm9yIChsZXQgcHJvYmUgb2YgcHJvYmVzKSB7XG4gICAgICAgIHByb2JlLnByb2JlLmRpc3Bvc2UoKTtcbiAgICB9XG59XG5cbi8qKlxuICogV2hpY2ggcm91dGluZyBjb25maWcgdGhlIGNoYWluIHNob3VsZCBSVU46IHRoZSBuZXdlc3Qgb2Ygb3VycyBhbmQgZXZlcnkgc3RvcmVkIG9uZS4gbmVlZHNXcml0ZVxuICogd2hlbiBvdXJzIGlzIHN0cmljdGx5IHRoZSBuZXdlc3QsIG1lYW5pbmcgdGhlIHN0b3JlcyBoYXZlIHRvIGJlIHRvbGQgYWJvdXQgaXQuIEEgc3RvcmVkIGNvbmZpZ1xuICogd2l0aCBvdXIgZXhhY3QgdmVyc2lvbiBidXQgRElGRkVSRU5UIGNvbnRlbnQgd2lucyB3aXRob3V0IGEgd3JpdGUsIGxvdWRseTogY29uZmlnIHVwZGF0ZXMgbXVzdFxuICogYnVtcCB0aGUgdmVyc2lvbiwgb3IgdGhleSBhcmUgaWdub3JlZCAtIHNpbGVudGx5IHRha2luZyB0aGUgY2hhbmdlZCBvbmUgd291bGQgbWFrZSBcIndoYXQgaXMgdGhlXG4gKiBidWNrZXQgcnVubmluZ1wiIGRlcGVuZCBvbiB3aGljaCBwcm9jZXNzIHN0YXJ0ZWQgbGFzdC5cbiAqXG4gKiBUaHJvd3Mgd2hlbiBubyBzb3VyY2UgYW5zd2VyZWQgYXQgYWxsOiB3aXRoIG5vdGhpbmcgc3RvcmVkIGFuZCBub2JvZHkgdG8gd3JpdGUgdG8sIHRoZXJlIGlzIG5vXG4gKiBjb25maWcgdG8gcnVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NlU3RhcnR1cENvbmZpZyhjb25maWc6IHsgY29uZmlndXJlZDogUmVtb3RlQ29uZmlnOyBwcm9iZXM6IFNvdXJjZVByb2JlW107IGRlYnVnTmFtZTogc3RyaW5nIH0pOiB7IGFjdGl2ZTogUmVtb3RlQ29uZmlnOyBuZWVkc1dyaXRlOiBib29sZWFuOyBleGlzdGluZzogUmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkIH0ge1xuICAgIGxldCB7IGNvbmZpZ3VyZWQsIHByb2JlcywgZGVidWdOYW1lIH0gPSBjb25maWc7XG4gICAgbGV0IGZvdW5kID0gcHJvYmVzLmZpbmQoeCA9PiB4LnJlc3BvbmRlZCk7XG4gICAgaWYgKCFmb3VuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0b3JhZ2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIC0gbm8gc291cmNlIGFuc3dlcmVkLiBGb3IgJHtkZWJ1Z05hbWV9OiAke3Byb2Jlcy5tYXAoeCA9PiB4LmVycm9yKS5qb2luKFwiIHwgXCIpfWApO1xuICAgIH1cbiAgICBsZXQgZXhpc3RpbmcgPSBmb3VuZC5leGlzdGluZztcbiAgICBsZXQgYWN0aXZlID0gY29uZmlndXJlZDtcbiAgICBsZXQgbmVlZHNXcml0ZSA9IHRydWU7XG4gICAgaWYgKGV4aXN0aW5nICYmIGdldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpID49IGdldENvbmZpZ1ZlcnNpb24oY29uZmlndXJlZCkpIHtcbiAgICAgICAgaWYgKGdldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpID09PSBnZXRDb25maWdWZXJzaW9uKGNvbmZpZ3VyZWQpICYmIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nKSAhPT0gSlNPTi5zdHJpbmdpZnkoY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFyY2hpdmVzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSB2ZXJzaW9uLCBmb3IgJHtmb3VuZC5zb3VyY2VDb25maWcudXJsfS4gVXBkYXRlcyB3aWxsIGJlIGlnbm9yZWQgdW50aWwgeW91IGluY3JlYXNlIHRoZSB2ZXJzaW9uLiBVc2luZzogJHtKU09OLnN0cmluZ2lmeShleGlzdGluZyl9LCBpZ25vcmluZzogJHtKU09OLnN0cmluZ2lmeShjb25maWd1cmVkKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmUgPSBleGlzdGluZztcbiAgICAgICAgbmVlZHNXcml0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobmVlZHNXcml0ZSkge1xuICAgICAgICBsZXQgYmVzdDogUmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgY29uZmxpY3RVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChsZXQgcHJvYmUgb2YgcHJvYmVzKSB7XG4gICAgICAgICAgICBsZXQgc3RvcmVkID0gcHJvYmUuZXhpc3Rpbmc7XG4gICAgICAgICAgICBpZiAoIXN0b3JlZCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWJlc3QgfHwgZ2V0Q29uZmlnVmVyc2lvbihzdG9yZWQpID4gZ2V0Q29uZmlnVmVyc2lvbihiZXN0KSkge1xuICAgICAgICAgICAgICAgIGJlc3QgPSBzdG9yZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnVmVyc2lvbihzdG9yZWQpID09PSBnZXRDb25maWdWZXJzaW9uKGNvbmZpZ3VyZWQpICYmIEpTT04uc3RyaW5naWZ5KHN0b3JlZCkgIT09IEpTT04uc3RyaW5naWZ5KGNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3RVcmwgPSBwcm9iZS5zb3VyY2VDb25maWcudXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZXN0ICYmIGdldENvbmZpZ1ZlcnNpb24oYmVzdCkgPj0gZ2V0Q29uZmlnVmVyc2lvbihjb25maWd1cmVkKSkge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0VXJsICYmIGdldENvbmZpZ1ZlcnNpb24oYmVzdCkgPT09IGdldENvbmZpZ1ZlcnNpb24oY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBcmNoaXZlcyBjb25maWd1cmF0aW9uIHVwZGF0ZWQgd2l0aG91dCB1cGRhdGluZyB0aGUgdmVyc2lvbiwgZm9yICR7Y29uZmxpY3RVcmx9LiBVcGRhdGVzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCB5b3UgaW5jcmVhc2UgdGhlIHZlcnNpb24uIFVzaW5nOiAke0pTT04uc3RyaW5naWZ5KGJlc3QpfSwgaWdub3Jpbmc6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlndXJlZCl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3RpdmUgPSBiZXN0O1xuICAgICAgICAgICAgbmVlZHNXcml0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFjdGl2ZSwgbmVlZHNXcml0ZSwgZXhpc3RpbmcgfTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIGdpdmVuIHJvdXRpbmcgY29uZmlnIHRvIGV2ZXJ5IGNvbmZpZ3VyZWQgc3RvcmUsIG9uZSB3cml0ZSBwZXIgdXJsK25hbWU6IHRoZSB3cml0ZVxuICogbGFuZHMgaW4gdGhlIHN0b3JlIHRoZSBlbnRyeSBOQU1FUywgc28gdHdvIGVudHJpZXMgc2hhcmluZyBhIFVSTCBidXQgbmFtaW5nIGRpZmZlcmVudCBzdG9yZXMgYXJlXG4gKiB0d28gc2VwYXJhdGUgZGVsaXZlcmllcyAtIGRlZHVwaW5nIGJ5IFVSTCBhbG9uZSBsZWF2ZXMgdGhlIHNlY29uZCBzdG9yZSB1bmNvbmZpZ3VyZWQgZm9yZXZlci4gQWxsXG4gKiBpbiBwYXJhbGxlbCwgZXZlcnkgZmFpbHVyZSB0b2xlcmF0ZWQgKG5vLXdyaXRlLWFjY2VzcyBpbmNsdWRlZCAtIHRoZSBhdHRlbXB0IGNsYXNzaWZpZXMgaXQsXG4gKiBub3RoaW5nIHByZS1jaGVja3MgaXQpOiBhIGRvd24gbm9kZSBtdXN0IG5vdCBzdG9wIHRoZSBvdGhlcnMgZnJvbSBnZXR0aW5nIHRoZSBjb25maWcgLSB0aGV5IHdvdWxkXG4gKiB0aGVuIHJlamVjdCB3cml0ZXMgYXMgdW5jb25maWd1cmVkIHByZWNpc2VseSBCRUNBVVNFIGl0IG5ldmVyIGFycml2ZWQgLSBhbmQgaXQgbXVzdCBuZXZlciBzdG9wXG4gKiB0aGUgY2hhaW4gZnJvbSBzdGFydGluZy4gQSBzdG9yZSB0aGF0IG1pc3NlZCBpdCBwdWxscyBpdCBvZmYgaXRzIHBlZXJzLCBhbmQgdGhlIHJld3JpdGUgbG9vcFxuICogdHJpZXMgYWdhaW4gKHNlZSBSb3V0aW5nUmV3cml0ZUxvb3ApLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVSb3V0aW5nVG9BbGxTdG9yZXMoY29uZmlnOiB7IGNvbmZpZ3VyZWQ6IFJlbW90ZUNvbmZpZzsgc291cmNlczogU291cmNlV3JhcHBlcltdOyBkZWJ1Z05hbWU6IHN0cmluZyB9KTogUHJvbWlzZTx7IGZhaWx1cmVzOiBzdHJpbmdbXTsgdG90YWw6IG51bWJlciB9PiB7XG4gICAgbGV0IHsgY29uZmlndXJlZCwgc291cmNlcywgZGVidWdOYW1lIH0gPSBjb25maWc7XG4gICAgbGV0IHJvdXRpbmdEYXRhID0gc2VyaWFsaXplUmVtb3RlQ29uZmlnKGNvbmZpZ3VyZWQpO1xuICAgIGxldCByb3V0aW5nV3JpdGVUaW1lID0gTWF0aC5yb3VuZChEYXRlLm5vdygpKTtcbiAgICBsZXQgdGFyZ2V0czogU291cmNlV3JhcHBlcltdID0gW107XG4gICAgbGV0IHNraXBwZWQ6IFNvdXJjZVdyYXBwZXJbXSA9IFtdO1xuICAgIGxldCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgbGV0IGtleSA9IGAke3NvdXJjZS5jb25maWcudXJsfXwke3NvdXJjZS5jb25maWcubmFtZX1gO1xuICAgICAgICBpZiAoc2Vlbi5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIC8vIHdyaXRlQmxvY2tlZCBpcyBhIGNhcGFiaWxpdHkgb2YgdGhpcyBwcm9jZXNzIChyZWFkLW9ubHkgbW9kZSwgYSBicm93c2VyLCBubyBiYWNrYmxhemUgY3JlZGVudGlhbHMpIC0gbm90IGNvbm5lY3Rpdml0eSwgc28gc2tpcHBpbmcgaXMgbm90IGEgcHJlLWNoZWNrIHJhY2UuIENvdW50aW5nIHRoZXNlIGFzIGZhaWx1cmVzIHB1dCB0aGUgcmV0cnkgbG9vcCBvbiBpdHMgNS1taW51dGUgY2FkZW5jZSBGT1JFVkVSIG92ZXIgd3JpdGVzIHRoaXMgcHJvY2VzcyBjYW5ub3QgbWFrZTsgdGhlIHN0b3JlcyBnZXQgdGhlIGNvbmZpZyBmcm9tIHRoZSB3cml0ZXJzIHRoYXQgY2FuIChzZXJ2ZXJzLCBub2RlIGNsaWVudHMsIHBlZXJzIHB1bGxpbmcgaXQgZnJvbSBlYWNoIG90aGVyKS4gVGhlIHJlY2hlY2sgZmlyc3Q6IHRoZSBiYWNrYmxhemUtY3JlZGVudGlhbHMgYmxvY2sgY2FuIGJlIGEgVFJBTlNJRU5UIHNlY3JldC1sb2FkIGZhaWx1cmUgYXQgc3RhcnR1cCwgYW5kIHNraXBwaW5nIG9uIHRoZSBzdGFsZSB2ZXJkaWN0IHdvdWxkIG90aGVyd2lzZSBtYWtlIGl0IHBlcm1hbmVudCAoc2VlIFNvdXJjZVdyYXBwZXIucmVjaGVja1dyaXRlQmxvY2tlZCkuXG4gICAgICAgIGlmIChzb3VyY2Uud3JpdGVCbG9ja2VkKSB7XG4gICAgICAgICAgICBhd2FpdCBzb3VyY2UucmVjaGVja1dyaXRlQmxvY2tlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2Uud3JpdGVCbG9ja2VkIHx8ICFzb3VyY2UuYXBpKSB7XG4gICAgICAgICAgICBza2lwcGVkLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldHMucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgV3JpdGluZyByb3V0aW5nIGNvbmZpZyB2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihjb25maWd1cmVkKX0gZm9yICR7ZGVidWdOYW1lfSB0byBhbGwgJHt0YXJnZXRzLmxlbmd0aH0gd3JpdGFibGUgc3RvcmVzICh3cml0ZSB0aW1lICR7Zm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChyb3V0aW5nV3JpdGVUaW1lKX0pOiAke3RhcmdldHMubWFwKHggPT4gYCR7eC5jb25maWcudXJsfSAoc3RvcmUgJHtKU09OLnN0cmluZ2lmeSh4LmNvbmZpZy5uYW1lKX0pYCkuam9pbihcIiwgXCIpIHx8IFwibm9uZVwifSR7c2tpcHBlZC5sZW5ndGggJiYgYC4gU2tpcHBpbmcgJHtza2lwcGVkLmxlbmd0aH0gbm90IHdyaXRhYmxlIGZyb20gdGhpcyBwcm9jZXNzOiAke3NraXBwZWQubWFwKHggPT4gYCR7eC5jb25maWcudXJsfSAoc3RvcmUgJHtKU09OLnN0cmluZ2lmeSh4LmNvbmZpZy5uYW1lKX0sICR7eC53cml0ZUJsb2NrZWQgfHwgXCJubyBBUEkgYWNjZXNzXCJ9KWApLmpvaW4oXCIsIFwiKX1gIHx8IFwiXCJ9YCk7XG4gICAgbGV0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRhcmdldHMubWFwKGFzeW5jIHNvdXJjZSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBzb3VyY2Uud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KFJPVVRJTkdfRklMRSwgcm91dGluZ0RhdGEsIHsgbGFzdE1vZGlmaWVkOiByb3V0aW5nV3JpdGVUaW1lIH0pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBXcm90ZSBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKGNvbmZpZ3VyZWQpfSB0byAke3NvdXJjZS5jb25maWcudXJsfSAoc3RvcmUgJHtKU09OLnN0cmluZ2lmeShzb3VyY2UuY29uZmlnLm5hbWUpfSlgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZmFpbHVyZXMucHVzaChgJHtzb3VyY2UuY29uZmlnLnVybH0gKHN0b3JlICR7SlNPTi5zdHJpbmdpZnkoc291cmNlLmNvbmZpZy5uYW1lKX0pOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIHJldHVybiB7IGZhaWx1cmVzLCB0b3RhbDogdGFyZ2V0cy5sZW5ndGggfTtcbn1cblxuLyoqXG4gKiBUaGUgcGVyaW9kaWMgcmUtd3JpdGUgb2YgdGhlIGNoYWluJ3MgaW4tY29kZSBjb25maWc6IGZhaWx1cmVzIHJldHJpZWQgb24gdGhlIHNob3J0IGludGVydmFsIC0gYVxuICogc3RvcmUgd2l0aG91dCB0aGUgY29uZmlnIHJlamVjdHMgZXZlcnkgd3JpdGUgYWltZWQgYXQgaXQsIHNvIHRoaXMgbm90IGxhbmRpbmcgaXMgYSBiaWcgZGVhbCxcbiAqIGxvZ2dlZCBvbiBldmVyeSBhdHRlbXB0IC0gYW5kIGV2ZW4gc3VjY2VzcyByZXBlYXRlZCBob3VybHksIGluIGNhc2UgYSBzdG9yZSBsb3N0IGl0LiBUaGUgZmFpbHVyZVxuICogdGhpcyBleGlzdHMgZm9yOiBhIHNlcnZlciB3aG9zZSB0cnVzdCB3YXMgb25seSBncmFudGVkIEFGVEVSIHN0YXJ0dXAsIHNvIHRoZSBzdGFydHVwIHdyaXRlIHdhc1xuICogcmVqZWN0ZWQgYW5kIG5vdGhpbmcgZWxzZSB3b3VsZCBldmVyIHJldHJ5IGl0LlxuICovXG5leHBvcnQgY2xhc3MgUm91dGluZ1Jld3JpdGVMb29wIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzoge1xuICAgICAgICBjb25maWd1cmVkOiBSZW1vdGVDb25maWc7XG4gICAgICAgIGRlYnVnTmFtZTogKCkgPT4gc3RyaW5nO1xuICAgICAgICAvKiogVGhlIGNoYWluJ3MgbmV3ZXN0IGFkb3B0ZWQgc3RhdGU6IHdoYXQgZGVjaWRlcyB3aGV0aGVyIG91cnMgaXMgc3RpbGwgdGhlIGNvbmZpZyB0byB3cml0ZSwgYW5kIHRoZSBzb3VyY2VzIGl0IGlzIHdyaXR0ZW4gdGhyb3VnaC4gVW5kZWZpbmVkIHVudGlsIHRoZSBmaXJzdCBpbml0IGZpbmlzaGVzLiAqL1xuICAgICAgICBsYXRlc3Q6ICgpID0+IHsgY29uZmlnOiBSZW1vdGVDb25maWc7IHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXSB9IHwgdW5kZWZpbmVkO1xuICAgIH0pIHsgfVxuXG4gICAgcHJpdmF0ZSB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXG4gICAgLyoqIChSZSlhcm1zIHRoZSBsb29wIC0gY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgaW5pdCwgd2l0aCB3aGV0aGVyIHRoYXQgaW5pdCdzIHdyaXRlIGZhaWxlZCAod2hpY2ggcGlja3MgdGhlIHNob3J0IHJldHJ5IGludGVydmFsKS4gKi9cbiAgICBwdWJsaWMgc3RhcnQoZmFpbGVkQXRTdGFydHVwOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUoZmFpbGVkQXRTdGFydHVwICYmIENPTkZJR19XUklURV9SRVRSWV9JTlRFUlZBTCB8fCBDT05GSUdfV1JJVEVfUkVGUkVTSF9JTlRFUlZBTCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY2hlZHVsZShkZWxheTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5yZXdyaXRlKCkuY2F0Y2goKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUmV3cml0aW5nIHRoZSBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuY29uZmlnLmRlYnVnTmFtZSgpfSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoQ09ORklHX1dSSVRFX1JFVFJZX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgICh0aGlzLnRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJld3JpdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgIGxldCBjb25maWd1cmVkID0gdGhpcy5jb25maWcuY29uZmlndXJlZDtcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5jb25maWcubGF0ZXN0KCk7XG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoQ09ORklHX1dSSVRFX1JFVFJZX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgYnVja2V0IGFkb3B0ZWQgYSBORVdFUiBjb25maWcgdGhhbiBvdXIgaW4tY29kZSBvbmUsIHNvIG91cnMgaXMgc3RhbGUgYW5kIGV2ZXJ5IHN0b3JlIHdvdWxkIChyaWdodGx5KSByZWZ1c2UgaXRcbiAgICAgICAgaWYgKGdldENvbmZpZ1ZlcnNpb24oc3RhdGUuY29uZmlnKSA+IGdldENvbmZpZ1ZlcnNpb24oY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoQ09ORklHX1dSSVRFX1JFRlJFU0hfSU5URVJWQUwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNhbWUgdmVyc2lvbiBidXQgZGlmZmVyZW50IGNvbnRlbnQ6IHN0YXJ0dXAgYWxyZWFkeSBkZWNpZGVkIHRoZSBzdG9yZWQgb25lIHdpbnMgdW50aWwgdGhlIHZlcnNpb24gaXMgYnVtcGVkIChzZWUgY2hvb3NlU3RhcnR1cENvbmZpZyksIGFuZCByZS13cml0aW5nIG91cnMgd291bGQgZmxpcCB0aGUgYnVja2V0IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIHR3b1xuICAgICAgICBpZiAoZ2V0Q29uZmlnVmVyc2lvbihzdGF0ZS5jb25maWcpID09PSBnZXRDb25maWdWZXJzaW9uKGNvbmZpZ3VyZWQpICYmIEpTT04uc3RyaW5naWZ5KHN0YXRlLmNvbmZpZykgIT09IEpTT04uc3RyaW5naWZ5KGNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlKENPTkZJR19XUklURV9SRUZSRVNIX0lOVEVSVkFMKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeyBmYWlsdXJlcywgdG90YWwgfSA9IGF3YWl0IHdyaXRlUm91dGluZ1RvQWxsU3RvcmVzKHsgY29uZmlndXJlZCwgc291cmNlczogc3RhdGUuc291cmNlcywgZGVidWdOYW1lOiB0aGlzLmNvbmZpZy5kZWJ1Z05hbWUoKSB9KTtcbiAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVGhlIHBlcmlvZGljIHJvdXRpbmcgY29uZmlnIHdyaXRlIGZvciAke3RoaXMuY29uZmlnLmRlYnVnTmFtZSgpfSAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oY29uZmlndXJlZCl9KSBmYWlsZWQgb24gJHtmYWlsdXJlcy5sZW5ndGh9IG9mICR7dG90YWx9IHN0b3JlcyAtIHJldHJ5aW5nIGluICR7Q09ORklHX1dSSVRFX1JFVFJZX0lOVEVSVkFMIC8gMTAwMH1zOiAke2ZhaWx1cmVzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlKENPTkZJR19XUklURV9SRVRSWV9JTlRFUlZBTCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZShDT05GSUdfV1JJVEVfUkVGUkVTSF9JTlRFUlZBTCk7XG4gICAgfVxufVxuIl19
479
- /* _JS_SOURCE_HASH = "a9eeafab91b6c0e1265fca2752d3f6b3d19f8d672917b0da17ba7b38d075bfa4"; */
479
+ /* _JS_SOURCE_HASH = "c6b1d758f7cb76ff2592e356f0a2a1d42fd98902e96b1315d8ec43b5196fe8e4"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.getFlag = exports.getArg = void 0;
4
4
  function getArg(name) {
@@ -18,4 +18,4 @@ function getFlag(name) {
18
18
  }
19
19
  exports.getFlag = getFlag;
20
20
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpQXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsaUFyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsTUFBTSxDQUFDLElBQVk7SUFDL0IsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLElBQUksS0FBSyxHQUFHLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBUkQsd0JBUUM7QUFFRCxpR0FBaUc7QUFDakcsU0FBZ0IsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUZELDBCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldEFyZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBpbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKGAtLSR7bmFtZX1gKTtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxldCB2YWx1ZSA9IHByb2Nlc3MuYXJndltpbmRleCArIDFdO1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyB2YWx1ZSBmb3IgLS0ke25hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIEEgdmFsdWVsZXNzIGJvb2xlYW4gZmxhZzogdHJ1ZSB3aGVuIC0tbmFtZSBpcyBwcmVzZW50ICh3aXRoIG5vdGhpbmcsIG9yIGEgZm9sbG93aW5nIGZsYWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZsYWcobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndi5pbmNsdWRlcyhgLS0ke25hbWV9YCk7XG59XG4iXX0=
21
- /* _JS_SOURCE_HASH = "b0659c03406d03521ce38ac5f9ba314dcb2b4184db0b749117b20795220c3d97"; */
21
+ /* _JS_SOURCE_HASH = "278be05b4cc3ee4341865f15340f300a4c0f6ac3f0e3961e2de17b9f1108db2a"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.getBucketInfo = exports.searchServerLogs = exports.getServerLogs = exports.listAllServerLogFiles = exports.listServerLogFiles = exports.clearServerWriteStats = exports.activateServerBucket = exports.listServerActiveBucketKeys = exports.getServerActiveBucket = exports.listServerBuckets = exports.createArchives = exports.ArchivesChain = exports.createApiArchives = exports.getBucketBaseUrl = exports.parseBackblazeUrl = exports.parseHostedUrl = void 0;
4
4
  const misc_1 = require("socket-function/src/misc");
@@ -1006,4 +1006,4 @@ async function getBucketInfo(config) {
1006
1006
  }
1007
1007
  exports.getBucketInfo = getBucketInfo;
1008
1008
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXJjaGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBcmNoaXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBa0U7QUFDbEUsMkRBQXFEO0FBQ3JELDRDQUlzQjtBQUN0QixzREFBb0Q7QUFDcEQsaURBSXdCO0FBQ3hCLCtDQUE0QztBQUM1QyxtRUFBZ0U7QUFDaEUscURBQXdGO0FBRXhGLDJEQUF5RjtBQUV6RixpREFBK0Q7QUFDL0Qsb0RBQWlGO0FBQ2pGLGtFQUEyRjtBQUUzRix5UUFBeVE7QUFDelEsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN4QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QywrRkFBK0Y7QUFDL0YsOEZBQThGO0FBQzlGLDBGQUEwRjtBQUMxRixNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN4Qyx1RUFBdUU7QUFDdkUsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFDOUIsZ0dBQWdHO0FBQ2hHLDREQUE0RDtBQUM1RCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxJ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VSxhQUFhLENBQUMsTUFBdUI7SUFDdkQsNkdBQTZHO0lBQzdHLElBQUksTUFBTSxHQUFHLElBQUksK0JBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUEsOEJBQWUsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RILE9BQU8sTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUpELHNDQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc29ydCwgd2F0Y2hTbG93UHJvbWlzZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7XG4gICAgSUFyY2hpdmVzLCBSZW1vdGVDb25maWcsIFJlbW90ZUNvbmZpZ0Jhc2UsIFNvdXJjZUNvbmZpZyxcbiAgICBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzQ29uZmlnLCBBcmNoaXZlc1N5bmNTdGF0dXMsIENoYW5nZXNBZnRlckNvbmZpZywgRGVsQ29uZmlnLCBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIE1vdmVGaWxlQ29uZmlnLCBTZXRDb25maWcsIFNldExhcmdlRmlsZUNvbmZpZywgU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1csXG4gICAgU1RPUkFHRV9XUk9OR19ST1VURSwgU1RPUkFHRV9OT1RfQ09ORklHVVJFRCwgRlVMTF9ST1VURSwgVkFSSUFCTEVfU0hBUkQsIExBUkdFX1NFVF9USFJFU0hPTEQsIGJ1ZmZlckNodW5rU3RyZWFtLCB2YWxpZGF0ZUZpbGVOYW1lLFxufSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBjb3B5QXJjaGl2ZUZpbGUgfSBmcm9tIFwiLi4vYXJjaGl2ZUhlbHBlcnNcIjtcbmltcG9ydCB7XG4gICAgUk9VVElOR19GSUxFLCBwYXJzZUhvc3RlZFVybCwgcGFyc2VCYWNrYmxhemVVcmwsIHBhcnNlUm91dGluZ0RhdGEsIGFzc2VydFZhbGlkUmVtb3RlQ29uZmlnLFxuICAgIG5vcm1hbGl6ZVJlbW90ZUNvbmZpZywgbm9ybWFsaXplU291cmNlLFxuICAgIGdldFJvdXRlLCByb3V0ZUNvbnRhaW5zLCBwYXJzZVZhcmlhYmxlUm91dGUsIGdldEJ1Y2tldEJhc2VVcmwsIGJ1aWxkRmlsZVVybCxcbn0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1VybCB9IGZyb20gXCIuL0FyY2hpdmVzVXJsXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IEFyY2hpdmVzUmVtb3RlLCBwYXJzZVN0b3JhZ2VVcmwsIGF1dGhlbnRpY2F0ZVN0b3JhZ2UgfSBmcm9tIFwiLi9BcmNoaXZlc1JlbW90ZVwiO1xuaW1wb3J0IHsgU2VydmVyQnVja2V0SW5mbywgQWN0aXZlQnVja2V0SW5mbyB9IGZyb20gXCIuL3N0b3JhZ2VTZXJ2ZXJTdGF0ZVwiO1xuaW1wb3J0IHsgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQgfSBmcm9tIFwiLi9zdG9yYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgU291cmNlV3JhcHBlciB9IGZyb20gXCIuL3NvdXJjZVdyYXBwZXJcIjtcbmltcG9ydCB7IENoYWluU3RhdGUsIENoYWluU3RhdGVNYW5hZ2VyIH0gZnJvbSBcIi4vY2hhaW5TdGFydHVwXCI7XG5pbXBvcnQgeyBMb2dGaWxlSW5mbywgZGVjb2RlTG9nRmlsZSwgY3JlYXRlTG9nU2VhcmNoZXIgfSBmcm9tIFwiLi4vU3RyZWFtaW5nTG9nc1wiO1xuaW1wb3J0IHsgZm9ybWF0VGltZSwgZm9ybWF0RGF0ZVRpbWVEZXRhaWxlZCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5cbi8vIEhvdyBtYW55IGV4dHJhIGZ1bGwgcGFzc2VzIG92ZXIgdGhlIHNvdXJjZXMgZmFsbGJhY2sgZGlzcGF0Y2ggbWFrZXMgd2hlbiBFVkVSWSBzb3VyY2UgaW4gYSBwYXNzIGZhaWxlZCwgYmVmb3JlIHRoZSBvcGVyYXRpb24gdGhyb3dzIChzZWUgR2V0Q29uZmlnLnJldHJpZXMpIC0gbW9zdCByZXF1ZXN0cyBzaG91bGRuJ3QgZmFpbCBhdCBhbGwsIHNvIGEgY291cGxlIG9mIGJsYW5rZXQgcmV0cmllcyBidXlzIGF2YWlsYWJpbGl0eSBmb3IgYWxtb3N0IG5vdGhpbmdcbmNvbnN0IERFRkFVTFRfRkFMTEJBQ0tfUkVUUklFUyA9IDM7XG5jb25zdCBGQUxMQkFDS19SRVRSWV9ERUxBWSA9IDIgKiAxMDAwO1xuY29uc3QgV1JPTkdfVEFSR0VUX0JPVU5EQVJZX1dJTkRPVyA9IDMwICogMTAwMDtcbmNvbnN0IFdST05HX1RBUkdFVF9CT1VOREFSWV9SRVRSWV9ERUxBWSA9IDE1ICogMTAwMDtcbmNvbnN0IENPTkZJR19SRUZSRVNIX1RIUk9UVExFID0gMzAgKiAxMDAwO1xuY29uc3QgUFJJTUFSWV9SRVRSWV9USU1FT1VUID0gMzAgKiAxMDAwO1xuY29uc3QgUFJJTUFSWV9SRVRSWV9ERUxBWSA9IDIgKiAxMDAwO1xuY29uc3QgQ09WRVJJTkdfUkVUUllfVElNRU9VVCA9IDMwICogMTAwMDtcbmNvbnN0IENPVkVSSU5HX1JFVFJZX0RFTEFZID0gNSAqIDEwMDA7XG4vLyBBIHJlYWQgd2FpdHMgdGhpcyBsb25nIGZvciBpdHMgRklSU1QgY2h1bmssIGFuZCB0aGUgd2luZG93IGdyb3dzIHRvIENIVU5LX1RJTUVPVVRfTUFYIGFzIHRoZVxuLy8gZG93bmxvYWQgZ29lcyBvbiAtIHRoZSBmdXJ0aGVyIGluIHdlIGFyZSwgdGhlIG1vcmUgYSByZXN0YXJ0IGNvc3RzLCBzbyB0aGUgbW9yZSBwYXRpZW5jZSBpc1xuLy8gd29ydGggaXQuIE5vdCBzaXplIGJhc2VkOiB0aGUgd2luZG93IGNvdmVycyBvbmUgY2h1bmssIGFuZCBmaW5pc2hpbmcgYSBjaHVuayByZXNldHMgaXQuXG5jb25zdCBDSFVOS19USU1FT1VUX1NUQVJUID0gNjAgKiAxMDAwO1xuY29uc3QgQ0hVTktfVElNRU9VVF9NQVggPSA1ICogNjAgKiAxMDAwO1xuLy8gSG93IG1hbnkgY2h1bmtzIHRoZSB3aW5kb3cgdGFrZXMgdG8gZ3JvdyBmcm9tIFNUQVJUIHRvIE1BWCwgbGluZWFybHlcbmNvbnN0IENIVU5LX1RJTUVPVVRfUkFNUCA9IDEwO1xuLy8gVGhlIGZpcnN0IHJlYWQgYXNrcyBmb3IgdGhpcyBtdWNoLiBBbnl0aGluZyBzbWFsbGVyIGNvbWluZyBiYWNrIElTIHRoZSB3aG9sZSBmaWxlLCBzbyBhIHNtYWxsXG4vLyBmaWxlIGNvc3RzIGV4YWN0bHkgb25lIHJlcXVlc3QgYW5kIG5ldmVyIHRvdWNoZXMgZ2V0SW5mby5cbmNvbnN0IENIVU5LX0ZJUlNUX1NJWkUgPSAxMDI0ICogMTAyNDtcbi8vIENodW5rcyBkb3VibGUgZnJvbSBDSFVOS19GSVJTVF9TSVpFIHVwIHRvIHRoaXMsIHNvIGEgYmlnIGZpbGUgc3RvcHMgcGF5aW5nIHBlci1yZXF1ZXN0IGxhdGVuY3lcbmNvbnN0IENIVU5LX01BWF9TSVpFID0gMzIgKiAxMDI0ICogMTAyNDtcbi8vIEEgZmlsZSByZXdyaXR0ZW4gdW5kZXIgdXMgaXMgcmVhZCBhZ2FpbiBmcm9tIHRoZSBzdGFydC4gQWZ0ZXIgdGhpcyBtYW55IGl0IGlzIG5vdCB3b3J0aCBjaGFzaW5nLFxuLy8gYW5kIHRoZSBwbGFpbiB1bnJhbmdlZCByZWFkIC0gb25lIHJlcXVlc3QsIG9uZSB2ZXJzaW9uLCBubyBhc3NlbWJseSAtIGlzIHRoZSB3YXkgdG8gZ2V0IGl0LlxuY29uc3QgTUFYX01PRElGSUVEX1JFVFJJRVMgPSAzO1xuLy8gVXBsb2FkcyBzdGlsbCBnZXQgb25lIGRlYWRsaW5lIHNpemVkIGZyb20gdGhlIGJ5dGVzIHRoZXkgY2Fycnk6IGEgZmxhdCBiYXNlIHBsdXMgdGhlIHRyYW5zZmVyXG4vLyBhdCBhIHZlcnkgZ2VuZXJvdXMgYXNzdW1lZCByYXRlLCBzbyBhIHRpbnkgdXBsb2FkIHN0aWxsIGdldHMgdGhlIGZ1bGwgYmFzZSB3aW5kb3dcbmNvbnN0IFNNQVJUX1RJTUVPVVRfVVBMT0FEX0JBU0UgPSA2MCAqIDEwMDA7XG5jb25zdCBTTUFSVF9USU1FT1VUX1VQTE9BRF9CWVRFU19QRVJfU0VDT05EID0gMjU2ICogMTAyNDtcbi8vIE1hcmtlciBpbiB0aW1lb3V0IGVycm9ycywgc28gdGhlIHJlYWQgbG9vcCBjYW4gbG9nIHRoZW0gYW5kIGNvbnRpbnVlIHdpdGggdGhlIG90aGVyIHNvdXJjZXMgKGEgY29ubmVjdGVkIHNvdXJjZSdzIG90aGVyIGVycm9ycyBzdGlsbCB0aHJvdylcbmNvbnN0IFNNQVJUX1RJTUVPVVRfTUFSS0VSID0gXCJBUkNISVZFU19TTUFSVF9USU1FT1VUX2M0MWE5ZFwiO1xuXG4vLyBTaXplcyBhIGdlbmVyb3VzIHBlci1hdHRlbXB0IGRlYWRsaW5lIGZvciBhIHNldC1zdHlsZSBjYWxsLCBmcm9tIHRoZSBieXRlcyBpdCBhbHJlYWR5IGtub3dzIGl0IGlzIHNlbmRpbmcuXG50eXBlIFNtYXJ0VGltZW91dCA9IHtcbiAgICB1cGxvYWRCeXRlcz86IG51bWJlcjtcbiAgICAvLyBOYW1lcyB0aGUgb3BlcmF0aW9uIGluIHRpbWVvdXQgZXJyb3JzIC0gd2l0aG91dCBpdCBhIGRlbGV0aW9uIChhIHRvbWJzdG9uZSB3cml0ZSwgdXBsb2FkQnl0ZXMgMCkgcmVhZHMgYXMgXCJVcGxvYWQgb2YgMCBieXRlc1wiLCB3aGljaCBsb29rcyBsaWtlIGEgYnVnIHJhdGhlciB0aGFuIGEgZGVsZXRlXG4gICAgbGFiZWw/OiBzdHJpbmc7XG59O1xuXG4vKiogVGhlIHdpbmRvdyBmb3IgdGhlIGNodW5rIGF0IHRoaXMgaW5kZXg6IENIVU5LX1RJTUVPVVRfU1RBUlQsIGdyb3dpbmcgbGluZWFybHkgdG9cbiAgICBDSFVOS19USU1FT1VUX01BWCBvdmVyIENIVU5LX1RJTUVPVVRfUkFNUCBjaHVua3MuICovXG5mdW5jdGlvbiBjaHVua1RpbWVvdXQoY2h1bmtJbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJhbXAgPSBNYXRoLm1pbihjaHVua0luZGV4LCBDSFVOS19USU1FT1VUX1JBTVApIC8gQ0hVTktfVElNRU9VVF9SQU1QO1xuICAgIHJldHVybiBDSFVOS19USU1FT1VUX1NUQVJUICsgKENIVU5LX1RJTUVPVVRfTUFYIC0gQ0hVTktfVElNRU9VVF9TVEFSVCkgKiByYW1wO1xufVxuXG4vKiogVGhlIGFkZHJlc3MsIHBvcnQsIGFjY291bnQsIGFuZCBidWNrZXQgbmFtZSBhIGJ1Y2tldCByb3V0aW5nIFVSTCBhZGRyZXNzZXMuIFRocm93cyB3aGVuIHRoZSBVUkwgaXNuJ3QgYSBob3N0ZWQgYnVja2V0IHJvdXRpbmcgVVJMIChodHRwczovL2hvc3Q6cG9ydC9maWxlLzxhY2NvdW50Pi88YnVja2V0TmFtZT4vc3RvcmFnZS9zdG9yYWdlcm91dGluZy5qc29uKS4gKi9cbmV4cG9ydCB7IHBhcnNlSG9zdGVkVXJsLCBwYXJzZUJhY2tibGF6ZVVybCwgZ2V0QnVja2V0QmFzZVVybCB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuXG4vKiogQSBjbGllbnQgZm9yIE9ORSBzb3VyY2UgLSBzZWUgc3RvcmVTb3VyY2VzLnRzLiBSZS1leHBvcnRlZCBoZXJlIGJlY2F1c2UgYSBjaGFpbiBpcyBidWlsdCBvdXQgb2YgdGhlbS4gKi9cbmV4cG9ydCB7IGNyZWF0ZUFwaUFyY2hpdmVzIH0gZnJvbSBcIi4vc3RvcmVTb3VyY2VzXCI7XG5cbmV4cG9ydCB0eXBlIEFyY2hpdmVzQ2hhaW5PcHRpb25zID0ge1xuICAgIC8qKiBPdXRzaWRlIG9mIG5vZGUgd2UgZGVmYXVsdCB0byByZWFkLW9ubHkgZG93bmxvYWRzIG92ZXIgdGhlIHB1YmxpYyBVUkxzIChubyBBUEkgY29ubmVjdGlvbikgd2hlbiB0aGUgY29uZmlnIGhhcyBwdWJsaWMgc291cmNlcy4gU2V0IHRoaXMgdG8gY29ubmVjdCB0byB0aGUgQVBJIGFueXdheSAtIG5lZWRlZCBmb3Igd3JpdGluZywgbGlzdGluZywgYW5kIGFueSBvdGhlciBvcGVyYXRpb24gdGhlIHBsYWluIFVSTCBmb3JtIGNhbm5vdCBzZXJ2ZS4gKi9cbiAgICBkaXJlY3RDb25uZWN0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGNvbmZpZ1dpbmRvd0N1cnJlbnQoY29uZmlnOiBTb3VyY2VDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgW3N0YXJ0LCBlbmRdID0gY29uZmlnLnZhbGlkV2luZG93O1xuICAgIHJldHVybiBzdGFydCA8PSBub3cgJiYgbm93IDwgZW5kO1xufVxuXG5mdW5jdGlvbiBtYXRlcmlhbGl6ZVNoYXJkS2V5KGtleTogc3RyaW5nLCB0YXJnZXQ6IFNvdXJjZVdyYXBwZXIpOiBzdHJpbmcge1xuICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0YXJnZXQuY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEU7XG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKFZBUklBQkxFX1NIQVJELCBWQVJJQUJMRV9TSEFSRCArIFwiX1wiICsgKHN0YXJ0ICsgTWF0aC5yYW5kb20oKSAqIChlbmQgLSBzdGFydCkpKTtcbn1cblxuLyoqIENvdmVycyB0aGUgd2hvbGUga2V5IHNwYWNlIHdpdGggdGhlIEFVVEhPUklUQVRJVkUgc291cmNlczogZm9yIGVhY2ggdW5jb3ZlcmVkIHBvaW50LCB0aGUgRklSU1Qgc291cmNlIGluIGNvbmZpZyBvcmRlciB3aG9zZSByb3V0ZSBjb250YWlucyBpdCAtIHRoZSBleGFjdCBzZWxlY3Rpb24gZXZlcnkgcmVhZCBhbmQgd3JpdGUgdXNlcywgc28gbGlzdGluZ3MgY29tZSBmcm9tIHRoZSBzYW1lIG5vZGVzIHdyaXRlcyB3ZW50IHRvIChyZWFkLXlvdXItd3JpdGVzKS4gTmV2ZXIgXCJmZXdlc3RcIiBvciBcIndpZGVzdFwiOiBwcmVmZXJyaW5nIGEgd2lkZSByZWFkIHJlcGxpY2Egb3ZlciB0aGUgcm91dGVkIHdyaXRlIHNoYXJkcyB3b3VsZCBzZXJ2ZSBsaXN0aW5ncyBmcm9tIGEgbm9kZSB0aGF0IG9ubHkgaGFzIHRoZSBkYXRhIHNlY29uZC1oYW5kLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBjYW5kaWRhdGVzIGxlYXZlIGEgZ2FwLiAqL1xuZnVuY3Rpb24gY292ZXJSb3V0ZXMoY2FuZGlkYXRlczogU291cmNlV3JhcHBlcltdKTogU291cmNlV3JhcHBlcltdIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY2hvc2VuOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICBsZXQgY292ZXJlZCA9IDA7XG4gICAgd2hpbGUgKGNvdmVyZWQgPCAxKSB7XG4gICAgICAgIGxldCBuZXh0ID0gY2FuZGlkYXRlcy5maW5kKHggPT4gcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgY292ZXJlZCkpO1xuICAgICAgICBpZiAoIW5leHQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNob3Nlbi5wdXNoKG5leHQpO1xuICAgICAgICBsZXQgWywgZW5kXSA9IG5leHQuY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEU7XG4gICAgICAgIGNvdmVyZWQgPSBlbmQ7XG4gICAgfVxuICAgIHJldHVybiBjaG9zZW47XG59XG5cbi8qKiBSRUFEUyBPTkxZLiBEcm9wcyBzb3VyY2VzIHRoYXQgcmVjZW50bHkgZmFpbGVkIHdoaWxlIGRpc2Nvbm5lY3RlZCAtIHVubGVzcyB0aGF0IHdvdWxkIGxlYXZlIG5vdGhpbmcsIGluIHdoaWNoIGNhc2UgYSBkb3duIHNvdXJjZSBpcyBzdGlsbCBiZXR0ZXIgdGhhbiBubyBzb3VyY2UsIGFuZCB3ZSByZXRyeSBpdCBpbW1lZGlhdGVseS4gTmV2ZXIgYXBwbGllcyB0byB3cml0ZXMgKG9yIGZhbGxiYWNrczpmYWxzZSByZWFkcyBvZiB0aGUgd3JpdGUgdGFyZ2V0KTogdGhlIHdyaXRlIG5vZGUgaXMgc3RyaWN0bHkgdGhlIEZJUlNUIHNvdXJjZSBtYXRjaGluZyB0aGUgcm91dGUgYW5kIHZhbGlkIHdpbmRvdywgcmVnYXJkbGVzcyBvZiBjb25uZWN0aXZpdHkgLSBhIGNsaWVudCdzIGZsYWt5IHZpZXcgb2YgdGhlIG5ldHdvcmsgbXVzdCBuZXZlciBzY2F0dGVyIHdyaXRlcyBhY3Jvc3MgdGhlIGNoYWluIChzcGVjOiBjbGllbnQgd3JpdGVzIGFyZSBjb25zaXN0ZW50LCBjbGllbnQgcmVhZHMgYXJlIHJlZHVuZGFudCkuICovXG5mdW5jdGlvbiBwcmVmZXJVc2FibGUoc291cmNlczogU291cmNlV3JhcHBlcltdKTogU291cmNlV3JhcHBlcltdIHtcbiAgICBsZXQgdXNhYmxlID0gc291cmNlcy5maWx0ZXIoeCA9PiAheC5pc09uQ29vbGRvd24oKSk7XG4gICAgcmV0dXJuIHVzYWJsZS5sZW5ndGggJiYgdXNhYmxlIHx8IHNvdXJjZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0NoYWluIGltcGxlbWVudHMgSUFyY2hpdmVzIHtcbiAgICAvLyBUaGUgY2hhaW4ncyBzdGF0ZSwgYW5kIGV2ZXJ5dGhpbmcgYWJvdXQgaGF2aW5nIG9uZSAoaW5pdCArIGl0cyByZXRyeSwgY29uZmlnIHBvbGxpbmcvYWRvcHRpb24sIGF2YWlsYWJpbGl0eSByZWNoZWNrcywgdGhlIGNvbmZpZyByZXdyaXRlIGxvb3ApLCBsaXZlcyBpbiB0aGUgbWFuYWdlciAtIHdoYXQgc3RheXMgaW4gdGhpcyBjbGFzcyBpcyBkaXNwYXRjaCBvdmVyIHRoYXQgc3RhdGVcbiAgICBwcml2YXRlIHN0YXRlOiBDaGFpblN0YXRlTWFuYWdlcjtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogUmVtb3RlQ29uZmlnIHwgUmVtb3RlQ29uZmlnQmFzZSwgb3B0aW9ucz86IEFyY2hpdmVzQ2hhaW5PcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgQ2hhaW5TdGF0ZU1hbmFnZXIoe1xuICAgICAgICAgICAgY29uZmlndXJlZDogbm9ybWFsaXplUmVtb3RlQ29uZmlnKGNvbmZpZyksXG4gICAgICAgICAgICBkZWJ1Z05hbWU6ICgpID0+IHRoaXMuZ2V0RGVidWdOYW1lKCksXG4gICAgICAgICAgICBkaXJlY3RDb25uZWN0OiBvcHRpb25zPy5kaXJlY3RDb25uZWN0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCkge1xuICAgICAgICBsZXQgdXJscyA9IHRoaXMuc3RhdGUuYWN0aXZlQ29uZmlnLnNvdXJjZXMubWFwKHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgeCB8fCAoeCBhcyBTb3VyY2VDb25maWcpLnVybCk7XG4gICAgICAgIHJldHVybiBgY2hhaW4gJHt1cmxzLmpvaW4oXCIsIFwiKX1gO1xuICAgIH1cblxuICAgIC8vIFRoZSBPTkUgZGlzcGF0Y2ggZm9yIGV2ZXJ5IG9wZXJhdGlvbiwgb24gT05FIGZsYWc6IGZhbGxiYWNrcyBmYWxzZSAtPiB0aGUgcHJpbWFyeSBub2RlIG9ubHksIHZpYSBydW5QcmltYXJ5OyBmYWxsYmFja3MgdHJ1ZSAtPiB0aGUgc2hhcmVkIGZhbGxiYWNrIGxvb3AsIHRyeWluZyBzb3VyY2VzIGluIGNvbmZpZyBvcmRlciAob3IgbGF0ZW5jeSBvcmRlciBmb3IgZmFzdCByZWFkcykgYW5kIG1vdmluZyBvbiB3aGVuZXZlciBvbmUgZmFpbHMuIEV2ZXJ5IGNhbGxlciBzZXRzIGZhbGxiYWNrcyB1bmNvbmRpdGlvbmFsbHkgLSByZWFkcyB0dXJuIGl0IG9uIHVubGVzcyB0aGUgY2FsbGVyIHNhaWQgbm9GYWxsYmFja3MsIHdyaXRlcyB0dXJuIGl0IG9mZiB1bmxlc3MgdGhlIGNhbGxlciBzYWlkIGZhbGxiYWNrcy4gV3JpdGVzIGluIHRoZSBsb29wIGRpZmZlciBmcm9tIHJlYWRzIG9ubHkgaW4gY2FsbGluZyBzb3VyY2Uud3JpdGUuXG4gICAgcHJpdmF0ZSBhc3luYyBydW48VD4oc3RhdGU6IENoYWluU3RhdGUsIGNvbmZpZzogeyBmYWxsYmFja3M6IGJvb2xlYW47IGFwaU9ubHk/OiBib29sZWFuOyB3cml0ZT86IGJvb2xlYW47IHJvdXRlPzogbnVtYmVyOyByZXRyaWVzPzogbnVtYmVyOyBmYXN0PzogYm9vbGVhbjsgdGltZW91dD86IFNtYXJ0VGltZW91dCB9LCBydW46IChhcmNoaXZlczogSUFyY2hpdmVzLCBzb3VyY2VVcmw6IHN0cmluZykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAoY29uZmlnLmZhc3QgJiYgIWNvbmZpZy5mYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFzdCByZXF1aXJlcyBmYWxsYmFja3MgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHdpdGhvdXQgZmFsbGJhY2tzIG9ubHkgb25lIHNvdXJjZSAodGhlIHdyaXRlIG5vZGUpIGlzIGNvbnNpZGVyZWQsIHNvIHRoZXJlIGlzIG5vIG9yZGVyIHRvIHNwZWVkIHVwYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb25maWcuZmFsbGJhY2tzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5QcmltYXJ5KGNvbmZpZywgcnVuKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmV0cmllcyA9IGNvbmZpZy5yZXRyaWVzO1xuICAgICAgICBpZiAocmV0cmllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXRyaWVzID0gREVGQVVMVF9GQUxMQkFDS19SRVRSSUVTO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJldHJpZWRXcm9uZ1RhcmdldCA9IGZhbHNlO1xuICAgICAgICBsZXQgcmV0cmllZFBhc3NlcyA9IDA7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBzdGF0ZS5zb3VyY2VzLmZpbHRlcihzb3VyY2UgPT5cbiAgICAgICAgICAgICAgICAoY29uZmlnLnJvdXRlID09PSB1bmRlZmluZWQgfHwgcm91dGVDb250YWlucyhzb3VyY2UuY29uZmlnLnJvdXRlLCBjb25maWcucm91dGUpKVxuICAgICAgICAgICAgICAgICYmIGNvbmZpZ1dpbmRvd0N1cnJlbnQoc291cmNlLmNvbmZpZylcbiAgICAgICAgICAgICAgICAvLyBBIHdyaXRlLWJsb2NrZWQgc291cmNlIChyZWFkLW9ubHkgbW9kZSwgYmFja2JsYXplIHdpdGhvdXQgY3JlZGVudGlhbHMpIGNhbiBuZXZlciB0YWtlIGEgd3JpdGUsIHNvIGl0IGlzIG5vdCBhIGZhbGxiYWNrIGNhbmRpZGF0ZSAtIGl0cyB0aHJvdyB3b3VsZCBlbmQgdGhlIHBhc3MgZWFybHkgKGl0IGNvdW50cyBhcyBjb25uZWN0ZWQpXG4gICAgICAgICAgICAgICAgJiYgIShjb25maWcud3JpdGUgJiYgKHNvdXJjZS53cml0ZUJsb2NrZWQgfHwgIXNvdXJjZS5hcGkpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBvcmRlcmVkID0gcHJlZmVyVXNhYmxlKGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5mYXN0KSB7XG4gICAgICAgICAgICAgICAgb3JkZXJlZCA9IFsuLi5vcmRlcmVkXTtcbiAgICAgICAgICAgICAgICBzb3J0KG9yZGVyZWQsIHggPT4geC5nZXRMYXRlbmN5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHdyb25nVGFyZ2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygb3JkZXJlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXBpT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwaSA9IHNvdXJjZS5hcGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfSBoYXMgVVJMLW9ubHkgYWNjZXNzLCB3aGljaCBjYW5ub3Qgc2VydmUgdGhpcyBvcGVyYXRpb25gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4oYXBpLCBzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbHlTbWFydFRpbWVvdXQoY29uZmlnLnRpbWVvdXQsIHNvdXJjZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy53cml0ZSkgcmV0dXJuIHNvdXJjZS53cml0ZShhcmNoaXZlcyA9PiBydW4oYXJjaGl2ZXMsIHNvdXJjZS5jb25maWcudXJsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnJlYWQoYXJjaGl2ZXMgPT4gcnVuKGFyY2hpdmVzLCBzb3VyY2UuY29uZmlnLnVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU01BUlRfVElNRU9VVF9NQVJLRVIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTb3VyY2UgdGltZWQgb3V0IGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9LCBjb250aW51aW5nIHdpdGggdGhlIG5leHQgc291cmNlOiAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgd3Jvbmctd2luZG93L3JvdXRlL3VuY29uZmlndXJlZCByZWplY3Rpb24gbWVhbnMgT1VSIGNvbmZpZyBkaXNhZ3JlZXMgd2l0aCB0aGUgc2VydmVyJ3MsIHNvIGV2ZXJ5IHNvdXJjZSB3ZSdkIGZhbGwgYmFjayB0byBpcyBqdWRnZWQgYnkgdGhlIHNhbWUgc3RhbGUgY29uZmlnIC0gcmVmcmVzaCBpdCBhbmQgcmVzdGFydCB0aGUgcGFzcyBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgICAgIGlmICgobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1ZBTElEX1dJTkRPVykgfHwgbWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1JPVVRFKSB8fCBtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0NPTkZJR1VSRUQpKSAmJiAhcmV0cmllZFdyb25nVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVkV3JvbmdUYXJnZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JvbmdUYXJnZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlV3JvbmdUYXJnZXRSZXRyeShzdGF0ZSwgbWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1ZBTElEX1dJTkRPVykgJiYgXCJ3aW5kb3dcIiB8fCBtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfV1JPTkdfUk9VVEUpICYmIFwicm91dGVcIiB8fCBcInVuY29uZmlndXJlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrcyBtZWFucyBhdmFpbGFiaWxpdHkgYWJvdmUgZXZlcnl0aGluZzogQU5ZIGZhaWxpbmcgc291cmNlIC0gZG93biwgbWlzY29uZmlndXJlZCwgcmVqZWN0aW5nLCBtaWQtc3dpdGNob3ZlciAtIGlzIHNraXBwZWQgYW5kIHRoZSBuZXh0IGNvdmVyaW5nIHNvdXJjZSB0YWtlcyB0aGUgY2FsbC4gT25seSBldmVyeSBzb3VyY2UgZmFpbGluZyB0aHJvd3MgKGJlbG93KS5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU291cmNlIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgZmFsbGluZyBiYWNrIHRvIHRoZSBuZXh0IHNvdXJjZTogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5pc0Nvbm5lY3RlZCgpKSBzb3VyY2Uubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3cm9uZ1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhdGUucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQmxhbmtldCByZXRyeSBvZiB0aGUgd2hvbGUgcGFzcywgQU5ZIGVycm9yIChzZWUgR2V0Q29uZmlnLnJldHJpZXMpOiBtb3N0IHJlcXVlc3RzIHNob3VsZG4ndCBmYWlsIGF0IGFsbCwgc28gcmV0cnlpbmcgdGhlIHJhcmUgZmFpbHVyZSAtIHdoYXRldmVyIGl0IHdhcyAtIGJ1eXMgYXZhaWxhYmlsaXR5IGZvciBhbG1vc3Qgbm90aGluZ1xuICAgICAgICAgICAgaWYgKHJldHJpZWRQYXNzZXMgPCByZXRyaWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0cmllZFBhc3NlcysrO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXZlcnkgc291cmNlIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSR7Y29uZmlnLnJvdXRlICE9PSB1bmRlZmluZWQgJiYgYCAocm91dGUgJHtjb25maWcucm91dGV9KWAgfHwgXCJcIn07IHJldHJ5aW5nIHRoZSB3aG9sZSBwYXNzIGluICR7RkFMTEJBQ0tfUkVUUllfREVMQVkgLyAxMDAwfXMgKHJldHJ5ICR7cmV0cmllZFBhc3Nlc30gb2YgJHtyZXRyaWVzfSlgKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBkZWxheShGQUxMQkFDS19SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGF0ZS5yZWNoZWNrQXZhaWxhYmlsaXR5KCk7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlLmdldFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFsbCBzb3VyY2VzIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSR7Y29uZmlnLnJvdXRlICE9PSB1bmRlZmluZWQgJiYgYCAocm91dGUgJHtjb25maWcucm91dGV9KWAgfHwgXCJcIn0gKGFmdGVyICR7cmV0cmllZFBhc3Nlc30gcmV0ciR7cmV0cmllZFBhc3NlcyA9PT0gMSAmJiBcInlcIiB8fCBcImllc1wifSk6ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIikgfHwgXCJubyBzb3VyY2VzIGF2YWlsYWJsZVwifWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gV3JpdGVzIGFuZCBmYWxsYmFja3M6ZmFsc2UgcmVhZHMgYXJlIHRoZSBzYW1lIGNhc2U6IHRha2UgdGhlIGF1dGhvcml0YXRpdmUgbm9kZSAtIHN0cmljdGx5IHRoZSBmaXJzdCBzb3VyY2UgbWF0Y2hpbmcgdGhlIHJvdXRlIGFuZCB2YWxpZCB3aW5kb3csIHdoZXRoZXIgaXQgaXMgdXAgb3IgZG93biAtIGFuZCB1c2UgaXQsIG5ldmVyIGZhbGxpbmcgYmFjayB0byBhbm90aGVyIG5vZGUuIEl0J3MgaW1wb3J0YW50IHRoYXQgd3JpdGluZyBhbHdheXMgYWNjZXNzZXMgdGhlIHNhbWUgbm9kZSBldmVyeXdoZXJlLCBldmVuIGlmIHRoYXQgbm9kZSBpcyBkb3duIC0gb3RoZXJ3aXNlIHdlJ3JlIGp1c3Qgd3JpdGluZyBpbnRvIHRoZSB2b2lkLCBhbmQgd2hvIGtub3dzIGlmIHRoZSB3cml0ZXMgd2lsbCBldmVuIGJlIGFjY2VwdGVkLCBvciBjbG9iYmVyZWQsIG9yIHdoYXQ7IGFuZCBmYWxsYmFja3M6ZmFsc2UgcmVhZHMgd2FudCB0aGUgc2FtZSBub2RlIHByZWNpc2VseSBiZWNhdXNlIGl0IGlzIHRoZSBvbmUgd3JpdGVzIHRhcmdldC4gQSBzbG93IGNhbGwgaXMgYWxtb3N0IGFsd2F5cyBiZXR0ZXIgdGhhbiB0aHJvd2luZywgc28gYSBmYWlsaW5nIHByaW1hcnkgaXMgcmV0cmllZCAodGhlIFNBTUUgbm9kZSwgcmUtcmVzb2x2ZWQgZWFjaCBhdHRlbXB0IHNpbmNlIGEgY29uZmlnIHJlZnJlc2ggY2FuIGNoYW5nZSB3aGljaCBzb3VyY2UgaXMgcHJpbWFyeSkgdW50aWwgdGhlIGRlYWRsaW5lLCB0aGVuIHRocm93cy5cbiAgICBwcml2YXRlIGFzeW5jIHJ1blByaW1hcnk8VD4oY29uZmlnOiB7IHdyaXRlPzogYm9vbGVhbjsgcm91dGU/OiBudW1iZXI7IHRpbWVvdXQ/OiBTbWFydFRpbWVvdXQgfSwgcnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcywgc291cmNlVXJsOiBzdHJpbmcpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHJldHJpZWRXcm9uZ1dpbmRvdyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmV0cmllZFdyb25nUm91dGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJldHJpZWROb3RDb25maWd1cmVkID0gZmFsc2U7XG4gICAgICAgIGxldCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBQUklNQVJZX1JFVFJZX1RJTUVPVVQ7XG4gICAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIGxldCBhdHRlbXB0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHN0YXRlLnNvdXJjZXMuZmluZCh4ID0+IGNvbmZpZ1dpbmRvd0N1cnJlbnQoeC5jb25maWcpICYmIChjb25maWcucm91dGUgPT09IHVuZGVmaW5lZCB8fCByb3V0ZUNvbnRhaW5zKHguY29uZmlnLnJvdXRlLCBjb25maWcucm91dGUpKSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdmFsaWQgc291cmNlIGNvdmVycyB0aGlzIHJlcXVlc3QuIE5vIHNvdXJjZSBpcyB0aGUgJHtjb25maWcud3JpdGUgJiYgXCJ3cml0ZSB0YXJnZXRcIiB8fCBcInByaW1hcnkgcmVhZCBzb3VyY2VcIn0gZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0ke2NvbmZpZy5yb3V0ZSAhPT0gdW5kZWZpbmVkICYmIGAgKHJvdXRlICR7Y29uZmlnLnJvdXRlfSlgIHx8IFwiXCJ9IChldmVyeSBzb3VyY2UgaXMgb3V0c2lkZSBpdHMgdmFsaWQgd2luZG93IG9yIG91dHNpZGUgdGhlIGtleSdzIHJvdXRlKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcmltYXJ5ID0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFwcGx5U21hcnRUaW1lb3V0KGNvbmZpZy50aW1lb3V0LCBwcmltYXJ5LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcud3JpdGUpIHJldHVybiBwcmltYXJ5LndyaXRlKGFyY2hpdmVzID0+IHJ1bihhcmNoaXZlcywgcHJpbWFyeS5jb25maWcudXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5LnJlYWQoYXJjaGl2ZXMgPT4gcnVuKGFyY2hpdmVzLCBwcmltYXJ5LmNvbmZpZy51cmwpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1cpICYmICFyZXRyaWVkV3JvbmdXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cmllZFdyb25nV2luZG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlV3JvbmdUYXJnZXRSZXRyeShzdGF0ZSwgXCJ3aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1JPVVRFKSAmJiAhcmV0cmllZFdyb25nUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cmllZFdyb25nUm91dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlLCBcInJvdXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9OT1RfQ09ORklHVVJFRCkgJiYgIXJldHJpZWROb3RDb25maWd1cmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHJpZWROb3RDb25maWd1cmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlV3JvbmdUYXJnZXRSZXRyeShzdGF0ZSwgXCJ1bmNvbmZpZ3VyZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICYmICF0YXJnZXQuaXNDb25uZWN0ZWQoKSkgdGFyZ2V0Lm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWcud3JpdGUgJiYgdGFyZ2V0ICYmIChhdHRlbXB0ID09PSAxIHx8IGF0dGVtcHQgJSAzID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIHRyeSB0aGUgSFRUUCByZXF1ZXN0OiBodHRwc1JlcXVlc3QgaGFzIGJldHRlciBETlMgcmV0cnlpbmcgY2FwYWJpbGl0aWVzIHRoYW4gb3VyIFdlYlNvY2tldCBzZXJ2ZXIgKHdlIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgaXQpLCBzbyBqdXN0IHVzaW5nIGl0IGNhbiBmaXggc29tZSBETlMgaXNzdWVzLCB3aGljaCBjYW4gcHJvcGFnYXRlIHRvIGZpeCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIEl0IGlzIHN0aWxsIHRoZSBwcmltYXJ5IHNvdXJjZSdzIG93biBkYXRhLCBzbyB0aGUgbm8tZmFsbGJhY2sgc2VtYW50aWNzIGhvbGQgLSBhbmQgQXJjaGl2ZXNVcmwgaGFzIG5vIHNldHVwIGNvc3QsIHNvIG1ha2luZyBvbmUgb24gdGhlIHNwb3QgaXMgZmluZS5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4odGFyZ2V0LnVybCB8fCBuZXcgQXJjaGl2ZXNVcmwoZ2V0QnVja2V0QmFzZVVybCh0YXJnZXQuY29uZmlnLnVybCkpLCB0YXJnZXQuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVzdC1lZmZvcnQ6IHRoZSBwcmltYXJ5J3MgZXJyb3IgKHRocm93biBhdCB0aGUgZGVhZGxpbmUpIGlzIHRoZSByZWFsIG9uZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChEYXRlLm5vdygpID49IGRlYWRsaW5lKSB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXQgbW9zdCBvbmUgYXR0ZW1wdCBwZXIgaW50ZXJ2YWwsIGluIGNhc2UgdGhlIGZhaWx1cmUgaXMgZmFzdFxuICAgICAgICAgICAgYXdhaXQgZGVsYXkoTWF0aC5tYXgoMCwgYXR0ZW1wdFN0YXJ0ICsgUFJJTUFSWV9SRVRSWV9ERUxBWSAtIERhdGUubm93KCkpKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhdGUucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJhY2VzIGNhbGwgYWdhaW5zdCBhIHNpemUtYmFzZWQgZGVhZGxpbmUuIFVwbG9hZHMga25vdyB0aGVpciBzaXplIHVwZnJvbnQ7IGdldHMgYXJlIGdpdmVuIFNNQVJUX1RJTUVPVVRfUFJPQkUgdG8gcHJvZHVjZSBhbnl0aGluZywgYW5kIG9ubHkgdGhlbiBpcyB0aGUgZmlsZSdzIGluZm8gZmV0Y2hlZCAoZnJvbSB0aGUgc2FtZSBzb3VyY2UsIGl0c2VsZiB0aW1lLWxpbWl0ZWQpIHRvIHNpemUgdGhlIGRlYWRsaW5lIC0gbWVhc3VyZWQgZnJvbSB0aGUgY2FsbCdzIHN0YXJ0LCBzbyBhIHNvdXJjZSB0aGF0IHdhcyBzbG93IGJlZm9yZSB0aGUgcHJvYmUgZG9lc24ndCBnZXQgdGhlIGZ1bGwgYWxsb3dhbmNlIGFnYWluLiBUaW1lZC1vdXQgY2FsbHMga2VlcCBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kICh0aGV5IGNhbm5vdCBiZSBjYW5jZWxsZWQpIGJ1dCB0aGVpciBldmVudHVhbCByZXN1bHQgaXMgaWdub3JlZC4gKi9cbiAgICBwcml2YXRlIGFzeW5jIGFwcGx5U21hcnRUaW1lb3V0PFQ+KHRpbWVvdXQ6IFNtYXJ0VGltZW91dCB8IHVuZGVmaW5lZCwgc291cmNlOiBTb3VyY2VXcmFwcGVyLCBjYWxsOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICghdGltZW91dCkgcmV0dXJuIGF3YWl0IGNhbGwoKTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGNhbGxQcm9taXNlID0gY2FsbCgpO1xuICAgICAgICAvLyBBbiBhYmFuZG9uZWQgY2FsbCBtdXN0IG5vdCBzdXJmYWNlIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gd2hlbiBpdCBldmVudHVhbGx5IGZhaWxzXG4gICAgICAgIGxldCBhYmFuZG9uID0gKCkgPT4gdm9pZCBjYWxsUHJvbWlzZS50aGVuKCgpID0+IHsgfSwgKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKHRpbWVvdXQudXBsb2FkQnl0ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gQSBmbGF0IGJhc2UgcGx1cyB0aGUgcHJlZGljdGVkIHRyYW5zZmVyIHRpbWUsIHNvIHRpbnkgdXBsb2FkcyBzdGlsbCBnZXQgdGhlIGZ1bGwgYmFzZSB3aW5kb3dcbiAgICAgICAgICAgIGxldCBhbGxvd2VkID0gU01BUlRfVElNRU9VVF9VUExPQURfQkFTRSArIHRpbWVvdXQudXBsb2FkQnl0ZXMgLyBTTUFSVF9USU1FT1VUX1VQTE9BRF9CWVRFU19QRVJfU0VDT05EICogMTAwMDtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW2NhbGxQcm9taXNlLnRoZW4odmFsdWUgPT4gKHsgdmFsdWUgfSkpLCBkZWxheShhbGxvd2VkKS50aGVuKCgpID0+IHVuZGVmaW5lZCldKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICBhYmFuZG9uKCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U01BUlRfVElNRU9VVF9NQVJLRVJ9IFVwbG9hZCB0aW1lZCBvdXQuICR7dGltZW91dC5sYWJlbCB8fCBgVXBsb2FkIG9mICR7dGltZW91dC51cGxvYWRCeXRlc30gYnl0ZXNgfSB0byAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX0gdGltZWQgb3V0IGFmdGVyICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zIChhbGxvd2VkICR7TWF0aC5yb3VuZChhbGxvd2VkKX1tczogJHtTTUFSVF9USU1FT1VUX1VQTE9BRF9CQVNFfW1zIGJhc2UgcGx1cyB0cmFuc2ZlciBhdCBhbiBhc3N1bWVkICR7U01BUlRfVElNRU9VVF9VUExPQURfQllURVNfUEVSX1NFQ09ORH0gYnl0ZXMvcylgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgY2FsbFByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqIFJ1bnMgb25lIGNhbGwgdW5kZXIgYSB3aW5kb3cgdGhhdCBjYW4gYmUgcHVzaGVkIGJhY2sgd2hpbGUgaXQgcnVucy4gVGhlIHdpbmRvdyBjb3ZlcnMgdGhlXG4gICAgICAgIG5leHQgcGllY2Ugb2Ygd29yayByYXRoZXIgdGhhbiB0aGUgd2hvbGUgY2FsbCwgc28gbm90aGluZyBoYXMgdG8gZ3Vlc3MgaG93IGxvbmcgYSB0cmFuc2ZlclxuICAgICAgICBcInNob3VsZFwiIHRha2UgZnJvbSBpdHMgc2l6ZTogYXMgbG9uZyBhcyBwaWVjZXMga2VlcCBsYW5kaW5nLCB0aGUgY2FsbCBrZWVwcyBpdHMgdGltZS5cblxuICAgICAgICBUaGUgd2FpdGluZyBpcyBhIGxvb3AgcmF0aGVyIHRoYW4gb25lIHJhY2UsIGJlY2F1c2UgYSByZWZyZXNoIHRoYXQgYXJyaXZlcyB3aGlsZSB3ZSBhcmVcbiAgICAgICAgYWxyZWFkeSB3YWl0aW5nIGhhcyB0byBtb3ZlIHRoZSBkZWFkbGluZSB3ZSBhcmUgd2FpdGluZyBvbi4gKi9cbiAgICBwcml2YXRlIGFzeW5jIGFwcGx5UmVmcmVzaGFibGVUaW1lb3V0PFQ+KFxuICAgICAgICBjb25maWc6IHsgbGFiZWw6IHN0cmluZzsgc291cmNlVXJsOiBzdHJpbmc7IHdpbmRvd01zOiBudW1iZXIgfSxcbiAgICAgICAgY2FsbDogKHJlZnJlc2g6ICh3aW5kb3dNczogbnVtYmVyKSA9PiB2b2lkKSA9PiBQcm9taXNlPFQ+LFxuICAgICk6IFByb21pc2U8VD4ge1xuICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgd2luZG93TXMgPSBjb25maWcud2luZG93TXM7XG4gICAgICAgIGxldCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB3aW5kb3dNcztcbiAgICAgICAgbGV0IHJlZnJlc2ggPSAobmV4dFdpbmRvd01zOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHdpbmRvd01zID0gbmV4dFdpbmRvd01zO1xuICAgICAgICAgICAgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgbmV4dFdpbmRvd01zO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgY2FsbFByb21pc2UgPSBjYWxsKHJlZnJlc2gpO1xuICAgICAgICAvLyBBbiBhYmFuZG9uZWQgY2FsbCBtdXN0IG5vdCBzdXJmYWNlIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gd2hlbiBpdCBldmVudHVhbGx5IGZhaWxzXG4gICAgICAgIGxldCBhYmFuZG9uID0gKCkgPT4gdm9pZCBjYWxsUHJvbWlzZS50aGVuKCgpID0+IHsgfSwgKCkgPT4geyB9KTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCByZW1haW5pbmcgPSBkZWFkbGluZSAtIERhdGUubm93KCk7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcbiAgICAgICAgICAgICAgICBhYmFuZG9uKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgJHtTTUFSVF9USU1FT1VUX01BUktFUn0gJHtjb25maWcubGFiZWx9IGZyb20gJHtjb25maWcuc291cmNlVXJsfSB0aW1lZCBvdXQgYWZ0ZXJgXG4gICAgICAgICAgICAgICAgICAgICsgYCAke0RhdGUubm93KCkgLSBzdGFydH1tczogbm90aGluZyBhcnJpdmVkIHdpdGhpbiB0aGUgbGFzdCAke01hdGgucm91bmQod2luZG93TXMpfW1zYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtjYWxsUHJvbWlzZS50aGVuKHZhbHVlID0+ICh7IHZhbHVlIH0pKSwgZGVsYXkocmVtYWluaW5nKS50aGVuKCgpID0+IHVuZGVmaW5lZCldKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxhc3RDb25maWdSZWZyZXNoID0gMDtcbiAgICBwcml2YXRlIGFzeW5jIHByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlOiBDaGFpblN0YXRlLCBraW5kOiBcIndpbmRvd1wiIHwgXCJyb3V0ZVwiIHwgXCJ1bmNvbmZpZ3VyZWRcIik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJ3aW5kb3dcIikge1xuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgbmVhckJvdW5kYXJ5ID0gc3RhdGUuc291cmNlcy5zb21lKHNvdXJjZSA9PiBzb3VyY2UuY29uZmlnLnZhbGlkV2luZG93LnNvbWUodCA9PiB0ID4gMCAmJiB0IDwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgJiYgTWF0aC5hYnModCAtIG5vdykgPD0gV1JPTkdfVEFSR0VUX0JPVU5EQVJZX1dJTkRPVykpO1xuICAgICAgICAgICAgaWYgKG5lYXJCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBXcml0ZSByZWplY3RlZCBieSAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiByYWNlZCBhIHZhbGlkIHdpbmRvdyBib3VuZGFyeTsgd2FpdGluZyAke1dST05HX1RBUkdFVF9CT1VOREFSWV9SRVRSWV9ERUxBWSAvIDEwMDB9cyBhbmQgcmV0cnlpbmdgKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBkZWxheShXUk9OR19UQVJHRVRfQk9VTkRBUllfUkVUUllfREVMQVkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdENvbmZpZ1JlZnJlc2ggPCBDT05GSUdfUkVGUkVTSF9USFJPVFRMRSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmxhc3RDb25maWdSZWZyZXNoID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IHJlYXNvbiA9IGtpbmQgPT09IFwid2luZG93XCIgJiYgXCJ3cm9uZyB2YWxpZCB3aW5kb3dcIiB8fCBraW5kID09PSBcInJvdXRlXCIgJiYgXCJ3cm9uZyByb3V0ZVwiIHx8IFwidGhlIHN0b3JlIGhhcyBubyBjb25maWd1cmF0aW9uIGVudHJ5IG9uIHRoYXQgc2VydmVyXCI7XG4gICAgICAgIGNvbnNvbGUubG9nKGBXcml0ZSByZWplY3RlZCBieSAke3RoaXMuZ2V0RGVidWdOYW1lKCl9ICgke3JlYXNvbn0pOiBvdXIgY29uZmlnIGRpc2FncmVlcyB3aXRoIHRoZSBzZXJ2ZXIncyAobGlrZWx5IHN0YWxlLCBvciBhIGRlcGxveSBzd2l0Y2hvdmVyKTsgcmVmcmVzaGluZyBpdCBhbmQgcmV0cnlpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGF0ZS5yZWZyZXNoQWN0aXZlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KGNvbmZpZzogeyBmYWxsYmFja3M6IGJvb2xlYW47IGFwaU9ubHk/OiBib29sZWFuOyB3cml0ZT86IGJvb2xlYW47IHJvdXRlPzogbnVtYmVyOyByZXRyaWVzPzogbnVtYmVyOyBmYXN0PzogYm9vbGVhbjsgdGltZW91dD86IFNtYXJ0VGltZW91dCB9LCBydW46IChhcmNoaXZlczogSUFyY2hpdmVzLCBzb3VyY2VVcmw6IHN0cmluZykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlLmdldFN0YXRlKCk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bihzdGF0ZSwgY29uZmlnLCBydW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB3YWl0aW5nRm9yQWNjZXNzKCk6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZzsgcmVhc29uOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlLmdldFN0YXRlKCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAvLyBBIHNvdXJjZSB3aG9zZSB3aW5kb3cgaGFzIHBhc3NlZCBpcyBuZXZlciByZWFkIG9yIHdyaXR0ZW4gYWdhaW4sIHNvIGl0cyBhY2Nlc3Mgc3RhdGUgaXMgaXJyZWxldmFudCAtIGFuZCBhc2tpbmcgYSBkZWFkIGludGVybWVkaWF0ZSB3b3VsZCBqdXN0IGhhbmcgb3IgdGhyb3cuIEZ1dHVyZSB3aW5kb3dzIERPIG1hdHRlcjogYWNjZXNzIHNob3VsZCBiZSBncmFudGVkIGJlZm9yZSB0aGVpciB3aW5kb3cgc3RhcnRzLlxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jb25maWcudmFsaWRXaW5kb3dbMV0gPD0gRGF0ZS5ub3coKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoc291cmNlLmFwaSBpbnN0YW5jZW9mIEFyY2hpdmVzUmVtb3RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhaXRpbmcgPSBhd2FpdCBzb3VyY2UuYXBpLndhaXRpbmdGb3JBY2Nlc3MoKTtcbiAgICAgICAgICAgICAgICBpZiAod2FpdGluZykgcmV0dXJuIHdhaXRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNvdXJjZXMgdGhhdCBjYW4gc2VydmUgYSBmaWxlIHJpZ2h0IG5vdywgaW4gZGlzcGF0Y2ggb3JkZXIgLSB0aGUgZmlyc3QgaXMgdGhlIHdyaXRlIG5vZGUsIHRoZSBvbmUgYSBwbGFpbiByZWFkIGFza3MgZmlyc3QuIEVhY2ggZW50cnkncyB1cmwgaXMgd2hhdCBHZXRDb25maWcuc291cmNlVXJsIC8gR2V0SW5mb0NvbmZpZy5zb3VyY2VVcmwgYWNjZXB0LCBzbyBsaXN0aW5nIHRoZXNlIGFuZCB0aGVuIHJlYWRpbmcgd2l0aCBzb3VyY2VVcmwgY29tcGFyZXMgdGhlIGNvcGllcyB0aGUgc291cmNlcyBhY3R1YWxseSBob2xkLiAqL1xuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlU291cmNlcyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTb3VyY2VDb25maWdbXT4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlLmdldFN0YXRlKCk7XG4gICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKGZpbGVOYW1lKTtcbiAgICAgICAgcmV0dXJuIHN0YXRlLnNvdXJjZXMuZmlsdGVyKHggPT4gcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgcm91dGUpICYmIGNvbmZpZ1dpbmRvd0N1cnJlbnQoeC5jb25maWcpKS5tYXAoeCA9PiB4LmNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG9uZSBleGFjdCBzb3VyY2UgYSBzb3VyY2VVcmwgcmVhZCBtZWFucywgbm8gZmFsbGJhY2sgb2YgYW55IGtpbmQgLSBhc2tpbmcgZm9yIGEgU1BFQ0lGSUMgc291cmNlJ3MgY29weSBhbmQgZ2V0dGluZyBhbm90aGVyJ3Mgd291bGQgZGVmZWF0IHRoZSBwb2ludFxuICAgIHByaXZhdGUgYXN5bmMgcnVuT25Tb3VyY2U8VD4oc291cmNlVXJsOiBzdHJpbmcsIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgc291cmNlID0gc3RhdGUuc291cmNlcy5maW5kKHggPT4geC5jb25maWcudXJsID09PSBzb3VyY2VVcmwpO1xuICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb25maWd1cmVkIHNvdXJjZSBoYXMgdGhlIHVybCAke0pTT04uc3RyaW5naWZ5KHNvdXJjZVVybCl9IGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IChzb3VyY2VzOiAke3N0YXRlLnNvdXJjZXMubWFwKHggPT4geC5jb25maWcudXJsKS5qb2luKFwiLCBcIil9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBzb3VyY2UucmVhZChydW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKiBnZXQyLCBidXQgdHJ5aW5nIHNvdXJjZXMgaW4gbGF0ZW5jeSBvcmRlciAoZmFzdGVzdCBmaXJzdCkgaW5zdGVhZCBvZiBjb25maWcgb3JkZXIuIFdoaWxlIHRoaXMgaXMgbXVjaCBmYXN0ZXIsIGl0IG1pZ2h0IG1pc3MgaW1tZWRpYXRlIHdyaXRlczogdGhlIHdyaXRlIG5vZGUgaXMgbm8gbG9uZ2VyIHRyaWVkIGZpcnN0LCBzbyBhIGxhZ2dpbmcgcmVwbGljYSBtYXkgYW5zd2VyIHdpdGggYSBzbGlnaHRseSBvbGRlciB2YWx1ZS4gRXhjbHVzaXZlIHdpdGggbm9GYWxsYmFja3MgKHdoaWNoIG9ubHkgY29uc2lkZXJzIG9uZSBzb3VyY2UgLSB0aGUgd3JpdGUgbm9kZSAtIHNvIHRoZXJlIGlzIG5vIG9yZGVyIHRvIHNwZWVkIHVwKTsgcGFzc2luZyBib3RoIHRocm93cy4gKi9cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmFzdChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB1cmw6IHN0cmluZyB9IHwgeyBkYXRhPzogdW5kZWZpbmVkOyB3cml0ZVRpbWU/OiB1bmRlZmluZWQ7IHNpemU/OiB1bmRlZmluZWQ7IHVybDogc3RyaW5nIH0+IHtcbiAgICAgICAgdmFsaWRhdGVGaWxlTmFtZShmaWxlTmFtZSwgXCJnZXRGYXN0XCIpO1xuICAgICAgICBpZiAoY29uZmlnPy5zb3VyY2VVcmwpIHtcbiAgICAgICAgICAgIC8vIEEgc3BlY2lmaWMgc291cmNlIGxlYXZlcyBub3RoaW5nIGZvciB0aGUgbGF0ZW5jeSBvcmRlcmluZyB0byBkZWNpZGVcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZz8ucmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcXVlc3QoeyBmYWxsYmFja3M6ICFjb25maWc/Lm5vRmFsbGJhY2tzLCByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpLCByZXRyaWVzOiBjb25maWc/LnJldHJpZXMsIGZhc3Q6IHRydWUgfSwgYXN5bmMgKGFyY2hpdmVzLCB1cmwpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXJjaGl2ZXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAvLyBFbXB0eSBkYXRhIGlzIGEgdG9tYnN0b25lLCBub3QgY29udGVudCAtIHNlZSBnZXQyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5kYXRhIHx8ICFyZXN1bHQuZGF0YS5sZW5ndGggJiYgIWNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMgJiYgIShjb25maWc/LnJhbmdlICYmIHJlc3VsdC5zaXplKSkgcmV0dXJuIHsgdXJsIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogcmVzdWx0LmRhdGEsIHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUsIHVybCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTGF0ZW5jeSBvcmRlciBkZWNpZGVzIHdobyBzZXJ2ZXMgdGhlIEZJUlNUIGNodW5rOyB0aGUgcmVzdCBmb2xsb3cgaXQsIGxpa2UgYW55IG90aGVyIHJlYWRcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVhZEluQ2h1bmtzKGZpbGVOYW1lLCBjb25maWcsIHsgZmFzdDogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLyoqIEFsd2F5cyByZXNvbHZlcyB3aXRoIGEgdXJsIC0gdGhlIGF1dGhvcml0eSB0aGF0IGFuc3dlcmVkLiBBIHZhbHVlIHRoYXQgZG9lc24ndCBleGlzdCBpcyBzdGlsbCBhbiBhbnN3ZXIgRlJPTSBhIHNlcnZlciwgc28gaXQgY29tZXMgYmFjayBhcyB7IHVybCB9IHdpdGggbm8gZGF0YSAobmV2ZXIgcGxhaW4gdW5kZWZpbmVkKTsgZXJyb3JzIGZyb20gZXZlcnkgc291cmNlIHRocm93IGluc3RlYWQuICovXG4gICAgcHVibGljIGFzeW5jIGdldDIoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlcjsgdXJsOiBzdHJpbmcgfSB8IHsgZGF0YT86IHVuZGVmaW5lZDsgd3JpdGVUaW1lPzogdW5kZWZpbmVkOyBzaXplPzogdW5kZWZpbmVkOyB1cmw6IHN0cmluZyB9PiB7XG4gICAgICAgIHZhbGlkYXRlRmlsZU5hbWUoZmlsZU5hbWUsIFwiZ2V0MlwiKTtcbiAgICAgICAgY29uc3Qgc291cmNlVXJsID0gY29uZmlnPy5zb3VyY2VVcmw7XG4gICAgICAgIGlmIChzb3VyY2VVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1bk9uU291cmNlKHNvdXJjZVVybCwgYXN5bmMgYXJjaGl2ZXMgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhcmNoaXZlcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZGF0YSB8fCAhcmVzdWx0LmRhdGEubGVuZ3RoICYmICFjb25maWc/LmluY2x1ZGVUb21ic3RvbmVzICYmICEoY29uZmlnPy5yYW5nZSAmJiByZXN1bHQuc2l6ZSkpIHJldHVybiB7IHVybDogc291cmNlVXJsIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogcmVzdWx0LmRhdGEsIHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUsIHVybDogc291cmNlVXJsIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBIGNhbGxlciB0aGF0IG5hbWVkIGl0cyBvd24gcmFuZ2UgYXNrZWQgZm9yIGV4YWN0bHkgdGhvc2UgYnl0ZXMsIHNvIGl0IGlzIG9uZSByZXF1ZXN0LlxuICAgICAgICBpZiAoY29uZmlnPy5yYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7IGZhbGxiYWNrczogIWNvbmZpZz8ubm9GYWxsYmFja3MsIHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSksIHJldHJpZXM6IGNvbmZpZz8ucmV0cmllcyB9LCBhc3luYyAoYXJjaGl2ZXMsIHVybCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhcmNoaXZlcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIC8vIEVtcHR5IGRhdGEgaXMgYSB0b21ic3RvbmUsIG5vdCBjb250ZW50ICh1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCBmb3IgdG9tYnN0b25lcykgLSBhIHJhbmdlZCByZWFkIG9mIGEgUkVBTCBmaWxlIGNhbiBsZWdpdGltYXRlbHkgYmUgZW1wdHkgdGhvdWdoIChyYW5nZSBwYXN0IEVPRiksIHdoaWNoIHRoZSB0b3RhbCBzaXplIGRpc3Rpbmd1aXNoZXNcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LmRhdGEgfHwgIXJlc3VsdC5kYXRhLmxlbmd0aCAmJiAhY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcyAmJiAhKGNvbmZpZz8ucmFuZ2UgJiYgcmVzdWx0LnNpemUpKSByZXR1cm4geyB1cmwgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiByZXN1bHQuZGF0YSwgd3JpdGVUaW1lOiByZXN1bHQud3JpdGVUaW1lLCBzaXplOiByZXN1bHQuc2l6ZSwgdXJsIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWFkSW5DaHVua3MoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWRzIGEgd2hvbGUgZmlsZSBhcyBhIHNlcmllcyBvZiByYW5nZWQgcmVhZHMsIHNvIGEgYmlnIG9uZSBhcnJpdmVzIGluIHBpZWNlcyBpbnN0ZWFkIG9mXG4gICAgICAgIGFzIG9uZSByZXF1ZXN0IG5vYm9keSBjYW4gc2VlIGluc2lkZSBvZi5cblxuICAgICAgICBUaGUgZmlyc3QgcmVhZCBhc2tzIGZvciBDSFVOS19GSVJTVF9TSVpFLiBMZXNzIHRoYW4gdGhhdCBjb21pbmcgYmFjayBJUyB0aGUgd2hvbGUgZmlsZSwgc29cbiAgICAgICAgYSBzbWFsbCBmaWxlIGNvc3RzIGV4YWN0bHkgb25lIHJlcXVlc3QgLSBhbmQgYmVjYXVzZSBldmVyeSBiYWNrZW5kIHJlcG9ydHMgdGhlIGZpbGUncyBGVUxMXG4gICAgICAgIHNpemUgYWxvbmdzaWRlIGEgcmFuZ2VkIHJlYWQsIGEgYmlnIG9uZSBhbHJlYWR5IGtub3dzIGl0cyBzaXplIGZyb20gdGhhdCBzYW1lIGFuc3dlciBhbmRcbiAgICAgICAgbmV2ZXIgbmVlZHMgYSBnZXRJbmZvIHRvIGZpbmQgb3V0LlxuXG4gICAgICAgIEV2ZXJ5IGNodW5rIGFmdGVyIHRoZSBmaXJzdCBnb2VzIHRvIHRoZSBzb3VyY2UgdGhhdCBzZXJ2ZWQgdGhlIGZpcnN0LCBzbyB0aGUgcGllY2VzIGNhbm5vdFxuICAgICAgICBiZSBhc3NlbWJsZWQgb3V0IG9mIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgbGl2aW5nIG9uIHR3byByZXBsaWNhcy4gRmluaXNoaW5nIGEgY2h1bmsgcHVzaGVzXG4gICAgICAgIHRoZSB0aW1lb3V0IGJhY2ssIHNvIHRoZSBkZWFkbGluZSBjb3ZlcnMgb25lIGNodW5rIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0cmFuc2Zlci4gKi9cbiAgICBwcml2YXRlIGFzeW5jIHJlYWRJbkNodW5rcyhmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcsIG9wdGlvbnM/OiB7IGZhc3Q/OiBib29sZWFuIH0pOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB1cmw6IHN0cmluZyB9IHwgeyBkYXRhPzogdW5kZWZpbmVkOyB3cml0ZVRpbWU/OiB1bmRlZmluZWQ7IHNpemU/OiB1bmRlZmluZWQ7IHVybDogc3RyaW5nIH0+IHtcbiAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gTUFYX01PRElGSUVEX1JFVFJJRVM7IGF0dGVtcHQrKykge1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHsgZmFsbGJhY2tzOiAhY29uZmlnPy5ub0ZhbGxiYWNrcywgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSwgcmV0cmllczogY29uZmlnPy5yZXRyaWVzLCBmYXN0OiBvcHRpb25zPy5mYXN0IH0sIGFzeW5jIChhcmNoaXZlcywgdXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXBwbHlSZWZyZXNoYWJsZVRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6IGBUaGUgZmlyc3QgJHtDSFVOS19GSVJTVF9TSVpFfSBieXRlcyBvZiAke0pTT04uc3RyaW5naWZ5KGZpbGVOYW1lKX1gLCBzb3VyY2VVcmw6IHVybCwgd2luZG93TXM6IGNodW5rVGltZW91dCgwKSB9LFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCBhcmNoaXZlcy5nZXQyKGZpbGVOYW1lLCB7IC4uLmNvbmZpZywgcmFuZ2U6IHsgc3RhcnQ6IDAsIGVuZDogQ0hVTktfRklSU1RfU0laRSB9IH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5kYXRhIHx8ICFyZXN1bHQuZGF0YS5sZW5ndGggJiYgIWNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMgJiYgIXJlc3VsdC5zaXplKSByZXR1cm4geyB1cmwgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiByZXN1bHQuZGF0YSwgd3JpdGVUaW1lOiByZXN1bHQud3JpdGVUaW1lLCBzaXplOiByZXN1bHQuc2l6ZSwgdXJsIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghZmlyc3QuZGF0YSkgcmV0dXJuIGZpcnN0O1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGZpbGUgZml0IGluIHRoZSBmaXJzdCByZWFkLCBzbyB0aGVyZSBpcyBub3RoaW5nIGVsc2UgdG8gZmV0Y2ggYW5kIG5vdGhpbmdcbiAgICAgICAgICAgIC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHVuZGVybmVhdGggdXNcbiAgICAgICAgICAgIGlmIChmaXJzdC5kYXRhLmxlbmd0aCA+PSBmaXJzdC5zaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdXJsID0gZmlyc3QudXJsO1xuICAgICAgICAgICAgbGV0IHBpZWNlcyA9IFtmaXJzdC5kYXRhXTtcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSBmaXJzdC5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCBjaHVua1NpemUgPSBDSFVOS19GSVJTVF9TSVpFO1xuICAgICAgICAgICAgbGV0IHRvcm4gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGNodW5rSW5kZXggPSAxOyBvZmZzZXQgPCBmaXJzdC5zaXplOyBjaHVua0luZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjaHVua1NpemUgPSBNYXRoLm1pbihjaHVua1NpemUgKiAyLCBDSFVOS19NQVhfU0laRSk7XG4gICAgICAgICAgICAgICAgbGV0IGVuZCA9IE1hdGgubWluKG9mZnNldCArIGNodW5rU2l6ZSwgZmlyc3Quc2l6ZSk7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGxldCBwaWVjZSA9IGF3YWl0IHRoaXMuYXBwbHlSZWZyZXNoYWJsZVRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6IGBCeXRlcyAke3N0YXJ0fS0ke2VuZH0gb2YgJHtKU09OLnN0cmluZ2lmeShmaWxlTmFtZSl9YCwgc291cmNlVXJsOiB1cmwsIHdpbmRvd01zOiBjaHVua1RpbWVvdXQoY2h1bmtJbmRleCkgfSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5ydW5PblNvdXJjZSh1cmwsIGFyY2hpdmVzID0+IGFyY2hpdmVzLmdldDIoZmlsZU5hbWUsIHsgLi4uY29uZmlnLCByYW5nZTogeyBzdGFydCwgZW5kIH0gfSkpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGZpbGUgc2hyYW5rIHVuZGVyIHVzLCBzbyB3aGF0IHdlIGhhdmUgaXMgYWxyZWFkeSBhIG1peCBvZiB0d28gdmVyc2lvbnNcbiAgICAgICAgICAgICAgICBpZiAoIXBpZWNlIHx8ICFwaWVjZS5kYXRhIHx8ICFwaWVjZS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0b3JuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBpZWNlcy5wdXNoKHBpZWNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSBwaWVjZS5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmVhZCBiYWNrIHRvIGJhY2sgcmF0aGVyIHRoYW4gd2F0Y2hlZCBwZXIgY2h1bms6IG9uZSBjYWxsIGF0IHRoZSBlbmQgc2F5cyB3aGV0aGVyXG4gICAgICAgICAgICAvLyBldmVyeXRoaW5nIHdlIGp1c3QgYXNzZW1ibGVkIGNhbWUgZnJvbSB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBmaWxlLlxuICAgICAgICAgICAgbGV0IGFmdGVyID0gIXRvcm4gJiYgYXdhaXQgdGhpcy5ydW5PblNvdXJjZSh1cmwsIGFyY2hpdmVzID0+IGFyY2hpdmVzLmdldEluZm8oZmlsZU5hbWUsIGNvbmZpZykpO1xuICAgICAgICAgICAgaWYgKCF0b3JuICYmIGFmdGVyICYmIGFmdGVyLndyaXRlVGltZSA9PT0gZmlyc3Qud3JpdGVUaW1lICYmIGFmdGVyLnNpemUgPT09IGZpcnN0LnNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBCdWZmZXIuY29uY2F0KHBpZWNlcyksIHdyaXRlVGltZTogZmlyc3Qud3JpdGVUaW1lLCBzaXplOiBmaXJzdC5zaXplLCB1cmwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShmaWxlTmFtZSl9IHdhcyB3cml0dGVuIHdoaWxlIHdlIHdlcmUgcmVhZGluZyBpdCBmcm9tICR7dXJsfWBcbiAgICAgICAgICAgICAgICArIGAgKCR7Zmlyc3Quc2l6ZX0gYnl0ZXMgYXQgJHtmaXJzdC53cml0ZVRpbWV9LCBub3cgJHthZnRlciAmJiBgJHthZnRlci5zaXplfSBieXRlcyBhdCAke2FmdGVyLndyaXRlVGltZX1gIHx8IFwiZ29uZVwifSkuYFxuICAgICAgICAgICAgICAgICsgYCBSZWFkaW5nIGl0IGFnYWluLCBhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtNQVhfTU9ESUZJRURfUkVUUklFU30uYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdoYXRldmVyIGlzIHJld3JpdGluZyBpdCBpcyBmYXN0ZXIgdGhhbiB3ZSBjYW4gcmVhZCBpdCBpbiBwaWVjZXMsIHNvIHRha2UgaXQgaW4gb25lXG4gICAgICAgIC8vIHJlcXVlc3Q6IG5vIGFzc2VtYmx5LCBubyBjaGFuY2Ugb2YgdHdvIHZlcnNpb25zLCBhbmQgbm8gcmFuZ2VkIHJlYWRzIHRvIGtlZXAgaW4gc3RlcC5cbiAgICAgICAgY29uc29sZS53YXJuKGAke0pTT04uc3RyaW5naWZ5KGZpbGVOYW1lKX0ga2VwdCBjaGFuZ2luZyB3aGlsZSBiZWluZyByZWFkIGluIGNodW5rcywgcmVhZGluZyBpdCBpbiBvbmUgcmVxdWVzdCBpbnN0ZWFkYCk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcXVlc3QoeyBmYWxsYmFja3M6ICFjb25maWc/Lm5vRmFsbGJhY2tzLCByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpLCByZXRyaWVzOiBjb25maWc/LnJldHJpZXMgfSwgYXN5bmMgKGFyY2hpdmVzLCB1cmwpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBhcmNoaXZlcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5kYXRhIHx8ICFyZXN1bHQuZGF0YS5sZW5ndGggJiYgIWNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMpIHJldHVybiB7IHVybCB9O1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogcmVzdWx0LmRhdGEsIHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUsIHVybCB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mbyhmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBHZXRJbmZvQ29uZmlnKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXI7IHVybDogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdmFsaWRhdGVGaWxlTmFtZShmaWxlTmFtZSwgXCJnZXRJbmZvXCIpO1xuICAgICAgICBjb25zdCBzb3VyY2VVcmwgPSBjb25maWc/LnNvdXJjZVVybDtcbiAgICAgICAgaWYgKHNvdXJjZVVybCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuT25Tb3VyY2Uoc291cmNlVXJsLCBhc3luYyBhcmNoaXZlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGFyY2hpdmVzLmdldEluZm8oZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IC4uLnJlc3VsdCwgdXJsOiBzb3VyY2VVcmwgfSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHsgZmFsbGJhY2tzOiAhY29uZmlnPy5ub0ZhbGxiYWNrcywgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSwgcmV0cmllczogY29uZmlnPy5yZXRyaWVzIH0sIGFzeW5jIChhcmNoaXZlcywgdXJsKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXJjaGl2ZXMuZ2V0SW5mbyhmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgeyAuLi5yZXN1bHQsIHVybCB9IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gV2l0aG91dCBmYWxsYmFja3M6IHRoZSBBVVRIT1JJVEFUSVZFIGNvdmVyaW5nIE9OTFkgLSB0aGUgZmlyc3Qgc291cmNlIHBlciByb3V0ZSBpbiBjb25maWcgb3JkZXIgKHRoZSBzYW1lIG5vZGUgZXZlcnkgd3JpdGUgYW5kIHJlYWQgdGFyZ2V0cyksIGRvd24gb3Igbm90LiBJdCBpcyBORVZFUiBleGNsdWRlZCBhbmQgTkVWRVIgc3Vic3RpdHV0ZWQsIHNvIGEgbGlzdGluZyB0aGF0IGNhbid0IHJlYWNoIGl0cyB3cml0ZSBub2RlcyByZXRyaWVzIHRob3NlIHNhbWUgbm9kZXMgdW50aWwgdGhlIGRlYWRsaW5lIGFuZCB0aGVuIGZhaWxzLCByYXRoZXIgdGhhbiBxdWlldGx5IHJlYWRpbmcgc2Vjb25kLWhhbmQgZGF0YSBvZmYgYSByZXBsaWNhIG9yIGJhY2tibGF6ZS4gZXhjbHVkZS9jb29sZG93bi9zdWJzdGl0dXRpb24gYXBwbHkgT05MWSB3aGVuIHRoZSBjYWxsZXIgb3B0ZWQgaW50byBmYWxsYmFja3MuXG4gICAgcHJpdmF0ZSBzZWxlY3RDb3ZlcmluZ1NvdXJjZXMoc3RhdGU6IENoYWluU3RhdGUsIGNvbmZpZzogeyBmYWxsYmFja3M6IGJvb2xlYW47IGV4Y2x1ZGU/OiBTZXQ8U291cmNlV3JhcHBlcj4gfSk6IFNvdXJjZVdyYXBwZXJbXSB7XG4gICAgICAgIGlmIChjb25maWcuZmFsbGJhY2tzKSB7XG4gICAgICAgICAgICBsZXQgY2FuZGlkYXRlcyA9IHN0YXRlLnNvdXJjZXMuZmlsdGVyKHggPT4gY29uZmlnV2luZG93Q3VycmVudCh4LmNvbmZpZykgJiYgeC5hcGkgJiYgIWNvbmZpZy5leGNsdWRlPy5oYXMoeCkpO1xuICAgICAgICAgICAgbGV0IHVzYWJsZSA9IGNhbmRpZGF0ZXMuZmlsdGVyKHggPT4gIXguaXNPbkNvb2xkb3duKCkpO1xuICAgICAgICAgICAgbGV0IGNob3NlbiA9IGNvdmVyUm91dGVzKHVzYWJsZSkgfHwgY292ZXJSb3V0ZXMoY2FuZGlkYXRlcyk7XG4gICAgICAgICAgICBpZiAoY2hvc2VuKSByZXR1cm4gY2hvc2VuO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY292ZXIgdGhlIGZ1bGwgcm91dGUgc3BhY2UgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHRoZSBhdmFpbGFibGUgc291cmNlcyBsZWF2ZSBhIGdhcCAoc29tZSBzaGFyZHMgYXJlIGRvd24gb3IgVVJMLW9ubHkpYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBzdGF0ZS5zb3VyY2VzLmZpbHRlcih4ID0+IGNvbmZpZ1dpbmRvd0N1cnJlbnQoeC5jb25maWcpICYmIHguYXBpKTtcbiAgICAgICAgbGV0IGNob3NlbiA9IGNvdmVyUm91dGVzKGNhbmRpZGF0ZXMpO1xuICAgICAgICBpZiAoIWNob3Nlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY292ZXIgdGhlIGZ1bGwgcm91dGUgc3BhY2UgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHRoZSBhdmFpbGFibGUgc291cmNlcyBsZWF2ZSBhIGdhcCAoc29tZSBzaGFyZHMgYXJlIGRvd24gb3IgVVJMLW9ubHkpYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNob3NlbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bk9uQ292ZXJpbmc8VD4ob3BlcmF0aW9uOiBzdHJpbmcsIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4sIGNvbmZpZzogeyBmYWxsYmFja3M6IGJvb2xlYW4gfSk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQ09WRVJJTkdfUkVUUllfVElNRU9VVDtcbiAgICAgICAgLy8gU291cmNlcyB0aGF0IGZhaWxlZCBkdXJpbmcgdGhpcyBjYWxsIC0gd2l0aCBmYWxsYmFja3MsIHRoZSBuZXh0IGF0dGVtcHQgY292ZXJzIHRoZWlyIHJvdXRlcyB3aXRoIHRoZSBuZXh0IHNvdXJjZSBob2xkaW5nIHRoZW0gaW5zdGVhZFxuICAgICAgICBsZXQgZmFpbGVkID0gbmV3IFNldDxTb3VyY2VXcmFwcGVyPigpO1xuICAgICAgICAvLyBXaHkgZWFjaCBvZiB0aGVtIGZhaWxlZCwga2VwdCBmb3IgdGhlIHdob2xlIGNhbGw6IHdoZW4gdGhlIGZhbGxiYWNrcyBydW4gb3V0LCB0aGUgZXJyb3IgbmFtZXMgZXZlcnkgc291cmNlIHRoYXQgd2FzIHRyaWVkIGFuZCB3aGF0IGVhY2ggb25lIHNhaWQsIG5vdCBqdXN0IHdoaWNoZXZlciBjb3ZlcmluZyBzZXQgaGFwcGVuZWQgdG8gYmUgbGFzdFxuICAgICAgICBsZXQgYWxsRmFpbHVyZXMgPSBuZXcgTWFwPFNvdXJjZVdyYXBwZXIsIEVycm9yPigpO1xuICAgICAgICBsZXQgdHJpZXMgPSAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJpZXMrKztcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZDogU291cmNlV3JhcHBlcltdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGNvdmVyR2FwOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdENvdmVyaW5nU291cmNlcyhzdGF0ZSwgeyBmYWxsYmFja3M6IGNvbmZpZy5mYWxsYmFja3MsIGV4Y2x1ZGU6IGZhaWxlZCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb3ZlckdhcCA9IGUgYXMgRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlc2NyaWJlZCA9IFsuLi5hbGxGYWlsdXJlc10ubWFwKChbc291cmNlLCBzb3VyY2VFcnJvcl0pID0+IGAke3NvdXJjZS5nZXREZWJ1Z05hbWUoKX06ICR7c291cmNlRXJyb3IubWVzc2FnZSA/PyBzb3VyY2VFcnJvcn1gKS5qb2luKFwiIHwgXCIpO1xuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYCR7b3BlcmF0aW9ufSBjYW5ub3QgcnVuOiAke2NvdmVyR2FwIS5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgKyAoZGVzY3JpYmVkID8gYCAke2FsbEZhaWx1cmVzLnNpemV9IHNvdXJjZShzKSBmYWlsZWQgZmlyc3Q6ICR7ZGVzY3JpYmVkfS5gIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgKyBgIEZhbGxiYWNrcyA9ICR7Y29uZmlnLmZhbGxiYWNrc30uIFRyaWVzID0gJHt0cmllc30sIFRvb2sgJHtmb3JtYXRUaW1lKERhdGUubm93KCkgLSBzdGFydFRpbWUpfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIC8vIFdpdGggZmFsbGJhY2tzIHRoZSBsb29wIG9ubHkgbGFuZHMgaGVyZSBhZnRlciBldmVyeSBzdWJzdGl0dXRlIHdhcyB0cmllZCwgc28gd2FpdGluZyB3aWxsIG5vdCBwcm9kdWNlIGEgbmV3IHNvdXJjZSAtIHRoZSBjYWxsZXIgZ2V0cyB0aGUgd2hvbGUgY2FzY2FkZSBub3dcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmZhbGxiYWNrcyAmJiBhbGxGYWlsdXJlcy5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtlcnJvci5tZXNzYWdlfS4gUmV0cnlpbmcgaW4gJHtDT1ZFUklOR19SRVRSWV9ERUxBWSAvIDEwMDB9cyAoZ2l2aW5nIHVwIGF0ICR7Zm9ybWF0RGF0ZVRpbWVEZXRhaWxlZChkZWFkbGluZSl9KS5gKTtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuc3RhdGUucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KENPVkVSSU5HX1JFVFJZX0RFTEFZKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb3ZlcmluZyA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgLy8gRXJyb3JzIG5hbWUgdGhlIE9QRVJBVElPTiBhbmQgdGhlIFNQRUNJRklDIHNvdXJjZXMgdGhhdCBmYWlsZWQgLSBcInRoZSBmaW5kIGZhaWxlZCBiZWNhdXNlIHNvdXJjZSBYIGlzIHVuYXZhaWxhYmxlXCIsIG5ldmVyIGFuIGFub255bW91cyBmYWlsdXJlIGF0dHJpYnV0ZWQgdG8gdGhlIHdob2xlIGNoYWluXG4gICAgICAgICAgICBsZXQgdmFsdWVzOiBUW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBmYWlsdXJlczogeyBzb3VyY2U6IFNvdXJjZVdyYXBwZXI7IGVycm9yOiBFcnJvciB9W10gPSBbXTtcbiAgICAgICAgICAgIGxldCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNvdmVyaW5nLm1hcChhc3luYyAoc291cmNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBhcGkgPSBzb3VyY2UuYXBpO1xuICAgICAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goeyBzb3VyY2UsIGVycm9yOiBuZXcgRXJyb3IoYFVSTC1vbmx5IGFjY2Vzcywgd2hpY2ggY2Fubm90IHNlcnZlICR7b3BlcmF0aW9ufWApIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGF3YWl0IHJ1bihhcGkpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlLmlzQ29ubmVjdGVkKCkpIHNvdXJjZS5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKHsgc291cmNlLCBlcnJvcjogZSBhcyBFcnJvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCBhZnRlciAke2Zvcm1hdFRpbWUoRGF0ZS5ub3coKSAtIHRpbWUpfSBpbmRleCAke2luZGV4fSBvZiAke2NvdmVyaW5nLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAoIWZhaWx1cmVzLmxlbmd0aCkgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgIGZvciAobGV0IGZhaWx1cmUgb2YgZmFpbHVyZXMpIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQuYWRkKGZhaWx1cmUuc291cmNlKTtcbiAgICAgICAgICAgICAgICBhbGxGYWlsdXJlcy5zZXQoZmFpbHVyZS5zb3VyY2UsIGZhaWx1cmUuZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVycm9yID0gZmFpbHVyZXMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgPyBuZXcgRXJyb3IoYCR7b3BlcmF0aW9ufSBmYWlsZWQgYmVjYXVzZSBzb3VyY2UgJHtmYWlsdXJlc1swXS5zb3VyY2UuZ2V0RGVidWdOYW1lKCl9IGlzIHVuYXZhaWxhYmxlOiAke2ZhaWx1cmVzWzBdLmVycm9yLm1lc3NhZ2UgPz8gZmFpbHVyZXNbMF0uZXJyb3J9LiBGYWxsYmFja3MgPSAke2NvbmZpZy5mYWxsYmFja3N9LiBUcmllcyA9ICR7dHJpZXN9LCBUb29rICR7Zm9ybWF0VGltZShEYXRlLm5vdygpIC0gc3RhcnRUaW1lKX1gKVxuICAgICAgICAgICAgICAgIDogbmV3IEVycm9yKGAke29wZXJhdGlvbn0gZmFpbGVkIGJlY2F1c2UgJHtmYWlsdXJlcy5sZW5ndGh9IG9mIHRoZSAke2NvdmVyaW5nLmxlbmd0aH0gc291cmNlcyBjb3ZlcmluZyB0aGlzIGF0dGVtcHQgYXJlIHVuYXZhaWxhYmxlOiAke2ZhaWx1cmVzLm1hcCh4ID0+IGAke3guc291cmNlLmdldERlYnVnTmFtZSgpfTogJHt4LmVycm9yLm1lc3NhZ2UgPz8geC5lcnJvcn1gKS5qb2luKFwiIHwgXCIpfS4gRmFsbGJhY2tzID0gJHtjb25maWcuZmFsbGJhY2tzfS4gVHJpZXMgPSAke3RyaWVzfSwgVG9vayAke2Zvcm1hdFRpbWUoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSl9YCk7XG4gICAgICAgICAgICAvLyBTdWJzdGl0dXRpb24gY29tZXMgQkVGT1JFIHRoZSBkZWFkbGluZSBjaGVjazogYSBzaW5nbGUgY29ubmVjdCB0aW1lb3V0IGNhbiBlYXQgdGhlIGVudGlyZSBkZWFkbGluZSwgYW5kIGdpdmluZyB1cCB0aGVuIC0gd2l0aG91dCBldmVyIHRyeWluZyB0aGUgc3Vic3RpdHV0ZSB0aGF0IGZhbGxiYWNrcyBleGlzdCBmb3IgLSB0aHJvd3MgZXhhY3RseSB3aGVuIGZhbGxpbmcgYmFjayBtYXR0ZXJzIG1vc3QuIFRoZSBsb29wIGtlZXBzIHN1YnN0aXR1dGluZyBmb3IgYXMgbG9uZyBhcyBhIGNvdmVyaW5nIHNldCBleGlzdHM7IGV2ZXJ5IHBhc3MgYWRkcyBpdHMgZmFpbHVyZXMgdG8gYGZhaWxlZGAsIHNvIGl0IGFsd2F5cyB0ZXJtaW5hdGVzIGF0IHRoZSBuby1jb3ZlcmluZyBicmFuY2ggYWJvdmUsIHdoaWNoIHRocm93cyBldmVyeXRoaW5nIGNvbGxlY3RlZCBoZXJlLlxuICAgICAgICAgICAgaWYgKGNvbmZpZy5mYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYChyZXRyeWluZyB3aXRoIGZhbGxiYWNrcykgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKERhdGUubm93KCkgPj0gZGVhZGxpbmUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7ZXJyb3IubWVzc2FnZX0uIFJldHJ5aW5nIGluICR7Q09WRVJJTkdfUkVUUllfREVMQVkgLyAxMDAwfXMgKGdpdmluZyB1cCBhdCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQoZGVhZGxpbmUpfSkuYCk7XG4gICAgICAgICAgICB2b2lkIHRoaXMuc3RhdGUucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoQ09WRVJJTkdfUkVUUllfREVMQVkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmQocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IEZpbmRDb25maWcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpLm1hcCh4ID0+IHgucGF0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnJ1bk9uQ292ZXJpbmcoYFRoZSBmaW5kIG9mICR7SlNPTi5zdHJpbmdpZnkocHJlZml4KX1gLCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZyksIHsgZmFsbGJhY2tzOiAhIWNvbmZpZz8uZmFsbGJhY2tzIH0pO1xuICAgICAgICBsZXQgYnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBieVBhdGguZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZyB8fCBmaWxlLmNyZWF0ZVRpbWUgPiBleGlzdGluZy5jcmVhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5UGF0aC5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lcmdlZCA9IFsuLi5ieVBhdGgudmFsdWVzKCldO1xuICAgICAgICBzb3J0KG1lcmdlZCwgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q2hhbmdlc0FmdGVyMihjb25maWc6IENoYW5nZXNBZnRlckNvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnJ1bk9uQ292ZXJpbmcoYFRoZSBjaGFuZ2VzIGxpc3Rpbmcgc2luY2UgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKGNvbmZpZy50aW1lKX1gLCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5nZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZyksIHsgZmFsbGJhY2tzOiBmYWxzZSB9KTtcbiAgICAgICAgbGV0IGJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBBcmNoaXZlRmlsZUluZm8+KCk7XG4gICAgICAgIGZvciAobGV0IGxpc3Qgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYnlQYXRoLmdldChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmcgfHwgZmlsZS5jcmVhdGVUaW1lID4gZXhpc3RpbmcuY3JlYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBieVBhdGguc2V0KGZpbGUucGF0aCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtZXJnZWQgPSBbLi4uYnlQYXRoLnZhbHVlcygpXTtcbiAgICAgICAgc29ydChtZXJnZWQsIHggPT4geC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldFN5bmNTdGF0dXMoKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgbGV0IHN0YXR1c2VzID0gYXdhaXQgdGhpcy5ydW5PbkNvdmVyaW5nKGBUaGUgc3luYyBzdGF0dXMgY2hlY2tgLCBhc3luYyBhcmNoaXZlcyA9PiB7XG4gICAgICAgICAgICBpZiAoIWFyY2hpdmVzLmdldFN5bmNTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGdldFN5bmNTdGF0dXMgaXMgbm90IHN1cHBvcnRlZDogJHthcmNoaXZlcy5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3QgaW1wbGVtZW50IGl0YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYXJjaGl2ZXMuZ2V0U3luY1N0YXR1cygpO1xuICAgICAgICB9LCB7IGZhbGxiYWNrczogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbGxTY2Fuc0NvbXBsZXRlOiBzdGF0dXNlcy5ldmVyeSh4ID0+IHguYWxsU2NhbnNDb21wbGV0ZSksXG4gICAgICAgICAgICBpbmRleFNpemU6IHN0YXR1c2VzLnJlZHVjZSgoc3VtLCB4KSA9PiBzdW0gKyB4LmluZGV4U2l6ZSwgMCksXG4gICAgICAgICAgICBzb3VyY2VzOiBzdGF0dXNlcy5mbGF0TWFwKHggPT4geC5zb3VyY2VzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5zb3VyY2VzLnNvbWUoeCA9PiB4LmFwaSkpIHJldHVybiB7IHJlbW90ZUNvbmZpZzogc3RhdGUuY29uZmlnIH07XG4gICAgICAgIGxldCBjb25maWcgPSBhd2FpdCB0aGlzLnJ1bihzdGF0ZSwgeyBmYWxsYmFja3M6IHRydWUsIGFwaU9ubHk6IHRydWUgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0Q29uZmlnKCkpO1xuICAgICAgICByZXR1cm4geyAuLi5jb25maWcsIHJlbW90ZUNvbmZpZzogc3RhdGUuY29uZmlnIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgaWYgKCFjb25maWdXaW5kb3dDdXJyZW50KHNvdXJjZS5jb25maWcpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghYXdhaXQgc291cmNlLmhhc1dyaXRlQWNjZXNzKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogU2V0Q29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdmFsaWRhdGVGaWxlTmFtZShmaWxlTmFtZSwgXCJzZXRcIik7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgd3JpdGUgcmVmdXNlZDogc2V0IHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBidWZmZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoZmlsZU5hbWUpfTogYW4gZW1wdHkgZmlsZSBJUyBhIGRlbGV0aW9uIGluIHRoaXMgc3lzdGVtIGFuZCB3b3VsZCByZWFkIGJhY2sgYXMgbWlzc2luZyAtIGNhbGwgZGVsIGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZU5hbWUgPT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0Um91dGluZ0NvbmZpZyhkYXRhLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhWQVJJQUJMRV9TSEFSRCkgJiYgcGFyc2VWYXJpYWJsZVJvdXRlKGZpbGVOYW1lKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRWYXJpYWJsZVNoYXJkKGZpbGVOYW1lLCBkYXRhLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IExBUkdFX1NFVF9USFJFU0hPTEQpIHtcbiAgICAgICAgICAgIC8vIFN0cmVhbWVkIGF1dG9tYXRpY2FsbHkgc28gY2FsbGVycyBuZXZlciBoYXZlIHRvIGNhbGwgc2V0TGFyZ2VGaWxlIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IGFscmVhZHkgaG9sZCB0aGUgYnVmZmVyIC0gb25lIGdpYW50IG1lc3NhZ2Ugd291bGQgZXhjZWVkIHRoZSB3aXJlIGxpbWl0IGFuZCBsYWcgZXZlcnkgb3RoZXIgY2xpZW50IG9uIHRoZSBjb25uZWN0aW9uLiBUaGUgd2hvbGUgY29uZmlnIGdvZXMgd2l0aCBpdCAoaW5jbHVkaW5nIGZhbGxiYWNrcywgd2hpY2ggdGhlIGJ1ZmZlcidzIHJlc3RhcnRTdHJlYW0gbWFrZXMgcG9zc2libGUpOiBhIGZpbGUgbXVzdCBub3QgZ2V0IGRpZmZlcmVudCB3cml0ZSBzZW1hbnRpY3MganVzdCBmb3IgYmVpbmcgYmlnLlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRMYXJnZUZpbGUoeyBwYXRoOiBmaWxlTmFtZSwgLi4uY29uZmlnLCAuLi5idWZmZXJDaHVua1N0cmVhbShkYXRhKSB9KTtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyBmYWxsYmFja3M6ICEhY29uZmlnPy5mYWxsYmFja3MsIHdyaXRlOiB0cnVlLCByZXRyaWVzOiBjb25maWc/LnJldHJpZXMsIHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSksIHRpbWVvdXQ6IHsgdXBsb2FkQnl0ZXM6IGRhdGEubGVuZ3RoLCBsYWJlbDogYFVwbG9hZCBvZiAke0pTT04uc3RyaW5naWZ5KGZpbGVOYW1lKX0gKCR7ZGF0YS5sZW5ndGh9IGJ5dGVzKWAgfSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXQoZmlsZU5hbWUsIGRhdGEsIGNvbmZpZykpO1xuICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRSb3V0aW5nQ29uZmlnKGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIENoZWNrZWQgYmVmb3JlIHRoZSBmaXJzdCBub2RlIGlzIHdyaXR0ZW4gdG8sIG5vdCBqdXN0IGJ5IGVhY2ggbm9kZSBhcyBpdCBhcnJpdmVzOiBldmVyeSBzZXJ2ZXIgd291bGQgcmVqZWN0IGl0IGFueXdheSwgYW5kIGZpbmRpbmcgdGhhdCBvdXQgb25lIG5vZGUgYXQgYSB0aW1lIGlzIGhvdyBhIGNvbmZpZyB3cml0ZSBlbmRzIHVwIGhhbGYtYXBwbGllZFxuICAgICAgICBsZXQgcGFyc2VkQ29uZmlnID0gcGFyc2VSb3V0aW5nRGF0YShkYXRhKTtcbiAgICAgICAgaWYgKCFwYXJzZWRDb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGluZyBjb25maWcgd3JpdGUgcmVqZWN0ZWQgLSBub3QgYSBwYXJzZWFibGUgY29uZmlnLiBUaGUgZGF0YSBpcyBub3QgYSB2YWxpZCB7IHZlcnNpb24/LCBzb3VyY2VzOiBbLi4uXSB9IEpTT04gY29uZmlnICgke2RhdGEubGVuZ3RofSBieXRlcywgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0VmFsaWRSZW1vdGVDb25maWcocGFyc2VkQ29uZmlnKTtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgd3JpdGVUaW1lID0gTWF0aC5yb3VuZChjb25maWc/Lmxhc3RNb2RpZmllZCB8fCBEYXRlLm5vdygpKTtcbiAgICAgICAgbGV0IHdyaXR0ZW46IHN0cmluZ1tdID0gW107XG4gICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIE9uZSB3cml0ZSBwZXIgU1RPUkUsIG5vdCBwZXIgc2VydmVyOiB0aGUgd3JpdGUgbGFuZHMgaW4gdGhlIHN0b3JlIHRoZSBlbnRyeSBOQU1FUywgc28gdHdvIGVudHJpZXMgc2hhcmluZyBhIFVSTCBidXQgbmFtaW5nIGRpZmZlcmVudCBzdG9yZXMgYXJlIHR3byBzZXBhcmF0ZSBkZWxpdmVyaWVzIC0gZGVkdXBpbmcgYnkgVVJMIGFsb25lIGxlYXZlcyB0aGUgc2Vjb25kIHN0b3JlIHVuY29uZmlndXJlZCBmb3JldmVyXG4gICAgICAgIGxldCB0YXJnZXRzOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgbGV0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBgJHtzb3VyY2UuY29uZmlnLnVybH18JHtzb3VyY2UuY29uZmlnLm5hbWV9YDtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGluZyBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IHRvIGFsbCAke3RhcmdldHMubGVuZ3RofSBzdG9yZXMgKHdyaXRlIHRpbWUgJHtmb3JtYXREYXRlVGltZURldGFpbGVkKHdyaXRlVGltZSl9KTogJHtkYXRhLnRvU3RyaW5nKFwidXRmOFwiKS5zbGljZSgwLCAyMDAwKX1gKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGFyZ2V0cy5tYXAoYXN5bmMgc291cmNlID0+IHtcbiAgICAgICAgICAgIGxldCBsYWJlbCA9IGAke3NvdXJjZS5jb25maWcudXJsfSAoc3RvcmUgJHtKU09OLnN0cmluZ2lmeShzb3VyY2UuY29uZmlnLm5hbWUpfSlgO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KFJPVVRJTkdfRklMRSwgZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSB9KSk7XG4gICAgICAgICAgICAgICAgd3JpdHRlbi5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgdGhlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgdG8gJHtsYWJlbH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgJHtsYWJlbH06ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdGF0ZS5yZWZyZXNoQWN0aXZlQ29uZmlnKCk7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRpbmcgY29uZmlnIHdyaXRlIGZhaWxlZCBvbiBzb21lIHN0b3Jlcy4gRm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IGZhaWxlZCBvbiAke2Vycm9ycy5sZW5ndGh9IG9mICR7dGFyZ2V0cy5sZW5ndGh9IHN0b3JlcyAoc3VjY2VlZGVkIG9uOiAke3dyaXR0ZW4uam9pbihcIiwgXCIpIHx8IFwibm9uZVwifSk6ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJPVVRJTkdfRklMRTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiBEZWxDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdmFsaWRhdGVGaWxlTmFtZShmaWxlTmFtZSwgXCJkZWxcIik7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IGZhbGxiYWNrczogISFjb25maWc/LmZhbGxiYWNrcywgd3JpdGU6IHRydWUsIHJldHJpZXM6IGNvbmZpZz8ucmV0cmllcywgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSwgdGltZW91dDogeyB1cGxvYWRCeXRlczogMCwgbGFiZWw6IGBEZWxldGlvbiBvZiAke0pTT04uc3RyaW5naWZ5KGZpbGVOYW1lKX1gIH0gfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZGVsKGZpbGVOYW1lLCBjb25maWcpKTtcbiAgICB9XG5cbiAgICAvKiogU2VlIElBcmNoaXZlcy51bmRlbGV0ZTogcmVzdG9yZXMgYSBmaWxlIG1hcmtlZCBmb3IgZGVsZXRpb24sIGRpc3BhdGNoZWQgdG8gdGhlIHdyaXRlIG5vZGUgYXMgU2V0Q29uZmlnLnVuZGVsZXRlICh0aGUgd3JpdGUgbm9kZSBwcm9wYWdhdGVzIHRoZSByZXN0b3JlIHRvIGl0cyBwZWVycyBpdHNlbGYpLiAqL1xuICAgIHB1YmxpYyBhc3luYyB1bmRlbGV0ZShmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHZhbGlkYXRlRmlsZU5hbWUoZmlsZU5hbWUsIFwidW5kZWxldGVcIik7XG4gICAgICAgIC8vIHNldCByZWZ1c2VzIGVtcHR5IGJ1ZmZlcnMsIGFuZCBhbiB1bmRlbGV0ZSBjYXJyaWVzIG5vIGRhdGEgLSB0aGUgYnl0ZSBpcyBpZ25vcmVkXG4gICAgICAgIGxldCBwbGFjZWhvbGRlciA9IEJ1ZmZlci5mcm9tKFsxXSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IGZhbGxiYWNrczogZmFsc2UsIHdyaXRlOiB0cnVlLCByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpLCB0aW1lb3V0OiB7IHVwbG9hZEJ5dGVzOiBwbGFjZWhvbGRlci5sZW5ndGgsIGxhYmVsOiBgVW5kZWxldGUgb2YgJHtKU09OLnN0cmluZ2lmeShmaWxlTmFtZSl9YCB9IH0sIGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChmaWxlTmFtZSwgcGxhY2Vob2xkZXIsIHsgdW5kZWxldGU6IHRydWUgfSkpO1xuICAgIH1cblxuICAgIC8qKiBTZWUgSUFyY2hpdmVzLm1vdmUuIFdoZW4gb25lIG5vZGUgaXMgdGhlIHdyaXRlIHRhcmdldCBmb3IgQk9USCBwYXRocywgdGhhdCBub2RlIG1vdmVzIHRoZSBmaWxlIGl0c2VsZiAtIHRoZSBieXRlcyBuZXZlciBjb21lIHRocm91Z2ggdXMgLSB3aXRoIHRoZSBzYW1lIHdyb25nLXdpbmRvdy9yb3V0ZSByZS1yZXNvbHV0aW9uIGFzIGFueSB3cml0ZS4gV2hlbiB0aGUgcGF0aHMgcm91dGUgdG8gZGlmZmVyZW50IHNoYXJkcyBubyBzaW5nbGUgbm9kZSBob2xkcyBib3RoLCBzbyB0aGUgbW92ZSBkZWdyYWRlcyB0byBhIGNvcHkgdGhyb3VnaCB1cyBwbHVzIGEgZGVsZXRlLCBDT05GSVJNRUQgYXQgdGhlIGRlc3RpbmF0aW9uIGJlZm9yZSB0aGUgc291cmNlIGlzIHRvdWNoZWQuIE5vIHNtYXJ0IHRpbWVvdXQgb24gdGhlIG5vZGUtc2lkZSBtb3ZlOiBpdCBjYW4gYmUgYSBiaWcgZmlsZSdzIHdvcnRoIG9mIG5vZGUtc2lkZSB3b3JrLCB3aGljaCB0aGUgdXBsb2FkLXNpemVkIGRlYWRsaW5lcyB3b3VsZCBtaXNqdWRnZS4gKi9cbiAgICBwdWJsaWMgYXN5bmMgbW92ZShjb25maWc6IE1vdmVGaWxlQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChjb25maWcuZnJvbVBhdGggPT09IGNvbmZpZy50b1BhdGgpIHJldHVybjtcbiAgICAgICAgaWYgKGNvbmZpZy5mcm9tUGF0aCA9PT0gUk9VVElOR19GSUxFIHx8IGNvbmZpZy50b1BhdGggPT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcm91dGluZyBjb25maWcgJHtKU09OLnN0cmluZ2lmeShST1VUSU5HX0ZJTEUpfSBjYW5ub3QgYmUgbW92ZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZnJvbVJvdXRlID0gZ2V0Um91dGUoY29uZmlnLmZyb21QYXRoKTtcbiAgICAgICAgbGV0IHRvUm91dGUgPSBnZXRSb3V0ZShjb25maWcudG9QYXRoKTtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gc3RhdGUuc291cmNlcy5maW5kKHggPT4gY29uZmlnV2luZG93Q3VycmVudCh4LmNvbmZpZykgJiYgcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgZnJvbVJvdXRlKSk7XG4gICAgICAgIGlmICh0YXJnZXQgJiYgcm91dGVDb250YWlucyh0YXJnZXQuY29uZmlnLnJvdXRlLCB0b1JvdXRlKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KHsgZmFsbGJhY2tzOiBmYWxzZSwgd3JpdGU6IHRydWUsIHJvdXRlOiBmcm9tUm91dGUgfSwgYXN5bmMgYXJjaGl2ZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXJjaGl2ZXMubW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vdmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHNvdXJjZTogJHthcmNoaXZlcy5nZXREZWJ1Z05hbWUoKX0gKG1vdmluZyAke0pTT04uc3RyaW5naWZ5KGNvbmZpZy5mcm9tUGF0aCl9IHRvICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnRvUGF0aCl9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBhcmNoaXZlcy5tb3ZlKGNvbmZpZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbmxpbmUgcmF0aGVyIHRoYW4gbW92ZUFyY2hpdmVGaWxlLCB3aGljaCAtIGdpdmVuIG9uZSBhcmNoaXZlcyB0aGF0IGltcGxlbWVudHMgbW92ZSAtIHdvdWxkIGp1c3QgY2FsbCBiYWNrIGludG8gdGhpcyBtZXRob2RcbiAgICAgICAgbGV0IGNvcGllZCA9IGF3YWl0IGNvcHlBcmNoaXZlRmlsZSh7IGZyb206IHRoaXMsIHRvOiB0aGlzLCBwYXRoOiBjb25maWcuZnJvbVBhdGgsIHRvUGF0aDogY29uZmlnLnRvUGF0aCB9KTtcbiAgICAgICAgaWYgKCFjb3BpZWQpIHtcbiAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBpcyB0d28gY2FzZXMgKHNlZSBjb3B5QXJjaGl2ZUZpbGUpIC0gYXNraW5nIHRoZSBzb3VyY2Ugd2hpY2ggb25lIGtlZXBzIHRoZSBlcnJvciBob25lc3RcbiAgICAgICAgICAgIGxldCBzb3VyY2VJbmZvID0gYXdhaXQgdGhpcy5nZXRJbmZvKGNvbmZpZy5mcm9tUGF0aCk7XG4gICAgICAgICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW92ZSByZWZ1c2VkIC0gYSBuZXdlciBmaWxlIGV4aXN0cyBhdCB0aGUgZGVzdGluYXRpb24uIENhbm5vdCBtb3ZlICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLmZyb21QYXRoKX0gKCR7c291cmNlSW5mby5zaXplfSBieXRlcyBhdCAke2Zvcm1hdERhdGVUaW1lRGV0YWlsZWQoc291cmNlSW5mby53cml0ZVRpbWUpfSkgdG8gJHtKU09OLnN0cmluZ2lmeShjb25maWcudG9QYXRoKX06IHRoZSBjb3B5IHdhcyByZWZ1c2VkIHJhdGhlciB0aGFuIHJvbGwgaXQgYmFjayAoJHt0aGlzLmdldERlYnVnTmFtZSgpfSkgLSB0aGUgc291cmNlIGlzIGxlZnQgdW50b3VjaGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vdmUgc291cmNlIGRvZXMgbm90IGV4aXN0LiBDYW5ub3QgbW92ZSAke0pTT04uc3RyaW5naWZ5KGNvbmZpZy5mcm9tUGF0aCl9IHRvICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnRvUGF0aCl9OiBub3QgZm91bmQgb24gJHt0aGlzLmdldERlYnVnTmFtZSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmdldEluZm8oY29uZmlnLnRvUGF0aCk7XG4gICAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vdmUgY29weSBjb3VsZCBub3QgYmUgY29uZmlybWVkIC0gdGhlIHNvdXJjZSBpcyBrZXB0LiBOb3QgZGVsZXRpbmcgJHtKU09OLnN0cmluZ2lmeShjb25maWcuZnJvbVBhdGgpfSBhZnRlciBjb3B5aW5nIGl0IHRvICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnRvUGF0aCl9OiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3QgcmVwb3J0IGl0ICgke3RoaXMuZ2V0RGVidWdOYW1lKCl9KWApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsKGNvbmZpZy5mcm9tUGF0aCk7XG4gICAgfVxuXG4gICAgLy8gT25lIHdyaXRlIHRhcmdldCBwZXIgcm91dGUgcmFuZ2UsIGxvd2VzdCBsYXRlbmN5IGZpcnN0LiBXaXRoaW4gYSBzaGFyZCB0aGUgdGFyZ2V0IGlzIEFMV0FZUyB0aGUgZmlyc3Qgc291cmNlIGluIGNvbmZpZyBvcmRlciAoc2VlIHJ1blByaW1hcnkgLSB3cml0ZXMgbXVzdCBzdGF5IG9uIHRoZSBzYW1lIG5vZGUpOiBjb25uZWN0aXZpdHkgb25seSBkZWNpZGVzIHdoaWNoIFNIQVJEIHdlIHBpY2ssIG5ldmVyIHdoaWNoIG5vZGUgd2l0aGluIGl0LCBzbyBhIHNoYXJkIHdob3NlIG5vZGUgaXMgZGlzY29ubmVjdGVkIGlzIGRyb3BwZWQgZW50aXJlbHkgd2hlbiBjb25uZWN0ZWRPbmx5IGlzIHNldC5cbiAgICBwcml2YXRlIGdldFZhcmlhYmxlU2hhcmRUYXJnZXRzKHN0YXRlOiBDaGFpblN0YXRlLCBjb25maWc6IHsgY29ubmVjdGVkT25seTogYm9vbGVhbiB9KTogU291cmNlV3JhcHBlcltdIHtcbiAgICAgICAgbGV0IHRhcmdldHNCeVJvdXRlID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVdyYXBwZXI+KCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ1dpbmRvd0N1cnJlbnQoc291cmNlLmNvbmZpZykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHJvdXRlS2V5ID0gSlNPTi5zdHJpbmdpZnkoc291cmNlLmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFKTtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0c0J5Um91dGUuaGFzKHJvdXRlS2V5KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldHNCeVJvdXRlLnNldChyb3V0ZUtleSwgc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgdGFyZ2V0cyA9IFsuLi50YXJnZXRzQnlSb3V0ZS52YWx1ZXMoKV07XG4gICAgICAgIGlmIChjb25maWcuY29ubmVjdGVkT25seSkge1xuICAgICAgICAgICAgdGFyZ2V0cyA9IHRhcmdldHMuZmlsdGVyKHggPT4geC5pc0Nvbm5lY3RlZCgpKTtcbiAgICAgICAgfVxuICAgICAgICBzb3J0KHRhcmdldHMsIHggPT4geC5nZXRMYXRlbmN5KCkpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0cztcbiAgICB9XG5cbiAgICAvKiogVGhlIGtleSBzZXRWYXJpYWJsZVNoYXJkIHdvdWxkIG1hdGVyaWFsaXplIGZvciB0aGlzIFZBUklBQkxFX1NIQVJEIGtleSAoYSB2YWx1ZSBpbiB0aGUgcHJlZmVycmVkIHNoYXJkJ3Mgcm91dGUgcmFuZ2UpLCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcuICovXG4gICAgcHVibGljIGFzeW5jIGdldFNoYXJkS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCFrZXkuaW5jbHVkZXMoVkFSSUFCTEVfU0hBUkQpIHx8IHBhcnNlVmFyaWFibGVSb3V0ZShrZXkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0U2hhcmRLZXkgcmVxdWlyZXMgYSBrZXkgY29udGFpbmluZyBhbiB1bm1hdGVyaWFsaXplZCAke0pTT04uc3RyaW5naWZ5KFZBUklBQkxFX1NIQVJEKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KGtleSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5nZXRWYXJpYWJsZVNoYXJkVGFyZ2V0cyhzdGF0ZSwgeyBjb25uZWN0ZWRPbmx5OiB0cnVlIH0pWzBdXG4gICAgICAgICAgICB8fCB0aGlzLmdldFZhcmlhYmxlU2hhcmRUYXJnZXRzKHN0YXRlLCB7IGNvbm5lY3RlZE9ubHk6IGZhbHNlIH0pWzBdO1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgYWNjZXB0cyB3cml0ZXMgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0sIHNvIHRoZXJlIGlzIG5vIHNoYXJkIHRvIG1hdGVyaWFsaXplICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gaW50b2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVNoYXJkS2V5KGtleSwgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNldFZhcmlhYmxlU2hhcmQoa2V5OiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogU2V0Q29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICAvLyBUaGVyZSdzIG5vIHBvaW50IHRhbGtpbmcgdG8gYSBzaGFyZCB3aG9zZSBub2RlIHdhcyBmYXN0IGJ1dCBpcyBub3cgZGlzY29ubmVjdGVkIC0gb25seSB3aGVuIG5vIGNvbm5lY3RlZCBzaGFyZCB3b3JrcyBkbyB3ZSByZWNoZWNrIGF2YWlsYWJpbGl0eSBhbmQgdHJ5IGV2ZXJ5IHNoYXJkXG4gICAgICAgIGxldCBjb25uZWN0ZWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGxldCB0YXJnZXRzID0gdGhpcy5nZXRWYXJpYWJsZVNoYXJkVGFyZ2V0cyhzdGF0ZSwgeyBjb25uZWN0ZWRPbmx5IH0pO1xuICAgICAgICAgICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZ1bGxLZXkgPSBtYXRlcmlhbGl6ZVNoYXJkS2V5KGtleSwgdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2hhcmQgcGlja2luZyBhbHJlYWR5IHJldHJpZXMgYWNyb3NzIHNoYXJkcywgc28gYSBzdHVjayBzaGFyZCBqdXN0IGNvc3RzIGl0cyB0aW1lb3V0IGFuZCB3ZSBtb3ZlIG9uLiBMYXJnZSBkYXRhIHN0cmVhbXMgdmlhIHNldExhcmdlRmlsZSAtIHRoZSBrZXkgaXMgYWxyZWFkeSBtYXRlcmlhbGl6ZWQgaGVyZSwgc28gdGhlIG5vLVZBUklBQkxFX1NIQVJEIHJlc3RyaWN0aW9uIG9uIHNldExhcmdlRmlsZSBkb2Vzbid0IGFwcGx5LlxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcGx5U21hcnRUaW1lb3V0KHsgdXBsb2FkQnl0ZXM6IGRhdGEubGVuZ3RoLCBsYWJlbDogYFZhcmlhYmxlLXNoYXJkIHVwbG9hZCBvZiAke0pTT04uc3RyaW5naWZ5KGZ1bGxLZXkpfSAoJHtkYXRhLmxlbmd0aH0gYnl0ZXMpYCB9LCB0YXJnZXQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IExBUkdFX1NFVF9USFJFU0hPTEQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldExhcmdlRmlsZSh7IHBhdGg6IGZ1bGxLZXksIC4uLmNvbmZpZywgLi4uYnVmZmVyQ2h1bmtTdHJlYW0oZGF0YSkgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC53cml0ZShhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXQoZnVsbEtleSwgZGF0YSwgY29uZmlnKSkgYXMgYW55O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxLZXk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFNNQVJUX1RJTUVPVVRfTUFSS0VSKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgVmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0ICR7dGFyZ2V0LmdldERlYnVnTmFtZSgpfSB0aW1lZCBvdXQ7IG1vdmluZyB0byB0aGUgbmV4dC1sb3dlc3QtbGF0ZW5jeSBzaGFyZDogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmlzQ29ubmVjdGVkKCkpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0ICR7dGFyZ2V0LmdldERlYnVnTmFtZSgpfSBpcyBkb3duOyBtb3ZpbmcgdG8gdGhlIG5leHQtbG93ZXN0LWxhdGVuY3kgc2hhcmRgKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbm5lY3RlZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXRlLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXZlcnkgdmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0IGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlcnJvcnMuam9pbihcIiB8IFwiKSB8fCBcIm5vIHNvdXJjZXMgYWNjZXB0IHdyaXRlc1wifWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEEgbGFyZ2UgZmlsZSBpcyB3cml0dGVuIGV4YWN0bHkgbGlrZSBhIHNtYWxsIG9uZSAtIHNhbWUgd3JpdGUgbm9kZSwgc2FtZSB3cm9uZy13aW5kb3cvcm91dGUgcmUtcmVzb2x1dGlvbiwgc2FtZSBmYWxsYmFja3MgLSBzbyBhIHZhbHVlJ3MgU0laRSBuZXZlciBkZWNpZGVzIGl0cyB3cml0ZSBzZW1hbnRpY3MgKHNldCBzdHJlYW1zIHRocm91Z2ggaGVyZSBwYXN0IExBUkdFX1NFVF9USFJFU0hPTEQsIGFuZCBhIGZpbGUgdGhhdCBncmV3IHBhc3QgaXQgbXVzdCBub3Qgc3VkZGVubHkgbG9zZSB0aGUgYXZhaWxhYmlsaXR5IGl0cyBjYWxsZXIgYXNrZWQgZm9yKS4gVGhlIG9uZSBkaWZmZXJlbmNlOiBldmVyeSBhdHRlbXB0IGFmdGVyIHRoZSBmaXJzdCBoYXMgdG8gcmV3aW5kIHRoZSBzdHJlYW0sIHNvIGEgY29uZmlnIHdpdGhvdXQgcmVzdGFydFN0cmVhbSBnZXRzIGEgc2luZ2xlIGF0dGVtcHQuICovXG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IFNldExhcmdlRmlsZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB2YWxpZGF0ZUZpbGVOYW1lKGNvbmZpZy5wYXRoLCBcInNldExhcmdlRmlsZVwiKTtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoLmluY2x1ZGVzKFZBUklBQkxFX1NIQVJEKSAmJiBwYXJzZVZhcmlhYmxlUm91dGUoY29uZmlnLnBhdGgpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2V0TGFyZ2VGaWxlIGRvZXMgbm90IHN1cHBvcnQgVkFSSUFCTEVfU0hBUkQga2V5cyAodGhlcmUgaXMgbm8gd2F5IHRvIHJldHVybiB0aGUgbWF0ZXJpYWxpemVkIGtleSk7IHdyaXRlIHRoZSBmaWxlIHdpdGggc2V0LCBvciBtYXRlcmlhbGl6ZSB0aGUga2V5IHlvdXJzZWxmLiBLZXk6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLnBhdGgpfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKGNvbmZpZy5wYXRoKTtcbiAgICAgICAgY29uc3QgcmVzdGFydFN0cmVhbSA9IGNvbmZpZy5yZXN0YXJ0U3RyZWFtO1xuICAgICAgICBpZiAoIXJlc3RhcnRTdHJlYW0pIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TGFyZ2VGaWxlT25jZShjb25maWcsIHJvdXRlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IGZhbGxiYWNrczogISFjb25maWcuZmFsbGJhY2tzLCB3cml0ZTogdHJ1ZSwgcmV0cmllczogY29uZmlnLnJldHJpZXMsIHJvdXRlIH0sIGFzeW5jIGFyY2hpdmVzID0+IHtcbiAgICAgICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBhdHRlbXB0IGNvbnN1bWVkIHNvbWUgKG9yIGFsbCkgb2YgdGhlIHN0cmVhbSwgYW5kIHRoaXMgc291cmNlIG5lZWRzIHRoZSBmaWxlIGZyb20gaXRzIGZpcnN0IGJ5dGVcbiAgICAgICAgICAgIGlmIChhdHRlbXB0ID4gMSkgYXdhaXQgcmVzdGFydFN0cmVhbSgpO1xuICAgICAgICAgICAgYXdhaXQgd2F0Y2hTbG93UHJvbWlzZShgc2V0TGFyZ2VGaWxlfCR7Y29uZmlnLnBhdGh9YCwgYXJjaGl2ZXMuc2V0TGFyZ2VGaWxlKGNvbmZpZykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBIHN0cmVhbSB0aGF0IGNhbm5vdCByZXdpbmQgZ2V0cyBleGFjdGx5IE9ORSBhdHRlbXB0IGF0IHRoZSB3cml0ZSBub2RlOiByZXRyeWluZyBhbnl3aGVyZSAoYW5vdGhlciBzb3VyY2UsIG9yIHRoaXMgb25lIGFnYWluKSB3b3VsZCBzZW5kIHdoYXRldmVyIGlzIGxlZnQgb2YgYW4gYWxyZWFkeS1jb25zdW1lZCBzdHJlYW0gYXMgaWYgaXQgd2VyZSB0aGUgd2hvbGUgZmlsZS5cbiAgICBwcml2YXRlIGFzeW5jIHNldExhcmdlRmlsZU9uY2UoY29uZmlnOiBTZXRMYXJnZUZpbGVDb25maWcsIHJvdXRlOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHN0YXRlLnNvdXJjZXMuZmluZCh4ID0+IGNvbmZpZ1dpbmRvd0N1cnJlbnQoeC5jb25maWcpICYmIHJvdXRlQ29udGFpbnMoeC5jb25maWcucm91dGUsIHJvdXRlKSk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhdGUucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgYWNjZXB0cyB3cml0ZXMgZm9yIHNldExhcmdlRmlsZSBvbiAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IChyb3V0ZSAke3JvdXRlfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgd2F0Y2hTbG93UHJvbWlzZShgc2V0TGFyZ2VGaWxlfCR7Y29uZmlnLnBhdGh9YCwgdGFyZ2V0LndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldExhcmdlRmlsZShjb25maWcpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCB1cmxzID0gYXdhaXQgdGhpcy5nZXRVUkxzKHBhdGgpO1xuICAgICAgICBpZiAoIXVybHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHB1YmxpYyBzb3VyY2UgY292ZXJpbmcgcm91dGUgJHtnZXRSb3V0ZShwYXRoKX0gdG8gYnVpbGQgYSBVUkwgZnJvbSBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxzWzBdO1xuICAgIH1cblxuICAgIC8qKiBFdmVyeSBVUkwgdGhhdCBjb3VsZCBzZXJ2ZSB0aGlzIHBhdGg6IHB1YmxpYyBzb3VyY2VzIG1hdGNoaW5nIGJvdGggdGhlIHBhdGgncyByb3V0ZSBhbmQgdGhlIGN1cnJlbnQgdmFsaWQgd2luZG93LiBUaGUgZmlyc3QgaXMgdGhlIHdyaXRlIG5vZGUncyAoZmlyc3QgbWF0Y2hpbmcgc291cmNlIGluIGNvbmZpZyBvcmRlciwgc2VlIHJ1blByaW1hcnkgLSB0aGUgb25lIGd1YXJhbnRlZWQgY3VycmVudCk7IHRoZSByZXN0IGFyZSByYW5rZWQgZmFzdGVzdC1maXJzdCBieSBtZWFzdXJlZCBsYXRlbmN5LiBFbXB0eSB3aGVuIG5vbmUgcXVhbGlmeS4gKi9cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMcyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRHZXRVUkxzKCkpKHBhdGgpO1xuICAgIH1cblxuICAgIC8qKiBnZXRVUkxzLCBidXQgYWZ0ZXIgdGhlIG9uZSBhd2FpdCAoaW5pdGlhbGl6YXRpb24pIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBpcyBzeW5jaHJvbm91czogZXZlcnl0aGluZyB1bmRlcm5lYXRoIC0gcm91dGUgaGFzaGluZywgd2luZG93IGNoZWNrcywgbGF0ZW5jaWVzLCBVUkwgYnVpbGRpbmcgLSBpcyBzeW5jaHJvbm91cywgYW5kIHRoZSBjbG9zdXJlIGFsd2F5cyByZWFkcyB0aGUgbmV3ZXN0IGFkb3B0ZWQgY29uZmlnLCBzbyBpdCBzdGF5cyBjb3JyZWN0IGFjcm9zcyBjb25maWcgcmVmcmVzaGVzLiAqL1xuICAgIHB1YmxpYyBhc3luYyBnZXRHZXRVUkxzKCk6IFByb21pc2U8KHBhdGg6IHN0cmluZykgPT4gc3RyaW5nW10+IHtcbiAgICAgICAgbGV0IGluaXRpYWxTdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFrZUdldFVSTHMoaW5pdGlhbFN0YXRlLCB7IHdyaXRlTm9kZUZpcnN0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKiBnZXRHZXRVUkxzLCBidXQgc29ydGVkIHB1cmVseSBieSBsYXRlbmN5IC0gdGhlIHdyaXRlIG5vZGUgZ2V0cyBubyBzcGVjaWFsIGZpcnN0IHBvc2l0aW9uLiBGb3IgcmVhZC1vbmx5IGNvbnN1bWVycyB0aGF0IGp1c3Qgd2FudCB0aGUgZmFzdGVzdCBob3N0LiAqL1xuICAgIHB1YmxpYyBhc3luYyBnZXRHZXRGYXN0VVJMcygpOiBQcm9taXNlPChwYXRoOiBzdHJpbmcpID0+IHN0cmluZ1tdPiB7XG4gICAgICAgIGxldCBpbml0aWFsU3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlLmdldFN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ha2VHZXRVUkxzKGluaXRpYWxTdGF0ZSwgeyB3cml0ZU5vZGVGaXJzdDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlR2V0VVJMcyhpbml0aWFsU3RhdGU6IENoYWluU3RhdGUsIGNvbmZpZzogeyB3cml0ZU5vZGVGaXJzdDogYm9vbGVhbiB9KTogKHBhdGg6IHN0cmluZykgPT4gc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5sYXRlc3QoKSB8fCBpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICBsZXQgcm91dGUgPSBnZXRSb3V0ZShwYXRoKTtcbiAgICAgICAgICAgIGxldCBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoc291cmNlLmNvbmZpZy5wdWJsaWMgPz8gdHJ1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghcm91dGVDb250YWlucyhzb3VyY2UuY29uZmlnLnJvdXRlLCByb3V0ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnV2luZG93Q3VycmVudChzb3VyY2UuY29uZmlnKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgc291cmNlcy5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgb3JkZXJlZDogU291cmNlV3JhcHBlcltdO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy53cml0ZU5vZGVGaXJzdCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN0ID0gc291cmNlcy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBzb3J0KHJlc3QsIHggPT4geC5nZXRMYXRlbmN5KCkpO1xuICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBbLi4uc291cmNlcy5zbGljZSgwLCAxKSwgLi4ucmVzdF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBbLi4uc291cmNlc107XG4gICAgICAgICAgICAgICAgc29ydChvcmRlcmVkLCB4ID0+IHguZ2V0TGF0ZW5jeSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB1cmxzID0gb3JkZXJlZC5tYXAoeCA9PiBidWlsZEZpbGVVcmwoZ2V0QnVja2V0QmFzZVVybCh4LmNvbmZpZy51cmwpLCBwYXRoKSk7XG4gICAgICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQodXJscyldO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRpc3Bvc2UoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcmNoaXZlcyhjb25maWc6IFJlbW90ZUNvbmZpZyB8IFJlbW90ZUNvbmZpZ0Jhc2UsIG9wdGlvbnM/OiBBcmNoaXZlc0NoYWluT3B0aW9ucyk6IEFyY2hpdmVzQ2hhaW4ge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXNDaGFpbihjb25maWcsIG9wdGlvbnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsU2VydmVyPFQ+KHVybDogc3RyaW5nLCBydW46IChjb250cm9sbGVyOiB0eXBlb2YgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbc3RyaW5nXSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIFNvY2tldEZ1bmN0aW9uLkVOQUJMRV9DTElFTlRfTU9ERSA9IHRydWU7XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlU3RvcmFnZVVybCh1cmwpO1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0IH0pO1xuICAgIGxldCBjb250cm9sbGVyID0gUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbbm9kZUlkXTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuKGNvbnRyb2xsZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFTdHJpbmcoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB0aHJvdyBlO1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0LCBub2RlSWQgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBydW4oY29udHJvbGxlcik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZlckJ1Y2tldHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8U2VydmVyQnVja2V0SW5mb1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmxpc3RCdWNrZXRzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQgfSkpO1xufVxuXG4vKiogVGhlIGxpdmUsIGluLW1lbW9yeSBzdGF0ZSBvZiBvbmUgYnVja2V0IG9uIGEgc2VydmVyIChyb3V0aW5nIGNvbmZpZyBpbmNsdWRlZCksIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgaXMgdW5hdmFpbGFibGUuIENoZWFwIC0gaXQgbmV2ZXIgdG91Y2hlcyB0aGUgc2VydmVyJ3MgZGlzayAtIGJ1dCBvbmx5IHdvcmtzIHdoaWxlIHRoYXQgYnVja2V0IGlzIGxvYWRlZCB0aGVyZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXJ2ZXJBY3RpdmVCdWNrZXQoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmdldEFjdGl2ZUJ1Y2tldCh7IGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSB9KSk7XG59XG5cbi8qKiBUaGUgYnVja2V0cyBhIHNlcnZlciBjdXJyZW50bHkgaGFzIGxvYWRlZC4gQWRtaW4gb25seSwgc28gaW4gcHJhY3RpY2UgdGhpcyBpcyBvdXIgb3duIG1hY2hpbmUncyBvdGhlciBwcm9jZXNzIC0gYSBkZXBsb3kgc3VjY2Vzc29yIGFza2luZyBpdHMgcHJlZGVjZXNzb3Igd2hhdCBpcyBhY3R1YWxseSBpbiB1c2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZlckFjdGl2ZUJ1Y2tldEtleXMoY29uZmlnOiB7IHVybDogc3RyaW5nIH0pOiBQcm9taXNlPHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmFkbWluTGlzdEFjdGl2ZUJ1Y2tldHMoKSk7XG59XG5cbi8qKiBUZWxscyBhIHNlcnZlciB0byBsb2FkIG9uZSBvZiBpdHMgYnVja2V0cyBpbnRvIG1lbW9yeSAoc3RhcnRpbmcgaXRzIHN5bmNocm9uaXphdGlvbikgYW5kIHJldHVybnMgaXRzIGxpdmUgc3RhdGUsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgY291bGQgbm90IGJlIGxvYWRlZC4gT25seSB0b3VjaGVzIHRoYXQgc2VydmVyIC0gbm90aGluZyBpcyB3cml0dGVuIGFuZCBubyBvdGhlciBzb3VyY2UgaXMgY29udGFjdGVkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlU2VydmVyQnVja2V0KGNvbmZpZzogeyB1cmw6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCBjYWxsU2VydmVyKGNvbmZpZy51cmwsIGNvbnRyb2xsZXIgPT4gY29udHJvbGxlci5hY3RpdmF0ZUJ1Y2tldCh7IGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSB9KSk7XG59XG5cbi8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdFNlcnZlckJ1Y2tldHMgcmVwb3J0cywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhclNlcnZlcldyaXRlU3RhdHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuY2xlYXJXcml0ZVN0YXRzKHsgYWNjb3VudDogY29uZmlnLmFjY291bnQgfSkpO1xufVxuXG4vKiogVGhlIG9wZXJhdGlvbi1sb2cgZmlsZXMgT05FIHN0b3JhZ2Ugc2VydmVyIGhvbGRzIChldmVyeSBzZXJ2ZXIgbG9ncyBvbmx5IGl0cyBvd24gb3BlcmF0aW9ucyAtIHNlZSBsaXN0QWxsU2VydmVyTG9nRmlsZXMgZm9yIHRoZSB3aG9sZSBmbGVldCkuIFRoZSBuYW1lcyBjYXJyeSBwaWQvdGhyZWFkL3RpbWUtcmFuZ2UvZW50cnktY291bnQgbWV0YWRhdGE7IHNlZSBMb2dGaWxlSW5mby4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2VydmVyTG9nRmlsZXMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8TG9nRmlsZUluZm9bXT4ge1xuICAgIHJldHVybiBhd2FpdCBjYWxsU2VydmVyKGNvbmZpZy51cmwsIGNvbnRyb2xsZXIgPT4gY29udHJvbGxlci5saXN0TG9nRmlsZXMoeyBhY2NvdW50OiBjb25maWcuYWNjb3VudCB9KSk7XG59XG5cbi8qKiBFdmVyeSBzZXJ2ZXIncyBsb2cgZmlsZXMgYXQgb25jZSwgb25lIGVudHJ5IHBlciB1cmwgLSBhIHNlcnZlciB0aGF0IGNhbm5vdCBhbnN3ZXIgcmVwb3J0cyBpdHMgZXJyb3IgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSByZXN0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RBbGxTZXJ2ZXJMb2dGaWxlcyhjb25maWc6IHsgdXJsczogc3RyaW5nW107IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTx7IHVybDogc3RyaW5nOyBmaWxlcz86IExvZ0ZpbGVJbmZvW107IGVycm9yPzogc3RyaW5nIH1bXT4ge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChjb25maWcudXJscy5tYXAoYXN5bmMgdXJsID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB7IHVybCwgZmlsZXM6IGF3YWl0IGxpc3RTZXJ2ZXJMb2dGaWxlcyh7IHVybCwgYWNjb3VudDogY29uZmlnLmFjY291bnQgfSkgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdXJsLCBlcnJvcjogU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKSB9O1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuXG4vKiogRG93bmxvYWRzIHRoZSBuYW1lZCBsb2cgZmlsZXMgb2ZmIG9uZSBzZXJ2ZXIgYW5kIGRlY29kZXMgdGhlbSBpbnRvIHRoZSBsb2dnZWQgb2JqZWN0cyAodGhlIHdpcmUgYWx3YXlzIGNhcnJpZXMgdGhlbSBMWjQtY29tcHJlc3NlZCAtIGxpdmUgZmlsZXMgYXJlIGNvbXByZXNzZWQgaW4gbWVtb3J5IHNlcnZlci1zaWRlKS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXJ2ZXJMb2dzKGNvbmZpZzogeyB1cmw6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nOyBuYW1lczogc3RyaW5nW10gfSk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGVudHJpZXM6IHVua25vd25bXSB9W10+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBhc3luYyBjb250cm9sbGVyID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdHM6IHsgbmFtZTogc3RyaW5nOyBlbnRyaWVzOiB1bmtub3duW10gfVtdID0gW107XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgY29uZmlnLm5hbWVzKSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGNvbnRyb2xsZXIuZ2V0TG9nRmlsZSh7IGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBuYW1lIH0pO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHsgbmFtZSwgZW50cmllczogZGVjb2RlTG9nRmlsZShCdWZmZXIuZnJvbShkYXRhKSkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5cbi8qKiBnZXRTZXJ2ZXJMb2dzLCBidXQgU0VBUkNIRUQgaW5zdGVhZCBvZiBmdWxseSBkZWNvZGVkOiB0aGUgcmF3IEpTT04gdGV4dCBpcyBzdWJzdHJpbmctbWF0Y2hlZCAoZXZlcnkgc2VhcmNoIHN0cmluZyBtdXN0IGFwcGVhciBpbiBhIHN0YXRlbWVudCAtIHNlZSBjcmVhdGVMb2dTZWFyY2hlciksIGFuZCBvbmx5IHRoZSBtYXRjaGluZyBzdGF0ZW1lbnRzIGFyZSBkZWNvZGVkIGludG8gb2JqZWN0cy4gRmFyIGNoZWFwZXIgdGhhbiBkZWNvZGluZyB3aG9sZSBmaWxlcyB0byBsb29rIGZvciBvbmUgcGF0aCBvciBjYWxsZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoU2VydmVyTG9ncyhjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgbmFtZXM6IHN0cmluZ1tdOyBzZWFyY2hlczogc3RyaW5nW10gfSk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGVudHJpZXM6IHVua25vd25bXSB9W10+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBhc3luYyBjb250cm9sbGVyID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdHM6IHsgbmFtZTogc3RyaW5nOyBlbnRyaWVzOiB1bmtub3duW10gfVtdID0gW107XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgY29uZmlnLm5hbWVzKSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGNvbnRyb2xsZXIuZ2V0TG9nRmlsZSh7IGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBuYW1lIH0pO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHsgbmFtZSwgZW50cmllczogY3JlYXRlTG9nU2VhcmNoZXIoQnVmZmVyLmZyb20oZGF0YSkpKGNvbmZpZy5zZWFyY2hlcykgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCdWNrZXRJbmZvKGNvbmZpZzogeyB1cmw6IHN0cmluZyB9KTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgIC8vIGdldENvbmZpZyBpcyBidWNrZXQtbGV2ZWwgKG5vIHN0b3JlIHNlbGVjdGlvbiksIHNvIHRoZSBmYWJyaWNhdGVkIHNvdXJjZUNvbmZpZyBuZXZlciBoYXMgdG8gbWF0Y2ggYW55dGhpbmdcbiAgICBsZXQgcmVtb3RlID0gbmV3IEFyY2hpdmVzUmVtb3RlKHsgdXJsOiBjb25maWcudXJsLCB3YWl0Rm9yQWNjZXNzOiBmYWxzZSwgc291cmNlQ29uZmlnOiBub3JtYWxpemVTb3VyY2UoY29uZmlnLnVybCkgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlbW90ZS5nZXRDb25maWcoKTtcbn1cbiJdfQ==
1009
- /* _JS_SOURCE_HASH = "5c3bb5ecee2c3b1cc55c97c4b23f9281b1b7d7a1860231c157ddcb78de169ae7"; */
1009
+ /* _JS_SOURCE_HASH = "a96f4a5a5a84ebd2cbb6f49bf18a0afe5b996e75156b6182b07743ed0cf67b72"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -139,4 +139,4 @@ function getMainPortAcquireDelay() {
139
139
  }
140
140
  exports.getMainPortAcquireDelay = getMainPortAcquireDelay;
141
141
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95VGFrZW92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3lUYWtlb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHFFQUF3RTtBQUN4RSxrRUFBK0U7QUFFL0UsTUFBTSw4QkFBOEIsR0FBRywwQkFBMEIsQ0FBQztBQUNsRSxNQUFNLHlCQUF5QixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2QyxxTUFBcU07QUFDck0sTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBY3RDLElBQUksUUFBb0MsQ0FBQztBQUV6QyxTQUFTLEdBQUcsQ0FBQyxJQUFZO0lBQ3JCLE9BQU8sSUFBQSwrQkFBc0IsRUFBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2QsT0FBTyxRQUFRLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUI7SUFDdEIsT0FBTyxjQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25FLENBQUM7QUFFRCxLQUFLLFVBQVUsbUJBQW1COztJQUM5QixJ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LENBQUM7QUFIRCxrREFHQztBQUVELGlLQUFpSztBQUNqSyxTQUFnQix1QkFBdUI7SUFDbkMsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLGtCQUFrQixDQUFDO0lBQ3pDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLFdBQVcsRUFBRSxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsT0FBTyxrQkFBa0IsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM5QixDQUFDO0FBTkQsMERBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc3RhcnRJbnRlcm1lZGlhdGVNYWludGVuYW5jZSB9IGZyb20gXCIuL2ludGVybWVkaWF0ZU1hbmFnZW1lbnRcIjtcbmltcG9ydCB7IGZvcm1hdERhdGVUaW1lRGV0YWlsZWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuXG5jb25zdCBQQVJBTUVURVJTX1RJTUVMSU5FX0ZJTEVfUkVHRVggPSAvXihcXGQrKS1wYXJhbWV0ZXJzXFwuanNvbiQvO1xuY29uc3QgREVQTE9ZX0RFVEVDVF9SRVRSWV9ERUxBWSA9IDUgKiAxMDAwO1xuY29uc3QgREVQTE9ZX0RFVEVDVF9USU1FT1VUID0gMzAgKiAxMDAwO1xuY29uc3QgRVhJVF9MT0dfRkxVU0hfREVMQVkgPSA1ICogMTAwMDtcbmNvbnN0IEFMVF9QT1JUX0xJTkdFUiA9IDMwICogNjAgKiAxMDAwO1xuLy8gVGhlIGVuZCB0aW1lIG5lZWRzIHRvIGJlIGVub3VnaCBhZnRlciB0aGUga2lsbCB0aW1lIHRoYXQgd2UgYXJlIGNlcnRhaW4gd2Ugd2lsbCBoYXZlIHRoZSBtYWluIHBvcnQgYnkgdGhlbi4gU2NhbGVkIHVwIHdpdGggdGhlIG92ZXJsYXAsIHNvIHVudXN1YWxseSBsb25nIG92ZXJsYXBzIGdldCBhbiBlcXVhbGx5IGdlbmVyb3VzIGJ1ZmZlci5cbmNvbnN0IElOVEVSTUVESUFURV9FTkRfTUlOX0JVRkZFUiA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBBQ1FVSVJFX1NMT1dfREVMQVkgPSAzMCAqIDEwMDA7XG5jb25zdCBBQ1FVSVJFX0ZBU1RfREVMQVkgPSAxMDAwO1xuY29uc3QgQUNRVUlSRV9GQVNUX1dJTkRPVyA9IDYwICogMTAwMDtcblxudHlwZSBUaW1lbGluZUVudHJ5ID0ge1xuICAgIHBhcmFtZXRlcnM6IHsgcmVsZWFzZVRpbWU/OiBudW1iZXI7IG92ZXJsYXBUaW1lPzogbnVtYmVyIH07XG59O1xuXG50eXBlIERlcGxveVRha2VvdmVyID0ge1xuICAgIHJlbGVhc2VUaW1lOiBudW1iZXI7XG4gICAgb3ZlcmxhcFRpbWU6IG51bWJlcjtcbiAgICBhbHRQb3J0PzogbnVtYmVyO1xuICAgIC8vIEZyb3plbiB3aGVuIHRoZSBhbHQgcG9ydCBpcyB0YWtlbiAoYSBtb3Zpbmcgc3RhcnQgd291bGQgbWFrZSBldmVyeSBtYWludGVuYW5jZSBwYXNzIHdyaXRlIGEgbmV3IGNvbmZpZylcbiAgICBpbnRlcm1lZGlhdGVTdGFydD86IG51bWJlcjtcbn07XG5cbmxldCB0YWtlb3ZlcjogRGVwbG95VGFrZW92ZXIgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzbyh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBmb3JtYXREYXRlVGltZURldGFpbGVkKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBsb2dQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFtwaWQgJHtwcm9jZXNzLnBpZH1dYDtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVGb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5kaXJuYW1lKHByb2Nlc3MuY3dkKCkpLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKSArIFwiL1wiO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkVGltZWxpbmVFbnRyaWVzKCk6IFByb21pc2U8VGltZWxpbmVFbnRyeVtdPiB7XG4gICAgbGV0IGZvbGRlciA9IGdldFRpbWVsaW5lRm9sZGVyKCk7XG4gICAgbGV0IGZpbGVzOiBzdHJpbmdbXTtcbiAgICB0cnkge1xuICAgICAgICBmaWxlcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZm9sZGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXgoKX0gQ291bGQgbm90IHJlYWQgdGhlIGRlcGxveSB0aW1lbGluZSBmb2xkZXIgJHtmb2xkZXJ9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGxldCBlbnRyaWVzOiBUaW1lbGluZUVudHJ5W10gPSBbXTtcbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmICghUEFSQU1FVEVSU19USU1FTElORV9GSUxFX1JFR0VYLnRlc3QoZmlsZSkpIGNvbnRpbnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKEpTT04ucGFyc2UoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZm9sZGVyICsgZmlsZSwgXCJ1dGY4XCIpKSBhcyBUaW1lbGluZUVudHJ5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeCgpfSBDb3VsZCBub3QgcmVhZCBkZXBsb3kgdGltZWxpbmUgZmlsZSAke2ZvbGRlciArIGZpbGV9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbnRyaWVzO1xufVxuXG4vLyBUaGUgbmV3ZXN0IHJlbGVhc2UgaW4gdGhlIHRpbWVsaW5lIGlzIHRoZSBvbmUgd2UgYXJlIHBhcnQgb2YgLSB0aGUgdGltZWxpbmUgaXMgYXBwZW5kLW9ubHkgaGlzdG9yeSwgc28gd2hhdGV2ZXIgcHJvY2VzcyBzdGFydHMgdXAgZHVyaW5nIGEgdGFrZW92ZXIgYmVsb25ncyB0byBpdHMgbGF0ZXN0IGVudHJ5XG5mdW5jdGlvbiBmaW5kT3VyUmVsZWFzZShlbnRyaWVzOiBUaW1lbGluZUVudHJ5W10pOiBEZXBsb3lUYWtlb3ZlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGJlc3Q6IERlcGxveVRha2VvdmVyIHwgdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgbGV0IHJlbGVhc2VUaW1lID0gZW50cnkucGFyYW1ldGVycy5yZWxlYXNlVGltZTtcbiAgICAgICAgaWYgKHJlbGVhc2VUaW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgb3ZlcmxhcFRpbWUgPSBlbnRyeS5wYXJhbWV0ZXJzLm92ZXJsYXBUaW1lIHx8IDA7XG4gICAgICAgIGlmIChiZXN0ICYmIGJlc3QucmVsZWFzZVRpbWUgPj0gcmVsZWFzZVRpbWUpIGNvbnRpbnVlO1xuICAgICAgICBiZXN0ID0geyByZWxlYXNlVGltZSwgb3ZlcmxhcFRpbWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJlc3Q7XG59XG5cbi8qKiBDYWxsZWQgd2hlbiB0aGUgbWFpbiBwb3J0IGlzIGFscmVhZHkgaW4gdXNlLCB3aGljaCBvbiBhIGhlYWx0aHkgbWFjaGluZSBvbmx5IGhhcHBlbnMgd2hpbGUgb3VyIHByZWRlY2Vzc29yIGlzIHN0aWxsIHJ1bm5pbmcgYSBkZXBsb3kgb3ZlcmxhcC4gQ29uZmlybXMgdGhhdCBhZ2FpbnN0IHRoZSBkZXBsb3kgdGltZWxpbmU7IGlmIG5vIGRlcGxveSBpcyBpbiBwcm9ncmVzcyB3ZSBhcmUgaW4gYSBiYWQgc3RhdGUgKHNvbWVvbmUgZWxzZSBob2xkcyBvdXIgcG9ydCkgYW5kIHRoZSBwcm9jZXNzIG11c3Qgbm90IGtlZXAgcnVubmluZy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXRlY3REZXBsb3lUYWtlb3ZlcigpOiBQcm9taXNlPERlcGxveVRha2VvdmVyPiB7XG4gICAgY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeCgpfSBPdXIgbWFpbiBwb3J0IGlzIGluIHVzZSwgd2hpY2ggc2hvdWxkIG9ubHkgaGFwcGVuIHdoaWxlIGEgZGVwbG95IG92ZXJsYXAgaXMgcnVubmluZyAtIGNoZWNraW5nIHRoZSBkZXBsb3kgdGltZWxpbmUgaW4gJHtnZXRUaW1lbGluZUZvbGRlcigpfSBmb3IgdGhlIHJlbGVhc2Ugd2UgYXJlIHBhcnQgb2ZgKTtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGxldCBlbnRyaWVzID0gYXdhaXQgcmVhZFRpbWVsaW5lRW50cmllcygpO1xuICAgICAgICBsZXQgZm91bmQgPSBmaW5kT3VyUmVsZWFzZShlbnRyaWVzKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICB0YWtlb3ZlciA9IGZvdW5kO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeCgpfSBEZXBsb3kgdGFrZW92ZXIgY29uZmlybWVkIG9uIGF0dGVtcHQgJHthdHRlbXB0fTogcmVsZWFzZSBhdCAke2lzbyhmb3VuZC5yZWxlYXNlVGltZSl9LCBvdmVybGFwICR7Zm91bmQub3ZlcmxhcFRpbWV9bXMsIHNvIG91ciBwcmVkZWNlc3NvciBob2xkcyB0aGUgbWFpbiBwb3J0IHVudGlsICR7aXNvKGZvdW5kLnJlbGVhc2VUaW1lICsgZm91bmQub3ZlcmxhcFRpbWUpfS4gV2UgYXJlIHRoZSBzdWNjZXNzb3IuYCk7XG4gICAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgIGlmIChlbGFwc2VkID49IERFUExPWV9ERVRFQ1RfVElNRU9VVCkge1xuICAgICAgICAgICAgLy8gTm90IGEgZGVwbG95LCBzbyBzb21ldGhpbmcgZWxzZSBob2xkcyBvdXIgcG9ydCBhbmQgbm90aGluZyB3ZSBkbyBmcm9tIGhlcmUgaXMgY29ycmVjdC4gRXhpdCwgZ2l2aW5nIHRoZSBsb2cgdGltZSB0byByZWFjaCB0aGUgZGlzayBmaXJzdCAtIHRoZSBtZXNzYWdlIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgZXhwbGFpbnMgdGhlIGV4aXQuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2xvZ1ByZWZpeCgpfSBPdXIgbWFpbiBwb3J0IGlzIGluIHVzZSwgYnV0IHRoZSBkZXBsb3kgdGltZWxpbmUgaW4gJHtnZXRUaW1lbGluZUZvbGRlcigpfSBzaG93ZWQgbm8gcmVsZWFzZSBpbiBwcm9ncmVzcyBhY3Jvc3MgJHthdHRlbXB0fSBjaGVja3Mgb3ZlciAke2VsYXBzZWR9bXMuIFNvbWV0aGluZyBlbHNlIGlzIGhvbGRpbmcgb3VyIHBvcnQsIHNvIHRoaXMgcHJvY2VzcyBpcyBpbiBhIGJhZCBzdGF0ZS4gRXhpdGluZyBpbiAke0VYSVRfTE9HX0ZMVVNIX0RFTEFZfW1zLmApO1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIEVYSVRfTE9HX0ZMVVNIX0RFTEFZKSk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeCgpfSBObyByZWxlYXNlIGluIHByb2dyZXNzIGluIHRoZSBkZXBsb3kgdGltZWxpbmUgeWV0IChhdHRlbXB0ICR7YXR0ZW1wdH0sICR7ZWxhcHNlZH1tcyBvZiAke0RFUExPWV9ERVRFQ1RfVElNRU9VVH1tcyk7IHJldHJ5aW5nIGluICR7REVQTE9ZX0RFVEVDVF9SRVRSWV9ERUxBWX1tc2ApO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgREVQTE9ZX0RFVEVDVF9SRVRSWV9ERUxBWSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFsdFBvcnQocG9ydDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0YWtlb3Zlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFsdGVybmF0ZSBwb3J0IHRha2VuIHdpdGhvdXQgYSBkZXRlY3RlZCBkZXBsb3kgdGFrZW92ZXI6IHBvcnQgJHtwb3J0fSAtIGRldGVjdERlcGxveVRha2VvdmVyIG11c3QgcnVuIGZpcnN0YCk7XG4gICAgfVxuICAgIHRha2VvdmVyLmFsdFBvcnQgPSBwb3J0O1xuICAgIC8vIE5lZWRzIHRvIGJlIGVub3VnaCBhZnRlciBvdXIgc3RhcnR1cCB0aW1lIHRoYXQgdGhlIHByZXZpb3VzIG5vZGUgaGFzIHRpbWUgdG8gc2VlIGl0J3MgZ29pbmcgdG8gYmUgc2h1dCBkb3duIGFuZCBmbHVzaCAoYW5kIHNvIHdlIGhhdmUgdGltZSB0byBzdGFydCB1cCksIGFuZCBlbm91Z2ggYmVmb3JlIHRoZSBraWxsIHRpbWUgdGhhdCBub2RlcyBoYXZlIHRpbWUgdG8gbm90aWNlIHdlIGV4aXN0IGFuZCBwcmVwYXJlIHRvIGNvbm5lY3QgdG8gdXMgLSBoYWxmd2F5IGJldHdlZW4gbm93IGFuZCB0aGUga2lsbCB0aW1lIHNhdGlzZmllcyBib3RoXG4gICAgdGFrZW92ZXIuaW50ZXJtZWRpYXRlU3RhcnQgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpICsgZ2V0S2lsbFRpbWUoKSkgLyAyKTtcbiAgICBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4KCl9IExpc3RlbmluZyBvbiBhbHRlcm5hdGUgcG9ydCAke3BvcnR9OiB3cml0ZXMgcm91dGUgaGVyZSBmcm9tICR7aXNvKHRha2VvdmVyLmludGVybWVkaWF0ZVN0YXJ0KX0gdW50aWwgJHtpc28oZ2V0SW50ZXJtZWRpYXRlRW5kKCkpfSwgYW5kIHdlIGtlZXAgbGlzdGVuaW5nIHVudGlsICR7aXNvKGdldEFsdFBvcnRMaXN0ZW5FbmQoKSl9YCk7XG4gICAgc3RhcnRJbnRlcm1lZGlhdGVNYWludGVuYW5jZSgpO1xufVxuXG4vKiogVGhlIHdpbmRvdyBpbiB3aGljaCB3cml0ZXMgYmVsb25nIHRvIG91ciBhbHRlcm5hdGUgcG9ydDogZnJvbSBwYXJ0d2F5IHRocm91Z2ggdGhlIG92ZXJsYXAgKGdpdmluZyB0aGUgcHJlZGVjZXNzb3Igbm90aWNlIHRvIGZsdXNoKSB1bnRpbCBzYWZlbHkgcGFzdCBpdHMga2lsbCAoZ2l2aW5nIHVzIHRpbWUgdG8gYWN0dWFsbHkgdGFrZSB0aGUgbWFpbiBwb3J0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWtlb3ZlckludGVybWVkaWF0ZSgpOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBhbHRQb3J0OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0YWtlb3Zlcj8uYWx0UG9ydCB8fCB0YWtlb3Zlci5pbnRlcm1lZGlhdGVTdGFydCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHN0YXJ0OiB0YWtlb3Zlci5pbnRlcm1lZGlhdGVTdGFydCwgZW5kOiBnZXRJbnRlcm1lZGlhdGVFbmQoKSwgYWx0UG9ydDogdGFrZW92ZXIuYWx0UG9ydCB9O1xufVxuXG4vKiogV2hlbiBvdXIgcHJlZGVjZXNzb3IgaXMga2lsbGVkIGFuZCB0aGUgbWFpbiBwb3J0IGZyZWVzLiBQb3J0IGFjcXVpc2l0aW9uIHBvbGxzIGFnYWluc3QgdGhpcyBvbiBpdHMgb3duIC0gaXQgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGludGVybWVkaWF0ZSB3aW5kb3cuICovXG5mdW5jdGlvbiBnZXRLaWxsVGltZSgpOiBudW1iZXIge1xuICAgIGlmICghdGFrZW92ZXIpIHJldHVybiAwO1xuICAgIHJldHVybiB0YWtlb3Zlci5yZWxlYXNlVGltZSArIHRha2VvdmVyLm92ZXJsYXBUaW1lO1xufVxuXG5mdW5jdGlvbiBnZXRJbnRlcm1lZGlhdGVFbmQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRha2VvdmVyKSByZXR1cm4gMDtcbiAgICByZXR1cm4gZ2V0S2lsbFRpbWUoKSArIE1hdGgubWF4KElOVEVSTUVESUFURV9FTkRfTUlOX0JVRkZFUiwgdGFrZW92ZXIub3ZlcmxhcFRpbWUpO1xufVxuXG4vKiogV2UgbmV2ZXIgc3RvcCBsaXN0ZW5pbmcgb24gdGhlIGFsdGVybmF0ZSBwb3J0IHdoaWxlIGl0cyB3aW5kb3cgaXMgc3RpbGwgdmFsaWQsIGFuZCBob2xkIGl0IHdlbGwgcGFzdCB0aGF0IGZvciBjbGllbnRzIHRoYXQgaGF2ZSBub3QgY2F1Z2h0IHVwIHlldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbHRQb3J0TGlzdGVuRW5kKCk6IG51bWJlciB7XG4gICAgaWYgKCF0YWtlb3ZlcikgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE1hdGgubWF4KHRha2VvdmVyLnJlbGVhc2VUaW1lICsgdGFrZW92ZXIub3ZlcmxhcFRpbWUgKiAyLCBnZXRJbnRlcm1lZGlhdGVFbmQoKSArIEFMVF9QT1JUX0xJTkdFUik7XG59XG5cbi8qKiBIb3cgbG9uZyB0byB3YWl0IGJldHdlZW4gbWFpbi1wb3J0IGFjcXVpc2l0aW9uIGF0dGVtcHRzOiB0aWdodCBhcm91bmQgb3VyIHByZWRlY2Vzc29yJ3Mgc2NoZWR1bGVkIGRlYXRoICh3aGVuIHRoZSBwb3J0IGFjdHVhbGx5IGZyZWVzKSwgcmVsYXhlZCBvdGhlcndpc2UuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpblBvcnRBY3F1aXJlRGVsYXkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRha2VvdmVyKSByZXR1cm4gQUNRVUlSRV9TTE9XX0RFTEFZO1xuICAgIGlmIChEYXRlLm5vdygpID49IGdldEtpbGxUaW1lKCkgLSBBQ1FVSVJFX0ZBU1RfV0lORE9XKSB7XG4gICAgICAgIHJldHVybiBBQ1FVSVJFX0ZBU1RfREVMQVk7XG4gICAgfVxuICAgIHJldHVybiBBQ1FVSVJFX1NMT1dfREVMQVk7XG59XG4iXX0=
142
- /* _JS_SOURCE_HASH = "7822271e6bf222118b344de45d6be9322b91ff51a6fb9f364c2466bef9dcc1ff"; */
142
+ /* _JS_SOURCE_HASH = "4c001d19bb7e0e4819b4af987691481edd731752855d6664a33e90371dfb4f13"; */