sliftutils 1.7.111 → 1.7.113

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 (66) hide show
  1. package/dist/treeSummary.ts.cache +2 -2
  2. package/index.d.ts +2 -1
  3. package/misc/dist/environment.ts.cache +2 -2
  4. package/misc/dist/getSecret.ts.cache +2 -2
  5. package/misc/dist/strings.ts.cache +2 -2
  6. package/misc/dist/zip.ts.cache +2 -2
  7. package/misc/https/dist/certs.ts.cache +2 -2
  8. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  9. package/package.json +1 -1
  10. package/render-utils/dist/observer.tsx.cache +2 -2
  11. package/storage/ArchivesDisk.ts +8 -7
  12. package/storage/IArchives.d.ts +1 -0
  13. package/storage/IArchives.ts +2 -1
  14. package/storage/TransactionFile.d.ts +1 -1
  15. package/storage/TransactionFile.ts +13 -2
  16. package/storage/archiveHelpers.ts +11 -9
  17. package/storage/dist/ArchivesDisk.ts.cache +10 -9
  18. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  19. package/storage/dist/IArchives.ts.cache +3 -3
  20. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  21. package/storage/dist/JSONStorage.ts.cache +2 -2
  22. package/storage/dist/PendingManager.tsx.cache +2 -2
  23. package/storage/dist/StreamingLogs.ts.cache +2 -2
  24. package/storage/dist/TransactionFile.ts.cache +16 -5
  25. package/storage/dist/TransactionStorage.ts.cache +2 -2
  26. package/storage/dist/archiveHelpers.ts.cache +13 -11
  27. package/storage/dist/backblaze.ts.cache +2 -2
  28. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  29. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  30. package/storage/remoteStorage/ArchivesDelayed.ts +3 -3
  31. package/storage/remoteStorage/ArchivesRemote.ts +2 -2
  32. package/storage/remoteStorage/blobStore.ts +15 -15
  33. package/storage/remoteStorage/bucketDisk.ts +2 -1
  34. package/storage/remoteStorage/chainStartup.ts +2 -2
  35. package/storage/remoteStorage/createArchives.ts +13 -13
  36. package/storage/remoteStorage/deployTakeover.ts +1 -1
  37. package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +6 -6
  38. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +5 -5
  39. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
  40. package/storage/remoteStorage/dist/accessStats.ts.cache +2 -2
  41. package/storage/remoteStorage/dist/blobStore.ts.cache +17 -17
  42. package/storage/remoteStorage/dist/bucketDisk.ts.cache +5 -4
  43. package/storage/remoteStorage/dist/certTrustModal.tsx.cache +2 -2
  44. package/storage/remoteStorage/dist/chainStartup.ts.cache +5 -5
  45. package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
  46. package/storage/remoteStorage/dist/createArchives.ts.cache +14 -14
  47. package/storage/remoteStorage/dist/deployTakeover.ts.cache +4 -4
  48. package/storage/remoteStorage/dist/intermediateManagement.ts.cache +2 -2
  49. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  50. package/storage/remoteStorage/dist/remoteConfig.ts.cache +4 -4
  51. package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
  52. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +6 -6
  53. package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
  54. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  55. package/storage/remoteStorage/dist/storageController.ts.cache +7 -7
  56. package/storage/remoteStorage/dist/storageServerState.ts.cache +4 -4
  57. package/storage/remoteStorage/dist/storeConfig.ts.cache +2 -2
  58. package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
  59. package/storage/remoteStorage/dist/storeSources.ts.cache +2 -2
  60. package/storage/remoteStorage/dist/storeSync.ts.cache +11 -11
  61. package/storage/remoteStorage/dist/validation.ts.cache +2 -2
  62. package/storage/remoteStorage/remoteConfig.ts +1 -1
  63. package/storage/remoteStorage/sourceWrapper.ts +3 -3
  64. package/storage/remoteStorage/storageController.ts +4 -4
  65. package/storage/remoteStorage/storageServerState.ts +1 -1
  66. package/storage/remoteStorage/storeSync.ts +10 -10
@@ -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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -87,7 +87,7 @@ async function requireAccess(account) {
87
87
  let trusted = await trust.get(`${account}|${machineId}`);
88
88
  if (!trusted) {
89
89
  let { domain, port } = (0, serverConfig_1.getStorageServerConfig)();
90
- throw new Error(`${exports.STORAGE_ACCESS_DENIED} Machine ${machineId} has no access to account ${JSON.stringify(account)}. Visit https://${domain}:${port}/${account} for access instructions.`);
90
+ throw new Error(`${exports.STORAGE_ACCESS_DENIED} Machine has no access to this account. Machine ${machineId}, account ${JSON.stringify(account)}. Visit https://${domain}:${port}/${account} for access instructions.`);
91
91
  }
92
92
  return machineId;
93
93
  }
@@ -117,7 +117,7 @@ class RemoteStorageControllerBase {
117
117
  }
118
118
  let machineId = (0, certs_1.getCommonName)(token.certPem).split(".")[0];
119
119
  if (!(0, certs_1.verifyMachineIdForPublicKey)({ machineId, publicKey: (0, certs_1.getPublicIdentifier)(token.certPem) })) {
120
- throw new Error(`Certificate common name ${JSON.stringify((0, certs_1.getCommonName)(token.certPem))} does not match its public key`);
120
+ throw new Error(`Certificate common name does not match its public key: ${JSON.stringify((0, certs_1.getCommonName)(token.certPem))}`);
121
121
  }
122
122
  sessions.set(caller.nodeId, machineId);
123
123
  while (sessions.size > MAX_SESSIONS) {
@@ -193,7 +193,7 @@ class RemoteStorageControllerBase {
193
193
  if (request.requestId !== requestId)
194
194
  continue;
195
195
  if (!isAdmin(callerMachineId) && !await trust.get(`${request.account}|${callerMachineId}`)) {
196
- throw new Error(`${exports.STORAGE_ACCESS_DENIED} Machine ${callerMachineId} has no access to account ${JSON.stringify(request.account)}`);
196
+ throw new Error(`${exports.STORAGE_ACCESS_DENIED} Machine has no access to this account. Machine ${callerMachineId}, account ${JSON.stringify(request.account)}`);
197
197
  }
198
198
  let record = {
199
199
  account: request.account,
@@ -403,7 +403,7 @@ class RemoteStorageControllerBase {
403
403
  await Promise.all(bucketStores.map(x => x.store.init()));
404
404
  let policies = bucketStores.map(x => ({ store: x.store, policy: x.store.storeConfig.current() }));
405
405
  if (!policies.some(x => x.policy.public)) {
406
- throw new Error(`Bucket ${account}/${bucketName} is not public, so its files cannot be read over plain URLs`);
406
+ throw new Error(`Bucket is not public, so its files cannot be read over plain URLs: ${account}/${bucketName}`);
407
407
  }
408
408
  // Anonymous URL reads carry no source selection - the file's route picks the store, and a route no store here covers is simply not found (the routing file itself lives outside every store)
409
409
  let httpStore;
@@ -623,5 +623,5 @@ exports.RemoteStorageController = SocketFunction_1.SocketFunction.register(expor
623
623
  noClientHooks: true,
624
624
  noDefaultHooks: true,
625
625
  }));
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBa0k7QUFDbEksNENBQW1JO0FBQ25JLGlEQUF1RTtBQUN2RSw2REFLOEI7QUFDOUIsK0NBQTREO0FBQzVELGlEQUFvRztBQUVwRyw2Q0FBb0Q7QUFDcEQsdUVBQW9FO0FBQ3BFLCtDQUE4SjtBQUM5SiwrQ0FBcUY7QUFFckYsNkNBQWlGO0FBR3BFLFFBQUEseUJBQXlCLEdBQUcsa0NBQWtDLENBQUM7QUFDL0QsUUFBQSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxRQUFBLHlCQUF5QixHQUFHLDJDQUEyQyxDQUFDO0FBQ3hFLFFBQUEscUJBQXFCLEdBQUcsdUNBQXVDLENBQUM7QUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBWSxHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBaUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUUzQyx3WkFBd1o7QUFDeFosTUFBTSxhQUFhLEdBQThCO0lBQzdDLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsaUNBQWlDO0lBQ3ZFLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVztJQUMzRyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxX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QUFFLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQ3pDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQ3hDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQ3RDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0lBQzFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQ3JDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQzFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQzFDLFNBQVMsRUFBRSxFQUFFO0NBQ2hCLENBQUMsRUFDRixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxFQUFFLElBQUk7SUFDbkIsY0FBYyxFQUFFLElBQUk7Q0FDdkIsQ0FBQyxDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uSG9vayB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25UeXBlc1wiO1xuaW1wb3J0IHsgZ2V0Tm9kZUlkSVAgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9ub2RlQ2FjaGVcIjtcbmltcG9ydCB7IHNldEhUVFBSZXN1bHRIZWFkZXJzLCBnZXRDdXJyZW50SFRUUFJlcXVlc3QgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWxsSFRUUEhhbmRsZXJcIjtcbmltcG9ydCB7IHBlcmZvcm1Mb2NhbENhbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWxsTWFuYWdlclwiO1xuaW1wb3J0IHsgUmVxdWlyZUNvbnRyb2xsZXIgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3JlcXVpcmUvUmVxdWlyZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGdldENvbW1vbk5hbWUsIGdldFB1YmxpY0lkZW50aWZpZXIsIGdldE93bk1hY2hpbmVJZCwgdmVyaWZ5LCB2ZXJpZnlNYWNoaW5lSWRGb3JQdWJsaWNLZXkgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBGaW5kQ29uZmlnLCBTb3VyY2VDb25maWcsIElNTVVUQUJMRV9DQUNIRV9USU1FIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgUk9VVElOR19GSUxFLCBnZXRSb3V0ZSwgcm91dGVDb250YWlucyB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgICBmaW5kQnVja2V0U3RvcmUsIGdldFN0b3JlLCBnZXRCdWNrZXRTdG9yZXMsIHJlYWRCdWNrZXRJbnRlcm5hbCwgd3JpdGVSb3V0aW5nQ29uZmlnLFxuICAgIGdldEJ1Y2tldEFyY2hpdmVzQ29uZmlnLCBidWNrZXRTeW5jU3RhdHVzLCBkZWJ1Z0J1Y2tldEluZGV4VG90YWxzLCBBY3RpdmVCdWNrZXRJbmZvLFxuICAgIGRlYnVnTGlzdEFjY291bnRCdWNrZXRzLCBTZXJ2ZXJCdWNrZXRJbmZvLFxuICAgIGRlYnVnR2V0QWN0aXZlQnVja2V0LCBhY3RpdmF0ZUJ1Y2tldCwgZ2V0QWN0aXZlQnVja2V0S2V5cyxcbn0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBkZWJ1Z0NsZWFyQWNjb3VudFdyaXRlU3RhdHMgfSBmcm9tIFwiLi9hY2Nlc3NTdGF0c1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZywgZ2V0VHJ1c3QsIGdldFJlcXVlc3RzLCBhc3NlcnRXcml0ZXNBbGxvd2VkIH0gZnJvbSBcIi4vc2VydmVyQ29uZmlnXCI7XG5pbXBvcnQgeyBCbG9iU3RvcmUgfSBmcm9tIFwiLi9ibG9iU3RvcmVcIjtcbmltcG9ydCB7IGdldFJvdXRpbmdGaWxlUmVzdWx0IH0gZnJvbSBcIi4vYnVja2V0RGlza1wiO1xuaW1wb3J0IHsgU3RvcmFnZUNsaWVudENvbnRyb2xsZXIgfSBmcm9tIFwiLi9zdG9yYWdlQ2xpZW50Q29udHJvbGxlclwiO1xuaW1wb3J0IHsgdHJhY2tBY2Nlc3MsIHRyYWNrQWNjZXNzQ2FsbCwgZ2V0QWNjZXNzVG90YWxzLCByZWFkQWNjZXNzU3VtbWFyaWVzLCBjbGVhckFjY291bnRBY2Nlc3NTdGF0cywgQWNjZXNzVG90YWxzLCBBY2Nlc3NTdW1tYXJ5U3RhdGUgfSBmcm9tIFwiLi9hY2Nlc3NTdGF0c1wiO1xuaW1wb3J0IHsgbG9nTXV0YXRpb24sIGxpc3RTdG9yYWdlTG9nRmlsZXMsIHJlYWRTdG9yYWdlTG9nRmlsZSB9IGZyb20gXCIuL3N0b3JhZ2VMb2dzXCI7XG5pbXBvcnQgeyBMb2dGaWxlSW5mbyB9IGZyb20gXCIuLi9TdHJlYW1pbmdMb2dzXCI7XG5pbXBvcnQgeyBhc3NlcnRWYWxpZE5hbWUsIGFzc2VydFZhbGlkUGF0aCwgYXNzZXJ0VmFsaWRBcmdzIH0gZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBTdW1tYXJ5RW50cnkgfSBmcm9tIFwiLi4vLi4vdHJlZVN1bW1hcnlcIjtcblxuZXhwb3J0IGNvbnN0IFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQgPSBcIlJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLWI3ZTQyYTkxXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BVVRIX1BVUlBPU0UgPSBcInJlbW90ZVN0b3JhZ2UtYXV0aC0xXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCA9IFwiUkVNT1RFX1NUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURURfY2YyZjdiMWVcIjtcbmV4cG9ydCBjb25zdCBTVE9SQUdFX0FDQ0VTU19ERU5JRUQgPSBcIlJFTU9URV9TVE9SQUdFX0FDQ0VTU19ERU5JRURfOWQ4MWE0YzBcIjtcblxuY29uc3QgQVVUSF9USU1FX1dJTkRPVyA9IHRpbWVJbk1pbnV0ZSAqIDEwO1xuY29uc3QgQUNDRVNTX0NIRUNLX1NMT1dfVElNRSA9IDUwO1xuY29uc3QgTUFYX1NFU1NJT05TID0gMTAwICogMTAwMDtcbmNvbnN0IE1BWF9SRVFVRVNUU19QRVJfSVAgPSA1MDtcblxuZXhwb3J0IHR5cGUgQXV0aFRva2VuRGF0YSA9IHtcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xuICAgIHNlcnZlcjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEF1dGhUb2tlbiA9IHtcbiAgICBjZXJ0UGVtOiBzdHJpbmc7XG4gICAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gICAgZGF0YTogQXV0aFRva2VuRGF0YTtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NSZXF1ZXN0ID0ge1xuICAgIHJlcXVlc3RJZDogc3RyaW5nO1xuICAgIGFjY291bnQ6IHN0cmluZztcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBUcnVzdFJlY29yZCA9IHtcbiAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICB0aW1lOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzU3RhdGUgPSB7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICBoYXNBY2Nlc3M6IGJvb2xlYW47XG4gICAgZ3JhbnRBY2Nlc3NDb21tYW5kPzogc3RyaW5nO1xuICAgIHRydXN0ZWRNYWNoaW5lcz86IFRydXN0UmVjb3JkW107XG59O1xuXG5jb25zdCBzZXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbi8vIFdlIG11c3QgbmV2ZXIgc2VydmUgYW55dGhpbmcgdGhhdCBjYW4gYmUgZXZhbHVhdGVkIGFzIGNvZGUgKGh0bWwsIGpzIC0gYW5kIHN2Zywgd2hpY2ggY2FuIGVtYmVkIDxzY3JpcHQ+IGFuZCBydW5zIGl0IHdoZW4gdmlzaXRlZCBhcyBhIGRvY3VtZW50KS4gT3RoZXJ3aXNlIGEgdXNlciBjb3VsZCBob3N0IGEgZmlsZSBhbmQsIGJ5IHZpc2l0aW5nIGl0LCBydW4gaXQgb24gb3VyIGRvbWFpbiAtIGdpdmluZyB0aGVtIGFjY2VzcyB0byBhbGwgb2Ygb3VyIGtleXMgYW5kIGNvb2tpZXMuIFBERiBzdGF5czogYnJvd3NlciBQREYgdmlld2VycyBydW4gYW55IGVtYmVkZGVkIFBERiBzY3JpcHRpbmcgaW4gYSBzYW5kYm94IHdpdGggbm8gYWNjZXNzIHRvIHRoZSBzZXJ2aW5nIG9yaWdpbidzIGNvb2tpZXMgb3IgRE9NLlxuY29uc3QgQ09OVEVOVF9UWVBFUzogeyBbZXh0OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBjc3M6IFwidGV4dC9jc3M7IGNoYXJzZXQ9dXRmLThcIiwganNvbjogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgdHh0OiBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIiwgcG5nOiBcImltYWdlL3BuZ1wiLCBqcGc6IFwiaW1hZ2UvanBlZ1wiLCBqcGVnOiBcImltYWdlL2pwZWdcIiwgZ2lmOiBcImltYWdlL2dpZlwiLFxuICAgIHdlYnA6IFwiaW1hZ2Uvd2VicFwiLCBtcDQ6IFwidmlkZW8vbXA0XCIsIHdlYm06IFwidmlkZW8vd2VibVwiLFxuICAgIG1wMzogXCJhdWRpby9tcGVnXCIsIHdhdjogXCJhdWRpby93YXZcIiwgcGRmOiBcImFwcGxpY2F0aW9uL3BkZlwiLFxufTtcblxuY29uc3QgY29ubmVjdGVkQ2xpZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuZnVuY3Rpb24gdHJhY2tDYWxsZXIoKTogdm9pZCB7XG4gICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZDtcbiAgICBpZiAoY29ubmVjdGVkQ2xpZW50cy5oYXMobm9kZUlkKSkgcmV0dXJuO1xuICAgIGNvbm5lY3RlZENsaWVudHMuYWRkKG5vZGVJZCk7XG4gICAgU29ja2V0RnVuY3Rpb24ub25OZXh0RGlzY29ubmVjdChub2RlSWQsICgpID0+IHtcbiAgICAgICAgY29ubmVjdGVkQ2xpZW50cy5kZWxldGUobm9kZUlkKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdFJvdXRpbmdDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGBCcm9hZGNhc3Rpbmcgcm91dGluZyBjb25maWcgY2hhbmdlIHRvICR7Y29ubmVjdGVkQ2xpZW50cy5zaXplfSBjb25uZWN0ZWQgY2xpZW50c2ApO1xuICAgIGZvciAobGV0IG5vZGVJZCBvZiBbLi4uY29ubmVjdGVkQ2xpZW50c10pIHtcbiAgICAgICAgdm9pZCBTdG9yYWdlQ2xpZW50Q29udHJvbGxlci5ub2Rlc1tub2RlSWRdLnJvdXRpbmdDb25maWdDaGFuZ2VkKCkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlck1hY2hpbmVJZCgpOiBzdHJpbmcge1xuICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICBsZXQgbWFjaGluZUlkID0gc2Vzc2lvbnMuZ2V0KGNhbGxlci5ub2RlSWQpO1xuICAgIGlmICghbWFjaGluZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEfSBDYWxsIGF1dGhlbnRpY2F0ZSBmaXJzdCAoY29ubmVjdGlvbiAke2NhbGxlci5ub2RlSWR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZUlkO1xufVxuZnVuY3Rpb24gZ2V0Q2FsbGVySVAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0Tm9kZUlkSVAoU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCkubm9kZUlkKTtcbn1cbmZ1bmN0aW9uIGlzQWRtaW4obWFjaGluZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFjaGluZUlkID09PSBnZXRPd25NYWNoaW5lSWQoZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpLnJvb3REb21haW4pO1xufVxuZnVuY3Rpb24gcmVxdWlyZUFkbWluKCk6IHN0cmluZyB7XG4gICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgIGlmICghaXNBZG1pbihtYWNoaW5lSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IEFkbWluIGNvbW1hbmRzIG11c3QgYmUgcnVuIGZyb20gdGhlIHN0b3JhZ2UgbWFjaGluZSBpdHNlbGYgKGNhbGxlciBtYWNoaW5lICR7bWFjaGluZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVBY2Nlc3MoYWNjb3VudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICBpZiAoaXNBZG1pbihtYWNoaW5lSWQpKSByZXR1cm4gbWFjaGluZUlkO1xuICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgbGV0IHRydXN0ZWQgPSBhd2FpdCB0cnVzdC5nZXQoYCR7YWNjb3VudH18JHttYWNoaW5lSWR9YCk7XG4gICAgaWYgKCF0cnVzdGVkKSB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBNYWNoaW5lICR7bWFjaGluZUlkfSBoYXMgbm8gYWNjZXNzIHRvIGFjY291bnQgJHtKU09OLnN0cmluZ2lmeShhY2NvdW50KX0uIFZpc2l0IGh0dHBzOi8vJHtkb21haW59OiR7cG9ydH0vJHthY2NvdW50fSBmb3IgYWNjZXNzIGluc3RydWN0aW9ucy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cblxuZnVuY3Rpb24gZ2V0R3JhbnRBY2Nlc3NDb21tYW5kKHJlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgeyBzc2hUYXJnZXQsIHNlcnZlckNvbW1hbmQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICByZXR1cm4gYHNzaCAke3NzaFRhcmdldH0gJyR7c2VydmVyQ29tbWFuZH0gLS1yZXF1ZXN0SWQgJHtyZXF1ZXN0SWR9J2A7XG59XG5cbmNsYXNzIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyQmFzZSB7XG4gICAgYXN5bmMgcGluZygpOiBQcm9taXNlPHt9PiB7XG4gICAgICAgIHRyYWNrQ2FsbGVyKCk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBhc3luYyBhdXRoZW50aWNhdGUodG9rZW46IEF1dGhUb2tlbik6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9PiB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgICAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgICAgIHZlcmlmeSh0b2tlbi5jZXJ0UGVtLCB0b2tlbi5zaWduYXR1cmUsIHRva2VuLmRhdGEpO1xuICAgICAgICBsZXQgeyBwdXJwb3NlLCB0aW1lLCBzZXJ2ZXIgfSA9IHRva2VuLmRhdGE7XG4gICAgICAgIGlmIChwdXJwb3NlICE9PSBTVE9SQUdFX0FVVEhfUFVSUE9TRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIHB1cnBvc2UgaXMgJHtKU09OLnN0cmluZ2lmeShwdXJwb3NlKX0sIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoU1RPUkFHRV9BVVRIX1BVUlBPU0UpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhEYXRlLm5vdygpIC0gdGltZSkgPiBBVVRIX1RJTUVfV0lORE9XKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gdGltZSBpcyB0b28gZmFyIGZyb20gdGhlIHNlcnZlciB0aW1lICh0b2tlbiAke3RpbWV9LCBzZXJ2ZXIgJHtEYXRlLm5vdygpfSwgYWxsb3dlZCBkcmlmdCAke0FVVEhfVElNRV9XSU5ET1d9bXMpYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRva2VuRG9tYWluID0gc2VydmVyLnNwbGl0KFwiOlwiKVswXTtcbiAgICAgICAgaWYgKHRva2VuRG9tYWluICE9PSBkb21haW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiBpcyBmb3Igc2VydmVyICR7SlNPTi5zdHJpbmdpZnkoc2VydmVyKX0sIGJ1dCB0aGlzIHNlcnZlciBpcyAke0pTT04uc3RyaW5naWZ5KGAke2RvbWFpbn06JHtwb3J0fWApfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDb21tb25OYW1lKHRva2VuLmNlcnRQZW0pLnNwbGl0KFwiLlwiKVswXTtcbiAgICAgICAgaWYgKCF2ZXJpZnlNYWNoaW5lSWRGb3JQdWJsaWNLZXkoeyBtYWNoaW5lSWQsIHB1YmxpY0tleTogZ2V0UHVibGljSWRlbnRpZmllcih0b2tlbi5jZXJ0UGVtKSB9KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBjb21tb24gbmFtZSAke0pTT04uc3RyaW5naWZ5KGdldENvbW1vbk5hbWUodG9rZW4uY2VydFBlbSkpfSBkb2VzIG5vdCBtYXRjaCBpdHMgcHVibGljIGtleWApO1xuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25zLnNldChjYWxsZXIubm9kZUlkLCBtYWNoaW5lSWQpO1xuICAgICAgICB3aGlsZSAoc2Vzc2lvbnMuc2l6ZSA+IE1BWF9TRVNTSU9OUykge1xuICAgICAgICAgICAgbGV0IG9sZGVzdCA9IHNlc3Npb25zLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgICAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICAgICAgc2Vzc2lvbnMuZGVsZXRlKG9sZGVzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcDogZ2V0Q2FsbGVySVAoKSB9O1xuICAgIH1cblxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyByZXF1ZXN0QWNjZXNzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZzsgcmVxdWVzdElkOiBzdHJpbmc7IGdyYW50QWNjZXNzQ29tbWFuZDogc3RyaW5nIH0+IHtcbiAgICAgICAgbGV0IGFjY291bnQgPSBjb25maWcuYWNjb3VudDtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgICAgICBsZXQgaXAgPSBnZXRDYWxsZXJJUCgpO1xuICAgICAgICBsZXQgcmVxdWVzdHNTdG9yYWdlID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgcmVxdWVzdHNTdG9yYWdlLmdldChpcCkgfHwgW107XG4gICAgICAgIGxldCBleGlzdGluZyA9IHJlcXVlc3RzLmZpbmQoeCA9PiB4LmFjY291bnQgPT09IGFjY291bnQgJiYgeC5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgZXhpc3RpbmcudGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleGlzdGluZyA9IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKSxcbiAgICAgICAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgICAgICAgIG1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICBpcCxcbiAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVlc3RzLnB1c2goZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChyZXF1ZXN0cy5sZW5ndGggPiBNQVhfUkVRVUVTVFNfUEVSX0lQKSByZXF1ZXN0cy5zaGlmdCgpO1xuICAgICAgICBhd2FpdCByZXF1ZXN0c1N0b3JhZ2Uuc2V0KGlwLCByZXF1ZXN0cyk7XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXAsIHJlcXVlc3RJZDogZXhpc3RpbmcucmVxdWVzdElkLCBncmFudEFjY2Vzc0NvbW1hbmQ6IGdldEdyYW50QWNjZXNzQ29tbWFuZChleGlzdGluZy5yZXF1ZXN0SWQpIH07XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjY2Vzc1N0YXRlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8QWNjZXNzU3RhdGU+IHtcbiAgICAgICAgbGV0IGFjY291bnQgPSBjb25maWcuYWNjb3VudDtcbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgICAgICBsZXQgaXAgPSBnZXRDYWxsZXJJUCgpO1xuICAgICAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgICAgICBsZXQgaGFzQWNjZXNzID0gaXNBZG1pbihtYWNoaW5lSWQpIHx8ICEhYXdhaXQgdHJ1c3QuZ2V0KGAke2FjY291bnR9fCR7bWFjaGluZUlkfWApO1xuICAgICAgICBsZXQgcmVzdWx0OiBBY2Nlc3NTdGF0ZSA9IHsgbWFjaGluZUlkLCBpcCwgaGFzQWNjZXNzIH07XG4gICAgICAgIGlmICghaGFzQWNjZXNzKSB7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICAgICAgbGV0IG93blJlcXVlc3QgPSAoYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkuZmluZCh4ID0+IHguYWNjb3VudCA9PT0gYWNjb3VudCAmJiB4Lm1hY2hpbmVJZCA9PT0gbWFjaGluZUlkKTtcbiAgICAgICAgICAgIGlmIChvd25SZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmdyYW50QWNjZXNzQ29tbWFuZCA9IGdldEdyYW50QWNjZXNzQ29tbWFuZChvd25SZXF1ZXN0LnJlcXVlc3RJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRydXN0ZWRNYWNoaW5lczogVHJ1c3RSZWNvcmRbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgYXdhaXQgdHJ1c3QuZ2V0S2V5cygpKSB7XG4gICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGAke2FjY291bnR9fGApKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCByZWNvcmQgPSBhd2FpdCB0cnVzdC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChyZWNvcmQpIHRydXN0ZWRNYWNoaW5lcy5wdXNoKHJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRydXN0ZWRNYWNoaW5lcyA9IHRydXN0ZWRNYWNoaW5lcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBsaXN0UmVxdWVzdHNGb3JJUChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBpcDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1JlcXVlc3RbXT4ge1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlcXVlc3RzLmdldChjb25maWcuaXApIHx8IFtdKS5maWx0ZXIoeCA9PiB4LmFjY291bnQgPT09IGNvbmZpZy5hY2NvdW50KTtcbiAgICB9XG5cbiAgICBhc3luYyBncmFudEFjY2Vzcyhjb25maWc6IHsgcmVxdWVzdElkOiBzdHJpbmcgfSk6IFByb21pc2U8VHJ1c3RSZWNvcmQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RJZCA9IGNvbmZpZy5yZXF1ZXN0SWQ7XG4gICAgICAgIGxldCBjYWxsZXJNYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IHRydXN0ID0gYXdhaXQgZ2V0VHJ1c3QoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgZm9yIChsZXQgaXAgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0S2V5cygpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByZXF1ZXN0IG9mIGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW10pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXF1ZXN0SWQgIT09IHJlcXVlc3RJZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0FkbWluKGNhbGxlck1hY2hpbmVJZCkgJiYgIWF3YWl0IHRydXN0LmdldChgJHtyZXF1ZXN0LmFjY291bnR9fCR7Y2FsbGVyTWFjaGluZUlkfWApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IE1hY2hpbmUgJHtjYWxsZXJNYWNoaW5lSWR9IGhhcyBubyBhY2Nlc3MgdG8gYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3QuYWNjb3VudCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByZWNvcmQ6IFRydXN0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdC5tYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdHJ1c3Quc2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtyZXF1ZXN0Lm1hY2hpbmVJZH1gLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhY2Nlc3MgcmVxdWVzdCBmb3VuZCB3aXRoIGlkICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdElkKX0uIEl0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBncmFudGVkIG9yIGV4cGlyZWQuYCk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluIChzbyBvbmx5IHRoaXMgbWFjaGluZSdzIG93biBwcm9jZXNzZXMgY2FuIGNhbGwgaXQpOiB0aGUgYnVja2V0cyB0aGlzIHByb2Nlc3MgaGFzIGxvYWRlZC4gQSBkZXBsb3kgc3VjY2Vzc29yIGFza3MgaXRzIHByZWRlY2Vzc29yIGZvciB0aGlzLCBzbyBpdCBhY3RpdmF0ZXMgZXhhY3RseSB0aGUgYnVja2V0cyB0aGF0IGFyZSBpbiB1c2UgaW5zdGVhZCBvZiBldmVyeSBidWNrZXQgb24gZGlzay4gKi9cbiAgICBhc3luYyBhZG1pbkxpc3RBY3RpdmVCdWNrZXRzKCk6IFByb21pc2U8eyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W10+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjdGl2ZUJ1Y2tldEtleXMoKTtcbiAgICB9XG4gICAgYXN5bmMgYWRtaW5MaXN0UmVxdWVzdHMoY29uZmlnOiB7IGlwOiBzdHJpbmcgfSk6IFByb21pc2U8QWNjZXNzUmVxdWVzdFtdPiB7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0cy5nZXQoY29uZmlnLmlwKSB8fCBbXTtcbiAgICB9XG4gICAgYXN5bmMgYWRtaW5HcmFudEFjY2Vzcyhjb25maWc6IHsgcmVxdWVzdElkOiBzdHJpbmcgfSk6IFByb21pc2U8VHJ1c3RSZWNvcmQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RJZCA9IGNvbmZpZy5yZXF1ZXN0SWQ7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGZvciAobGV0IGlwIG9mIGF3YWl0IHJlcXVlc3RzLmdldEtleXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxdWVzdCBvZiBhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCByZWNvcmQ6IFRydXN0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdC5tYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdHJ1c3Quc2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtyZXF1ZXN0Lm1hY2hpbmVJZH1gLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhY2Nlc3MgcmVxdWVzdCBmb3VuZCB3aXRoIGlkICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdElkKX0uIEl0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBncmFudGVkIG9yIGV4cGlyZWQuYCk7XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRcIilcbiAgICBhc3luYyBnZXQyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07IGludGVybmFsPzogYm9vbGVhbjsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuOyBpbmNsdWRlTWFya2VkPzogYm9vbGVhbiB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBmaWxlIGxpdmVzIG91dHNpZGUgZXZlcnkgc3RvcmUgYW5kIGV2ZW4gb3V0c2lkZSB0aGUgYnVja2V0IChpdCBpcyB3aGF0IENSRUFURVMgaXQpLCBzbyBpdCBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgZGlzayAtIGFic2VudCBtZWFucyB1bmRlZmluZWQsIGV4YWN0bHkgbGlrZSBhbnkgZmlsZSByZWFkXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmludGVybmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEJ1Y2tldEludGVybmFsKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuZ2V0Mihjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJzZXRcIilcbiAgICBhc3luYyBzZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlcjsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBpbnRlcm5hbD86IGJvb2xlYW47IHVuZGVsZXRlPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIC8vIENvcGllZCBiZWNhdXNlIHRoZSB3aXJlIGhhbmRzIHVzIGEgcGxhaW4gVWludDhBcnJheSB2aWV3LCBub3QgYSByZWFsIEJ1ZmZlclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5mcm9tKGNvbmZpZy5kYXRhKTtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzdG9yZSB0aGUgY2FsbGVyIHNlbGVjdGVkIG93bnMgdGhpcyBmaWxlOiBpdCBhcHBsaWVzIGl0LCBlbmZvcmNlcyB0aGUgdmVyc2lvbiBydWxlLCBhbmQgaXRzIHBlZXJzIHB1bGwgaXQgZnJvbSB0aGVyZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHdyaXRlUm91dGluZ0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5zZXQoeyAuLi5jb25maWcsIGRhdGEgfSkpO1xuICAgICAgICBsb2dNdXRhdGlvbih7IG9wOiBjb25maWcudW5kZWxldGUgJiYgXCJ1bmRlbGV0ZVwiIHx8IFwic2V0XCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHNpemU6IGRhdGEubGVuZ3RoLCB3cml0ZVRpbWU6IGNvbmZpZy5sYXN0TW9kaWZpZWQsIGNhbGxlcklkOiBjYWxsZXIsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZGVsXCIpXG4gICAgYXN5bmMgZGVsKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBpbnRlcm5hbD86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBjYWxsZXJJZCgpO1xuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5kZWwoY29uZmlnKSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwiZGVsXCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHdyaXRlVGltZTogY29uZmlnLmxhc3RNb2RpZmllZCwgY2FsbGVySWQ6IGNhbGxlciwgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9KTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJtb3ZlXCIpXG4gICAgYXN5bmMgbW92ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IGZyb21QYXRoOiBzdHJpbmc7IHRvUGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIC8vIGFzc2VydFZhbGlkQXJncyBvbmx5IGtub3dzIHRoZSB3ZWxsLWtub3duIGBwYXRoYCBmaWVsZCwgc28gdGhlIHR3byBwYXRocyBvZiBhIG1vdmUgYXJlIHZhbGlkYXRlZCBoZXJlXG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChjb25maWcuZnJvbVBhdGgpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoY29uZmlnLnRvUGF0aCk7XG4gICAgICAgIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLm1vdmUoY29uZmlnKSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwibW92ZVwiLCBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgYnVja2V0TmFtZTogY29uZmlnLmJ1Y2tldE5hbWUsIHN0b3JlOiBjb25maWcuc291cmNlQ29uZmlnLm5hbWUsIHBhdGg6IGNvbmZpZy5mcm9tUGF0aCwgdG9QYXRoOiBjb25maWcudG9QYXRoLCBjYWxsZXJJZDogY2FsbGVyIH0pO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldEluZm9cIilcbiAgICBhc3luYyBnZXRJbmZvKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgeyB3cml0ZVRpbWU6IHJlc3VsdC53cml0ZVRpbWUsIHNpemU6IHJlc3VsdC5zaXplIH0gfHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRJbmZvKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImZpbmRJbmZvXCIpXG4gICAgYXN5bmMgZmluZEluZm8oY29uZmlnOiBGaW5kQ29uZmlnICYgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcHJlZml4OiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5maW5kSW5mbyhjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRDaGFuZ2VzQWZ0ZXJcIilcbiAgICBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IHRpbWU6IG51bWJlcjsgcm91dGVzPzogW251bWJlciwgbnVtYmVyXVtdIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QXJjaGl2ZXNDb25maWcoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXRCdWNrZXRBcmNoaXZlc0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgbGlzdEJ1Y2tldHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXJ2ZXJCdWNrZXRJbmZvW10+IHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkZWJ1Z0xpc3RBY2NvdW50QnVja2V0cyhjb25maWcuYWNjb3VudCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBUaGUgYWNjZXNzIGhvb2sgKGFuZCB0aGUgc3RvcmFnZSBpdCBpbml0aWFsaXplcykgcnVucyBiZWZvcmUgdGhpcywgc28gYSBsYXJnZSBnYXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgY2FsbGVyJ3MgdGltaW5nIGlzIHRoZSBob29rXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbGlzdEJ1Y2tldHMoJHtjb25maWcuYWNjb3VudH0pIGNhbGwgYm9keSB0b29rICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFRoZSBsaXZlLCBpbi1tZW1vcnkgc3RhdGUgb2Ygb25lIGJ1Y2tldCwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQW5zd2VyZWQgd2l0aG91dCB0b3VjaGluZyB0aGUgZGlzaywgc28gaXQgaXMgY2hlYXAgLSBidXQgb25seSB3b3JrcyB3aGlsZSB0aGUgYnVja2V0IGlzIGxvYWRlZCBoZXJlLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY3RpdmVCdWNrZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnR2V0QWN0aXZlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBMb2FkcyBhIGJ1Y2tldCB0aGF0IGV4aXN0cyBvbiB0aGlzIHNlcnZlciBpbnRvIG1lbW9yeSAoc3RhcnRpbmcgaXRzIHN5bmNocm9uaXphdGlvbikgYW5kIHJldHVybnMgaXRzIGxpdmUgc3RhdGUsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgY291bGQgbm90IGJlIGxvYWRlZC4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgYWN0aXZhdGVCdWNrZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGFjdGl2YXRlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdEJ1Y2tldHMgcmVwb3J0cyBhbmQgdGhlIGluLW1lbW9yeSBhY2Nlc3Mgc3RhdGlzdGljcywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgY2xlYXJXcml0ZVN0YXRzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICAgICAgY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMoY29uZmlnLmFjY291bnQpO1xuICAgICAgICByZXR1cm4geyBjbGVhcmVkQnVja2V0czogZGVidWdDbGVhckFjY291bnRXcml0ZVN0YXRzKGNvbmZpZy5hY2NvdW50KSB9O1xuICAgIH1cbiAgICAvKiogSW4tbWVtb3J5IHRvdGFscyBwZXIgb3BlcmF0aW9uIHR5cGUgc2luY2Ugc3RhcnR1cCAob3IgdGhlIGxhc3QgY2xlYXJXcml0ZVN0YXRzKS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3RhdHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NUb3RhbHM+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjY2Vzc1RvdGFscyhjb25maWcuYWNjb3VudCk7XG4gICAgfVxuICAgIC8qKiBBIHBhdGggYnJlYWtkb3duIG9mIG9uZSBvcGVyYXRpb24ncyBhY2Nlc3NlcyAob3BlcmF0aW9uIG5hbWVzIGNvbWUgZnJvbSBnZXRBY2Nlc3NTdGF0cykuIG1heENvdW50IGlzIHBhc3NlZCBzdHJhaWdodCB0byBUcmVlU3VtbWFyeS5nZXRTdW1tYXJpZXMuIHdlaWdodEJ5U2l6ZSBpcyBpZ25vcmVkIGZvciBjb3VudC1vbmx5IG9wZXJhdGlvbnMsIHdoaWNoIHJldHVybiB0aGVpciBjb3VudCBicmVha2Rvd24uICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjY2Vzc1N1bW1hcmllcyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBvcGVyYXRpb246IHN0cmluZzsgbWF4Q291bnQ6IG51bWJlcjsgd2VpZ2h0QnlTaXplPzogYm9vbGVhbiB9KTogUHJvbWlzZTxTdW1tYXJ5RW50cnk8QWNjZXNzU3VtbWFyeVN0YXRlPltdPiB7XG4gICAgICAgIHJldHVybiByZWFkQWNjZXNzU3VtbWFyaWVzKGNvbmZpZyk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRJbmRleEluZm8oY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnQnVja2V0SW5kZXhUb3RhbHMoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldFN5bmNTdGF0dXMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0U3luY1N0YXR1cyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgb3BlcmF0aW9uLWxvZyBmaWxlcyBUSElTIHNlcnZlciBob2xkcyAoZXZlcnkgc2VydmVyIGxvZ3MgaXRzIG93biBvcGVyYXRpb25zIC0gYXNrIGVhY2ggb25lOyBzZWUgbGlzdEFsbFNlcnZlckxvZ0ZpbGVzIGluIGNyZWF0ZUFyY2hpdmVzKS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgbGlzdExvZ0ZpbGVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8TG9nRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgbGlzdFN0b3JhZ2VMb2dGaWxlcygpO1xuICAgIH1cbiAgICAvKiogT25lIGxvZyBmaWxlJ3MgYnl0ZXMsIGFsd2F5cyBMWjQtY29tcHJlc3NlZCAoYSBsaXZlIGZpbGUgaXMgZmx1c2hlZCBhbmQgY29tcHJlc3NlZCBpbiBtZW1vcnkgYmVmb3JlIHNlbmRpbmcpLiBEZWNvZGUgd2l0aCBkZWNvZGVMb2dGaWxlLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRMb2dGaWxlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRTdG9yYWdlTG9nRmlsZShjb25maWcubmFtZSk7XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIHN0YXJ0TGFyZ2VGaWxlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBmb3JjZVNldEltbXV0YWJsZT86IGJvb2xlYW47IG5vQ2hlY2tzPzogYm9vbGVhbjsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBzdG9yZSA9IGZpbmRCdWNrZXRTdG9yZShjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcpO1xuICAgICAgICAvLyBUaGUgc3RvcmUgdmFsaWRhdGVzIHRoZSB3cml0ZSBoZXJlLCBiZWZvcmUgYW55IGJ5dGVzIG1vdmUgKHNlZSBCbG9iU3RvcmUuc3RhcnRMYXJnZVVwbG9hZCkgLSBhIGxhcmdlIGZpbGUgaXMgYSBzZXQsIGFuZCBpdHMgU2V0Q29uZmlnIGRlY2lkZXMgd2hldGhlciBpdCBpcyBldmVuIGFsbG93ZWRcbiAgICAgICAgbGV0IHdyaXRlID0geyBwYXRoOiBjb25maWcucGF0aCwgbGFzdE1vZGlmaWVkOiBjb25maWcubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogY29uZmlnLmZvcmNlU2V0SW1tdXRhYmxlLCBub0NoZWNrczogY29uZmlnLm5vQ2hlY2tzLCBpbnRlcm5hbDogY29uZmlnLmludGVybmFsIH07XG4gICAgICAgIGxldCBpZCA9IGF3YWl0IHN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQod3JpdGUpO1xuICAgICAgICAvLyBUaGUgc3RvcmUgbmFtZSBwaW5zIHRoZSB1cGxvYWQncyBwYXJ0cyBhbmQgZmluaXNoIHRvIHRoZSBzYW1lIHN0b3JlIHRoZSBzdGFydCBwaWNrZWQgKGluLWZsaWdodCB1cGxvYWRzIHN1cnZpdmUgYSBidWNrZXQgcmVidWlsZDogdGhlIHBhcnQgZGF0YSBsaXZlcyBpbiB0aGF0IHN0b3JlJ3MgZm9sZGVyLCB3aGljaCBhIHJlYnVpbHQgc3RvcmUgc3RpbGwgb3BlbnMpXG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5zZXQoaWQsIHsgLi4ud3JpdGUsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmVOYW1lOiBjb25maWcuc291cmNlQ29uZmlnLm5hbWUgfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgLyoqIG9mZnNldCBtYWtlcyB0aGUgcGFydCB3cml0ZSBwb3NpdGlvbmFsIChzZWUgQXJjaGl2ZXNEaXNrLmFwcGVuZExhcmdlVXBsb2FkKSwgd2hpY2ggaXMgd2hhdCBsZXRzIHRoZSBjbGllbnQgUkVUUlkgYSBmYWlsZWQgcGFydCAtIGEgcmUtc2VudCBwYXJ0IGxhbmRzIG9uIHRoZSBzYW1lIGJ5dGVzIGluc3RlYWQgb2YgYXBwZW5kaW5nIHR3aWNlLiAqL1xuICAgIGFzeW5jIHVwbG9hZFBhcnQoY29uZmlnOiB7IHVwbG9hZElkOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlcjsgb2Zmc2V0PzogbnVtYmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7Y29uZmlnLnVwbG9hZElkfWApO1xuICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQ6IGluZm8uYWNjb3VudCwgb3BlcmF0aW9uOiBcInVwbG9hZFBhcnRcIiwgcGF0aDogYCR7aW5mby5idWNrZXROYW1lfS8ke2luZm8ucGF0aH1gLCBzaXplOiBjb25maWcuZGF0YS5sZW5ndGggfSk7XG4gICAgICAgIGF3YWl0IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSkuYXBwZW5kTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkLCBkYXRhOiBCdWZmZXIuZnJvbShjb25maWcuZGF0YSksIG9mZnNldDogY29uZmlnLm9mZnNldCB9KTtcbiAgICB9XG4gICAgYXN5bmMgZmluaXNoTGFyZ2VGaWxlKGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7Y29uZmlnLnVwbG9hZElkfWApO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBjYWxsZXJJZCgpO1xuICAgICAgICBsZXQgc3RvcmUgPSBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpO1xuICAgICAgICBhd2FpdCBzdG9yZS5maW5pc2hMYXJnZVVwbG9hZCh7IGlkOiBjb25maWcudXBsb2FkSWQsIHBhdGg6IGluZm8ucGF0aCwgbGFzdE1vZGlmaWVkOiBpbmZvLmxhc3RNb2RpZmllZCwgZm9yY2VTZXRJbW11dGFibGU6IGluZm8uZm9yY2VTZXRJbW11dGFibGUsIG5vQ2hlY2tzOiBpbmZvLm5vQ2hlY2tzLCBpbnRlcm5hbDogaW5mby5pbnRlcm5hbCB9KTtcbiAgICAgICAgbGV0IHdyaXR0ZW4gPSBhd2FpdCBzdG9yZS5nZXRJbmZvKHsgcGF0aDogaW5mby5wYXRoIH0pO1xuICAgICAgICBsb2dNdXRhdGlvbih7IG9wOiBcInNldExhcmdlXCIsIGFjY291bnQ6IGluZm8uYWNjb3VudCwgYnVja2V0TmFtZTogaW5mby5idWNrZXROYW1lLCBzdG9yZTogaW5mby5zdG9yZU5hbWUsIHBhdGg6IGluZm8ucGF0aCwgc2l6ZTogd3JpdHRlbj8uc2l6ZSwgd3JpdGVUaW1lOiB3cml0dGVuPy53cml0ZVRpbWUsIGNhbGxlcklkOiBjYWxsZXIgfSk7XG4gICAgfVxuICAgIC8qKiBCZXN0LWVmZm9ydCBjbGVhbnVwOiBhbiB1bmtub3duIHVwbG9hZCBoYXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbC4gKi9cbiAgICBhc3luYyBjYW5jZWxMYXJnZUZpbGUoY29uZmlnOiB7IHVwbG9hZElkOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5kZWxldGUoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgYXdhaXQgZ2V0U3RvcmUoaW5mby5hY2NvdW50LCBpbmZvLmJ1Y2tldE5hbWUsIGluZm8uc3RvcmVOYW1lKS5jYW5jZWxMYXJnZVVwbG9hZCh7IGlkOiBjb25maWcudXBsb2FkSWQgfSk7XG4gICAgfVxuXG4gICAgLy8gSU1QT1JUQU5UOiBXZSBjYW4gbmV2ZXIgZXhwb3NlIGVudW1lcmF0aW9uIChsaXN0aW5nLCBwcmVmaXggc2VhcmNoLCBjaGFuZ2VzIGZlZWRzKSBvdmVyIHRoaXMgcHVibGljIEhUVFAgZW5kcG9pbnQgLSBvbmx5IGV4YWN0LWtleSByZWFkcy4gRW51bWVyYXRpb24gd291bGQgYmUgYSBtYXNzaXZlIHNlY3VyaXR5IHJpc2sgKHB1YmxpYyBidWNrZXRzIHJlbHkgb24gdW5ndWVzc2FibGUga2V5cyBzdGF5aW5nIHVuZ3Vlc3NhYmxlKSwgYW5kIGNvdWxkIGFsc28gY3Jhc2ggdGhlIGNsaWVudCBieSBzZW5kaW5nIHRoZW0gdG9vIG11Y2ggZGF0YS4gTGlzdGluZ3MgZXhpc3Qgb25seSBvbiB0aGUgYXV0aGVudGljYXRlZCBBUEkgKGZpbmRJbmZvIGV0YywgYmVoaW5kIGFjY291bnRBY2Nlc3MpLlxuICAgIGFzeW5jIGh0dHBFbnRyeShjb25maWc/OiB7IHJlcXVpcmVDYWxscz86IHN0cmluZ1tdOyBjYWNoZVRpbWU/OiBudW1iZXIgfSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSBnZXRDdXJyZW50SFRUUFJlcXVlc3QoKTtcbiAgICAgICAgbGV0IHBhdGhuYW1lID0gbmV3IFVSTChyZXF1ZXN0Py51cmwgfHwgXCIvXCIsIFwiaHR0cHM6Ly9sb2NhbGhvc3RcIikucGF0aG5hbWU7XG4gICAgICAgIGlmICghcGF0aG5hbWUuc3RhcnRzV2l0aChcIi9maWxlL1wiKSkge1xuICAgICAgICAgICAgbGV0IGh0bWwgPSBhd2FpdCBwZXJmb3JtTG9jYWxDYWxsKHtcbiAgICAgICAgICAgICAgICBjYWxsZXIsXG4gICAgICAgICAgICAgICAgY2FsbDogeyBub2RlSWQ6IGNhbGxlci5ub2RlSWQsIGNsYXNzR3VpZDogUmVxdWlyZUNvbnRyb2xsZXIuX2NsYXNzR3VpZCwgZnVuY3Rpb25OYW1lOiBcInJlcXVpcmVIVE1MXCIsIGFyZ3M6IFtjb25maWddIH0sXG4gICAgICAgICAgICB9KSBhcyBCdWZmZXI7XG4gICAgICAgICAgICAvLyBXaXRob3V0IHRoaXMgdGhlIGFjY2VzcyBwYWdlIGlzIHNlcnZlZCB3aXRoIG5vIGNvbnRlbnQgdHlwZSwgYW5kIGEgYnJvd3NlciB0aGF0IGlzIHRvbGQgbm90IHRvIHNuaWZmIHNpbXBseSB3aWxsIG5vdCByZW5kZXIgaXRcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhodG1sLCB7IFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcnRzID0gcGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcih4ID0+IHgpLm1hcChkZWNvZGVVUklDb21wb25lbnQpO1xuICAgICAgICBsZXQgYWNjb3VudCA9IHBhcnRzWzFdO1xuICAgICAgICBsZXQgYnVja2V0TmFtZSA9IHBhcnRzWzJdO1xuICAgICAgICBsZXQgZmlsZVBhdGggPSBwYXJ0cy5zbGljZSgzKS5qb2luKFwiL1wiKTtcbiAgICAgICAgaWYgKCFhY2NvdW50IHx8ICFidWNrZXROYW1lIHx8ICFmaWxlUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKGZpbGVQYXRoKTtcbiAgICAgICAgbGV0IGJ1Y2tldFN0b3JlcyA9IGF3YWl0IGdldEJ1Y2tldFN0b3JlcyhhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXRTdG9yZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVhY2ggc3RvcmUncyBwb2xpY3kgY29tZXMgZnJvbSBpdHMgb3duIGNvbmZpZywgd2hpY2ggaXQgaGFzIG9ubHkgcmVhZCBvbmNlIGluaXQgcmFuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGJ1Y2tldFN0b3Jlcy5tYXAoeCA9PiB4LnN0b3JlLmluaXQoKSkpO1xuICAgICAgICBsZXQgcG9saWNpZXMgPSBidWNrZXRTdG9yZXMubWFwKHggPT4gKHsgc3RvcmU6IHguc3RvcmUsIHBvbGljeTogeC5zdG9yZS5zdG9yZUNvbmZpZy5jdXJyZW50KCkgfSkpO1xuICAgICAgICBpZiAoIXBvbGljaWVzLnNvbWUoeCA9PiB4LnBvbGljeS5wdWJsaWMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCAke2FjY291bnR9LyR7YnVja2V0TmFtZX0gaXMgbm90IHB1YmxpYywgc28gaXRzIGZpbGVzIGNhbm5vdCBiZSByZWFkIG92ZXIgcGxhaW4gVVJMc2ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFub255bW91cyBVUkwgcmVhZHMgY2Fycnkgbm8gc291cmNlIHNlbGVjdGlvbiAtIHRoZSBmaWxlJ3Mgcm91dGUgcGlja3MgdGhlIHN0b3JlLCBhbmQgYSByb3V0ZSBubyBzdG9yZSBoZXJlIGNvdmVycyBpcyBzaW1wbHkgbm90IGZvdW5kICh0aGUgcm91dGluZyBmaWxlIGl0c2VsZiBsaXZlcyBvdXRzaWRlIGV2ZXJ5IHN0b3JlKVxuICAgICAgICBsZXQgaHR0cFN0b3JlOiBCbG9iU3RvcmUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBpbW11dGFibGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluZm86IHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZmlsZVBhdGggIT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgbGV0IHNlcnZpbmcgPSBwb2xpY2llcy5maW5kKHggPT4geC5wb2xpY3kucHVibGljICYmIHJvdXRlQ29udGFpbnMoeC5wb2xpY3kucm91dGUsIHJvdXRlKSk7XG4gICAgICAgICAgICBodHRwU3RvcmUgPSBzZXJ2aW5nPy5zdG9yZTtcbiAgICAgICAgICAgIGltbXV0YWJsZSA9ICEhc2VydmluZz8ucG9saWN5LmltbXV0YWJsZTtcbiAgICAgICAgICAgIGluZm8gPSBodHRwU3RvcmUgJiYgYXdhaXQgaHR0cFN0b3JlLmdldEluZm8oeyBwYXRoOiBmaWxlUGF0aCB9KSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmZvID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbmZvIHx8ICFpbmZvLnNpemUpIHtcbiAgICAgICAgICAgIHRyYWNrQWNjZXNzKHsgYWNjb3VudCwgb3BlcmF0aW9uOiBcImh0dHBHZXRcIiwgcGF0aDogYCR7YnVja2V0TmFtZX0vJHtmaWxlUGF0aH1gLCBzaXplOiAwIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXh0ID0gZmlsZVBhdGguc3BsaXQoXCIuXCIpLnBvcCgpIHx8IFwiXCI7XG4gICAgICAgIGxldCBoZWFkZXJzOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogQ09OVEVOVF9UWVBFU1tleHQudG9Mb3dlckNhc2UoKV0gfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixcbiAgICAgICAgICAgIFwiTGFzdC1Nb2RpZmllZFwiOiBuZXcgRGF0ZShpbmZvLndyaXRlVGltZSkudG9VVENTdHJpbmcoKSxcbiAgICAgICAgICAgIFwiQWNjZXB0LVJhbmdlc1wiOiBcImJ5dGVzXCIsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFRoZSBzZXJ2aW5nIHN0b3JlJ3Mgb3duIHBvbGljeSAtIGFuZCBuZXZlciBmb3IgdGhlIHJvdXRpbmcgZmlsZSwgd2hpY2ggY2hhbmdpbmcgaXMgdGhlIHdob2xlIHBvaW50IG9mXG4gICAgICAgIGlmIChpbW11dGFibGUpIHtcbiAgICAgICAgICAgIGhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gYG1heC1hZ2U9JHtJTU1VVEFCTEVfQ0FDSEVfVElNRSAvIDEwMDB9YDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWZNb2RpZmllZFNpbmNlID0gcmVxdWVzdD8uaGVhZGVyc1tcImlmLW1vZGlmaWVkLXNpbmNlXCJdO1xuICAgICAgICBpZiAodHlwZW9mIGlmTW9kaWZpZWRTaW5jZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IHNpbmNlID0gbmV3IERhdGUoaWZNb2RpZmllZFNpbmNlKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBpZiAoc2luY2UgJiYgTWF0aC5mbG9vcihpbmZvLndyaXRlVGltZSAvIDEwMDApICogMTAwMCA8PSBzaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBzdGF0dXM6IFwiMzA0XCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByYW5nZUhlYWRlciA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJyYW5nZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiByYW5nZUhlYWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgbGV0IG1hdGNoID0gL15ieXRlcz0oXFxkKiktKFxcZCopJC8uZXhlYyhyYW5nZUhlYWRlci50cmltKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoICYmIChtYXRjaFsxXSB8fCBtYXRjaFsyXSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBsZXQgZW5kSW5jbHVzaXZlID0gaW5mby5zaXplIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMCwgaW5mby5zaXplIC0gK21hdGNoWzJdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICttYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRJbmNsdXNpdmUgPSBNYXRoLm1pbigrbWF0Y2hbMl0sIGluZm8uc2l6ZSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBpbmZvLnNpemUgfHwgc3RhcnQgPiBlbmRJbmNsdXNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IC4uLmhlYWRlcnMsIFwiQ29udGVudC1SYW5nZVwiOiBgYnl0ZXMgKi8ke2luZm8uc2l6ZX1gLCBzdGF0dXM6IFwiNDE2XCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJhbmdlID0geyBzdGFydCwgZW5kOiBlbmRJbmNsdXNpdmUgKyAxIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3VsdDogeyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGh0dHBTdG9yZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaHR0cFN0b3JlLmdldDIoeyBwYXRoOiBmaWxlUGF0aCwgcmFuZ2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdChhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7IC4uLnJlc3VsdCwgZGF0YTogcmVzdWx0LmRhdGEuc3ViYXJyYXkoTWF0aC5taW4ocmFuZ2Uuc3RhcnQsIHJlc3VsdC5kYXRhLmxlbmd0aCksIE1hdGgubWluKHJhbmdlLmVuZCwgcmVzdWx0LmRhdGEubGVuZ3RoKSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQsIG9wZXJhdGlvbjogXCJodHRwR2V0XCIsIHBhdGg6IGAke2J1Y2tldE5hbWV9LyR7ZmlsZVBhdGh9YCwgc2l6ZTogcmVzdWx0ICYmIHJlc3VsdC5kYXRhLmxlbmd0aCB8fCAwIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhyZXN1bHQuZGF0YSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICR7cmFuZ2Uuc3RhcnR9LSR7cmFuZ2UuZW5kIC0gMX0vJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjIwNlwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhyZXN1bHQuZGF0YSwgaGVhZGVycyk7XG4gICAgfVxufVxuXG4vKiogVGhlIG9uZSByZXNvbHV0aW9uIGV2ZXJ5IGRhdGEgY2FsbCBkb2VzOiB0aGUgY2xpZW50J3Mgc2VsZWN0ZWQgc291cmNlQ29uZmlnIE5BTUVTIGV4YWN0bHkgb25lIHN0b3JlIChjcmVhdGVkIG9uIGZpcnN0IHVzZSksIGFuZCBmbiBydW5zIG9uIGl0LiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JlPFQ+KGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfSwgZm46IChzdG9yZTogQmxvYlN0b3JlKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKGZpbmRCdWNrZXRTdG9yZShjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcpKTtcbn1cblxuLy8gVGhlIGNhbGxlcidzIG5vZGUgaWQgZm9yIHRoZSBtdXRhdGlvbiBsb2cgLSByZWFkIHN5bmNocm9ub3VzbHkgYXQgbWV0aG9kIGVudHJ5ICh0aGUgY2FsbCBjb250ZXh0IGRvZXMgbm90IHN1cnZpdmUgYXdhaXRzKSwgYW5kIHRvbGVyYW50IG9mIHRoZXJlIGJlaW5nIG5vbmUgKGxvY2FsIGNhbGxzKVxuZnVuY3Rpb24gY2FsbGVySWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk/Lm5vZGVJZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbmNvbnN0IGxhcmdlVXBsb2FkSW5mbyA9IG5ldyBNYXA8c3RyaW5nLCB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBub0NoZWNrcz86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbjsgc3RvcmVOYW1lOiBzdHJpbmcgfT4oKTtcblxuY29uc3QgYWNjb3VudEFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBjb25maWcgPSBjb250ZXh0LmNhbGwuYXJnc1swXSBhcyB7IGFjY291bnQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKFN0cmluZyhjb25maWc/LmFjY291bnQpKTtcbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgaWYgKGR1cmF0aW9uID4gQUNDRVNTX0NIRUNLX1NMT1dfVElNRSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIGNoZWNrIGZvciAke2NvbnRleHQuY2FsbC5mdW5jdGlvbk5hbWV9IHRvb2sgJHtkdXJhdGlvbn1tc2ApO1xuICAgIH1cbn07XG5jb25zdCB1cGxvYWRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IGNvbmZpZyA9IGNvbnRleHQuY2FsbC5hcmdzWzBdIGFzIHsgdXBsb2FkSWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoU3RyaW5nKGNvbmZpZz8udXBsb2FkSWQpKTtcbiAgICBpZiAoIWluZm8pIHJldHVybjtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKGluZm8uYWNjb3VudCk7XG59O1xuY29uc3QgYWRtaW5BY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jICgpID0+IHtcbiAgICByZXF1aXJlQWRtaW4oKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciA9IFNvY2tldEZ1bmN0aW9uLnJlZ2lzdGVyKFxuICAgIFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQsXG4gICAgbmV3IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyQmFzZSgpLFxuICAgICgpID0+ICh7XG4gICAgICAgIHBpbmc6IHt9LFxuICAgICAgICBhdXRoZW50aWNhdGU6IHt9LFxuICAgICAgICByZXF1ZXN0QWNjZXNzOiB7fSxcbiAgICAgICAgZ2V0QWNjZXNzU3RhdGU6IHt9LFxuICAgICAgICBsaXN0UmVxdWVzdHNGb3JJUDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdyYW50QWNjZXNzOiB7fSxcbiAgICAgICAgYWRtaW5MaXN0UmVxdWVzdHM6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgYWRtaW5MaXN0QWN0aXZlQnVja2V0czogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBhZG1pbkdyYW50QWNjZXNzOiB7IGhvb2tzOiBbYWRtaW5BY2Nlc3NdIH0sXG4gICAgICAgIGdldDI6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBzZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBkZWw6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBtb3ZlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGZpbmRJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0Q2hhbmdlc0FmdGVyMjogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFyY2hpdmVzQ29uZmlnOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5kZXhJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgbGlzdEJ1Y2tldHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBY3RpdmVCdWNrZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBhY3RpdmF0ZUJ1Y2tldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGNsZWFyV3JpdGVTdGF0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjY2Vzc1N0YXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWNjZXNzU3VtbWFyaWVzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0U3luY1N0YXR1czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGxpc3RMb2dGaWxlczogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldExvZ0ZpbGU6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBzdGFydExhcmdlRmlsZTogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHVwbG9hZFBhcnQ6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGZpbmlzaExhcmdlRmlsZTogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgY2FuY2VsTGFyZ2VGaWxlOiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBodHRwRW50cnk6IHt9LFxuICAgIH0pLFxuICAgICgpID0+ICh7XG4gICAgICAgIG5vQ2xpZW50SG9va3M6IHRydWUsXG4gICAgICAgIG5vRGVmYXVsdEhvb2tzOiB0cnVlLFxuICAgIH0pXG4pO1xuIl19
627
- /* _JS_SOURCE_HASH = "aa4d453b8282f684d06dcfd1b898b100b63e220c7b758d696a4d22a423d85c0e"; */
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBa0k7QUFDbEksNENBQW1JO0FBQ25JLGlEQUF1RTtBQUN2RSw2REFLOEI7QUFDOUIsK0NBQTREO0FBQzVELGlEQUFvRztBQUVwRyw2Q0FBb0Q7QUFDcEQsdUVBQW9FO0FBQ3BFLCtDQUE4SjtBQUM5SiwrQ0FBcUY7QUFFckYsNkNBQWlGO0FBR3BFLFFBQUEseUJBQXlCLEdBQUcsa0NBQWtDLENBQUM7QUFDL0QsUUFBQSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxRQUFBLHlCQUF5QixHQUFHLDJDQUEyQyxDQUFDO0FBQ3hFLFFBQUEscUJBQXFCLEdBQUcsdUNBQXVDLENBQUM7QUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBWSxHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBaUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUUzQyx3WkFBd1o7QUFDeFosTUFBTSxhQUFhLEdBQThCO0lBQzdDLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsaUNBQWlDO0lBQ3ZFLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVztJQUMzRyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxX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RSxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtJQUN6QyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtJQUN4QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtJQUN0QyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtJQUMxQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUNyQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxQyxTQUFTLEVBQUUsRUFBRTtDQUNoQixDQUFDLEVBQ0YsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNILGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3ZCLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbkhvb2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uVHlwZXNcIjtcbmltcG9ydCB7IGdldE5vZGVJZElQIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBzZXRIVFRQUmVzdWx0SGVhZGVycywgZ2V0Q3VycmVudEhUVFBSZXF1ZXN0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbEhUVFBIYW5kbGVyXCI7XG5pbXBvcnQgeyBwZXJmb3JtTG9jYWxDYWxsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbE1hbmFnZXJcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0aW1lSW5NaW51dGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBnZXRDb21tb25OYW1lLCBnZXRQdWJsaWNJZGVudGlmaWVyLCBnZXRPd25NYWNoaW5lSWQsIHZlcmlmeSwgdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5IH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgRmluZENvbmZpZywgU291cmNlQ29uZmlnLCBJTU1VVEFCTEVfQ0FDSEVfVElNRSB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSwgZ2V0Um91dGUsIHJvdXRlQ29udGFpbnMgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7XG4gICAgZmluZEJ1Y2tldFN0b3JlLCBnZXRTdG9yZSwgZ2V0QnVja2V0U3RvcmVzLCByZWFkQnVja2V0SW50ZXJuYWwsIHdyaXRlUm91dGluZ0NvbmZpZyxcbiAgICBnZXRCdWNrZXRBcmNoaXZlc0NvbmZpZywgYnVja2V0U3luY1N0YXR1cywgZGVidWdCdWNrZXRJbmRleFRvdGFscywgQWN0aXZlQnVja2V0SW5mbyxcbiAgICBkZWJ1Z0xpc3RBY2NvdW50QnVja2V0cywgU2VydmVyQnVja2V0SW5mbyxcbiAgICBkZWJ1Z0dldEFjdGl2ZUJ1Y2tldCwgYWN0aXZhdGVCdWNrZXQsIGdldEFjdGl2ZUJ1Y2tldEtleXMsXG59IGZyb20gXCIuL3N0b3JhZ2VTZXJ2ZXJTdGF0ZVwiO1xuaW1wb3J0IHsgZGVidWdDbGVhckFjY291bnRXcml0ZVN0YXRzIH0gZnJvbSBcIi4vYWNjZXNzU3RhdHNcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcsIGdldFRydXN0LCBnZXRSZXF1ZXN0cywgYXNzZXJ0V3JpdGVzQWxsb3dlZCB9IGZyb20gXCIuL3NlcnZlckNvbmZpZ1wiO1xuaW1wb3J0IHsgQmxvYlN0b3JlIH0gZnJvbSBcIi4vYmxvYlN0b3JlXCI7XG5pbXBvcnQgeyBnZXRSb3V0aW5nRmlsZVJlc3VsdCB9IGZyb20gXCIuL2J1Y2tldERpc2tcIjtcbmltcG9ydCB7IFN0b3JhZ2VDbGllbnRDb250cm9sbGVyIH0gZnJvbSBcIi4vc3RvcmFnZUNsaWVudENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHRyYWNrQWNjZXNzLCB0cmFja0FjY2Vzc0NhbGwsIGdldEFjY2Vzc1RvdGFscywgcmVhZEFjY2Vzc1N1bW1hcmllcywgY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMsIEFjY2Vzc1RvdGFscywgQWNjZXNzU3VtbWFyeVN0YXRlIH0gZnJvbSBcIi4vYWNjZXNzU3RhdHNcIjtcbmltcG9ydCB7IGxvZ011dGF0aW9uLCBsaXN0U3RvcmFnZUxvZ0ZpbGVzLCByZWFkU3RvcmFnZUxvZ0ZpbGUgfSBmcm9tIFwiLi9zdG9yYWdlTG9nc1wiO1xuaW1wb3J0IHsgTG9nRmlsZUluZm8gfSBmcm9tIFwiLi4vU3RyZWFtaW5nTG9nc1wiO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWROYW1lLCBhc3NlcnRWYWxpZFBhdGgsIGFzc2VydFZhbGlkQXJncyB9IGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgU3VtbWFyeUVudHJ5IH0gZnJvbSBcIi4uLy4uL3RyZWVTdW1tYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCBSRU1PVEVfU1RPUkFHRV9DTEFTU19HVUlEID0gXCJSZW1vdGVTdG9yYWdlQ29udHJvbGxlci1iN2U0MmE5MVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfQVVUSF9QVVJQT1NFID0gXCJyZW1vdGVTdG9yYWdlLWF1dGgtMVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQgPSBcIlJFTU9URV9TVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEX2NmMmY3YjFlXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BQ0NFU1NfREVOSUVEID0gXCJSRU1PVEVfU1RPUkFHRV9BQ0NFU1NfREVOSUVEXzlkODFhNGMwXCI7XG5cbmNvbnN0IEFVVEhfVElNRV9XSU5ET1cgPSB0aW1lSW5NaW51dGUgKiAxMDtcbmNvbnN0IEFDQ0VTU19DSEVDS19TTE9XX1RJTUUgPSA1MDtcbmNvbnN0IE1BWF9TRVNTSU9OUyA9IDEwMCAqIDEwMDA7XG5jb25zdCBNQVhfUkVRVUVTVFNfUEVSX0lQID0gNTA7XG5cbmV4cG9ydCB0eXBlIEF1dGhUb2tlbkRhdGEgPSB7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICBzZXJ2ZXI6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBBdXRoVG9rZW4gPSB7XG4gICAgY2VydFBlbTogc3RyaW5nO1xuICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuICAgIGRhdGE6IEF1dGhUb2tlbkRhdGE7XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzUmVxdWVzdCA9IHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICB0aW1lOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHJ1c3RSZWNvcmQgPSB7XG4gICAgYWNjb3VudDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc1N0YXRlID0ge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgaGFzQWNjZXNzOiBib29sZWFuO1xuICAgIGdyYW50QWNjZXNzQ29tbWFuZD86IHN0cmluZztcbiAgICB0cnVzdGVkTWFjaGluZXM/OiBUcnVzdFJlY29yZFtdO1xufTtcblxuY29uc3Qgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vLyBXZSBtdXN0IG5ldmVyIHNlcnZlIGFueXRoaW5nIHRoYXQgY2FuIGJlIGV2YWx1YXRlZCBhcyBjb2RlIChodG1sLCBqcyAtIGFuZCBzdmcsIHdoaWNoIGNhbiBlbWJlZCA8c2NyaXB0PiBhbmQgcnVucyBpdCB3aGVuIHZpc2l0ZWQgYXMgYSBkb2N1bWVudCkuIE90aGVyd2lzZSBhIHVzZXIgY291bGQgaG9zdCBhIGZpbGUgYW5kLCBieSB2aXNpdGluZyBpdCwgcnVuIGl0IG9uIG91ciBkb21haW4gLSBnaXZpbmcgdGhlbSBhY2Nlc3MgdG8gYWxsIG9mIG91ciBrZXlzIGFuZCBjb29raWVzLiBQREYgc3RheXM6IGJyb3dzZXIgUERGIHZpZXdlcnMgcnVuIGFueSBlbWJlZGRlZCBQREYgc2NyaXB0aW5nIGluIGEgc2FuZGJveCB3aXRoIG5vIGFjY2VzcyB0byB0aGUgc2VydmluZyBvcmlnaW4ncyBjb29raWVzIG9yIERPTS5cbmNvbnN0IENPTlRFTlRfVFlQRVM6IHsgW2V4dDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgY3NzOiBcInRleHQvY3NzOyBjaGFyc2V0PXV0Zi04XCIsIGpzb246IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgIHR4dDogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIsIHBuZzogXCJpbWFnZS9wbmdcIiwganBnOiBcImltYWdlL2pwZWdcIiwganBlZzogXCJpbWFnZS9qcGVnXCIsIGdpZjogXCJpbWFnZS9naWZcIixcbiAgICB3ZWJwOiBcImltYWdlL3dlYnBcIiwgbXA0OiBcInZpZGVvL21wNFwiLCB3ZWJtOiBcInZpZGVvL3dlYm1cIixcbiAgICBtcDM6IFwiYXVkaW8vbXBlZ1wiLCB3YXY6IFwiYXVkaW8vd2F2XCIsIHBkZjogXCJhcHBsaWNhdGlvbi9wZGZcIixcbn07XG5cbmNvbnN0IGNvbm5lY3RlZENsaWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHRyYWNrQ2FsbGVyKCk6IHZvaWQge1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKS5ub2RlSWQ7XG4gICAgaWYgKGNvbm5lY3RlZENsaWVudHMuaGFzKG5vZGVJZCkpIHJldHVybjtcbiAgICBjb25uZWN0ZWRDbGllbnRzLmFkZChub2RlSWQpO1xuICAgIFNvY2tldEZ1bmN0aW9uLm9uTmV4dERpc2Nvbm5lY3Qobm9kZUlkLCAoKSA9PiB7XG4gICAgICAgIGNvbm5lY3RlZENsaWVudHMuZGVsZXRlKG5vZGVJZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgQnJvYWRjYXN0aW5nIHJvdXRpbmcgY29uZmlnIGNoYW5nZSB0byAke2Nvbm5lY3RlZENsaWVudHMuc2l6ZX0gY29ubmVjdGVkIGNsaWVudHNgKTtcbiAgICBmb3IgKGxldCBub2RlSWQgb2YgWy4uLmNvbm5lY3RlZENsaWVudHNdKSB7XG4gICAgICAgIHZvaWQgU3RvcmFnZUNsaWVudENvbnRyb2xsZXIubm9kZXNbbm9kZUlkXS5yb3V0aW5nQ29uZmlnQ2hhbmdlZCgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRDYWxsZXJNYWNoaW5lSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgbGV0IG1hY2hpbmVJZCA9IHNlc3Npb25zLmdldChjYWxsZXIubm9kZUlkKTtcbiAgICBpZiAoIW1hY2hpbmVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRH0gQ2FsbCBhdXRoZW50aWNhdGUgZmlyc3QgKGNvbm5lY3Rpb24gJHtjYWxsZXIubm9kZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbmZ1bmN0aW9uIGdldENhbGxlcklQKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldE5vZGVJZElQKFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZCk7XG59XG5mdW5jdGlvbiBpc0FkbWluKG1hY2hpbmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1hY2hpbmVJZCA9PT0gZ2V0T3duTWFjaGluZUlkKGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKS5yb290RG9tYWluKTtcbn1cbmZ1bmN0aW9uIHJlcXVpcmVBZG1pbigpOiBzdHJpbmcge1xuICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICBpZiAoIWlzQWRtaW4obWFjaGluZUlkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBBZG1pbiBjb21tYW5kcyBtdXN0IGJlIHJ1biBmcm9tIHRoZSBzdG9yYWdlIG1hY2hpbmUgaXRzZWxmIChjYWxsZXIgbWFjaGluZSAke21hY2hpbmVJZH0pYCk7XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lSWQ7XG59XG5hc3luYyBmdW5jdGlvbiByZXF1aXJlQWNjZXNzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkgcmV0dXJuIG1hY2hpbmVJZDtcbiAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgIGxldCB0cnVzdGVkID0gYXdhaXQgdHJ1c3QuZ2V0KGAke2FjY291bnR9fCR7bWFjaGluZUlkfWApO1xuICAgIGlmICghdHJ1c3RlZCkge1xuICAgICAgICBsZXQgeyBkb21haW4sIHBvcnQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfQUNDRVNTX0RFTklFRH0gTWFjaGluZSBoYXMgbm8gYWNjZXNzIHRvIHRoaXMgYWNjb3VudC4gTWFjaGluZSAke21hY2hpbmVJZH0sIGFjY291bnQgJHtKU09OLnN0cmluZ2lmeShhY2NvdW50KX0uIFZpc2l0IGh0dHBzOi8vJHtkb21haW59OiR7cG9ydH0vJHthY2NvdW50fSBmb3IgYWNjZXNzIGluc3RydWN0aW9ucy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cblxuZnVuY3Rpb24gZ2V0R3JhbnRBY2Nlc3NDb21tYW5kKHJlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgeyBzc2hUYXJnZXQsIHNlcnZlckNvbW1hbmQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICByZXR1cm4gYHNzaCAke3NzaFRhcmdldH0gJyR7c2VydmVyQ29tbWFuZH0gLS1yZXF1ZXN0SWQgJHtyZXF1ZXN0SWR9J2A7XG59XG5cbmNsYXNzIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyQmFzZSB7XG4gICAgYXN5bmMgcGluZygpOiBQcm9taXNlPHt9PiB7XG4gICAgICAgIHRyYWNrQ2FsbGVyKCk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBhc3luYyBhdXRoZW50aWNhdGUodG9rZW46IEF1dGhUb2tlbik6IFByb21pc2U8eyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9PiB7XG4gICAgICAgIGxldCB7IGRvbWFpbiwgcG9ydCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgICAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgICAgIHZlcmlmeSh0b2tlbi5jZXJ0UGVtLCB0b2tlbi5zaWduYXR1cmUsIHRva2VuLmRhdGEpO1xuICAgICAgICBsZXQgeyBwdXJwb3NlLCB0aW1lLCBzZXJ2ZXIgfSA9IHRva2VuLmRhdGE7XG4gICAgICAgIGlmIChwdXJwb3NlICE9PSBTVE9SQUdFX0FVVEhfUFVSUE9TRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIHB1cnBvc2UgaXMgJHtKU09OLnN0cmluZ2lmeShwdXJwb3NlKX0sIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoU1RPUkFHRV9BVVRIX1BVUlBPU0UpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhEYXRlLm5vdygpIC0gdGltZSkgPiBBVVRIX1RJTUVfV0lORE9XKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gdGltZSBpcyB0b28gZmFyIGZyb20gdGhlIHNlcnZlciB0aW1lICh0b2tlbiAke3RpbWV9LCBzZXJ2ZXIgJHtEYXRlLm5vdygpfSwgYWxsb3dlZCBkcmlmdCAke0FVVEhfVElNRV9XSU5ET1d9bXMpYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRva2VuRG9tYWluID0gc2VydmVyLnNwbGl0KFwiOlwiKVswXTtcbiAgICAgICAgaWYgKHRva2VuRG9tYWluICE9PSBkb21haW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiBpcyBmb3Igc2VydmVyICR7SlNPTi5zdHJpbmdpZnkoc2VydmVyKX0sIGJ1dCB0aGlzIHNlcnZlciBpcyAke0pTT04uc3RyaW5naWZ5KGAke2RvbWFpbn06JHtwb3J0fWApfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDb21tb25OYW1lKHRva2VuLmNlcnRQZW0pLnNwbGl0KFwiLlwiKVswXTtcbiAgICAgICAgaWYgKCF2ZXJpZnlNYWNoaW5lSWRGb3JQdWJsaWNLZXkoeyBtYWNoaW5lSWQsIHB1YmxpY0tleTogZ2V0UHVibGljSWRlbnRpZmllcih0b2tlbi5jZXJ0UGVtKSB9KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDZXJ0aWZpY2F0ZSBjb21tb24gbmFtZSBkb2VzIG5vdCBtYXRjaCBpdHMgcHVibGljIGtleTogJHtKU09OLnN0cmluZ2lmeShnZXRDb21tb25OYW1lKHRva2VuLmNlcnRQZW0pKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9ucy5zZXQoY2FsbGVyLm5vZGVJZCwgbWFjaGluZUlkKTtcbiAgICAgICAgd2hpbGUgKHNlc3Npb25zLnNpemUgPiBNQVhfU0VTU0lPTlMpIHtcbiAgICAgICAgICAgIGxldCBvbGRlc3QgPSBzZXNzaW9ucy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICAgIHNlc3Npb25zLmRlbGV0ZShvbGRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXA6IGdldENhbGxlcklQKCkgfTtcbiAgICB9XG5cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgcmVxdWVzdEFjY2Vzcyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmc7IHJlcXVlc3RJZDogc3RyaW5nOyBncmFudEFjY2Vzc0NvbW1hbmQ6IHN0cmluZyB9PiB7XG4gICAgICAgIGxldCBhY2NvdW50ID0gY29uZmlnLmFjY291bnQ7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzU3RvcmFnZSA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IHJlcXVlc3RzU3RvcmFnZS5nZXQoaXApIHx8IFtdO1xuICAgICAgICBsZXQgZXhpc3RpbmcgPSByZXF1ZXN0cy5maW5kKHggPT4geC5hY2NvdW50ID09PSBhY2NvdW50ICYmIHgubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhpc3RpbmcgPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCksXG4gICAgICAgICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgaXAsXG4gICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAocmVxdWVzdHMubGVuZ3RoID4gTUFYX1JFUVVFU1RTX1BFUl9JUCkgcmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgYXdhaXQgcmVxdWVzdHNTdG9yYWdlLnNldChpcCwgcmVxdWVzdHMpO1xuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwLCByZXF1ZXN0SWQ6IGV4aXN0aW5nLnJlcXVlc3RJZCwgZ3JhbnRBY2Nlc3NDb21tYW5kOiBnZXRHcmFudEFjY2Vzc0NvbW1hbmQoZXhpc3RpbmcucmVxdWVzdElkKSB9O1xuICAgIH1cblxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdGF0ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1N0YXRlPiB7XG4gICAgICAgIGxldCBhY2NvdW50ID0gY29uZmlnLmFjY291bnQ7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICAgICAgbGV0IHRydXN0ID0gYXdhaXQgZ2V0VHJ1c3QoKTtcbiAgICAgICAgbGV0IGhhc0FjY2VzcyA9IGlzQWRtaW4obWFjaGluZUlkKSB8fCAhIWF3YWl0IHRydXN0LmdldChgJHthY2NvdW50fXwke21hY2hpbmVJZH1gKTtcbiAgICAgICAgbGV0IHJlc3VsdDogQWNjZXNzU3RhdGUgPSB7IG1hY2hpbmVJZCwgaXAsIGhhc0FjY2VzcyB9O1xuICAgICAgICBpZiAoIWhhc0FjY2Vzcykge1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgICAgIGxldCBvd25SZXF1ZXN0ID0gKGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW10pLmZpbmQoeCA9PiB4LmFjY291bnQgPT09IGFjY291bnQgJiYgeC5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCk7XG4gICAgICAgICAgICBpZiAob3duUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5ncmFudEFjY2Vzc0NvbW1hbmQgPSBnZXRHcmFudEFjY2Vzc0NvbW1hbmQob3duUmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0cnVzdGVkTWFjaGluZXM6IFRydXN0UmVjb3JkW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGF3YWl0IHRydXN0LmdldEtleXMoKSkge1xuICAgICAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgJHthY2NvdW50fXxgKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcmVjb3JkID0gYXdhaXQgdHJ1c3QuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAocmVjb3JkKSB0cnVzdGVkTWFjaGluZXMucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50cnVzdGVkTWFjaGluZXMgPSB0cnVzdGVkTWFjaGluZXM7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgbGlzdFJlcXVlc3RzRm9ySVAoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgaXA6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NSZXF1ZXN0W10+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZXF1ZXN0cy5nZXQoY29uZmlnLmlwKSB8fCBbXSkuZmlsdGVyKHggPT4geC5hY2NvdW50ID09PSBjb25maWcuYWNjb3VudCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ3JhbnRBY2Nlc3MoY29uZmlnOiB7IHJlcXVlc3RJZDogc3RyaW5nIH0pOiBQcm9taXNlPFRydXN0UmVjb3JkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0SWQgPSBjb25maWcucmVxdWVzdElkO1xuICAgICAgICBsZXQgY2FsbGVyTWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGZvciAobGV0IGlwIG9mIGF3YWl0IHJlcXVlc3RzLmdldEtleXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxdWVzdCBvZiBhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghaXNBZG1pbihjYWxsZXJNYWNoaW5lSWQpICYmICFhd2FpdCB0cnVzdC5nZXQoYCR7cmVxdWVzdC5hY2NvdW50fXwke2NhbGxlck1hY2hpbmVJZH1gKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBNYWNoaW5lIGhhcyBubyBhY2Nlc3MgdG8gdGhpcyBhY2NvdW50LiBNYWNoaW5lICR7Y2FsbGVyTWFjaGluZUlkfSwgYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3QuYWNjb3VudCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCByZWNvcmQ6IFRydXN0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdC5tYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdHJ1c3Quc2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtyZXF1ZXN0Lm1hY2hpbmVJZH1gLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhY2Nlc3MgcmVxdWVzdCBmb3VuZCB3aXRoIGlkICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdElkKX0uIEl0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBncmFudGVkIG9yIGV4cGlyZWQuYCk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluIChzbyBvbmx5IHRoaXMgbWFjaGluZSdzIG93biBwcm9jZXNzZXMgY2FuIGNhbGwgaXQpOiB0aGUgYnVja2V0cyB0aGlzIHByb2Nlc3MgaGFzIGxvYWRlZC4gQSBkZXBsb3kgc3VjY2Vzc29yIGFza3MgaXRzIHByZWRlY2Vzc29yIGZvciB0aGlzLCBzbyBpdCBhY3RpdmF0ZXMgZXhhY3RseSB0aGUgYnVja2V0cyB0aGF0IGFyZSBpbiB1c2UgaW5zdGVhZCBvZiBldmVyeSBidWNrZXQgb24gZGlzay4gKi9cbiAgICBhc3luYyBhZG1pbkxpc3RBY3RpdmVCdWNrZXRzKCk6IFByb21pc2U8eyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W10+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjdGl2ZUJ1Y2tldEtleXMoKTtcbiAgICB9XG4gICAgYXN5bmMgYWRtaW5MaXN0UmVxdWVzdHMoY29uZmlnOiB7IGlwOiBzdHJpbmcgfSk6IFByb21pc2U8QWNjZXNzUmVxdWVzdFtdPiB7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXF1ZXN0cy5nZXQoY29uZmlnLmlwKSB8fCBbXTtcbiAgICB9XG4gICAgYXN5bmMgYWRtaW5HcmFudEFjY2Vzcyhjb25maWc6IHsgcmVxdWVzdElkOiBzdHJpbmcgfSk6IFByb21pc2U8VHJ1c3RSZWNvcmQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RJZCA9IGNvbmZpZy5yZXF1ZXN0SWQ7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGZvciAobGV0IGlwIG9mIGF3YWl0IHJlcXVlc3RzLmdldEtleXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxdWVzdCBvZiBhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCByZWNvcmQ6IFRydXN0UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50OiByZXF1ZXN0LmFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVJZDogcmVxdWVzdC5tYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgIGlwOiByZXF1ZXN0LmlwLFxuICAgICAgICAgICAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdHJ1c3Quc2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtyZXF1ZXN0Lm1hY2hpbmVJZH1gLCByZWNvcmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhY2Nlc3MgcmVxdWVzdCBmb3VuZCB3aXRoIGlkICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdElkKX0uIEl0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBncmFudGVkIG9yIGV4cGlyZWQuYCk7XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRcIilcbiAgICBhc3luYyBnZXQyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH07IGludGVybmFsPzogYm9vbGVhbjsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuOyBpbmNsdWRlTWFya2VkPzogYm9vbGVhbiB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBmaWxlIGxpdmVzIG91dHNpZGUgZXZlcnkgc3RvcmUgYW5kIGV2ZW4gb3V0c2lkZSB0aGUgYnVja2V0IChpdCBpcyB3aGF0IENSRUFURVMgaXQpLCBzbyBpdCBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgZGlzayAtIGFic2VudCBtZWFucyB1bmRlZmluZWQsIGV4YWN0bHkgbGlrZSBhbnkgZmlsZSByZWFkXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmludGVybmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEJ1Y2tldEludGVybmFsKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuZ2V0Mihjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJzZXRcIilcbiAgICBhc3luYyBzZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlcjsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBpbnRlcm5hbD86IGJvb2xlYW47IHVuZGVsZXRlPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIC8vIENvcGllZCBiZWNhdXNlIHRoZSB3aXJlIGhhbmRzIHVzIGEgcGxhaW4gVWludDhBcnJheSB2aWV3LCBub3QgYSByZWFsIEJ1ZmZlclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5mcm9tKGNvbmZpZy5kYXRhKTtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzdG9yZSB0aGUgY2FsbGVyIHNlbGVjdGVkIG93bnMgdGhpcyBmaWxlOiBpdCBhcHBsaWVzIGl0LCBlbmZvcmNlcyB0aGUgdmVyc2lvbiBydWxlLCBhbmQgaXRzIHBlZXJzIHB1bGwgaXQgZnJvbSB0aGVyZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHdyaXRlUm91dGluZ0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5zZXQoeyAuLi5jb25maWcsIGRhdGEgfSkpO1xuICAgICAgICBsb2dNdXRhdGlvbih7IG9wOiBjb25maWcudW5kZWxldGUgJiYgXCJ1bmRlbGV0ZVwiIHx8IFwic2V0XCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHNpemU6IGRhdGEubGVuZ3RoLCB3cml0ZVRpbWU6IGNvbmZpZy5sYXN0TW9kaWZpZWQsIGNhbGxlcklkOiBjYWxsZXIsIGludGVybmFsOiBjb25maWcuaW50ZXJuYWwgfSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZGVsXCIpXG4gICAgYXN5bmMgZGVsKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBpbnRlcm5hbD86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBjYWxsZXJJZCgpO1xuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5kZWwoY29uZmlnKSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwiZGVsXCIsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmU6IGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgcGF0aDogY29uZmlnLnBhdGgsIHdyaXRlVGltZTogY29uZmlnLmxhc3RNb2RpZmllZCwgY2FsbGVySWQ6IGNhbGxlciwgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9KTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJtb3ZlXCIpXG4gICAgYXN5bmMgbW92ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IGZyb21QYXRoOiBzdHJpbmc7IHRvUGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IGNhbGxlcklkKCk7XG4gICAgICAgIC8vIGFzc2VydFZhbGlkQXJncyBvbmx5IGtub3dzIHRoZSB3ZWxsLWtub3duIGBwYXRoYCBmaWVsZCwgc28gdGhlIHR3byBwYXRocyBvZiBhIG1vdmUgYXJlIHZhbGlkYXRlZCBoZXJlXG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChjb25maWcuZnJvbVBhdGgpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoY29uZmlnLnRvUGF0aCk7XG4gICAgICAgIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLm1vdmUoY29uZmlnKSk7XG4gICAgICAgIGxvZ011dGF0aW9uKHsgb3A6IFwibW92ZVwiLCBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgYnVja2V0TmFtZTogY29uZmlnLmJ1Y2tldE5hbWUsIHN0b3JlOiBjb25maWcuc291cmNlQ29uZmlnLm5hbWUsIHBhdGg6IGNvbmZpZy5mcm9tUGF0aCwgdG9QYXRoOiBjb25maWcudG9QYXRoLCBjYWxsZXJJZDogY2FsbGVyIH0pO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldEluZm9cIilcbiAgICBhc3luYyBnZXRJbmZvKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgeyB3cml0ZVRpbWU6IHJlc3VsdC53cml0ZVRpbWUsIHNpemU6IHJlc3VsdC5zaXplIH0gfHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRJbmZvKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImZpbmRJbmZvXCIpXG4gICAgYXN5bmMgZmluZEluZm8oY29uZmlnOiBGaW5kQ29uZmlnICYgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcHJlZml4OiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5maW5kSW5mbyhjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRDaGFuZ2VzQWZ0ZXJcIilcbiAgICBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IHRpbWU6IG51bWJlcjsgcm91dGVzPzogW251bWJlciwgbnVtYmVyXVtdIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QXJjaGl2ZXNDb25maWcoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXRCdWNrZXRBcmNoaXZlc0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgbGlzdEJ1Y2tldHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXJ2ZXJCdWNrZXRJbmZvW10+IHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkZWJ1Z0xpc3RBY2NvdW50QnVja2V0cyhjb25maWcuYWNjb3VudCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBUaGUgYWNjZXNzIGhvb2sgKGFuZCB0aGUgc3RvcmFnZSBpdCBpbml0aWFsaXplcykgcnVucyBiZWZvcmUgdGhpcywgc28gYSBsYXJnZSBnYXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgY2FsbGVyJ3MgdGltaW5nIGlzIHRoZSBob29rXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbGlzdEJ1Y2tldHMoJHtjb25maWcuYWNjb3VudH0pIGNhbGwgYm9keSB0b29rICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFRoZSBsaXZlLCBpbi1tZW1vcnkgc3RhdGUgb2Ygb25lIGJ1Y2tldCwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQW5zd2VyZWQgd2l0aG91dCB0b3VjaGluZyB0aGUgZGlzaywgc28gaXQgaXMgY2hlYXAgLSBidXQgb25seSB3b3JrcyB3aGlsZSB0aGUgYnVja2V0IGlzIGxvYWRlZCBoZXJlLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY3RpdmVCdWNrZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnR2V0QWN0aXZlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBMb2FkcyBhIGJ1Y2tldCB0aGF0IGV4aXN0cyBvbiB0aGlzIHNlcnZlciBpbnRvIG1lbW9yeSAoc3RhcnRpbmcgaXRzIHN5bmNocm9uaXphdGlvbikgYW5kIHJldHVybnMgaXRzIGxpdmUgc3RhdGUsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgY291bGQgbm90IGJlIGxvYWRlZC4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgYWN0aXZhdGVCdWNrZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGFjdGl2YXRlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdEJ1Y2tldHMgcmVwb3J0cyBhbmQgdGhlIGluLW1lbW9yeSBhY2Nlc3Mgc3RhdGlzdGljcywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgY2xlYXJXcml0ZVN0YXRzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICAgICAgY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMoY29uZmlnLmFjY291bnQpO1xuICAgICAgICByZXR1cm4geyBjbGVhcmVkQnVja2V0czogZGVidWdDbGVhckFjY291bnRXcml0ZVN0YXRzKGNvbmZpZy5hY2NvdW50KSB9O1xuICAgIH1cbiAgICAvKiogSW4tbWVtb3J5IHRvdGFscyBwZXIgb3BlcmF0aW9uIHR5cGUgc2luY2Ugc3RhcnR1cCAob3IgdGhlIGxhc3QgY2xlYXJXcml0ZVN0YXRzKS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3RhdHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NUb3RhbHM+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjY2Vzc1RvdGFscyhjb25maWcuYWNjb3VudCk7XG4gICAgfVxuICAgIC8qKiBBIHBhdGggYnJlYWtkb3duIG9mIG9uZSBvcGVyYXRpb24ncyBhY2Nlc3NlcyAob3BlcmF0aW9uIG5hbWVzIGNvbWUgZnJvbSBnZXRBY2Nlc3NTdGF0cykuIG1heENvdW50IGlzIHBhc3NlZCBzdHJhaWdodCB0byBUcmVlU3VtbWFyeS5nZXRTdW1tYXJpZXMuIHdlaWdodEJ5U2l6ZSBpcyBpZ25vcmVkIGZvciBjb3VudC1vbmx5IG9wZXJhdGlvbnMsIHdoaWNoIHJldHVybiB0aGVpciBjb3VudCBicmVha2Rvd24uICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjY2Vzc1N1bW1hcmllcyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBvcGVyYXRpb246IHN0cmluZzsgbWF4Q291bnQ6IG51bWJlcjsgd2VpZ2h0QnlTaXplPzogYm9vbGVhbiB9KTogUHJvbWlzZTxTdW1tYXJ5RW50cnk8QWNjZXNzU3VtbWFyeVN0YXRlPltdPiB7XG4gICAgICAgIHJldHVybiByZWFkQWNjZXNzU3VtbWFyaWVzKGNvbmZpZyk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRJbmRleEluZm8oY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnQnVja2V0SW5kZXhUb3RhbHMoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldFN5bmNTdGF0dXMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0U3luY1N0YXR1cyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgb3BlcmF0aW9uLWxvZyBmaWxlcyBUSElTIHNlcnZlciBob2xkcyAoZXZlcnkgc2VydmVyIGxvZ3MgaXRzIG93biBvcGVyYXRpb25zIC0gYXNrIGVhY2ggb25lOyBzZWUgbGlzdEFsbFNlcnZlckxvZ0ZpbGVzIGluIGNyZWF0ZUFyY2hpdmVzKS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgbGlzdExvZ0ZpbGVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8TG9nRmlsZUluZm9bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgbGlzdFN0b3JhZ2VMb2dGaWxlcygpO1xuICAgIH1cbiAgICAvKiogT25lIGxvZyBmaWxlJ3MgYnl0ZXMsIGFsd2F5cyBMWjQtY29tcHJlc3NlZCAoYSBsaXZlIGZpbGUgaXMgZmx1c2hlZCBhbmQgY29tcHJlc3NlZCBpbiBtZW1vcnkgYmVmb3JlIHNlbmRpbmcpLiBEZWNvZGUgd2l0aCBkZWNvZGVMb2dGaWxlLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRMb2dGaWxlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRTdG9yYWdlTG9nRmlsZShjb25maWcubmFtZSk7XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIHN0YXJ0TGFyZ2VGaWxlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBmb3JjZVNldEltbXV0YWJsZT86IGJvb2xlYW47IG5vQ2hlY2tzPzogYm9vbGVhbjsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBzdG9yZSA9IGZpbmRCdWNrZXRTdG9yZShjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcpO1xuICAgICAgICAvLyBUaGUgc3RvcmUgdmFsaWRhdGVzIHRoZSB3cml0ZSBoZXJlLCBiZWZvcmUgYW55IGJ5dGVzIG1vdmUgKHNlZSBCbG9iU3RvcmUuc3RhcnRMYXJnZVVwbG9hZCkgLSBhIGxhcmdlIGZpbGUgaXMgYSBzZXQsIGFuZCBpdHMgU2V0Q29uZmlnIGRlY2lkZXMgd2hldGhlciBpdCBpcyBldmVuIGFsbG93ZWRcbiAgICAgICAgbGV0IHdyaXRlID0geyBwYXRoOiBjb25maWcucGF0aCwgbGFzdE1vZGlmaWVkOiBjb25maWcubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogY29uZmlnLmZvcmNlU2V0SW1tdXRhYmxlLCBub0NoZWNrczogY29uZmlnLm5vQ2hlY2tzLCBpbnRlcm5hbDogY29uZmlnLmludGVybmFsIH07XG4gICAgICAgIGxldCBpZCA9IGF3YWl0IHN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQod3JpdGUpO1xuICAgICAgICAvLyBUaGUgc3RvcmUgbmFtZSBwaW5zIHRoZSB1cGxvYWQncyBwYXJ0cyBhbmQgZmluaXNoIHRvIHRoZSBzYW1lIHN0b3JlIHRoZSBzdGFydCBwaWNrZWQgKGluLWZsaWdodCB1cGxvYWRzIHN1cnZpdmUgYSBidWNrZXQgcmVidWlsZDogdGhlIHBhcnQgZGF0YSBsaXZlcyBpbiB0aGF0IHN0b3JlJ3MgZm9sZGVyLCB3aGljaCBhIHJlYnVpbHQgc3RvcmUgc3RpbGwgb3BlbnMpXG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5zZXQoaWQsIHsgLi4ud3JpdGUsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmVOYW1lOiBjb25maWcuc291cmNlQ29uZmlnLm5hbWUgfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgLyoqIG9mZnNldCBtYWtlcyB0aGUgcGFydCB3cml0ZSBwb3NpdGlvbmFsIChzZWUgQXJjaGl2ZXNEaXNrLmFwcGVuZExhcmdlVXBsb2FkKSwgd2hpY2ggaXMgd2hhdCBsZXRzIHRoZSBjbGllbnQgUkVUUlkgYSBmYWlsZWQgcGFydCAtIGEgcmUtc2VudCBwYXJ0IGxhbmRzIG9uIHRoZSBzYW1lIGJ5dGVzIGluc3RlYWQgb2YgYXBwZW5kaW5nIHR3aWNlLiAqL1xuICAgIGFzeW5jIHVwbG9hZFBhcnQoY29uZmlnOiB7IHVwbG9hZElkOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlcjsgb2Zmc2V0PzogbnVtYmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7Y29uZmlnLnVwbG9hZElkfWApO1xuICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQ6IGluZm8uYWNjb3VudCwgb3BlcmF0aW9uOiBcInVwbG9hZFBhcnRcIiwgcGF0aDogYCR7aW5mby5idWNrZXROYW1lfS8ke2luZm8ucGF0aH1gLCBzaXplOiBjb25maWcuZGF0YS5sZW5ndGggfSk7XG4gICAgICAgIGF3YWl0IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSkuYXBwZW5kTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkLCBkYXRhOiBCdWZmZXIuZnJvbShjb25maWcuZGF0YSksIG9mZnNldDogY29uZmlnLm9mZnNldCB9KTtcbiAgICB9XG4gICAgYXN5bmMgZmluaXNoTGFyZ2VGaWxlKGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7Y29uZmlnLnVwbG9hZElkfWApO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBjYWxsZXJJZCgpO1xuICAgICAgICBsZXQgc3RvcmUgPSBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpO1xuICAgICAgICBhd2FpdCBzdG9yZS5maW5pc2hMYXJnZVVwbG9hZCh7IGlkOiBjb25maWcudXBsb2FkSWQsIHBhdGg6IGluZm8ucGF0aCwgbGFzdE1vZGlmaWVkOiBpbmZvLmxhc3RNb2RpZmllZCwgZm9yY2VTZXRJbW11dGFibGU6IGluZm8uZm9yY2VTZXRJbW11dGFibGUsIG5vQ2hlY2tzOiBpbmZvLm5vQ2hlY2tzLCBpbnRlcm5hbDogaW5mby5pbnRlcm5hbCB9KTtcbiAgICAgICAgbGV0IHdyaXR0ZW4gPSBhd2FpdCBzdG9yZS5nZXRJbmZvKHsgcGF0aDogaW5mby5wYXRoIH0pO1xuICAgICAgICBsb2dNdXRhdGlvbih7IG9wOiBcInNldExhcmdlXCIsIGFjY291bnQ6IGluZm8uYWNjb3VudCwgYnVja2V0TmFtZTogaW5mby5idWNrZXROYW1lLCBzdG9yZTogaW5mby5zdG9yZU5hbWUsIHBhdGg6IGluZm8ucGF0aCwgc2l6ZTogd3JpdHRlbj8uc2l6ZSwgd3JpdGVUaW1lOiB3cml0dGVuPy53cml0ZVRpbWUsIGNhbGxlcklkOiBjYWxsZXIgfSk7XG4gICAgfVxuICAgIC8qKiBCZXN0LWVmZm9ydCBjbGVhbnVwOiBhbiB1bmtub3duIHVwbG9hZCBoYXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbC4gKi9cbiAgICBhc3luYyBjYW5jZWxMYXJnZUZpbGUoY29uZmlnOiB7IHVwbG9hZElkOiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5kZWxldGUoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgYXdhaXQgZ2V0U3RvcmUoaW5mby5hY2NvdW50LCBpbmZvLmJ1Y2tldE5hbWUsIGluZm8uc3RvcmVOYW1lKS5jYW5jZWxMYXJnZVVwbG9hZCh7IGlkOiBjb25maWcudXBsb2FkSWQgfSk7XG4gICAgfVxuXG4gICAgLy8gSU1QT1JUQU5UOiBXZSBjYW4gbmV2ZXIgZXhwb3NlIGVudW1lcmF0aW9uIChsaXN0aW5nLCBwcmVmaXggc2VhcmNoLCBjaGFuZ2VzIGZlZWRzKSBvdmVyIHRoaXMgcHVibGljIEhUVFAgZW5kcG9pbnQgLSBvbmx5IGV4YWN0LWtleSByZWFkcy4gRW51bWVyYXRpb24gd291bGQgYmUgYSBtYXNzaXZlIHNlY3VyaXR5IHJpc2sgKHB1YmxpYyBidWNrZXRzIHJlbHkgb24gdW5ndWVzc2FibGUga2V5cyBzdGF5aW5nIHVuZ3Vlc3NhYmxlKSwgYW5kIGNvdWxkIGFsc28gY3Jhc2ggdGhlIGNsaWVudCBieSBzZW5kaW5nIHRoZW0gdG9vIG11Y2ggZGF0YS4gTGlzdGluZ3MgZXhpc3Qgb25seSBvbiB0aGUgYXV0aGVudGljYXRlZCBBUEkgKGZpbmRJbmZvIGV0YywgYmVoaW5kIGFjY291bnRBY2Nlc3MpLlxuICAgIGFzeW5jIGh0dHBFbnRyeShjb25maWc/OiB7IHJlcXVpcmVDYWxscz86IHN0cmluZ1tdOyBjYWNoZVRpbWU/OiBudW1iZXIgfSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSBnZXRDdXJyZW50SFRUUFJlcXVlc3QoKTtcbiAgICAgICAgbGV0IHBhdGhuYW1lID0gbmV3IFVSTChyZXF1ZXN0Py51cmwgfHwgXCIvXCIsIFwiaHR0cHM6Ly9sb2NhbGhvc3RcIikucGF0aG5hbWU7XG4gICAgICAgIGlmICghcGF0aG5hbWUuc3RhcnRzV2l0aChcIi9maWxlL1wiKSkge1xuICAgICAgICAgICAgbGV0IGh0bWwgPSBhd2FpdCBwZXJmb3JtTG9jYWxDYWxsKHtcbiAgICAgICAgICAgICAgICBjYWxsZXIsXG4gICAgICAgICAgICAgICAgY2FsbDogeyBub2RlSWQ6IGNhbGxlci5ub2RlSWQsIGNsYXNzR3VpZDogUmVxdWlyZUNvbnRyb2xsZXIuX2NsYXNzR3VpZCwgZnVuY3Rpb25OYW1lOiBcInJlcXVpcmVIVE1MXCIsIGFyZ3M6IFtjb25maWddIH0sXG4gICAgICAgICAgICB9KSBhcyBCdWZmZXI7XG4gICAgICAgICAgICAvLyBXaXRob3V0IHRoaXMgdGhlIGFjY2VzcyBwYWdlIGlzIHNlcnZlZCB3aXRoIG5vIGNvbnRlbnQgdHlwZSwgYW5kIGEgYnJvd3NlciB0aGF0IGlzIHRvbGQgbm90IHRvIHNuaWZmIHNpbXBseSB3aWxsIG5vdCByZW5kZXIgaXRcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhodG1sLCB7IFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcnRzID0gcGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcih4ID0+IHgpLm1hcChkZWNvZGVVUklDb21wb25lbnQpO1xuICAgICAgICBsZXQgYWNjb3VudCA9IHBhcnRzWzFdO1xuICAgICAgICBsZXQgYnVja2V0TmFtZSA9IHBhcnRzWzJdO1xuICAgICAgICBsZXQgZmlsZVBhdGggPSBwYXJ0cy5zbGljZSgzKS5qb2luKFwiL1wiKTtcbiAgICAgICAgaWYgKCFhY2NvdW50IHx8ICFidWNrZXROYW1lIHx8ICFmaWxlUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYWNjb3VudCwgXCJhY2NvdW50XCIpO1xuICAgICAgICBhc3NlcnRWYWxpZE5hbWUoYnVja2V0TmFtZSwgXCJidWNrZXQgbmFtZVwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKGZpbGVQYXRoKTtcbiAgICAgICAgbGV0IGJ1Y2tldFN0b3JlcyA9IGF3YWl0IGdldEJ1Y2tldFN0b3JlcyhhY2NvdW50LCBidWNrZXROYW1lKTtcbiAgICAgICAgaWYgKCFidWNrZXRTdG9yZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgc3RhdHVzOiBcIjQwNFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVhY2ggc3RvcmUncyBwb2xpY3kgY29tZXMgZnJvbSBpdHMgb3duIGNvbmZpZywgd2hpY2ggaXQgaGFzIG9ubHkgcmVhZCBvbmNlIGluaXQgcmFuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGJ1Y2tldFN0b3Jlcy5tYXAoeCA9PiB4LnN0b3JlLmluaXQoKSkpO1xuICAgICAgICBsZXQgcG9saWNpZXMgPSBidWNrZXRTdG9yZXMubWFwKHggPT4gKHsgc3RvcmU6IHguc3RvcmUsIHBvbGljeTogeC5zdG9yZS5zdG9yZUNvbmZpZy5jdXJyZW50KCkgfSkpO1xuICAgICAgICBpZiAoIXBvbGljaWVzLnNvbWUoeCA9PiB4LnBvbGljeS5wdWJsaWMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1Y2tldCBpcyBub3QgcHVibGljLCBzbyBpdHMgZmlsZXMgY2Fubm90IGJlIHJlYWQgb3ZlciBwbGFpbiBVUkxzOiAke2FjY291bnR9LyR7YnVja2V0TmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbm9ueW1vdXMgVVJMIHJlYWRzIGNhcnJ5IG5vIHNvdXJjZSBzZWxlY3Rpb24gLSB0aGUgZmlsZSdzIHJvdXRlIHBpY2tzIHRoZSBzdG9yZSwgYW5kIGEgcm91dGUgbm8gc3RvcmUgaGVyZSBjb3ZlcnMgaXMgc2ltcGx5IG5vdCBmb3VuZCAodGhlIHJvdXRpbmcgZmlsZSBpdHNlbGYgbGl2ZXMgb3V0c2lkZSBldmVyeSBzdG9yZSlcbiAgICAgICAgbGV0IGh0dHBTdG9yZTogQmxvYlN0b3JlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaW1tdXRhYmxlID0gZmFsc2U7XG4gICAgICAgIGxldCBpbmZvOiB7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpbGVQYXRoICE9PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIGxldCBzZXJ2aW5nID0gcG9saWNpZXMuZmluZCh4ID0+IHgucG9saWN5LnB1YmxpYyAmJiByb3V0ZUNvbnRhaW5zKHgucG9saWN5LnJvdXRlLCByb3V0ZSkpO1xuICAgICAgICAgICAgaHR0cFN0b3JlID0gc2VydmluZz8uc3RvcmU7XG4gICAgICAgICAgICBpbW11dGFibGUgPSAhIXNlcnZpbmc/LnBvbGljeS5pbW11dGFibGU7XG4gICAgICAgICAgICBpbmZvID0gaHR0cFN0b3JlICYmIGF3YWl0IGh0dHBTdG9yZS5nZXRJbmZvKHsgcGF0aDogZmlsZVBhdGggfSkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFJvdXRpbmdGaWxlUmVzdWx0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5mbyB8fCAhaW5mby5zaXplKSB7XG4gICAgICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQsIG9wZXJhdGlvbjogXCJodHRwR2V0XCIsIHBhdGg6IGAke2J1Y2tldE5hbWV9LyR7ZmlsZVBhdGh9YCwgc2l6ZTogMCB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGV4dCA9IGZpbGVQYXRoLnNwbGl0KFwiLlwiKS5wb3AoKSB8fCBcIlwiO1xuICAgICAgICBsZXQgaGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IENPTlRFTlRfVFlQRVNbZXh0LnRvTG93ZXJDYXNlKCldIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICAgICAgICBcIkxhc3QtTW9kaWZpZWRcIjogbmV3IERhdGUoaW5mby53cml0ZVRpbWUpLnRvVVRDU3RyaW5nKCksXG4gICAgICAgICAgICBcIkFjY2VwdC1SYW5nZXNcIjogXCJieXRlc1wiLFxuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgc2VydmluZyBzdG9yZSdzIG93biBwb2xpY3kgLSBhbmQgbmV2ZXIgZm9yIHRoZSByb3V0aW5nIGZpbGUsIHdoaWNoIGNoYW5naW5nIGlzIHRoZSB3aG9sZSBwb2ludCBvZlxuICAgICAgICBpZiAoaW1tdXRhYmxlKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IGBtYXgtYWdlPSR7SU1NVVRBQkxFX0NBQ0hFX1RJTUUgLyAxMDAwfWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlmTW9kaWZpZWRTaW5jZSA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJpZi1tb2RpZmllZC1zaW5jZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZk1vZGlmaWVkU2luY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBzaW5jZSA9IG5ldyBEYXRlKGlmTW9kaWZpZWRTaW5jZSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKHNpbmNlICYmIE1hdGguZmxvb3IoaW5mby53cml0ZVRpbWUgLyAxMDAwKSAqIDEwMDAgPD0gc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgLi4uaGVhZGVycywgc3RhdHVzOiBcIjMwNFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmFuZ2VIZWFkZXIgPSByZXF1ZXN0Py5oZWFkZXJzW1wicmFuZ2VcIl07XG4gICAgICAgIGlmICh0eXBlb2YgcmFuZ2VIZWFkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IC9eYnl0ZXM9KFxcZCopLShcXGQqKSQvLmV4ZWMocmFuZ2VIZWFkZXIudHJpbSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluY2x1c2l2ZSA9IGluZm8uc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4KDAsIGluZm8uc2l6ZSAtICttYXRjaFsyXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSArbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kSW5jbHVzaXZlID0gTWF0aC5taW4oK21hdGNoWzJdLCBpbmZvLnNpemUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gaW5mby5zaXplIHx8IHN0YXJ0ID4gZW5kSW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICovJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjQxNlwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByYW5nZSA9IHsgc3RhcnQsIGVuZDogZW5kSW5jbHVzaXZlICsgMSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQ6IHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChodHRwU3RvcmUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGh0dHBTdG9yZS5nZXQyKHsgcGF0aDogZmlsZVBhdGgsIHJhbmdlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0geyAuLi5yZXN1bHQsIGRhdGE6IHJlc3VsdC5kYXRhLnN1YmFycmF5KE1hdGgubWluKHJhbmdlLnN0YXJ0LCByZXN1bHQuZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIHJlc3VsdC5kYXRhLmxlbmd0aCkpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50LCBvcGVyYXRpb246IFwiaHR0cEdldFwiLCBwYXRoOiBgJHtidWNrZXROYW1lfS8ke2ZpbGVQYXRofWAsIHNpemU6IHJlc3VsdCAmJiByZXN1bHQuZGF0YS5sZW5ndGggfHwgMCB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIHsgLi4uaGVhZGVycywgXCJDb250ZW50LVJhbmdlXCI6IGBieXRlcyAke3JhbmdlLnN0YXJ0fS0ke3JhbmdlLmVuZCAtIDF9LyR7aW5mby5zaXplfWAsIHN0YXR1czogXCIyMDZcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIGhlYWRlcnMpO1xuICAgIH1cbn1cblxuLyoqIFRoZSBvbmUgcmVzb2x1dGlvbiBldmVyeSBkYXRhIGNhbGwgZG9lczogdGhlIGNsaWVudCdzIHNlbGVjdGVkIHNvdXJjZUNvbmZpZyBOQU1FUyBleGFjdGx5IG9uZSBzdG9yZSAoY3JlYXRlZCBvbiBmaXJzdCB1c2UpLCBhbmQgZm4gcnVucyBvbiBpdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yZTxUPihjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0sIGZuOiAoc3RvcmU6IEJsb2JTdG9yZSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBhd2FpdCBmbihmaW5kQnVja2V0U3RvcmUoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcuc291cmNlQ29uZmlnKSk7XG59XG5cbi8vIFRoZSBjYWxsZXIncyBub2RlIGlkIGZvciB0aGUgbXV0YXRpb24gbG9nIC0gcmVhZCBzeW5jaHJvbm91c2x5IGF0IG1ldGhvZCBlbnRyeSAodGhlIGNhbGwgY29udGV4dCBkb2VzIG5vdCBzdXJ2aXZlIGF3YWl0cyksIGFuZCB0b2xlcmFudCBvZiB0aGVyZSBiZWluZyBub25lIChsb2NhbCBjYWxscylcbmZ1bmN0aW9uIGNhbGxlcklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpPy5ub2RlSWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5jb25zdCBsYXJnZVVwbG9hZEluZm8gPSBuZXcgTWFwPHN0cmluZywgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7IGZvcmNlU2V0SW1tdXRhYmxlPzogYm9vbGVhbjsgbm9DaGVja3M/OiBib29sZWFuOyBpbnRlcm5hbD86IGJvb2xlYW47IHN0b3JlTmFtZTogc3RyaW5nIH0+KCk7XG5cbmNvbnN0IGFjY291bnRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgY29uZmlnID0gY29udGV4dC5jYWxsLmFyZ3NbMF0gYXMgeyBhY2NvdW50Pzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgYXdhaXQgcmVxdWlyZUFjY2VzcyhTdHJpbmcoY29uZmlnPy5hY2NvdW50KSk7XG4gICAgbGV0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgIGlmIChkdXJhdGlvbiA+IEFDQ0VTU19DSEVDS19TTE9XX1RJTUUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYEFjY2VzcyBjaGVjayBmb3IgJHtjb250ZXh0LmNhbGwuZnVuY3Rpb25OYW1lfSB0b29rICR7ZHVyYXRpb259bXNgKTtcbiAgICB9XG59O1xuY29uc3QgdXBsb2FkQWNjZXNzOiBTb2NrZXRGdW5jdGlvbkhvb2sgPSBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgIGxldCBjb25maWcgPSBjb250ZXh0LmNhbGwuYXJnc1swXSBhcyB7IHVwbG9hZElkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KFN0cmluZyhjb25maWc/LnVwbG9hZElkKSk7XG4gICAgaWYgKCFpbmZvKSByZXR1cm47XG4gICAgYXdhaXQgcmVxdWlyZUFjY2VzcyhpbmZvLmFjY291bnQpO1xufTtcbmNvbnN0IGFkbWluQWNjZXNzOiBTb2NrZXRGdW5jdGlvbkhvb2sgPSBhc3luYyAoKSA9PiB7XG4gICAgcmVxdWlyZUFkbWluKCk7XG59O1xuXG5leHBvcnQgY29uc3QgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIgPSBTb2NrZXRGdW5jdGlvbi5yZWdpc3RlcihcbiAgICBSRU1PVEVfU1RPUkFHRV9DTEFTU19HVUlELFxuICAgIG5ldyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlckJhc2UoKSxcbiAgICAoKSA9PiAoe1xuICAgICAgICBwaW5nOiB7fSxcbiAgICAgICAgYXV0aGVudGljYXRlOiB7fSxcbiAgICAgICAgcmVxdWVzdEFjY2Vzczoge30sXG4gICAgICAgIGdldEFjY2Vzc1N0YXRlOiB7fSxcbiAgICAgICAgbGlzdFJlcXVlc3RzRm9ySVA6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBncmFudEFjY2Vzczoge30sXG4gICAgICAgIGFkbWluTGlzdFJlcXVlc3RzOiB7IGhvb2tzOiBbYWRtaW5BY2Nlc3NdIH0sXG4gICAgICAgIGFkbWluTGlzdEFjdGl2ZUJ1Y2tldHM6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgYWRtaW5HcmFudEFjY2VzczogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBnZXQyOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgc2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZGVsOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgbW92ZTogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEluZm86IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBmaW5kSW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldENoYW5nZXNBZnRlcjI6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBcmNoaXZlc0NvbmZpZzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEluZGV4SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGxpc3RCdWNrZXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWN0aXZlQnVja2V0OiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgYWN0aXZhdGVCdWNrZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBjbGVhcldyaXRlU3RhdHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBY2Nlc3NTdGF0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjY2Vzc1N1bW1hcmllczogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldFN5bmNTdGF0dXM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBsaXN0TG9nRmlsZXM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRMb2dGaWxlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgc3RhcnRMYXJnZUZpbGU6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICB1cGxvYWRQYXJ0OiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBmaW5pc2hMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGNhbmNlbExhcmdlRmlsZTogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgaHR0cEVudHJ5OiB7fSxcbiAgICB9KSxcbiAgICAoKSA9PiAoe1xuICAgICAgICBub0NsaWVudEhvb2tzOiB0cnVlLFxuICAgICAgICBub0RlZmF1bHRIb29rczogdHJ1ZSxcbiAgICB9KVxuKTtcbiJdfQ==
627
+ /* _JS_SOURCE_HASH = "529c548ae4dfda31ea4103c2576866d25598657554387722fe9b88bd3b0c85d6"; */