sliftutils 1.7.87 → 1.7.89

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 (127) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/dist/treeSummary.ts.cache +2 -2
  3. package/index.d.ts +675 -296
  4. package/misc/dist/environment.ts.cache +2 -2
  5. package/misc/dist/getSecret.ts.cache +2 -2
  6. package/misc/dist/strings.ts.cache +2 -2
  7. package/misc/dist/zip.ts.cache +2 -2
  8. package/misc/https/dist/certs.ts.cache +2 -2
  9. package/misc/https/dist/cloudflareHelpers.ts.cache +2 -2
  10. package/misc/https/dist/dns.ts.cache +2 -2
  11. package/misc/https/dist/hostServer.ts.cache +49 -21
  12. package/misc/https/dist/hostsFile.ts.cache +82 -0
  13. package/misc/https/dist/httpsCerts.ts.cache +2 -2
  14. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  15. package/misc/https/hostServer.d.ts +6 -2
  16. package/misc/https/hostServer.ts +52 -19
  17. package/misc/https/hostsFile.d.ts +7 -0
  18. package/misc/https/hostsFile.ts +66 -0
  19. package/package.json +1 -1
  20. package/render-utils/dist/observer.tsx.cache +2 -2
  21. package/storage/ArchivesDisk.d.ts +3 -6
  22. package/storage/ArchivesDisk.ts +26 -2
  23. package/storage/BulkDatabase2/BulkDatabaseReader.ts +1 -1
  24. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
  25. package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
  26. package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
  27. package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +3 -3
  28. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  29. package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
  30. package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
  31. package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
  32. package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
  33. package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
  34. package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
  35. package/storage/IArchives.d.ts +37 -24
  36. package/storage/IArchives.ts +47 -62
  37. package/storage/LogMap.d.ts +56 -0
  38. package/storage/LogMap.ts +220 -0
  39. package/storage/archiveHelpers.d.ts +36 -0
  40. package/storage/archiveHelpers.ts +103 -0
  41. package/storage/backblaze.d.ts +7 -12
  42. package/storage/backblaze.ts +53 -48
  43. package/storage/dist/ArchivesDisk.ts.cache +28 -2
  44. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  45. package/storage/dist/IArchives.ts.cache +16 -52
  46. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  47. package/storage/dist/JSONStorage.ts.cache +2 -2
  48. package/storage/dist/LogMap.ts.cache +212 -0
  49. package/storage/dist/PendingManager.tsx.cache +2 -2
  50. package/storage/dist/TransactionStorage.ts.cache +2 -2
  51. package/storage/dist/backblaze.ts.cache +58 -44
  52. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  53. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  54. package/storage/remoteStorage/ArchivesDelayed.d.ts +66 -0
  55. package/storage/remoteStorage/ArchivesDelayed.ts +237 -0
  56. package/storage/remoteStorage/ArchivesRemote.d.ts +5 -6
  57. package/storage/remoteStorage/ArchivesRemote.ts +26 -5
  58. package/storage/remoteStorage/ArchivesUrl.d.ts +2 -5
  59. package/storage/remoteStorage/ArchivesUrl.ts +2 -2
  60. package/storage/remoteStorage/accessPage.tsx +12 -0
  61. package/storage/remoteStorage/accessStats.d.ts +1 -1
  62. package/storage/remoteStorage/accessStats.ts +3 -3
  63. package/storage/remoteStorage/blobStore.d.ts +162 -189
  64. package/storage/remoteStorage/blobStore.ts +495 -952
  65. package/storage/remoteStorage/bucketDisk.d.ts +24 -3
  66. package/storage/remoteStorage/bucketDisk.ts +56 -22
  67. package/storage/remoteStorage/certTrustModal.d.ts +1 -0
  68. package/storage/remoteStorage/certTrustModal.tsx +48 -0
  69. package/storage/remoteStorage/cliArgs.d.ts +2 -0
  70. package/storage/remoteStorage/cliArgs.ts +5 -0
  71. package/storage/remoteStorage/createArchives.d.ts +8 -7
  72. package/storage/remoteStorage/createArchives.ts +65 -26
  73. package/storage/remoteStorage/deployTakeover.ts +1 -1
  74. package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +220 -0
  75. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +25 -5
  76. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +3 -3
  77. package/storage/remoteStorage/dist/accessPage.tsx.cache +13 -3
  78. package/storage/remoteStorage/dist/accessStats.ts.cache +6 -6
  79. package/storage/remoteStorage/dist/blobStore.ts.cache +483 -965
  80. package/storage/remoteStorage/dist/bucketDisk.ts.cache +60 -29
  81. package/storage/remoteStorage/dist/certTrustModal.tsx.cache +55 -0
  82. package/storage/remoteStorage/dist/cliArgs.ts.cache +9 -4
  83. package/storage/remoteStorage/dist/createArchives.ts.cache +63 -26
  84. package/storage/remoteStorage/dist/deployTakeover.ts.cache +5 -5
  85. package/storage/remoteStorage/dist/intermediateManagement.ts.cache +286 -0
  86. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  87. package/storage/remoteStorage/dist/remoteConfig.ts.cache +122 -56
  88. package/storage/remoteStorage/dist/serverConfig.ts.cache +4 -4
  89. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +7 -11
  90. package/storage/remoteStorage/dist/sourcesList.ts.cache +3 -6
  91. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  92. package/storage/remoteStorage/dist/storageController.ts.cache +27 -12
  93. package/storage/remoteStorage/dist/storageServer.ts.cache +27 -7
  94. package/storage/remoteStorage/dist/storageServerCli.ts.cache +7 -3
  95. package/storage/remoteStorage/dist/storageServerState.ts.cache +133 -696
  96. package/storage/remoteStorage/dist/storeConfig.ts.cache +52 -0
  97. package/storage/remoteStorage/dist/storePlan.ts.cache +110 -81
  98. package/storage/remoteStorage/dist/storeSources.ts.cache +51 -0
  99. package/storage/remoteStorage/dist/storeSync.ts.cache +650 -0
  100. package/storage/remoteStorage/dist/validation.ts.cache +14 -4
  101. package/storage/remoteStorage/intermediateManagement.d.ts +12 -0
  102. package/storage/remoteStorage/intermediateManagement.ts +264 -0
  103. package/storage/remoteStorage/remoteConfig.d.ts +32 -0
  104. package/storage/remoteStorage/remoteConfig.ts +115 -50
  105. package/storage/remoteStorage/serverConfig.d.ts +1 -1
  106. package/storage/remoteStorage/serverConfig.ts +1 -1
  107. package/storage/remoteStorage/sourceWrapper.ts +4 -8
  108. package/storage/remoteStorage/sourcesList.d.ts +0 -2
  109. package/storage/remoteStorage/sourcesList.ts +0 -3
  110. package/storage/remoteStorage/spec.md +18 -4
  111. package/storage/remoteStorage/storageController.d.ts +10 -0
  112. package/storage/remoteStorage/storageController.ts +29 -16
  113. package/storage/remoteStorage/storageServer.d.ts +2 -0
  114. package/storage/remoteStorage/storageServer.ts +28 -4
  115. package/storage/remoteStorage/storageServerCli.ts +5 -1
  116. package/storage/remoteStorage/storageServerState.d.ts +34 -21
  117. package/storage/remoteStorage/storageServerState.ts +147 -662
  118. package/storage/remoteStorage/storeConfig.d.ts +30 -0
  119. package/storage/remoteStorage/storeConfig.ts +62 -0
  120. package/storage/remoteStorage/storePlan.d.ts +29 -17
  121. package/storage/remoteStorage/storePlan.ts +112 -85
  122. package/storage/remoteStorage/storeSources.d.ts +11 -0
  123. package/storage/remoteStorage/storeSources.ts +47 -0
  124. package/storage/remoteStorage/storeSync.d.ts +53 -0
  125. package/storage/remoteStorage/storeSync.ts +632 -0
  126. package/storage/remoteStorage/validation.d.ts +2 -0
  127. package/storage/remoteStorage/validation.ts +10 -0
@@ -179,6 +179,31 @@ class ArchivesDisk {
179
179
  }
180
180
  });
181
181
  }
182
+ async move(config) {
183
+ await this.init();
184
+ if (config.fromPath === config.toPath)
185
+ return;
186
+ let fromPath = this.filePath(config.fromPath);
187
+ let toPath = this.filePath(config.toPath);
188
+ await this.handles.run(fromPath, async () => {
189
+ await this.handles.closeNow(fromPath);
190
+ await this.handles.run(toPath, async () => {
191
+ await this.handles.closeNow(toPath);
192
+ await fs_1.default.promises.mkdir(path_1.default.dirname(toPath), { recursive: true });
193
+ try {
194
+ await fs_1.default.promises.rename(fromPath, toPath);
195
+ }
196
+ catch (e) {
197
+ if (e.code !== "ENOENT")
198
+ throw e;
199
+ throw new Error(`Cannot move ${JSON.stringify(config.fromPath)} to ${JSON.stringify(config.toPath)} on ${this.getDebugName()}: the source file does not exist`);
200
+ }
201
+ // The rename preserves the mtime, but a move must stamp FRESH (see IArchives.move) - the old stamp is how a moved file loses to a stale tombstone at its new path
202
+ let now = new Date();
203
+ await fs_1.default.promises.utimes(toPath, now, now);
204
+ });
205
+ });
206
+ }
182
207
  async get(key, config) {
183
208
  let result = await this.get2(key, config);
184
209
  return result && result.data || undefined;
@@ -269,6 +294,7 @@ class ArchivesDisk {
269
294
  infos.set(relPath, { path: relPath, createTime: stats.mtimeMs, size: stats.size });
270
295
  }
271
296
  }
297
+ // The raw disk has no windows, routes, or immutability, so the rest of the SetConfig has nothing to apply to here (the store wrapping this disk is what enforces them)
272
298
  async setLargeFile(config) {
273
299
  let id = await this.startLargeUpload();
274
300
  try {
@@ -390,5 +416,5 @@ function applyFindInfoShape(files, prefix, config) {
390
416
  return files;
391
417
  }
392
418
  exports.applyFindInfoShape = applyFindInfoShape;
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNEaXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQXJjaGl2ZXNEaXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIseURBQW1EO0FBQ25ELDJEQUErRDtBQUMvRCxtREFBbUU7QUFDbkUsMkNBQWtMO0FBQ2xMLCtEQUE2RDtBQUU3RCw0YkFBNGI7QUFFNWIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN4Qyw2UEFBNlA7QUFDN1AsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBUXJELDhjQUE4YztBQUM5YyxNQUFNLGVBQWU7SUFNakI7UUFMUSxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDakQsMERBQTBEO1FBQ2xELFFBQUcsR0FBa0IsRUFBRSxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUcvQyxJQUFBLDBCQUFlLEVBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELCtFQUErRTtJQUN4RSxHQUFHLENBQUksUUFBZ0IsRUFBRSxHQUFxQjtRQUNqRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QiwyRkFBMkY7UUFDM0YsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FB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LGdEQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgcnVuSW5maW5pdGVQb2xsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IHNvcnQsIGJpbmFyeVNlYXJjaEJhc2ljIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgSUFyY2hpdmVzLCBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzQ29uZmlnLCBDaGFuZ2VzQWZ0ZXJDb25maWcsIERlbENvbmZpZywgRmluZENvbmZpZywgR2V0Q29uZmlnLCBHZXRJbmZvQ29uZmlnLCBTZXRDb25maWcsIGFzc2VydFZhbGlkTGFzdE1vZGlmaWVkIH0gZnJvbSBcIi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQgeyBmaWx0ZXJDaGFuZ2VzIH0gZnJvbSBcIi4vcmVtb3RlU3RvcmFnZS9yZW1vdGVDb25maWdcIjtcblxuLy8gVGhlIGJhc2UgZmlsZS1zeXN0ZW0gSUFyY2hpdmVzOiBzdG9yYWdlIGlzIG9uZS10by1vbmUgd2l0aCB0aGUgZmlsZSBzeXN0ZW0sIGV2ZXJ5IGtleSBpcyBleGFjdGx5IG9uZSByZWFsIGZpbGUgdW5kZXIgPGZvbGRlcj4vZmlsZXMsIHNvIHRoZSBmaWxlIHN5c3RlbSBpdHNlbGYgaXMgdGhlIGluZGV4LiBGaWxlIGhhbmRsZXMgYXJlIGNhY2hlZCBhbmQgcmV1c2VkLCBhbmQgY2xvc2VkIG9uY2UgaWRsZSAoc2VlIEZpbGVIYW5kbGVDYWNoZSkuIEFsbCBvcGVyYXRpb25zIG9uIGEgZmlsZSBydW4gaW4gc2VyaWFsLCBzbyB0aGV5IGNhbid0IGNvbGxpZGUgd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggaGFuZGxlIGNsb3NpbmcuIFVzZWQgYXMgdGhlIGRpc2sgc3luY2hyb25pemF0aW9uIHNvdXJjZSBvZiBCbG9iU3RvcmUgKHNlZSByZW1vdGVTdG9yYWdlL2Jsb2JTdG9yZS50cykuXG5cbmNvbnN0IEhBTkRMRV9JRExFX1RJTUVPVVQgPSAxMDAwICogNjA7XG5jb25zdCBIQU5ETEVfU1dFRVBfSU5URVJWQUwgPSAxMDAwICogMTU7XG4vLyBVcGxvYWQgdGVtcCBmaWxlcyBhcmUgb25seSBnYXJiYWdlIG9uY2UgdGhleSBhcmUgY2xlYXJseSBhYmFuZG9uZWQuIEFub3RoZXIgcHJvY2VzcyBjYW4gc2hhcmUgb3VyIGZvbGRlciAoZXZlcnkgZGVwbG95IG92ZXJsYXAgZG9lcyksIHNvIGEgZnJlc2ggdGVtcCBmaWxlIG1heSBiZSBJVFMgaW4tcHJvZ3Jlc3MgdXBsb2FkIC0gZGVsZXRpbmcgaXQgd291bGQgc2lsZW50bHkgdHVybiB0aGF0IHVwbG9hZCBpbnRvIGFuIGVtcHR5IGZpbGUuXG5jb25zdCBVUExPQURfQUJBTkRPTkVEX0FHRSA9IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzO1xuXG50eXBlIEhhbmRsZUVudHJ5ID0ge1xuICAgIGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgaGFuZGxlOiBmcy5wcm9taXNlcy5GaWxlSGFuZGxlO1xuICAgIGxhc3RVc2U6IG51bWJlcjtcbn07XG5cbi8vIENhY2hlcyBvcGVuIGZpbGUgaGFuZGxlcywgY2xvc2luZyB0aGVtIG9uY2UgaWRsZSBmb3IgSEFORExFX0lETEVfVElNRU9VVC4gSW5zdGVhZCBvZiBvbmUgc2V0VGltZW91dCBwZXIgaGFuZGxlLCBhIGxpc3Qgc29ydGVkIGJ5IGxhc3QgdXNlIGlzIHN3ZXB0IHBlcmlvZGljYWxseSAoZW50cmllcyBhcmUgbW92ZWQgdmlhIGJpbmFyeSBzZWFyY2ggb24gYWNjZXNzLCBhbmQgbGFzdFVzZSB2YWx1ZXMgb25seSBpbmNyZWFzZSwgc28gdG91Y2hlZCBlbnRyaWVzIGFwcGVuZCBhdCB0aGUgZW5kKS4gQWxzbyBzZXJpYWxpemVzIG9wZXJhdGlvbnMgcGVyIGZpbGU6IGVhY2ggb3BlcmF0aW9uIG9ubHkgc3RhcnRzIG9uY2UgdGhlIHByZXZpb3VzIG9uZSBvbiB0aGUgc2FtZSBmaWxlIGZpbmlzaGVkLCBhbmQgYSBoYW5kbGUgaXMgbmV2ZXIgY2xvc2VkIHdoaWxlIGFuIG9wZXJhdGlvbiBpcyBwZW5kaW5nIG9uIGl0LlxuY2xhc3MgRmlsZUhhbmRsZUNhY2hlIHtcbiAgICBwcml2YXRlIGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgSGFuZGxlRW50cnk+KCk7XG4gICAgLy8gU29ydGVkIGJ5IGxhc3RVc2UgYXNjZW5kaW5nIChsZWFzdCByZWNlbnRseSB1c2VkIGZpcnN0KVxuICAgIHByaXZhdGUgbHJ1OiBIYW5kbGVFbnRyeVtdID0gW107XG4gICAgcHJpdmF0ZSBwZW5kaW5nID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgcnVuSW5maW5pdGVQb2xsKEhBTkRMRV9TV0VFUF9JTlRFUlZBTCwgKCkgPT4gdGhpcy5zd2VlcCgpKTtcbiAgICB9XG5cbiAgICAvLyBSdW5zIGZuYyBhZnRlciBldmVyeSBwcmV2aW91c2x5IHNjaGVkdWxlZCBvcGVyYXRpb24gb24gZmlsZVBhdGggaGFzIGZpbmlzaGVkXG4gICAgcHVibGljIHJ1bjxUPihmaWxlUGF0aDogc3RyaW5nLCBmbmM6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLnBlbmRpbmcuZ2V0KGZpbGVQYXRoKSB8fCBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHByZXYudGhlbihmbmMpO1xuICAgICAgICAvLyBUaGUgcGVuZGluZyBjaGFpbiBtdXN0IG5ldmVyIHJlamVjdCwgb3Igb25lIGZhaWxlZCBvcGVyYXRpb24gd291bGQgcG9pc29uIGFsbCBsYXRlciBvbmVzXG4gICAgICAgIGxldCBsYXN0ID0gcmVzdWx0LnRoZW4oKCkgPT4geyB9LCAoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLnBlbmRpbmcuc2V0KGZpbGVQYXRoLCBsYXN0KTtcbiAgICAgICAgdm9pZCBsYXN0LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UncmUgc3RpbGwgdGhlIGxhc3QgcGVuZGluZyBvcGVyYXRpb24gb24gdGhpcyBmaWxlLCBjbGVhciBvdXJzZWx2ZXNcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmcuZ2V0KGZpbGVQYXRoKSA9PT0gbGFzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZy5kZWxldGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGNhbGwgaW5zaWRlIHJ1bigpIGZvciB0aGUgc2FtZSBmaWxlUGF0aCAoc28gb3BlbnMgY2FuJ3QgY29sbGlkZSB3aXRoIGNsb3NlcylcbiAgICBwdWJsaWMgYXN5bmMgZ2V0SGFuZGxlKGZpbGVQYXRoOiBzdHJpbmcsIGZsYWdzOiBudW1iZXIpOiBQcm9taXNlPGZzLnByb21pc2VzLkZpbGVIYW5kbGU+IHtcbiAgICAgICAgbGV0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChmaWxlUGF0aCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTFJVKGVudHJ5KTtcbiAgICAgICAgICAgIGVudHJ5Lmxhc3RVc2UgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdGhpcy5scnUucHVzaChlbnRyeSk7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuaGFuZGxlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBoYW5kbGUgPSBhd2FpdCBmcy5wcm9taXNlcy5vcGVuKGZpbGVQYXRoLCBmbGFncyk7XG4gICAgICAgIGVudHJ5ID0geyBmaWxlUGF0aCwgaGFuZGxlLCBsYXN0VXNlOiBEYXRlLm5vdygpIH07XG4gICAgICAgIHRoaXMuZW50cmllcy5zZXQoZmlsZVBhdGgsIGVudHJ5KTtcbiAgICAgICAgdGhpcy5scnUucHVzaChlbnRyeSk7XG4gICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfVxuXG4gICAgLy8gT25seSBjYWxsIGluc2lkZSBydW4oKSBmb3IgdGhlIHNhbWUgZmlsZVBhdGhcbiAgICBwdWJsaWMgYXN5bmMgY2xvc2VOb3coZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGZpbGVQYXRoKTtcbiAgICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGZpbGVQYXRoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tTFJVKGVudHJ5KTtcbiAgICAgICAgYXdhaXQgZW50cnkuaGFuZGxlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tTFJVKGVudHJ5OiBIYW5kbGVFbnRyeSkge1xuICAgICAgICBsZXQgaW5kZXggPSBiaW5hcnlTZWFyY2hCYXNpYyh0aGlzLmxydSwgeCA9PiB4Lmxhc3RVc2UsIGVudHJ5Lmxhc3RVc2UpO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIHNoYXJlIGEgbGFzdFVzZSwgc28gc2NhbiBmb3IgdGhlIGV4YWN0IG9uZVxuICAgICAgICB3aGlsZSAoaW5kZXggPCB0aGlzLmxydS5sZW5ndGggJiYgdGhpcy5scnVbaW5kZXhdLmxhc3RVc2UgPT09IGVudHJ5Lmxhc3RVc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxydVtpbmRleF0gPT09IGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5scnUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzd2VlcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGN1dG9mZiA9IERhdGUubm93KCkgLSBIQU5ETEVfSURMRV9USU1FT1VUO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCB0aGlzLmxydS5sZW5ndGggJiYgdGhpcy5scnVbaW5kZXhdLmxhc3RVc2UgPD0gY3V0b2ZmKSB7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmxydVtpbmRleF07XG4gICAgICAgICAgICAvLyBDYW4ndCBjbG9zZSBhIGhhbmRsZSB3aXRoIGEgcGVuZGluZyBvcGVyYXRpb247IGl0J2xsIGJlIHN3ZXB0IGFmdGVyIGl0IGZpbmlzaGVzXG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nLmhhcyhlbnRyeS5maWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5scnUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoZW50cnkuZmlsZVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgZW50cnkuaGFuZGxlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0Rpc2sgaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9sZGVyOiBzdHJpbmcpIHsgfVxuXG4gICAgcHJpdmF0ZSBmaWxlc0RpciA9IHBhdGguam9pbih0aGlzLmZvbGRlciwgXCJmaWxlc1wiKTtcbiAgICBwcml2YXRlIHVwbG9hZHNEaXIgPSBwYXRoLmpvaW4odGhpcy5mb2xkZXIsIFwidXBsb2Fkc1wiKTtcbiAgICBwcml2YXRlIGhhbmRsZXMgPSBuZXcgRmlsZUhhbmRsZUNhY2hlKCk7XG4gICAgcHJpdmF0ZSBsYXJnZVVwbG9hZHMgPSBuZXcgTWFwPHN0cmluZywgeyB0bXBQYXRoOiBzdHJpbmcgfT4oKTtcbiAgICBwcml2YXRlIG5leHRMYXJnZVVwbG9hZElkID0gMTtcblxuICAgIHB1YmxpYyBpbml0ID0gbGF6eShhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHRoaXMuZmlsZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2Rpcih0aGlzLnVwbG9hZHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBsZXQgY3V0b2ZmID0gRGF0ZS5ub3coKSAtIFVQTE9BRF9BQkFORE9ORURfQUdFO1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIodGhpcy51cGxvYWRzRGlyKSkge1xuICAgICAgICAgICAgbGV0IHVwbG9hZFBhdGggPSBwYXRoLmpvaW4odGhpcy51cGxvYWRzRGlyLCBmaWxlKTtcbiAgICAgICAgICAgIC8vIFRoZSBtdGltZSBhZHZhbmNlcyBvbiBldmVyeSBhcHBlbmQsIHNvIGFuIGFjdGl2ZSB1cGxvYWQgKGV2ZW4gYW5vdGhlciBwcm9jZXNzJ3MpIGFsd2F5cyBsb29rcyBmcmVzaFxuICAgICAgICAgICAgbGV0IHN0YXRzID0gYXdhaXQgc3RhdE9yVW5kZWZpbmVkKHVwbG9hZFBhdGgpO1xuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCBzdGF0cy5tdGltZU1zID4gY3V0b2ZmKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBEZWxldGluZyBhYmFuZG9uZWQgdXBsb2FkIHRlbXAgZmlsZSAke3VwbG9hZFBhdGh9IChsYXN0IHdyaXR0ZW4gJHtuZXcgRGF0ZShzdGF0cy5tdGltZU1zKS50b0lTT1N0cmluZygpfSlgKTtcbiAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnVubGluayh1cGxvYWRQYXRoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGBkaXNrICR7dGhpcy5mb2xkZXJ9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogQ2hhbmdlc0FmdGVyQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICAvLyBObyBuYXRpdmUgY2hhbmdlIGZlZWQgLSBhIGZ1bGwgbGlzdGluZyBmaWx0ZXJlZCBpbiBtZW1vcnkgKHNlZSB0aGUgc2Nhbm5pbmcgbm90ZSBpbiBCbG9iU3RvcmUuc2NhblNvdXJjZSBmb3Igd2h5IHRoZSBsaXN0aW5nIGl0c2VsZiB0YWtlcyBubyBmaWx0ZXJzKVxuICAgICAgICByZXR1cm4gZmlsdGVyQ2hhbmdlcyhhd2FpdCB0aGlzLmZpbmRJbmZvKFwiXCIpLCBjb25maWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWxlUGF0aChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoLmpvaW4odGhpcy5maWxlc0Rpciwga2V5KTtcbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRzV2l0aCh0aGlzLmZpbGVzRGlyICsgcGF0aC5zZXApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQga2V5ICR7SlNPTi5zdHJpbmdpZnkoa2V5LnNsaWNlKDAsIDIwMCkpfSwgaXQgZXNjYXBlcyB0aGUgc3RvcmUgZm9sZGVyYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBmb3JjZVNldEltbXV0YWJsZSBpcyBhY2NlcHRlZCBhbmQgbmVlZHMgbm8gaGFuZGxpbmc6IGRpc2sgc291cmNlcyBhcmUgbmV2ZXIgaW1tdXRhYmxlLCBhbmQgdGhlIG9sZGVyLXdyaXRlIG5vLW9wIGJlbG93IGFscmVhZHkgZ2l2ZXMgc3luY2hyb25pemF0aW9uIGl0cyBvbmx5LXRha2UtdGhlLWxhdGVzdCBzZW1hbnRpY3NcbiAgICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IFNldENvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2V0IHdhcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSBidWZmZXIgZm9yICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gb24gJHt0aGlzLmdldERlYnVnTmFtZSgpfTogYW4gZW1wdHkgZmlsZSBJUyBhIGRlbGV0aW9uIGluIHRoaXMgc3lzdGVtIGFuZCB3b3VsZCByZWFkIGJhY2sgYXMgbWlzc2luZyAtIGNhbGwgZGVsIGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IGxhc3RNb2RpZmllZCA9IGNvbmZpZz8ubGFzdE1vZGlmaWVkO1xuICAgICAgICBpZiAobGFzdE1vZGlmaWVkKSB7XG4gICAgICAgICAgICBhc3NlcnRWYWxpZExhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlUGF0aCA9IHRoaXMuZmlsZVBhdGgoa2V5KTtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bihmaWxlUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGF3YWl0IHN0YXRPclVuZGVmaW5lZChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgLy8gQW4gb2xkZXIgd3JpdGUgbmV2ZXIgb3ZlcndyaXRlcyBhIG5ld2VyIG9uZSAoc2VlIElBcmNoaXZlcy5zZXQpXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGxhc3RNb2RpZmllZCA8IGV4aXN0aW5nLm10aW1lTXMpIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgbGV0IGhhbmRsZSA9IGF3YWl0IHRoaXMuaGFuZGxlcy5nZXRIYW5kbGUoZmlsZVBhdGgsIGZzLmNvbnN0YW50cy5PX1JEV1IgfCBmcy5jb25zdGFudHMuT19DUkVBVCk7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUudHJ1bmNhdGUoMCk7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUud3JpdGUoZGF0YSwgMCwgZGF0YS5sZW5ndGgsIDApO1xuICAgICAgICAgICAgaWYgKGxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZS51dGltZXMobmV3IERhdGUobGFzdE1vZGlmaWVkKSwgbmV3IERhdGUobGFzdE1vZGlmaWVkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIC8vIGNvbmZpZyBpcyBhY2NlcHRlZCBhbmQgaWdub3JlZDogYSBkaXNrIGRlbGV0aW9uIGlzIGEgcGh5c2ljYWwgcmVtb3ZlIChubyB0b21ic3RvbmUgdG8gc3RhbXAgLSBCbG9iU3RvcmUncyBpbmRleCBjYXJyaWVzIHRoZSB0b21ic3RvbmUgZm9yIGRpc2sgc291cmNlcylcbiAgICBwdWJsaWMgYXN5bmMgZGVsKGtleTogc3RyaW5nLCBjb25maWc/OiBEZWxDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGxldCBmaWxlUGF0aCA9IHRoaXMuZmlsZVBhdGgoa2V5KTtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bihmaWxlUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLmNsb3NlTm93KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgIT09IFwiRU5PRU5UXCIpIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoa2V5OiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoa2V5LCBjb25maWcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5kYXRhIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihrZXk6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgcmFuZ2UgPSBjb25maWc/LnJhbmdlO1xuICAgICAgICBsZXQgZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoKGtleSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKGZpbGVQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlOiBmcy5wcm9taXNlcy5GaWxlSGFuZGxlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUgPSBhd2FpdCB0aGlzLmhhbmRsZXMuZ2V0SGFuZGxlKGZpbGVQYXRoLCBmcy5jb25zdGFudHMuT19SRFdSKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09IFwiRU5PRU5UXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdGF0cyA9IGF3YWl0IGhhbmRsZS5zdGF0KCk7XG4gICAgICAgICAgICBsZXQgc2l6ZSA9IHN0YXRzLnNpemU7XG4gICAgICAgICAgICAvLyBBIHNpemUtMCBmaWxlIGlzIGEgdG9tYnN0b25lIChhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlKSAtIGFic2VudCwgdW5sZXNzIHRoZSBjYWxsZXIgYXNrZWQgZm9yIHRvbWJzdG9uZXMuIFJhbmdlZCByZWFkcyBvZiBhIFJFQUwgZmlsZSBjYW4gc3RpbGwgbGVnaXRpbWF0ZWx5IHJldHVybiBubyBieXRlcyAocmFuZ2UgcGFzdCBFT0YsIGJlbG93KS5cbiAgICAgICAgICAgIGlmICghc2l6ZSAmJiAhY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHJhbmdlICYmIE1hdGgubWluKHJhbmdlLnN0YXJ0LCBzaXplKSB8fCAwO1xuICAgICAgICAgICAgbGV0IGVuZCA9IHJhbmdlICYmIE1hdGgubWluKHJhbmdlLmVuZCwgc2l6ZSkgfHwgc2l6ZTtcbiAgICAgICAgICAgIGlmIChlbmQgPD0gc3RhcnQpIHJldHVybiB7IGRhdGE6IEJ1ZmZlci5hbGxvYygwKSwgd3JpdGVUaW1lOiBzdGF0cy5tdGltZU1zLCBzaXplIH07XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gQnVmZmVyLmFsbG9jKGVuZCAtIHN0YXJ0KTtcbiAgICAgICAgICAgIGxldCB7IGJ5dGVzUmVhZCB9ID0gYXdhaXQgaGFuZGxlLnJlYWQoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoLCBzdGFydCk7XG4gICAgICAgICAgICBpZiAoYnl0ZXNSZWFkICE9PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2J1ZmZlci5sZW5ndGh9IGJ5dGVzIGF0ICR7ZmlsZVBhdGh9OiR7c3RhcnR9LCByZWFkICR7Ynl0ZXNSZWFkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogYnVmZmVyLCB3cml0ZVRpbWU6IHN0YXRzLm10aW1lTXMsIHNpemUgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oa2V5OiBzdHJpbmcsIGNvbmZpZz86IEdldEluZm9Db25maWcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoKGtleSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKGZpbGVQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RhdHMgPSBhd2FpdCBzdGF0T3JVbmRlZmluZWQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMuaXNGaWxlKCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIXN0YXRzLnNpemUgJiYgIWNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4geyB3cml0ZVRpbWU6IHN0YXRzLm10aW1lTXMsIHNpemU6IHN0YXRzLnNpemUgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmQocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IEZpbmRDb25maWcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpLm1hcCh4ID0+IHgucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IGluZm9zID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0RmlsZXMoXCJcIiwgcHJlZml4LCBpbmZvcyk7XG4gICAgICAgIGxldCBmaWxlcyA9IEFycmF5LmZyb20oaW5mb3MudmFsdWVzKCkpO1xuICAgICAgICBmaWxlcyA9IGFwcGx5RmluZEluZm9TaGFwZShmaWxlcywgcHJlZml4LCBjb25maWcpO1xuICAgICAgICBzb3J0KGZpbGVzLCB4ID0+IHgucGF0aCk7XG4gICAgICAgIHJldHVybiBmaWxlcztcbiAgICB9XG5cbiAgICAvLyByZWxEaXIgaXMgXCJcIiBvciBlbmRzIHdpdGggXCIvXCIuIE9ubHkgZGVzY2VuZHMgaW50byBkaXJlY3RvcmllcyB0aGF0IGNhbiBzdGlsbCBtYXRjaCB0aGUgcHJlZml4LlxuICAgIHByaXZhdGUgYXN5bmMgY29sbGVjdEZpbGVzKHJlbERpcjogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgaW5mb3M6IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGVudHJpZXM6IGZzLkRpcmVudFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZW50cmllcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIocGF0aC5qb2luKHRoaXMuZmlsZXNEaXIsIHJlbERpciksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoZS5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGxldCByZWxQYXRoID0gcmVsRGlyICsgZW50cnkubmFtZTtcbiAgICAgICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRpclBhdGggPSByZWxQYXRoICsgXCIvXCI7XG4gICAgICAgICAgICAgICAgaWYgKGRpclBhdGguc3RhcnRzV2l0aChwcmVmaXgpIHx8IHByZWZpeC5zdGFydHNXaXRoKGRpclBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdEZpbGVzKGRpclBhdGgsIHByZWZpeCwgaW5mb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZW50cnkuaXNGaWxlKCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFyZWxQYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgc3RhdHMgPSBhd2FpdCBzdGF0T3JVbmRlZmluZWQocGF0aC5qb2luKHRoaXMuZmlsZXNEaXIsIHJlbFBhdGgpKTtcbiAgICAgICAgICAgIC8vIERlbGV0ZWQgd2hpbGUgd2Ugd2VyZSB3YWxraW5nXG4gICAgICAgICAgICBpZiAoIXN0YXRzKSBjb250aW51ZTtcbiAgICAgICAgICAgIGluZm9zLnNldChyZWxQYXRoLCB7IHBhdGg6IHJlbFBhdGgsIGNyZWF0ZVRpbWU6IHN0YXRzLm10aW1lTXMsIHNpemU6IHN0YXRzLnNpemUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TGFyZ2VGaWxlKGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZ2V0TmV4dERhdGEoKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGlkID0gYXdhaXQgdGhpcy5zdGFydExhcmdlVXBsb2FkKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgY29uZmlnLmdldE5leHREYXRhKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhKSBicmVhaztcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcGVuZExhcmdlVXBsb2FkKGlkLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoTGFyZ2VVcGxvYWQoaWQsIGNvbmZpZy5wYXRoLCBjb25maWcubGFzdE1vZGlmaWVkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jYW5jZWxMYXJnZVVwbG9hZChpZCk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFyZ2UgZmlsZXMgc3RyZWFtIGludG8gdGhlaXIgb3duIGZpbGUgdW5kZXIgdXBsb2Fkcy8sIHRoZW4gbW92ZSBpbnRvIHBsYWNlIG9uIGZpbmlzaC4gTm8gaGFuZGxlIGlzIG9wZW5lZCB1bnRpbCB0aGUgZmlyc3QgYXBwZW5kIGFjdHVhbGx5IGhhcHBlbnMuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0TGFyZ2VVcGxvYWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGxldCBpZCA9IGAke0RhdGUubm93KCl9XyR7dGhpcy5uZXh0TGFyZ2VVcGxvYWRJZCsrfWA7XG4gICAgICAgIHRoaXMubGFyZ2VVcGxvYWRzLnNldChpZCwgeyB0bXBQYXRoOiBwYXRoLmpvaW4odGhpcy51cGxvYWRzRGlyLCBgdXBsb2FkXyR7aWR9LnRtcGApIH0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBhcHBlbmRMYXJnZVVwbG9hZChpZDogc3RyaW5nLCBkYXRhOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHVwbG9hZCA9IHRoaXMubGFyZ2VVcGxvYWRzLmdldChpZCk7XG4gICAgICAgIGlmICghdXBsb2FkKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7aWR9YCk7XG4gICAgICAgIGNvbnN0IHRtcFBhdGggPSB1cGxvYWQudG1wUGF0aDtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bih0bXBQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlID0gYXdhaXQgdGhpcy5oYW5kbGVzLmdldEhhbmRsZSh0bXBQYXRoLCBmcy5jb25zdGFudHMuT19XUk9OTFkgfCBmcy5jb25zdGFudHMuT19DUkVBVCB8IGZzLmNvbnN0YW50cy5PX0FQUEVORCk7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUud3JpdGUoZGF0YSwgMCwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmlzaExhcmdlVXBsb2FkKGlkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBsYXN0TW9kaWZpZWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHVwbG9hZCA9IHRoaXMubGFyZ2VVcGxvYWRzLmdldChpZCk7XG4gICAgICAgIGlmICghdXBsb2FkKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7aWR9YCk7XG4gICAgICAgIGlmIChsYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGFzc2VydFZhbGlkTGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG1wUGF0aCA9IHVwbG9hZC50bXBQYXRoO1xuICAgICAgICB0aGlzLmxhcmdlVXBsb2Fkcy5kZWxldGUoaWQpO1xuICAgICAgICBsZXQgZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoKGtleSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlcy5ydW4odG1wUGF0aCwgKCkgPT4gdGhpcy5oYW5kbGVzLmNsb3NlTm93KHRtcFBhdGgpKTtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bihmaWxlUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2xvc2UgYW55IGNhY2hlZCBoYW5kbGUgdG8gdGhlIGZpbGUgd2UncmUgcmVwbGFjaW5nLCBzbyBsYXRlciByZWFkcyByZW9wZW4gdGhlIG5ldyBmaWxlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMuY2xvc2VOb3coZmlsZVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnJlbmFtZSh0bXBQYXRoLCBmaWxlUGF0aCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlICE9PSBcIkVOT0VOVFwiKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIC8vIEVpdGhlciBub3RoaW5nIHdhcyBldmVyIGFwcGVuZGVkLCBvciB0aGUgdGVtcCBmaWxlIHdhcyBkZXN0cm95ZWQgdW5kZXIgdXMgLSBib3RoIG11c3QgZmFpbCBsb3VkbHkuIE1hdGVyaWFsaXppbmcgYW4gZW1wdHkgZmlsZSBoZXJlICh0aGUgb2xkIGJlaGF2aW9yKSBzaWxlbnRseSB0dXJuZWQgdGhlIHVwbG9hZCBpbnRvIGEgREVMRVRJT04sIHNpbmNlIGFuIGVtcHR5IGZpbGUgSVMgYSBtaXNzaW5nIGZpbGUgaW4gdGhpcyBzeXN0ZW0uXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXJnZSB1cGxvYWQgb2YgJHtKU09OLnN0cmluZ2lmeShrZXkpfSBoYXMgbm8gZGF0YTogdGhlIHVwbG9hZCB0ZW1wIGZpbGUgJHt0bXBQYXRofSBkb2VzIG5vdCBleGlzdC4gRWl0aGVyIG5vIGRhdGEgd2FzIGV2ZXIgYXBwZW5kZWQgKGVtcHR5IGZpbGVzIGFyZSBmb3JiaWRkZW4gLSB0aGV5IHJlYWQgYmFjayBhcyBkZWxldGlvbnM7IHVzZSBkZWwgdG8gZGVsZXRlKSBvciB0aGUgdGVtcCBmaWxlIHdhcyByZW1vdmVkIHdoaWxlIHRoZSB1cGxvYWQgd2FzIHJ1bm5pbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgcmVuYW1lIHByZXNlcnZlcyB0aGUgdGVtcCBmaWxlJ3MgbXRpbWUsIHdoaWNoIGlzIGp1c3Qgd2hlbiB0aGUgbGFzdCBhcHBlbmQgaGFwcGVuZWQgLSB0aGUgbG9naWNhbCB3cml0ZSB0aW1lIGhhcyB0byBiZSBzdGFtcGVkIGV4cGxpY2l0bHkgKGl0IGlzIHRoZSBtZXRhZGF0YSBzY2FucyBvcmRlciBldmVyeXRoaW5nIGJ5KVxuICAgICAgICAgICAgaWYgKGxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnV0aW1lcyhmaWxlUGF0aCwgbmV3IERhdGUobGFzdE1vZGlmaWVkKSwgbmV3IERhdGUobGFzdE1vZGlmaWVkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgY2FuY2VsTGFyZ2VVcGxvYWQoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgdXBsb2FkID0gdGhpcy5sYXJnZVVwbG9hZHMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCF1cGxvYWQpIHJldHVybjtcbiAgICAgICAgY29uc3QgdG1wUGF0aCA9IHVwbG9hZC50bXBQYXRoO1xuICAgICAgICB0aGlzLmxhcmdlVXBsb2Fkcy5kZWxldGUoaWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKHRtcFBhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlcy5jbG9zZU5vdyh0bXBQYXRoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKHRtcFBhdGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVSTChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGdldFVSTCBpcyBub3Qgc3VwcG9ydGVkIGZvciBkaXNrIGFyY2hpdmVzICgke3RoaXMuZ2V0RGVidWdOYW1lKCl9LCBwYXRoICR7cGF0aH0pYCk7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdGF0T3JVbmRlZmluZWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8ZnMuU3RhdHMgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChmaWxlUGF0aCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmIChlLmNvZGUgPT09IFwiRU5PRU5UXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sZGVycy9zaGFsbG93IHBvc3QtcHJvY2Vzc2luZyBzaGFyZWQgYnkgZmluZEluZm8gaW1wbGVtZW50YXRpb25zIHRoYXQgbGlzdCBmbGF0IGZpbGVzICh1c2VkIGJ5IEFyY2hpdmVzRGlzayBvbiB0aGUgcmF3IGRpc2sgd2FsaywgYW5kIGJ5IEJsb2JTdG9yZSBvbiBpdHMgaW5kZXgpLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmluZEluZm9TaGFwZShmaWxlczogQXJjaGl2ZUZpbGVJbmZvW10sIHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogQXJjaGl2ZUZpbGVJbmZvW10ge1xuICAgIGlmIChjb25maWc/LnR5cGUgPT09IFwiZm9sZGVyc1wiKSB7XG4gICAgICAgIGxldCBmb2xkZXJzID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgbGV0IHJlc3QgPSBmaWxlLnBhdGguc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICBsZXQgcmVzdFBhcnRzID0gcmVzdC5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICBpZiAocmVzdFBhcnRzLmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGZvbGRlcjogc3RyaW5nO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5zaGFsbG93KSB7XG4gICAgICAgICAgICAgICAgZm9sZGVyID0gcHJlZml4ICsgcmVzdFBhcnRzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb2xkZXIgPSBmaWxlLnBhdGguc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRlcnMuc2V0KGZvbGRlciwgeyBwYXRoOiBmb2xkZXIsIGNyZWF0ZVRpbWU6IGZpbGUuY3JlYXRlVGltZSwgc2l6ZTogZmlsZS5zaXplIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGZvbGRlcnMudmFsdWVzKCkpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy5zaGFsbG93KSB7XG4gICAgICAgIHJldHVybiBmaWxlcy5maWx0ZXIoZmlsZSA9PiAhZmlsZS5wYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpLmluY2x1ZGVzKFwiL1wiKSk7XG4gICAgfVxuICAgIHJldHVybiBmaWxlcztcbn1cbiJdfQ==
394
- /* _JS_SOURCE_HASH = "869b562691ee937f324cdc93098118c19f07adc75a122efcc5b3c80fe29b23ee"; */
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJjaGl2ZXNEaXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQXJjaGl2ZXNEaXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIseURBQW1EO0FBQ25ELDJEQUErRDtBQUMvRCxtREFBbUU7QUFDbkUsMkNBQXNOO0FBQ3ROLCtEQUE2RDtBQUU3RCw0YkFBNGI7QUFFNWIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN4Qyw2UEFBNlA7QUFDN1AsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBUXJELDhjQUE4YztBQUM5YyxNQUFNLGVBQWU7SUFNakI7UUFMUSxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDakQsMERBQTBEO1FBQ2xELFFBQUcsR0FBa0IsRUFBRSxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUcvQyxJQUFBLDBCQUFlLEVBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELCtFQUErRTtJQUN4RSxHQUFHLENBQUksUUFBZ0IsRUFBRSxHQUFxQjtRQUNqRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QiwyRkFBMkY7UUFDM0YsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FB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QztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxFQUFFLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFyQkQsZ0RBcUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBydW5JbmZpbml0ZVBvbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuaW1wb3J0IHsgc29ydCwgYmluYXJ5U2VhcmNoQmFzaWMgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBJQXJjaGl2ZXMsIEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIENoYW5nZXNBZnRlckNvbmZpZywgRGVsQ29uZmlnLCBGaW5kQ29uZmlnLCBHZXRDb25maWcsIEdldEluZm9Db25maWcsIE1vdmVGaWxlQ29uZmlnLCBTZXRDb25maWcsIFNldExhcmdlRmlsZUNvbmZpZywgYXNzZXJ0VmFsaWRMYXN0TW9kaWZpZWQgfSBmcm9tIFwiLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IGZpbHRlckNoYW5nZXMgfSBmcm9tIFwiLi9yZW1vdGVTdG9yYWdlL3JlbW90ZUNvbmZpZ1wiO1xuXG4vLyBUaGUgYmFzZSBmaWxlLXN5c3RlbSBJQXJjaGl2ZXM6IHN0b3JhZ2UgaXMgb25lLXRvLW9uZSB3aXRoIHRoZSBmaWxlIHN5c3RlbSwgZXZlcnkga2V5IGlzIGV4YWN0bHkgb25lIHJlYWwgZmlsZSB1bmRlciA8Zm9sZGVyPi9maWxlcywgc28gdGhlIGZpbGUgc3lzdGVtIGl0c2VsZiBpcyB0aGUgaW5kZXguIEZpbGUgaGFuZGxlcyBhcmUgY2FjaGVkIGFuZCByZXVzZWQsIGFuZCBjbG9zZWQgb25jZSBpZGxlIChzZWUgRmlsZUhhbmRsZUNhY2hlKS4gQWxsIG9wZXJhdGlvbnMgb24gYSBmaWxlIHJ1biBpbiBzZXJpYWwsIHNvIHRoZXkgY2FuJ3QgY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIgb3Igd2l0aCBoYW5kbGUgY2xvc2luZy4gVXNlZCBhcyB0aGUgZGlzayBzeW5jaHJvbml6YXRpb24gc291cmNlIG9mIEJsb2JTdG9yZSAoc2VlIHJlbW90ZVN0b3JhZ2UvYmxvYlN0b3JlLnRzKS5cblxuY29uc3QgSEFORExFX0lETEVfVElNRU9VVCA9IDEwMDAgKiA2MDtcbmNvbnN0IEhBTkRMRV9TV0VFUF9JTlRFUlZBTCA9IDEwMDAgKiAxNTtcbi8vIFVwbG9hZCB0ZW1wIGZpbGVzIGFyZSBvbmx5IGdhcmJhZ2Ugb25jZSB0aGV5IGFyZSBjbGVhcmx5IGFiYW5kb25lZC4gQW5vdGhlciBwcm9jZXNzIGNhbiBzaGFyZSBvdXIgZm9sZGVyIChldmVyeSBkZXBsb3kgb3ZlcmxhcCBkb2VzKSwgc28gYSBmcmVzaCB0ZW1wIGZpbGUgbWF5IGJlIElUUyBpbi1wcm9ncmVzcyB1cGxvYWQgLSBkZWxldGluZyBpdCB3b3VsZCBzaWxlbnRseSB0dXJuIHRoYXQgdXBsb2FkIGludG8gYW4gZW1wdHkgZmlsZS5cbmNvbnN0IFVQTE9BRF9BQkFORE9ORURfQUdFID0gMTAwMCAqIDYwICogNjAgKiAyNCAqIDM7XG5cbnR5cGUgSGFuZGxlRW50cnkgPSB7XG4gICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICBoYW5kbGU6IGZzLnByb21pc2VzLkZpbGVIYW5kbGU7XG4gICAgbGFzdFVzZTogbnVtYmVyO1xufTtcblxuLy8gQ2FjaGVzIG9wZW4gZmlsZSBoYW5kbGVzLCBjbG9zaW5nIHRoZW0gb25jZSBpZGxlIGZvciBIQU5ETEVfSURMRV9USU1FT1VULiBJbnN0ZWFkIG9mIG9uZSBzZXRUaW1lb3V0IHBlciBoYW5kbGUsIGEgbGlzdCBzb3J0ZWQgYnkgbGFzdCB1c2UgaXMgc3dlcHQgcGVyaW9kaWNhbGx5IChlbnRyaWVzIGFyZSBtb3ZlZCB2aWEgYmluYXJ5IHNlYXJjaCBvbiBhY2Nlc3MsIGFuZCBsYXN0VXNlIHZhbHVlcyBvbmx5IGluY3JlYXNlLCBzbyB0b3VjaGVkIGVudHJpZXMgYXBwZW5kIGF0IHRoZSBlbmQpLiBBbHNvIHNlcmlhbGl6ZXMgb3BlcmF0aW9ucyBwZXIgZmlsZTogZWFjaCBvcGVyYXRpb24gb25seSBzdGFydHMgb25jZSB0aGUgcHJldmlvdXMgb25lIG9uIHRoZSBzYW1lIGZpbGUgZmluaXNoZWQsIGFuZCBhIGhhbmRsZSBpcyBuZXZlciBjbG9zZWQgd2hpbGUgYW4gb3BlcmF0aW9uIGlzIHBlbmRpbmcgb24gaXQuXG5jbGFzcyBGaWxlSGFuZGxlQ2FjaGUge1xuICAgIHByaXZhdGUgZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBIYW5kbGVFbnRyeT4oKTtcbiAgICAvLyBTb3J0ZWQgYnkgbGFzdFVzZSBhc2NlbmRpbmcgKGxlYXN0IHJlY2VudGx5IHVzZWQgZmlyc3QpXG4gICAgcHJpdmF0ZSBscnU6IEhhbmRsZUVudHJ5W10gPSBbXTtcbiAgICBwcml2YXRlIHBlbmRpbmcgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBydW5JbmZpbml0ZVBvbGwoSEFORExFX1NXRUVQX0lOVEVSVkFMLCAoKSA9PiB0aGlzLnN3ZWVwKCkpO1xuICAgIH1cblxuICAgIC8vIFJ1bnMgZm5jIGFmdGVyIGV2ZXJ5IHByZXZpb3VzbHkgc2NoZWR1bGVkIG9wZXJhdGlvbiBvbiBmaWxlUGF0aCBoYXMgZmluaXNoZWRcbiAgICBwdWJsaWMgcnVuPFQ+KGZpbGVQYXRoOiBzdHJpbmcsIGZuYzogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMucGVuZGluZy5nZXQoZmlsZVBhdGgpIHx8IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gcHJldi50aGVuKGZuYyk7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGNoYWluIG11c3QgbmV2ZXIgcmVqZWN0LCBvciBvbmUgZmFpbGVkIG9wZXJhdGlvbiB3b3VsZCBwb2lzb24gYWxsIGxhdGVyIG9uZXNcbiAgICAgICAgbGV0IGxhc3QgPSByZXN1bHQudGhlbigoKSA9PiB7IH0sICgpID0+IHsgfSk7XG4gICAgICAgIHRoaXMucGVuZGluZy5zZXQoZmlsZVBhdGgsIGxhc3QpO1xuICAgICAgICB2b2lkIGxhc3QudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSdyZSBzdGlsbCB0aGUgbGFzdCBwZW5kaW5nIG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUsIGNsZWFyIG91cnNlbHZlc1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZy5nZXQoZmlsZVBhdGgpID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nLmRlbGV0ZShmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIE9ubHkgY2FsbCBpbnNpZGUgcnVuKCkgZm9yIHRoZSBzYW1lIGZpbGVQYXRoIChzbyBvcGVucyBjYW4ndCBjb2xsaWRlIHdpdGggY2xvc2VzKVxuICAgIHB1YmxpYyBhc3luYyBnZXRIYW5kbGUoZmlsZVBhdGg6IHN0cmluZywgZmxhZ3M6IG51bWJlcik6IFByb21pc2U8ZnMucHJvbWlzZXMuRmlsZUhhbmRsZT4ge1xuICAgICAgICBsZXQgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGZpbGVQYXRoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21MUlUoZW50cnkpO1xuICAgICAgICAgICAgZW50cnkubGFzdFVzZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0aGlzLmxydS5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5oYW5kbGU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhhbmRsZSA9IGF3YWl0IGZzLnByb21pc2VzLm9wZW4oZmlsZVBhdGgsIGZsYWdzKTtcbiAgICAgICAgZW50cnkgPSB7IGZpbGVQYXRoLCBoYW5kbGUsIGxhc3RVc2U6IERhdGUubm93KCkgfTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChmaWxlUGF0aCwgZW50cnkpO1xuICAgICAgICB0aGlzLmxydS5wdXNoKGVudHJ5KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGNhbGwgaW5zaWRlIHJ1bigpIGZvciB0aGUgc2FtZSBmaWxlUGF0aFxuICAgIHB1YmxpYyBhc3luYyBjbG9zZU5vdyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBlbnRyeSA9IHRoaXMuZW50cmllcy5nZXQoZmlsZVBhdGgpO1xuICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoZmlsZVBhdGgpO1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21MUlUoZW50cnkpO1xuICAgICAgICBhd2FpdCBlbnRyeS5oYW5kbGUuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUZyb21MUlUoZW50cnk6IEhhbmRsZUVudHJ5KSB7XG4gICAgICAgIGxldCBpbmRleCA9IGJpbmFyeVNlYXJjaEJhc2ljKHRoaXMubHJ1LCB4ID0+IHgubGFzdFVzZSwgZW50cnkubGFzdFVzZSk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gc2hhcmUgYSBsYXN0VXNlLCBzbyBzY2FuIGZvciB0aGUgZXhhY3Qgb25lXG4gICAgICAgIHdoaWxlIChpbmRleCA8IHRoaXMubHJ1Lmxlbmd0aCAmJiB0aGlzLmxydVtpbmRleF0ubGFzdFVzZSA9PT0gZW50cnkubGFzdFVzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubHJ1W2luZGV4XSA9PT0gZW50cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxydS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHN3ZWVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgY3V0b2ZmID0gRGF0ZS5ub3coKSAtIEhBTkRMRV9JRExFX1RJTUVPVVQ7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IHRoaXMubHJ1Lmxlbmd0aCAmJiB0aGlzLmxydVtpbmRleF0ubGFzdFVzZSA8PSBjdXRvZmYpIHtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHRoaXMubHJ1W2luZGV4XTtcbiAgICAgICAgICAgIC8vIENhbid0IGNsb3NlIGEgaGFuZGxlIHdpdGggYSBwZW5kaW5nIG9wZXJhdGlvbjsgaXQnbGwgYmUgc3dlcHQgYWZ0ZXIgaXQgZmluaXNoZXNcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmcuaGFzKGVudHJ5LmZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxydS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShlbnRyeS5maWxlUGF0aCk7XG4gICAgICAgICAgICBhd2FpdCBlbnRyeS5oYW5kbGUuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFyY2hpdmVzRGlzayBpbXBsZW1lbnRzIElBcmNoaXZlcyB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmb2xkZXI6IHN0cmluZykgeyB9XG5cbiAgICBwcml2YXRlIGZpbGVzRGlyID0gcGF0aC5qb2luKHRoaXMuZm9sZGVyLCBcImZpbGVzXCIpO1xuICAgIHByaXZhdGUgdXBsb2Fkc0RpciA9IHBhdGguam9pbih0aGlzLmZvbGRlciwgXCJ1cGxvYWRzXCIpO1xuICAgIHByaXZhdGUgaGFuZGxlcyA9IG5ldyBGaWxlSGFuZGxlQ2FjaGUoKTtcbiAgICBwcml2YXRlIGxhcmdlVXBsb2FkcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHRtcFBhdGg6IHN0cmluZyB9PigpO1xuICAgIHByaXZhdGUgbmV4dExhcmdlVXBsb2FkSWQgPSAxO1xuXG4gICAgcHVibGljIGluaXQgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIodGhpcy5maWxlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHRoaXMudXBsb2Fkc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGxldCBjdXRvZmYgPSBEYXRlLm5vdygpIC0gVVBMT0FEX0FCQU5ET05FRF9BR0U7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcih0aGlzLnVwbG9hZHNEaXIpKSB7XG4gICAgICAgICAgICBsZXQgdXBsb2FkUGF0aCA9IHBhdGguam9pbih0aGlzLnVwbG9hZHNEaXIsIGZpbGUpO1xuICAgICAgICAgICAgLy8gVGhlIG10aW1lIGFkdmFuY2VzIG9uIGV2ZXJ5IGFwcGVuZCwgc28gYW4gYWN0aXZlIHVwbG9hZCAoZXZlbiBhbm90aGVyIHByb2Nlc3MncykgYWx3YXlzIGxvb2tzIGZyZXNoXG4gICAgICAgICAgICBsZXQgc3RhdHMgPSBhd2FpdCBzdGF0T3JVbmRlZmluZWQodXBsb2FkUGF0aCk7XG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8IHN0YXRzLm10aW1lTXMgPiBjdXRvZmYpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYERlbGV0aW5nIGFiYW5kb25lZCB1cGxvYWQgdGVtcCBmaWxlICR7dXBsb2FkUGF0aH0gKGxhc3Qgd3JpdHRlbiAke25ldyBEYXRlKHN0YXRzLm10aW1lTXMpLnRvSVNPU3RyaW5nKCl9KWApO1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKHVwbG9hZFBhdGgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gYGRpc2sgJHt0aGlzLmZvbGRlcn1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb25maWcoKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiBDaGFuZ2VzQWZ0ZXJDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIC8vIE5vIG5hdGl2ZSBjaGFuZ2UgZmVlZCAtIGEgZnVsbCBsaXN0aW5nIGZpbHRlcmVkIGluIG1lbW9yeSAoc2VlIHRoZSBzY2FubmluZyBub3RlIGluIEJsb2JTdG9yZS5zY2FuU291cmNlIGZvciB3aHkgdGhlIGxpc3RpbmcgaXRzZWxmIHRha2VzIG5vIGZpbHRlcnMpXG4gICAgICAgIHJldHVybiBmaWx0ZXJDaGFuZ2VzKGF3YWl0IHRoaXMuZmluZEluZm8oXCJcIiksIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbGVQYXRoKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBhdGguam9pbih0aGlzLmZpbGVzRGlyLCBrZXkpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydHNXaXRoKHRoaXMuZmlsZXNEaXIgKyBwYXRoLnNlcCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBrZXkgJHtKU09OLnN0cmluZ2lmeShrZXkuc2xpY2UoMCwgMjAwKSl9LCBpdCBlc2NhcGVzIHRoZSBzdG9yZSBmb2xkZXJgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIGZvcmNlU2V0SW1tdXRhYmxlIGlzIGFjY2VwdGVkIGFuZCBuZWVkcyBubyBoYW5kbGluZzogZGlzayBzb3VyY2VzIGFyZSBuZXZlciBpbW11dGFibGUsIGFuZCB0aGUgb2xkZXItd3JpdGUgbm8tb3AgYmVsb3cgYWxyZWFkeSBnaXZlcyBzeW5jaHJvbml6YXRpb24gaXRzIG9ubHktdGFrZS10aGUtbGF0ZXN0IHNlbWFudGljc1xuICAgIHB1YmxpYyBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogU2V0Q29uZmlnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZXQgd2FzIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGJ1ZmZlciBmb3IgJHtKU09OLnN0cmluZ2lmeShrZXkpfSBvbiAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiBhbiBlbXB0eSBmaWxlIElTIGEgZGVsZXRpb24gaW4gdGhpcyBzeXN0ZW0gYW5kIHdvdWxkIHJlYWQgYmFjayBhcyBtaXNzaW5nIC0gY2FsbCBkZWwgaW5zdGVhZGApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgbGFzdE1vZGlmaWVkID0gY29uZmlnPy5sYXN0TW9kaWZpZWQ7XG4gICAgICAgIGlmIChsYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGFzc2VydFZhbGlkTGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aChrZXkpO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKGZpbGVQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAobGFzdE1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgc3RhdE9yVW5kZWZpbmVkKGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAvLyBBbiBvbGRlciB3cml0ZSBuZXZlciBvdmVyd3JpdGVzIGEgbmV3ZXIgb25lIChzZWUgSUFyY2hpdmVzLnNldClcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgbGFzdE1vZGlmaWVkIDwgZXhpc3RpbmcubXRpbWVNcykgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICBsZXQgaGFuZGxlID0gYXdhaXQgdGhpcy5oYW5kbGVzLmdldEhhbmRsZShmaWxlUGF0aCwgZnMuY29uc3RhbnRzLk9fUkRXUiB8IGZzLmNvbnN0YW50cy5PX0NSRUFUKTtcbiAgICAgICAgICAgIGF3YWl0IGhhbmRsZS50cnVuY2F0ZSgwKTtcbiAgICAgICAgICAgIGF3YWl0IGhhbmRsZS53cml0ZShkYXRhLCAwLCBkYXRhLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICBpZiAobGFzdE1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlLnV0aW1lcyhuZXcgRGF0ZShsYXN0TW9kaWZpZWQpLCBuZXcgRGF0ZShsYXN0TW9kaWZpZWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuXG4gICAgLy8gY29uZmlnIGlzIGFjY2VwdGVkIGFuZCBpZ25vcmVkOiBhIGRpc2sgZGVsZXRpb24gaXMgYSBwaHlzaWNhbCByZW1vdmUgKG5vIHRvbWJzdG9uZSB0byBzdGFtcCAtIEJsb2JTdG9yZSdzIGluZGV4IGNhcnJpZXMgdGhlIHRvbWJzdG9uZSBmb3IgZGlzayBzb3VyY2VzKVxuICAgIHB1YmxpYyBhc3luYyBkZWwoa2V5OiBzdHJpbmcsIGNvbmZpZz86IERlbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aChrZXkpO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKGZpbGVQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMuY2xvc2VOb3coZmlsZVBhdGgpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG1vdmUoY29uZmlnOiBNb3ZlRmlsZUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgaWYgKGNvbmZpZy5mcm9tUGF0aCA9PT0gY29uZmlnLnRvUGF0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgZnJvbVBhdGggPSB0aGlzLmZpbGVQYXRoKGNvbmZpZy5mcm9tUGF0aCk7XG4gICAgICAgIGxldCB0b1BhdGggPSB0aGlzLmZpbGVQYXRoKGNvbmZpZy50b1BhdGgpO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKGZyb21QYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMuY2xvc2VOb3coZnJvbVBhdGgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bih0b1BhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMuY2xvc2VOb3codG9QYXRoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXRoLmRpcm5hbWUodG9QYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMucmVuYW1lKGZyb21QYXRoLCB0b1BhdGgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlICE9PSBcIkVOT0VOVFwiKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtb3ZlICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLmZyb21QYXRoKX0gdG8gJHtKU09OLnN0cmluZ2lmeShjb25maWcudG9QYXRoKX0gb24gJHt0aGlzLmdldERlYnVnTmFtZSgpfTogdGhlIHNvdXJjZSBmaWxlIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRoZSByZW5hbWUgcHJlc2VydmVzIHRoZSBtdGltZSwgYnV0IGEgbW92ZSBtdXN0IHN0YW1wIEZSRVNIIChzZWUgSUFyY2hpdmVzLm1vdmUpIC0gdGhlIG9sZCBzdGFtcCBpcyBob3cgYSBtb3ZlZCBmaWxlIGxvc2VzIHRvIGEgc3RhbGUgdG9tYnN0b25lIGF0IGl0cyBuZXcgcGF0aFxuICAgICAgICAgICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnV0aW1lcyh0b1BhdGgsIG5vdywgbm93KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nLCBjb25maWc/OiBHZXRDb25maWcpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQyKGtleSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldDIoa2V5OiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IHJhbmdlID0gY29uZmlnPy5yYW5nZTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aChrZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bihmaWxlUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGhhbmRsZTogZnMucHJvbWlzZXMuRmlsZUhhbmRsZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlID0gYXdhaXQgdGhpcy5oYW5kbGVzLmdldEhhbmRsZShmaWxlUGF0aCwgZnMuY29uc3RhbnRzLk9fUkRXUik7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3RhdHMgPSBhd2FpdCBoYW5kbGUuc3RhdCgpO1xuICAgICAgICAgICAgbGV0IHNpemUgPSBzdGF0cy5zaXplO1xuICAgICAgICAgICAgLy8gQSBzaXplLTAgZmlsZSBpcyBhIHRvbWJzdG9uZSAoYW4gZW1wdHkgZmlsZSBJUyBhIG1pc3NpbmcgZmlsZSkgLSBhYnNlbnQsIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIGZvciB0b21ic3RvbmVzLiBSYW5nZWQgcmVhZHMgb2YgYSBSRUFMIGZpbGUgY2FuIHN0aWxsIGxlZ2l0aW1hdGVseSByZXR1cm4gbm8gYnl0ZXMgKHJhbmdlIHBhc3QgRU9GLCBiZWxvdykuXG4gICAgICAgICAgICBpZiAoIXNpemUgJiYgIWNvbmZpZz8uaW5jbHVkZVRvbWJzdG9uZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSByYW5nZSAmJiBNYXRoLm1pbihyYW5nZS5zdGFydCwgc2l6ZSkgfHwgMDtcbiAgICAgICAgICAgIGxldCBlbmQgPSByYW5nZSAmJiBNYXRoLm1pbihyYW5nZS5lbmQsIHNpemUpIHx8IHNpemU7XG4gICAgICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4geyBkYXRhOiBCdWZmZXIuYWxsb2MoMCksIHdyaXRlVGltZTogc3RhdHMubXRpbWVNcywgc2l6ZSB9O1xuICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhlbmQgLSBzdGFydCk7XG4gICAgICAgICAgICBsZXQgeyBieXRlc1JlYWQgfSA9IGF3YWl0IGhhbmRsZS5yZWFkKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgc3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJ5dGVzUmVhZCAhPT0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtidWZmZXIubGVuZ3RofSBieXRlcyBhdCAke2ZpbGVQYXRofToke3N0YXJ0fSwgcmVhZCAke2J5dGVzUmVhZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IGJ1ZmZlciwgd3JpdGVUaW1lOiBzdGF0cy5tdGltZU1zLCBzaXplIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nLCBjb25maWc/OiBHZXRJbmZvQ29uZmlnKTogUHJvbWlzZTx7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aChrZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bihmaWxlUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN0YXRzID0gYXdhaXQgc3RhdE9yVW5kZWZpbmVkKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLmlzRmlsZSgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFzdGF0cy5zaXplICYmICFjb25maWc/LmluY2x1ZGVUb21ic3RvbmVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHsgd3JpdGVUaW1lOiBzdGF0cy5tdGltZU1zLCBzaXplOiBzdGF0cy5zaXplIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZmluZEluZm8ocHJlZml4LCBjb25maWcpKS5tYXAoeCA9PiB4LnBhdGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kSW5mbyhwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIGxldCBpbmZvcyA9IG5ldyBNYXA8c3RyaW5nLCBBcmNoaXZlRmlsZUluZm8+KCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdEZpbGVzKFwiXCIsIHByZWZpeCwgaW5mb3MpO1xuICAgICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGluZm9zLnZhbHVlcygpKTtcbiAgICAgICAgZmlsZXMgPSBhcHBseUZpbmRJbmZvU2hhcGUoZmlsZXMsIHByZWZpeCwgY29uZmlnKTtcbiAgICAgICAgc29ydChmaWxlcywgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gZmlsZXM7XG4gICAgfVxuXG4gICAgLy8gcmVsRGlyIGlzIFwiXCIgb3IgZW5kcyB3aXRoIFwiL1wiLiBPbmx5IGRlc2NlbmRzIGludG8gZGlyZWN0b3JpZXMgdGhhdCBjYW4gc3RpbGwgbWF0Y2ggdGhlIHByZWZpeC5cbiAgICBwcml2YXRlIGFzeW5jIGNvbGxlY3RGaWxlcyhyZWxEaXI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIGluZm9zOiBNYXA8c3RyaW5nLCBBcmNoaXZlRmlsZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBlbnRyaWVzOiBmcy5EaXJlbnRbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVudHJpZXMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKHBhdGguam9pbih0aGlzLmZpbGVzRGlyLCByZWxEaXIpLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gXCJFTk9FTlRcIikgcmV0dXJuO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBsZXQgcmVsUGF0aCA9IHJlbERpciArIGVudHJ5Lm5hbWU7XG4gICAgICAgICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgIGxldCBkaXJQYXRoID0gcmVsUGF0aCArIFwiL1wiO1xuICAgICAgICAgICAgICAgIGlmIChkaXJQYXRoLnN0YXJ0c1dpdGgocHJlZml4KSB8fCBwcmVmaXguc3RhcnRzV2l0aChkaXJQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3RGaWxlcyhkaXJQYXRoLCBwcmVmaXgsIGluZm9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWVudHJ5LmlzRmlsZSgpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcmVsUGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHN0YXRzID0gYXdhaXQgc3RhdE9yVW5kZWZpbmVkKHBhdGguam9pbih0aGlzLmZpbGVzRGlyLCByZWxQYXRoKSk7XG4gICAgICAgICAgICAvLyBEZWxldGVkIHdoaWxlIHdlIHdlcmUgd2Fsa2luZ1xuICAgICAgICAgICAgaWYgKCFzdGF0cykgY29udGludWU7XG4gICAgICAgICAgICBpbmZvcy5zZXQocmVsUGF0aCwgeyBwYXRoOiByZWxQYXRoLCBjcmVhdGVUaW1lOiBzdGF0cy5tdGltZU1zLCBzaXplOiBzdGF0cy5zaXplIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIHJhdyBkaXNrIGhhcyBubyB3aW5kb3dzLCByb3V0ZXMsIG9yIGltbXV0YWJpbGl0eSwgc28gdGhlIHJlc3Qgb2YgdGhlIFNldENvbmZpZyBoYXMgbm90aGluZyB0byBhcHBseSB0byBoZXJlICh0aGUgc3RvcmUgd3JhcHBpbmcgdGhpcyBkaXNrIGlzIHdoYXQgZW5mb3JjZXMgdGhlbSlcbiAgICBwdWJsaWMgYXN5bmMgc2V0TGFyZ2VGaWxlKGNvbmZpZzogU2V0TGFyZ2VGaWxlQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCBpZCA9IGF3YWl0IHRoaXMuc3RhcnRMYXJnZVVwbG9hZCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGNvbmZpZy5nZXROZXh0RGF0YSgpO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcHBlbmRMYXJnZVVwbG9hZChpZCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaExhcmdlVXBsb2FkKGlkLCBjb25maWcucGF0aCwgY29uZmlnLmxhc3RNb2RpZmllZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FuY2VsTGFyZ2VVcGxvYWQoaWQpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhcmdlIGZpbGVzIHN0cmVhbSBpbnRvIHRoZWlyIG93biBmaWxlIHVuZGVyIHVwbG9hZHMvLCB0aGVuIG1vdmUgaW50byBwbGFjZSBvbiBmaW5pc2guIE5vIGhhbmRsZSBpcyBvcGVuZWQgdW50aWwgdGhlIGZpcnN0IGFwcGVuZCBhY3R1YWxseSBoYXBwZW5zLlxuICAgIHB1YmxpYyBhc3luYyBzdGFydExhcmdlVXBsb2FkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICBsZXQgaWQgPSBgJHtEYXRlLm5vdygpfV8ke3RoaXMubmV4dExhcmdlVXBsb2FkSWQrK31gO1xuICAgICAgICB0aGlzLmxhcmdlVXBsb2Fkcy5zZXQoaWQsIHsgdG1wUGF0aDogcGF0aC5qb2luKHRoaXMudXBsb2Fkc0RpciwgYHVwbG9hZF8ke2lkfS50bXBgKSB9KTtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgYXBwZW5kTGFyZ2VVcGxvYWQoaWQ6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCB1cGxvYWQgPSB0aGlzLmxhcmdlVXBsb2Fkcy5nZXQoaWQpO1xuICAgICAgICBpZiAoIXVwbG9hZCkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2lkfWApO1xuICAgICAgICBjb25zdCB0bXBQYXRoID0gdXBsb2FkLnRtcFBhdGg7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlcy5ydW4odG1wUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGhhbmRsZSA9IGF3YWl0IHRoaXMuaGFuZGxlcy5nZXRIYW5kbGUodG1wUGF0aCwgZnMuY29uc3RhbnRzLk9fV1JPTkxZIHwgZnMuY29uc3RhbnRzLk9fQ1JFQVQgfCBmcy5jb25zdGFudHMuT19BUFBFTkQpO1xuICAgICAgICAgICAgYXdhaXQgaGFuZGxlLndyaXRlKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBmaW5pc2hMYXJnZVVwbG9hZChpZDogc3RyaW5nLCBrZXk6IHN0cmluZywgbGFzdE1vZGlmaWVkPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCB1cGxvYWQgPSB0aGlzLmxhcmdlVXBsb2Fkcy5nZXQoaWQpO1xuICAgICAgICBpZiAoIXVwbG9hZCkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2lkfWApO1xuICAgICAgICBpZiAobGFzdE1vZGlmaWVkKSB7XG4gICAgICAgICAgICBhc3NlcnRWYWxpZExhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRtcFBhdGggPSB1cGxvYWQudG1wUGF0aDtcbiAgICAgICAgdGhpcy5sYXJnZVVwbG9hZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aChrZXkpO1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMucnVuKHRtcFBhdGgsICgpID0+IHRoaXMuaGFuZGxlcy5jbG9zZU5vdyh0bXBQYXRoKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlcy5ydW4oZmlsZVBhdGgsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIENsb3NlIGFueSBjYWNoZWQgaGFuZGxlIHRvIHRoZSBmaWxlIHdlJ3JlIHJlcGxhY2luZywgc28gbGF0ZXIgcmVhZHMgcmVvcGVuIHRoZSBuZXcgZmlsZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLmNsb3NlTm93KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5yZW5hbWUodG1wUGF0aCwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAvLyBFaXRoZXIgbm90aGluZyB3YXMgZXZlciBhcHBlbmRlZCwgb3IgdGhlIHRlbXAgZmlsZSB3YXMgZGVzdHJveWVkIHVuZGVyIHVzIC0gYm90aCBtdXN0IGZhaWwgbG91ZGx5LiBNYXRlcmlhbGl6aW5nIGFuIGVtcHR5IGZpbGUgaGVyZSAodGhlIG9sZCBiZWhhdmlvcikgc2lsZW50bHkgdHVybmVkIHRoZSB1cGxvYWQgaW50byBhIERFTEVUSU9OLCBzaW5jZSBhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlIGluIHRoaXMgc3lzdGVtLlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFyZ2UgdXBsb2FkIG9mICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gaGFzIG5vIGRhdGE6IHRoZSB1cGxvYWQgdGVtcCBmaWxlICR7dG1wUGF0aH0gZG9lcyBub3QgZXhpc3QuIEVpdGhlciBubyBkYXRhIHdhcyBldmVyIGFwcGVuZGVkIChlbXB0eSBmaWxlcyBhcmUgZm9yYmlkZGVuIC0gdGhleSByZWFkIGJhY2sgYXMgZGVsZXRpb25zOyB1c2UgZGVsIHRvIGRlbGV0ZSkgb3IgdGhlIHRlbXAgZmlsZSB3YXMgcmVtb3ZlZCB3aGlsZSB0aGUgdXBsb2FkIHdhcyBydW5uaW5nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIHJlbmFtZSBwcmVzZXJ2ZXMgdGhlIHRlbXAgZmlsZSdzIG10aW1lLCB3aGljaCBpcyBqdXN0IHdoZW4gdGhlIGxhc3QgYXBwZW5kIGhhcHBlbmVkIC0gdGhlIGxvZ2ljYWwgd3JpdGUgdGltZSBoYXMgdG8gYmUgc3RhbXBlZCBleHBsaWNpdGx5IChpdCBpcyB0aGUgbWV0YWRhdGEgc2NhbnMgb3JkZXIgZXZlcnl0aGluZyBieSlcbiAgICAgICAgICAgIGlmIChsYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51dGltZXMoZmlsZVBhdGgsIG5ldyBEYXRlKGxhc3RNb2RpZmllZCksIG5ldyBEYXRlKGxhc3RNb2RpZmllZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGNhbmNlbExhcmdlVXBsb2FkKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHVwbG9hZCA9IHRoaXMubGFyZ2VVcGxvYWRzLmdldChpZCk7XG4gICAgICAgIGlmICghdXBsb2FkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRtcFBhdGggPSB1cGxvYWQudG1wUGF0aDtcbiAgICAgICAgdGhpcy5sYXJnZVVwbG9hZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVzLnJ1bih0bXBQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZXMuY2xvc2VOb3codG1wUGF0aCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnVubGluayh0bXBQYXRoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgIT09IFwiRU5PRU5UXCIpIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRVUkwocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRVUkwgaXMgbm90IHN1cHBvcnRlZCBmb3IgZGlzayBhcmNoaXZlcyAoJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgcGF0aCAke3BhdGh9KWApO1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhdE9yVW5kZWZpbmVkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGZzLlN0YXRzIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZzLnByb21pc2VzLnN0YXQoZmlsZVBhdGgpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbn1cblxuLy8gVGhlIGZvbGRlcnMvc2hhbGxvdyBwb3N0LXByb2Nlc3Npbmcgc2hhcmVkIGJ5IGZpbmRJbmZvIGltcGxlbWVudGF0aW9ucyB0aGF0IGxpc3QgZmxhdCBmaWxlcyAodXNlZCBieSBBcmNoaXZlc0Rpc2sgb24gdGhlIHJhdyBkaXNrIHdhbGssIGFuZCBieSBCbG9iU3RvcmUgb24gaXRzIGluZGV4KS5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbmRJbmZvU2hhcGUoZmlsZXM6IEFyY2hpdmVGaWxlSW5mb1tdLCBwcmVmaXg6IHN0cmluZywgY29uZmlnPzogRmluZENvbmZpZyk6IEFyY2hpdmVGaWxlSW5mb1tdIHtcbiAgICBpZiAoY29uZmlnPy50eXBlID09PSBcImZvbGRlcnNcIikge1xuICAgICAgICBsZXQgZm9sZGVycyA9IG5ldyBNYXA8c3RyaW5nLCBBcmNoaXZlRmlsZUluZm8+KCk7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGxldCByZXN0ID0gZmlsZS5wYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuICAgICAgICAgICAgbGV0IHJlc3RQYXJ0cyA9IHJlc3Quc3BsaXQoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKHJlc3RQYXJ0cy5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBmb2xkZXI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChjb25maWcuc2hhbGxvdykge1xuICAgICAgICAgICAgICAgIGZvbGRlciA9IHByZWZpeCArIHJlc3RQYXJ0c1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9sZGVyID0gZmlsZS5wYXRoLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuam9pbihcIi9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2xkZXJzLnNldChmb2xkZXIsIHsgcGF0aDogZm9sZGVyLCBjcmVhdGVUaW1lOiBmaWxlLmNyZWF0ZVRpbWUsIHNpemU6IGZpbGUuc2l6ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShmb2xkZXJzLnZhbHVlcygpKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZz8uc2hhbGxvdykge1xuICAgICAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbGUgPT4gIWZpbGUucGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKS5pbmNsdWRlcyhcIi9cIikpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4iXX0=
420
+ /* _JS_SOURCE_HASH = "f1b56893cc2d7bd7a9f575a56026314625df51591b6e2f877244e9bc33a1ca42"; */
@@ -1,4 +1,4 @@
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";
1
+ "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);
@@ -748,4 +748,4 @@ async function tryToLoadPointer(pointer) {
748
748
  }
749
749
  exports.tryToLoadPointer = tryToLoadPointer;
750
750
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZUZvbGRlckFQSS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkZpbGVGb2xkZXJBUEkudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztBQUVwQyxvREFBNEI7QUFDNUIsMkRBQTZHO0FBQzdHLCtCQUFrQztBQUNsQyx1REFBb0Q7QUFDcEQseURBQTBEO0FBQzFELDZDQUEwQztBQUUxQywyREFBMkQ7QUFDM0QscUVBQWlFO0FBQ2pFLDJEQUFvRztBQUNwRyw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBc0J4Qix1RUFBdUU7QUFDdkUsd0ZBQXdGO0FBQ3hGLCtCQUErQjtBQUMvQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFFN0IscUdBQXFHO0FBQ3JHLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQXFDMUMsSUFBSSxXQUFXLEdBQUcsSUFBQSxpQkFBVSxFQUFDO0lBQ3pCLEVBQUUsRUFBRSxTQUFpRDtDQUN4RCxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRS9CLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNwQixTQUFTLGFBQWE7SUFDbEIsSUFBSSxDQUFDLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRKQUE0SixDQUFDLENBQUM7SUFDL0wsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUNELFNBQWdCLGFBQWEsQ0FBQyxHQUFXO0lBQ3JDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDckIsQ0FBQztBQUZELHNDQUVDO0FBRUQsK0VBQStFO0FBQy9FLGtGQUFrRjtBQUNsRixrRkFBa0Y7QUFDbEYsaUZBQWlGO0FBQ2pGLG1GQUFtRjtBQUNuRixtRkFBbUY7QUFDbkYseUNBQXlDO0FBQ3pDLElBQUksbUJBQTBELENBQUM7QUFDL0QsU0FBZ0Isc0JBQXNC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QWUsRUFBRSxFQUFFO1FBQzdCLElBQUksSUFBSSxHQUFxQixJQUFJLENBQUM7UUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsSUFBSTtnQkFBRSxTQUFTO1lBQ3BCLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQVZELGtFQVVDO0FBRU0sS0FBSyxVQUFVLGdCQUFnQixDQUFDLE9BQWU7SUFDbEQsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFBLHdDQUFvQixFQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87SUFDcEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxnQkFBZ0IsRUFBRSxDQUFBLENBQUM7SUFDOUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPO0lBQ3BCLE9BQU8sTUFBaUMsQ0FBQztBQUM3QyxDQUFDO0FBTkQsNENBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJwcm9jZXNzLmVudi5OT0RFX0VOViA9IFwicHJvZHVjdGlvblwiO1xuXG5pbXBvcnQgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGZpbmRHcmFudGVkUG9pbnRlckhhbmRsZSwgZ2V0RmlsZVN5c3RlbVBvaW50ZXIsIHN0b3JlRmlsZVN5c3RlbVBvaW50ZXIgfSBmcm9tIFwiLi9maWxlU3lzdGVtUG9pbnRlclwiO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgeyBvYnNlcnZlciB9IGZyb20gXCIuLi9yZW5kZXItdXRpbHMvb2JzZXJ2ZXJcIjtcbmltcG9ydCB7IGNhY2hlLCBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgY3NzLCBpc05vZGUgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB7IElTdG9yYWdlUmF3IH0gZnJvbSBcIi4vSVN0b3JhZ2VcIjtcbmltcG9ydCB7IHJ1bkluU2VyaWFsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGdldEZpbGVTdG9yYWdlSW5kZXhEQiB9IGZyb20gXCIuL0luZGV4ZWREQkZpbGVGb2xkZXJBUElcIjtcbmltcG9ydCB7IGdldFJlbW90ZURpcmVjdG9yeUhhbmRsZSwgdGVzdFJlbW90ZUNvbm5lY3Rpb24sIFJlbW90ZU9wdGlvbnMgfSBmcm9tIFwiLi9yZW1vdGVGaWxlU3RvcmFnZVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBzaG93U2F2ZUZpbGVQaWNrZXIoY29uZmlnPzoge1xuICAgICAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nOyBhY2NlcHQ6IHsgW21pbWVUeXBlOiBzdHJpbmddOiBzdHJpbmdbXSB9XG4gICAgICAgICAgICB9W107XG4gICAgICAgIH0pOiBQcm9taXNlPEZpbGVTeXN0ZW1GaWxlSGFuZGxlPjtcbiAgICAgICAgc2hvd0RpcmVjdG9yeVBpY2tlcigpOiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+O1xuICAgICAgICBzaG93T3BlbkZpbGVQaWNrZXIoY29uZmlnPzoge1xuICAgICAgICAgICAgdHlwZXM6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nOyBhY2NlcHQ6IHsgW21pbWVUeXBlOiBzdHJpbmddOiBzdHJpbmdbXSB9XG4gICAgICAgICAgICB9W107XG4gICAgICAgIH0pOiBQcm9taXNlPEZpbGVTeXN0ZW1GaWxlSGFuZGxlW10+O1xuICAgIH1cbiAgICBpbnRlcmZhY2UgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB7XG4gICAgICAgIHJlcXVlc3RQZXJtaXNzaW9uKGNvbmZpZz86IHsgbW9kZTogXCJyZWFkXCIgfCBcInJlYWR3cml0ZVwiIH0pOiBQcm9taXNlPFBlcm1pc3Npb25TdGF0ZT47XG4gICAgfVxufVxuXG5cbi8vIE5PVEU6IEluZGV4ZWREQiBpcyByZXF1aXJlZCBmb3IgaU9TLCBhdCBsZWFzdC4gV2UgTUlHSFQgd2FudCB0byBtYWtlXG4vLyAgdGhpcyBhIHVzZXIgc3VwcG9ydGVkIHRvZ2dsZSB0b28sIHNvIHRoZXkgY2FuIGNob29zZSBkdXJpbmcgcnVudGltZSBpZiB0aGV5IHdhbnQgaXQuXG4vLyBETyBOT1QgZW5hYmxlIHRoaXMgaXMgaXNOb2RlXG5jb25zdCBVU0VfSU5ERVhFRF9EQiA9IGZhbHNlO1xuXG4vLyBIb3cgb2Z0ZW4gYSB3b3JrZXIgcmVjaGVja3MgdGhlIHBvaW50ZXIgSW5kZXhlZERCIGZvciBhIGdyYW50ZWQgaGFuZGxlIHdoZW4gbm9uZSBpcyBhdmFpbGFibGUgeWV0LlxuY29uc3QgV09SS0VSX1BPTExfSU5URVJWQUxfTVMgPSA2MCAqIDEwMDA7XG5cbi8vIFRoZXNlIG1pcnJvciB0aGUgc3Vic2V0IG9mIHRoZSBuYXRpdmUgRmlsZVN5c3RlbUZpbGVIYW5kbGUgLyBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlIEFQSSB3ZSB1c2UsIHNvIHRoZSBuYXRpdmUgYnJvd3NlciBoYW5kbGVzLCB0aGUgTm9kZSBoYW5kbGVzLCBhbmQgdGhlIHJlbW90ZSBoYW5kbGVzIGFyZSBhbGwgaW50ZXJjaGFuZ2VhYmxlIOKAlCBhbmQgY29kZSB3cml0dGVuIGFnYWluc3QgdGhlIG5hdGl2ZSBoYW5kbGUgKGUuZy4gYSByZWN1cnNpdmUgd2FsayBvdmVyIGBoYW5kbGUuZW50cmllcygpYCkgd29ya3Mgb24gYW55IG9mIHRoZW0uIGtpbmQvbmFtZSBhbmQgZW50cmllcygpIGFyZSBwYXJ0IG9mIHRoYXQgY29udHJhY3QuXG5leHBvcnQgdHlwZSBGaWxlV3JhcHBlciA9IHtcbiAgICByZWFkb25seSBraW5kOiBcImZpbGVcIjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgZ2V0RmlsZSgpOiBQcm9taXNlPHtcbiAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IG51bWJlcjtcbiAgICAgICAgYXJyYXlCdWZmZXIoKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj47XG4gICAgICAgIC8vIE1hdGNoZXMgQmxvYi5zbGljZSAod2hpY2ggdGhlIG5hdGl2ZSBGaWxlIG9iamVjdCBwcm92aWRlcyksIHNvIHRoZSBicm93c2VyXG4gICAgICAgIC8vICBpbXBsZW1lbnRhdGlvbiB3b3JrcyB2YW5pbGxhLiBFbmQgaXMgZXhjbHVzaXZlLCBib3RoIGNsYW1wZWQgdG8gdGhlIGZpbGUgc2l6ZS5cbiAgICAgICAgc2xpY2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiB7IGFycmF5QnVmZmVyKCk6IFByb21pc2U8QXJyYXlCdWZmZXI+IH07XG4gICAgfT47XG4gICAgY3JlYXRlV3JpdGFibGUoY29uZmlnPzogeyBrZWVwRXhpc3RpbmdEYXRhPzogYm9vbGVhbiB9KTogUHJvbWlzZTx7XG4gICAgICAgIHNlZWsob2Zmc2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICB3cml0ZSh2YWx1ZTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9PjtcbiAgICAvLyBSZXR1cm5zIGEgVVJMIGZvciB0aGUgZmlsZSdzIGJ5dGVzLCB1c2FibGUgaW4gPHZpZGVvPi88aW1nPi9mZXRjaC4gT3B0aW9uYWwg4oCUIHRoZSBuYXRpdmUgYnJvd3NlciBGaWxlU3lzdGVtRmlsZUhhbmRsZSBoYXMgbm8gc3VjaCBtZXRob2QsIHNvIHByZWZlciB0aGUgZ2V0RmlsZVVSTCgpIGhlbHBlciwgd2hpY2ggZmFsbHMgYmFjayB0byBhIGJsb2I6IFVSTCB2aWEgY3JlYXRlT2JqZWN0VVJMIGZvciBuYXRpdmUgaGFuZGxlcy4gQWx3YXlzIHJlbGVhc2UgaXQgd2l0aCBkaXNwb3NlRmlsZVVSTCB3aGVuIGRvbmUuXG4gICAgZ2V0VVJMPygpOiBQcm9taXNlPHN0cmluZz47XG59O1xuZXhwb3J0IHR5cGUgRGlyZWN0b3J5V3JhcHBlciA9IHtcbiAgICByZWFkb25seSBraW5kOiBcImRpcmVjdG9yeVwiO1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICAvLyBGdWxsIHBhdGggZnJvbSB0aGUgc3RvcmFnZSByb290LCBmb3IgZGlhZ25vc3RpY3MvbG9nZ2luZyAodGhlIG5hdGl2ZSBoYW5kbGUgZG9lc24ndCBleHBvc2UgcGF0aHMsIHNvIGl0J3Mgb3B0aW9uYWwpLiBlLmcuIFwiYnVsa0RhdGFiYXNlczIvbXlDb2xsZWN0aW9uXCIuXG4gICAgcmVhZG9ubHkgZnVsbFBhdGg/OiBzdHJpbmc7XG4gICAgLy8gVHJ1ZSB3aGVuIHRoaXMgc3RvcmFnZSBpcyBzZXJ2ZWQgb3ZlciB0aGUgbmV0d29yayAoYSByZW1vdGUgc2VydmVyKSByYXRoZXIgdGhhbiBhIGxvY2FsIGRpc2ssIHNvIGNhbGxlcnMgY2FuIGFkYXB0IGZvciB0aGUgaGlnaGVyIGxhdGVuY3kvY29zdCAobG9jYWwvbmF0aXZlIGhhbmRsZXMgbGVhdmUgaXQgdW5kZWZpbmVkID0gZmFsc2UpLlxuICAgIHJlYWRvbmx5IGlzUmVtb3RlPzogYm9vbGVhbjtcbiAgICByZW1vdmVFbnRyeShrZXk6IHN0cmluZywgb3B0aW9ucz86IHsgcmVjdXJzaXZlPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPjtcbiAgICBnZXRGaWxlSGFuZGxlKGtleTogc3RyaW5nLCBvcHRpb25zPzogeyBjcmVhdGU/OiBib29sZWFuIH0pOiBQcm9taXNlPEZpbGVXcmFwcGVyPjtcbiAgICBnZXREaXJlY3RvcnlIYW5kbGUoa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNyZWF0ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8RGlyZWN0b3J5V3JhcHBlcj47XG4gICAgLy8gRWFjaCBlbnRyeSBJUyBhIGhhbmRsZSAoZmlsZSBvciBkaXJlY3RvcnkpLCBzbyBhIHJlY3Vyc2l2ZSB3YWxrIGtlZXBzIHdvcmtpbmcgYXQgZXZlcnkgbGV2ZWwuXG4gICAgZW50cmllcygpOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgRmlsZVdyYXBwZXIgfCBEaXJlY3RvcnlXcmFwcGVyXT47XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgRmlsZVdyYXBwZXIgfCBEaXJlY3RvcnlXcmFwcGVyXT47XG59O1xuXG5sZXQgZGlzcGxheURhdGEgPSBvYnNlcnZhYmxlKHtcbiAgICB1aTogdW5kZWZpbmVkIGFzIHVuZGVmaW5lZCB8IHByZWFjdC5Db21wb25lbnRDaGlsZHJlbixcbn0sIHVuZGVmaW5lZCwgeyBkZWVwOiBmYWxzZSB9KTtcblxubGV0IGZpbGVBUElLZXkgPSBcIlwiO1xuZnVuY3Rpb24gZ2V0RmlsZUFQSUtleSgpIHtcbiAgICBpZiAoIWZpbGVBUElLZXkpIHRocm93IG5ldyBFcnJvcihcIk11c3QgY2FsbCBzZXRGaWxlQVBJS2V5IGJlZm9yZSB1c2luZyBmaWxlIHN5c3RlbS4gSnVzdCBwYXNzIGFueSBrZXkuIFRoaXMgcHJldmVudHMgcmV1c2luZyB0aGUgZmlsZSBzeXN0ZW0gYXBpIHRoYXQgb3RoZXIgZGV2ZWxvcG1lbnQgYXBwcyBtaWdodCBiZSB1c2luZy5cIik7XG4gICAgcmV0dXJuIGZpbGVBUElLZXk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsZUFQSUtleShrZXk6IHN0cmluZykge1xuICAgIGZpbGVBUElLZXkgPSBrZXk7XG59XG5cbi8vIEEgZGlyZWN0b3J5IGhhbmRsZSB0byBzZXJ2ZSBhcyB0aGUgc3RvcmFnZSByb290IGluc3RlYWQgb2YgcmVzb2x2aW5nIG9uZSB2aWFcbi8vIHRoZSBwaWNrZXIgLyBzdG9yZWQtcG9pbnRlciAvIHJlbW90ZSBmbG93LiBTZXQgdGhpcyBpbiBhIGNvbnRleHQgdGhhdCBjYW4ndCBydW5cbi8vIHRoZSBpbnRlcmFjdGl2ZSByZXNvbHV0aW9uIOKAlCBtb3N0IGltcG9ydGFudGx5IGEgV2ViIFdvcmtlciwgd2hpY2ggaGFzIG5vIERPTSB0b1xuLy8gcHJvbXB0IHdpdGggYW5kIG5vIGxvY2FsU3RvcmFnZSBwb2ludGVyLiBUaGUgb3duaW5nIHdpbmRvdyByZXNvbHZlcyB0aGUgaGFuZGxlXG4vLyAod2l0aCBpdHMgcGVybWlzc2lvbiBncmFudCkgYW5kIHBvc3RNZXNzYWdlcyBpdCBpbjsgdGhlIHdvcmtlciBjYWxscyB0aGlzIGJlZm9yZVxuLy8gdG91Y2hpbmcgYW55IHN0b3JhZ2UuIFdoZW4gc2V0LCBnZXREaXJlY3RvcnlIYW5kbGUgcmV0dXJucyBpdCBkaXJlY3RseSBhbmQgc2tpcHNcbi8vIGV2ZXJ5IERPTSAvIGxvY2FsU3RvcmFnZSBicmFuY2ggYmVsb3cuXG5sZXQgc3RvcmFnZVJvb3RPdmVycmlkZTogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBzZXRTdG9yYWdlUm9vdE92ZXJyaWRlKGhhbmRsZTogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHN0b3JhZ2VSb290T3ZlcnJpZGUgPSBoYW5kbGU7XG59XG5cbi8vIC0tLS0gcmVtb3RlIChzZXJ2ZXIpIHN0b3JhZ2UgY29uZmlnIC0tLS1cbi8vIEluc3RlYWQgb2YgYSBsb2NhbCBmb2xkZXIsIHRoZSB1c2VyIGNhbiBwb2ludCBhdCBhIHJlbW90ZUZpbGVTZXJ2ZXIuanMgaW5zdGFuY2UgKFVSTCArIHBhc3N3b3JkKS4gV2hlbiBjb25maWd1cmVkLCBnZXRGaWxlU3RvcmFnZU5lc3RlZDIgc2VydmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGF0IHNlcnZlci4gUGVyc2lzdGVkIGluIGxvY2FsU3RvcmFnZS5cbnR5cGUgUmVtb3RlQ29uZmlnID0geyB1cmw6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9O1xuZnVuY3Rpb24gcmVtb3RlQ29uZmlnS2V5KCkgeyByZXR1cm4gZ2V0RmlsZUFQSUtleSgpICsgXCI6cmVtb3RlXCI7IH1cbmZ1bmN0aW9uIGxvYWRSZW1vdGVDb25maWcoKTogUmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0ocmVtb3RlQ29uZmlnS2V5KCkpO1xuICAgICAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGMgPSBKU09OLnBhcnNlKHMpO1xuICAgICAgICBpZiAoYyAmJiB0eXBlb2YgYy51cmwgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGMucGFzc3dvcmQgPT09IFwic3RyaW5nXCIpIHJldHVybiBjO1xuICAgIH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzYXZlUmVtb3RlQ29uZmlnKGM6IFJlbW90ZUNvbmZpZykgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShyZW1vdGVDb25maWdLZXkoKSwgSlNPTi5zdHJpbmdpZnkoYykpOyB9XG5cbi8vIFRoZSBzZXJ2ZXIgaXMgYWx3YXlzIEhUVFBTIG9uIHRoZSBmaWxlaG9zdGVyJ3MgZGVmYXVsdCBwb3J0LCBzbyB0aGUgdXNlciBvbmx5IG5lZWRzIHRvIHR5cGUgdGhlIGhvc3QgKGUuZy4gXCI2NS4xMDkuOTMuMTEzXCIpLiBXZSBzdHJpcCBhbnkgc2NoZW1lL3BhdGggdGhleSBpbmNsdWRlIGFuZCBkZWZhdWx0IHRoZSBwb3J0IGlmIG9taXR0ZWQuXG5jb25zdCBERUZBVUxUX1JFTU9URV9QT1JUID0gODc4NzsgLy8gbWF0Y2hlcyByZW1vdGVGaWxlU2VydmVyLmpzJ3MgZGVmYXVsdFxuZnVuY3Rpb24gbm9ybWFsaXplU2VydmVyVXJsKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcyA9IHJhdy50cmltKCkucmVwbGFjZSgvXlxcdys6XFwvXFwvLywgXCJcIikucmVwbGFjZSgvXFwvLiokLywgXCJcIik7XG4gICAgaWYgKCFzKSByZXR1cm4gXCJcIjtcbiAgICBpZiAoIS86XFxkKyQvLnRlc3QocykpIHMgKz0gXCI6XCIgKyBERUZBVUxUX1JFTU9URV9QT1JUO1xuICAgIHJldHVybiBcImh0dHBzOi8vXCIgKyBzO1xufVxuXG4vLyBPbmUgc2hhcmVkIHJlbW90ZSBEaXJlY3RvcnlXcmFwcGVyIChhbmQgdGhlcmVmb3JlIG9uZSBzaGFyZWQgcmFuZ2UgY2FjaGUpIHBlciByZW1vdGUgY29uZmlnLlxubGV0IHJlbW90ZUhhbmRsZTogeyBrZXk6IHN0cmluZzsgaGFuZGxlOiBEaXJlY3RvcnlXcmFwcGVyIH0gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRSZW1vdGVIYW5kbGUocmVtb3RlOiBSZW1vdGVDb25maWcpOiBEaXJlY3RvcnlXcmFwcGVyIHtcbiAgICBjb25zdCBrZXkgPSByZW1vdGUudXJsICsgXCJcXDBcIiArIHJlbW90ZS5wYXNzd29yZDtcbiAgICBpZiAoIXJlbW90ZUhhbmRsZSB8fCByZW1vdGVIYW5kbGUua2V5ICE9PSBrZXkpIHtcbiAgICAgICAgcmVtb3RlSGFuZGxlID0geyBrZXksIGhhbmRsZTogZ2V0UmVtb3RlRGlyZWN0b3J5SGFuZGxlKHJlbW90ZS51cmwsIHJlbW90ZS5wYXNzd29yZCkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbW90ZUhhbmRsZS5oYW5kbGU7XG59XG5cbkBvYnNlcnZlclxuY2xhc3MgRGlyZWN0b3J5UHJvbXB0ZXIgZXh0ZW5kcyBwcmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICghZGlzcGxheURhdGEudWkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgY3NzLnBvc2l0aW9uKFwiZml4ZWRcIikucG9zKDAsIDApLnNpemUoXCIxMDB2d1wiLCBcIjEwMHZoXCIpXG4gICAgICAgICAgICAgICAgICAgIC56SW5kZXgoMjE0NzQ4MzY0NylcbiAgICAgICAgICAgICAgICAgICAgLmJhY2tncm91bmQoXCJ3aGl0ZVwiKVxuICAgICAgICAgICAgICAgICAgICAuY2VudGVyXG4gICAgICAgICAgICAgICAgICAgIC5mb250U2l6ZSg0MClcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge2Rpc3BsYXlEYXRhLnVpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vLyBcIkNvbm5lY3QgdG8gYSBzZXJ2ZXJcIiBvcHRpb24gZm9yIHRoZSBkaXJlY3RvcnkgcHJvbXB0OiBjb2xsYXBzZXMgdG8gYSBidXR0b24sIGV4cGFuZHMgdG8gYWRkcmVzcyArIHBhc3N3b3JkIGZpZWxkcy4gT24gY29ubmVjdCBpdCBBQ1RVQUxMWSBjb25uZWN0cyAodGVzdFJlbW90ZUNvbm5lY3Rpb24pOyBvbmx5IG9uIHN1Y2Nlc3MgZG9lcyBpdCBwZXJzaXN0IHRoZSBjb25maWcgYW5kIGNhbGwgb25Db25uZWN0ZWQsIHNvIHRoZSBjYWxsZXIgKGdldERpcmVjdG9yeUhhbmRsZSkgcmVzb2x2ZXMgd2l0aCBhIHdvcmtpbmcgcmVtb3RlIGhhbmRsZS4gRmFpbHVyZXMgYXJlIHNob3duIHRvIHRoZSB1c2VyIChhbmQgbG9nZ2VkLCB3aXRob3V0IHRoZSBwYXNzd29yZCksIG5ldmVyIHN3YWxsb3dlZC4gYGluaXRpYWxgIHByZS1maWxscyArIGV4cGFuZHMgdGhlIGZvcm0gKHVzZWQgdG8gcmV0cnkgYSByZW1lbWJlcmVkIHNlcnZlciB0aGF0IHN0b3BwZWQgd29ya2luZykuXG5Ab2JzZXJ2ZXJcbmNsYXNzIFNlcnZlckNvbm5lY3RGb3JtIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudDx7IG9uQ29ubmVjdGVkOiAoY29uZmlnOiBSZW1vdGVDb25maWcpID0+IHZvaWQ7IGluaXRpYWw/OiBSZW1vdGVDb25maWcgfT4ge1xuICAgIHByaXZhdGUgb2JzID0gb2JzZXJ2YWJsZSh7XG4gICAgICAgIGV4cGFuZGVkOiAhIXRoaXMucHJvcHMuaW5pdGlhbCxcbiAgICAgICAgdXJsOiB0aGlzLnByb3BzLmluaXRpYWw/LnVybCB8fCBcIlwiLFxuICAgICAgICBwYXNzd29yZDogdGhpcy5wcm9wcy5pbml0aWFsPy5wYXNzd29yZCB8fCBcIlwiLFxuICAgICAgICBlcnJvcjogXCJcIiwgY29ubmVjdGluZzogZmFsc2UsIG5lZWRzQ2VydDogZmFsc2UsIHNob3dQYXNzd29yZDogZmFsc2UsXG4gICAgfSk7XG4gICAgcHJpdmF0ZSBjbGVhblVybCgpIHsgcmV0dXJuIG5vcm1hbGl6ZVNlcnZlclVybCh0aGlzLm9icy51cmwpOyB9XG4gICAgcHJpdmF0ZSBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzID0gdGhpcy5vYnM7XG4gICAgICAgIHMuZXJyb3IgPSBcIlwiO1xuICAgICAgICBzLm5lZWRzQ2VydCA9IGZhbHNlO1xuICAgICAgICBzLmNvbm5lY3RpbmcgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jbGVhblVybCgpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHsgcy5lcnJvciA9IFwiRW50ZXIgYSBzZXJ2ZXIgYWRkcmVzcy5cIjsgcmV0dXJuOyB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZXN0UmVtb3RlQ29ubmVjdGlvbih1cmwsIHMucGFzc3dvcmQudHJpbSgpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcIm9rXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWc6IFJlbW90ZUNvbmZpZyA9IHsgdXJsLCBwYXNzd29yZDogcy5wYXNzd29yZC50cmltKCkgfTtcbiAgICAgICAgICAgICAgICBzYXZlUmVtb3RlQ29uZmlnKGNvbmZpZyk7ICAgICAgICAgICAgIC8vIHJlbWVtYmVyIGZvciBuZXh0IHNlc3Npb25cbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ29ubmVjdGVkKGNvbmZpZyk7ICAgICAgIC8vIGhhbmQgdGhlIHZlcmlmaWVkIHNlcnZlciBiYWNrIHRvIGdldERpcmVjdG9yeUhhbmRsZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInVuYXV0aG9yaXplZFwiKSB7XG4gICAgICAgICAgICAgICAgcy5lcnJvciA9IFwiVGhlIHNlcnZlciByZWplY3RlZCB0aGF0IHBhc3N3b3JkLlwiO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZW1vdGUgY29ubmVjdDogdW5hdXRob3JpemVkIGZvclwiLCB1cmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBHb3Qgbm90aGluZyBiYWNrIOKAlCB1c3VhbGx5IHRoZSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSBpc24ndCB0cnVzdGVkIHlldCwgYnV0IHNob3cgdGhlIGFjdHVhbCBlcnJvciB0b28gc28gYSB3cm9uZyBhZGRyZXNzIC8gZG93biBzZXJ2ZXIgLyBDT1JTIGlzc3VlIGlzIGRpYWdub3NhYmxlLlxuICAgICAgICAgICAgICAgIHMubmVlZHNDZXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzLmVycm9yID0gXCJDb3VsZG4ndCByZWFjaCB0aGUgc2VydmVyOiBcIiArIHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUmVtb3RlIGNvbm5lY3Q6IHVucmVhY2hhYmxlXCIsIHVybCwgXCItXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHMuZXJyb3IgPSBcIkNvbm5lY3Rpb24gZXJyb3I6IFwiICsgKChlIGFzIEVycm9yKS5tZXNzYWdlIHx8IFN0cmluZyhlKSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUmVtb3RlIGNvbm5lY3QgdGhyZXc6XCIsIGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcy5jb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgcyA9IHRoaXMub2JzO1xuICAgICAgICBjb25zdCBpbnB1dENzcyA9IGNzcy5mb250U2l6ZSgyOCkucGFkMigyNCwgMTQpLndpZHRoKDU2MCkubWF4V2lkdGgoXCI4MHZ3XCIpO1xuICAgICAgICBjb25zdCBidG5Dc3MgPSBjc3MuZm9udFNpemUoMzIpLnBhZDIoNjAsIDMwKTtcbiAgICAgICAgaWYgKCFzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gPGJ1dHRvbiBjbGFzc05hbWU9e2J0bkNzc30gb25DbGljaz17KCkgPT4gcy5leHBhbmRlZCA9IHRydWV9PkNvbm5lY3QgdG8gYSBzZXJ2ZXI8L2J1dHRvbj47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCgxNikuY2VudGVyfT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPXtpbnB1dENzc30gcGxhY2Vob2xkZXI9XCJzZXJ2ZXIgYWRkcmVzcyAoZS5nLiA2NS4xMDkuOTMuMTEzLCBvciBob3N0OnBvcnQpXCIgdmFsdWU9e3MudXJsfVxuICAgICAgICAgICAgICAgICAgICBvbklucHV0PXtlID0+IHMudXJsID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlfSAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuaGJveCgxMCkuY2VudGVyfT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT17aW5wdXRDc3N9IHR5cGU9e3Muc2hvd1Bhc3N3b3JkID8gXCJ0ZXh0XCIgOiBcInBhc3N3b3JkXCJ9IHBsYWNlaG9sZGVyPVwicGFzc3dvcmQgKHNpeCB3b3JkcylcIiB2YWx1ZT17cy5wYXNzd29yZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW5wdXQ9e2UgPT4gcy5wYXNzd29yZCA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2Nzcy5mb250U2l6ZSgyMikucGFkMigyNCwgMTIpfSBvbkNsaWNrPXsoKSA9PiBzLnNob3dQYXNzd29yZCA9ICFzLnNob3dQYXNzd29yZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cy5zaG93UGFzc3dvcmQgPyBcIkhpZGVcIiA6IFwiU2hvd1wifVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7cy5lcnJvciA/IDxkaXYgY2xhc3NOYW1lPXtjc3MuZm9udFNpemUoMjIpLmNvbG9yKFwicmVkXCIpLm1heFdpZHRoKFwiODB2d1wiKX0+e3MuZXJyb3J9PC9kaXY+IDogbnVsbH1cbiAgICAgICAgICAgICAgICB7cy5uZWVkc0NlcnQgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCgxMCkuY2VudGVyLmZvbnRTaXplKDIwKS5tYXhXaWR0aCg2MjApLm1heFdpZHRoKFwiODB2d1wiKS50ZXh0QWxpZ24oXCJjZW50ZXJcIikuY29sb3IoXCJoc2woMCwgMCUsIDI1JSlcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5UaGlzIHNlcnZlciB1c2VzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUsIHNvIHlvdXIgYnJvd3NlciBoYXMgdG8gdHJ1c3QgaXQgb25jZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+MS4gT3BlbiB0aGUgc2VydmVyIGluIGEgbmV3IHRhYiAoYnV0dG9uIGJlbG93KS4gJm5ic3A7IDIuIEFjY2VwdCB0aGUgc2VjdXJpdHkgd2FybmluZyAoQWR2YW5jZWQg4oaSIFByb2NlZWQpLiAmbmJzcDsgMy4gQ29tZSBiYWNrIGFuZCBjbGljayBSZXRyeS48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPXtjc3MuZm9udFNpemUoMjYpLnBhZDIoNDAsIDIwKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IGNvbnN0IHUgPSB0aGlzLmNsZWFuVXJsKCk7IGlmICh1KSB3aW5kb3cub3Blbih1ICsgXCIvXCIsIFwiX2JsYW5rXCIpOyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIHNlcnZlciAmYW1wOyBhY2NlcHQgY2VydGlmaWNhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmhib3goMTYpfT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2J0bkNzc30gZGlzYWJsZWQ9e3MuY29ubmVjdGluZ30gb25DbGljaz17dGhpcy5jb25uZWN0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLmNvbm5lY3RpbmcgPyBcIkNvbm5lY3RpbmfigKZcIiA6IHMubmVlZHNDZXJ0ID8gXCJSZXRyeVwiIDogXCJDb25uZWN0XCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT17YnRuQ3NzfSBvbkNsaWNrPXsoKSA9PiB7IHMuZXhwYW5kZWQgPSBmYWxzZTsgcy5lcnJvciA9IFwiXCI7IHMubmVlZHNDZXJ0ID0gZmFsc2U7IH19PkJhY2s8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vZGVKU0ZpbGVIYW5kbGVXcmFwcGVyIGltcGxlbWVudHMgRmlsZVdyYXBwZXIge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlsZVBhdGg6IHN0cmluZykge1xuICAgIH1cbiAgICByZWFkb25seSBraW5kID0gXCJmaWxlXCIgYXMgY29uc3Q7XG4gICAgZ2V0IG5hbWUoKSB7IHJldHVybiBwYXRoLmJhc2VuYW1lKHRoaXMuZmlsZVBhdGgpOyB9XG5cbiAgICBhc3luYyBnZXRGaWxlKCkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnByb21pc2VzLnN0YXQodGhpcy5maWxlUGF0aCk7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHN0YXRzLnNpemUsXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHN0YXRzLm10aW1lTXMsXG4gICAgICAgICAgICBhcnJheUJ1ZmZlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyLmJ1ZmZlci5zbGljZShidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVPZmZzZXQgKyBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2xpY2U6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgICAgICBhcnJheUJ1ZmZlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGFtcGVkU3RhcnQgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydCwgMCksIHN0YXRzLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGFtcGVkRW5kID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kLCBjbGFtcGVkU3RhcnQpLCBzdGF0cy5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gY2xhbXBlZEVuZCAtIGNsYW1wZWRTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGZzLnByb21pc2VzLm9wZW4oZmlsZVBhdGgsIFwiclwiKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZmlsZUhhbmRsZS5yZWFkKGJ1ZmZlciwgMCwgbGVuZ3RoLCBjbGFtcGVkU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5idWZmZXIuc2xpY2UoYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlT2Zmc2V0ICsgYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZmlsZUhhbmRsZS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRVUkwoKSB7XG4gICAgICAgIHJldHVybiBcImZpbGU6Ly9cIiArIHBhdGgucmVzb2x2ZSh0aGlzLmZpbGVQYXRoKTtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVXcml0YWJsZShjb25maWc/OiB7IGtlZXBFeGlzdGluZ0RhdGE/OiBib29sZWFuIH0pIHtcbiAgICAgICAgbGV0IGZpbGVIYW5kbGU6IGZzLnByb21pc2VzLkZpbGVIYW5kbGU7XG4gICAgICAgIGNvbnN0IGZsYWdzID0gY29uZmlnPy5rZWVwRXhpc3RpbmdEYXRhID8gXCJyK1wiIDogXCJ3XCI7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gT3BlbiBvciBjcmVhdGUgdGhlIGZpbGVcbiAgICAgICAgaWYgKGNvbmZpZz8ua2VlcEV4aXN0aW5nRGF0YSAmJiBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3ModGhpcy5maWxlUGF0aCkudGhlbigoKSA9PiB0cnVlKS5jYXRjaCgoKSA9PiBmYWxzZSkpIHtcbiAgICAgICAgICAgIGZpbGVIYW5kbGUgPSBhd2FpdCBmcy5wcm9taXNlcy5vcGVuKHRoaXMuZmlsZVBhdGgsIGZsYWdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGVIYW5kbGUgPSBhd2FpdCBmcy5wcm9taXNlcy5vcGVuKHRoaXMuZmlsZVBhdGgsIFwid1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlZWs6IGFzeW5jIChvZmZzZXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gb2Zmc2V0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdyaXRlOiBhc3luYyAodmFsdWU6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZpbGVIYW5kbGUud3JpdGUodmFsdWUsIDAsIHZhbHVlLmxlbmd0aCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZpbGVIYW5kbGUuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb2RlSlNEaXJlY3RvcnlIYW5kbGVXcmFwcGVyIGltcGxlbWVudHMgRGlyZWN0b3J5V3JhcHBlciB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb290UGF0aDogc3RyaW5nKSB7XG4gICAgfVxuICAgIHJlYWRvbmx5IGtpbmQgPSBcImRpcmVjdG9yeVwiIGFzIGNvbnN0O1xuICAgIGdldCBuYW1lKCkgeyByZXR1cm4gcGF0aC5iYXNlbmFtZSh0aGlzLnJvb3RQYXRoKTsgfVxuICAgIGdldCBmdWxsUGF0aCgpIHsgcmV0dXJuIHRoaXMucm9vdFBhdGg7IH1cbiAgICBlbnRyaWVzKCkgeyByZXR1cm4gdGhpc1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTsgfVxuXG4gICAgYXN5bmMgcmVtb3ZlRW50cnkoa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiB7IHJlY3Vyc2l2ZT86IGJvb2xlYW4gfSkge1xuICAgICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLmpvaW4odGhpcy5yb290UGF0aCwga2V5KTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMucm0oZW50cnlQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsoZW50cnlQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEZpbGVIYW5kbGUoa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNyZWF0ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8RmlsZVdyYXBwZXI+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5yb290UGF0aCwga2V5KTtcblxuICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MoZmlsZVBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpO1xuXG4gICAgICAgIGlmICghZXhpc3RzICYmIG9wdGlvbnM/LmNyZWF0ZSkge1xuICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZmlsZVxuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKGZpbGVQYXRoLCBCdWZmZXIuYWxsb2MoMCkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgIC8vIFRhZyBhcyBFTk9FTlQgc28gcmVhZFdpdGhSZXRyeSB0cmVhdHMgaXQgYXMgYSBnZW51aW5lbHktbWlzc2luZyBmaWxlIChyZXR1cm4gdW5kZWZpbmVkIG5vdykgcmF0aGVyIHRoYW4gYSB0cmFuc2llbnQgcmVhZCBmYWlsdXJlIHRvIHJldHJ5IDbDlyB3aXRoIGJhY2tvZmYg4oCUIG1pc3NpbmcgZmlsZXMgYXJlIG5vcm1hbCAoYSBjb25jdXJyZW50IG1lcmdlIGRlbGV0ZXMgYSBmaWxlIG1pZC1yZWFkKSwgYW5kIHJldHJ5aW5nIHRoZW0gaXMgY2F0YXN0cm9waGljYWxseSBzbG93LlxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtmaWxlUGF0aH1gKSBhcyBFcnJvciAmIHsgY29kZT86IHN0cmluZyB9O1xuICAgICAgICAgICAgZXJyLmNvZGUgPSBcIkVOT0VOVFwiO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlSlNGaWxlSGFuZGxlV3JhcHBlcihmaWxlUGF0aCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGlyZWN0b3J5SGFuZGxlKGtleTogc3RyaW5nLCBvcHRpb25zPzogeyBjcmVhdGU/OiBib29sZWFuIH0pOiBQcm9taXNlPERpcmVjdG9yeVdyYXBwZXI+IHtcbiAgICAgICAgY29uc3QgZGlyUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3RQYXRoLCBrZXkpO1xuXG4gICAgICAgIGlmIChvcHRpb25zPy5jcmVhdGUpIHtcbiAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKGRpclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgZnMucHJvbWlzZXMuYWNjZXNzKGRpclBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpcmVjdG9yeSBub3QgZm91bmQ6ICR7ZGlyUGF0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTm9kZUpTRGlyZWN0b3J5SGFuZGxlV3JhcHBlcihkaXJQYXRoKTtcbiAgICB9XG5cbiAgICBhc3luYyAqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgRmlsZVdyYXBwZXIgfCBEaXJlY3RvcnlXcmFwcGVyXT4ge1xuICAgICAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5ta2Rpcih0aGlzLnJvb3RQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZGRpcih0aGlzLnJvb3RQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoLmpvaW4odGhpcy5yb290UGF0aCwgZW50cnkubmFtZSk7XG4gICAgICAgICAgICBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBbZW50cnkubmFtZSwgbmV3IE5vZGVKU0ZpbGVIYW5kbGVXcmFwcGVyKGNoaWxkUGF0aCldO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgW2VudHJ5Lm5hbWUsIG5ldyBOb2RlSlNEaXJlY3RvcnlIYW5kbGVXcmFwcGVyKGNoaWxkUGF0aCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8vIFdoZW4gc2V0LCBnZXREaXJlY3RvcnlIYW5kbGUgc2tpcHMgZXZlcnkgcHJvbXB0ICsgcmVtb3RlIGNoZWNrIGFuZCBzZXJ2ZXMgZnJvbSB0aGUgYnJvd3NlcidzIE9yaWdpbiBQcml2YXRlIEZpbGUgU3lzdGVtIChPUEZTKS4gT25lIG5hbWVkIHN1YmZvbGRlciBpcyBcImN1cnJlbnRcIiBwZXIgZmlsZUFQSUtleTsgcGlja1ByaXZhdGVGb2xkZXIgLyByZXNldFN0b3JhZ2VMb2NhdGlvbiBzd2l0Y2ggd2hpY2ggb25lLiBTZXQgdGhpcyBpbiBhcHAgc3RhcnR1cCBCRUZPUkUgdGhlIGZpcnN0IGdldERpcmVjdG9yeUhhbmRsZS5cbmxldCBvcGZzRW5hYmxlZCA9IGZhbHNlO1xuY29uc3QgT1BGU19GT0xERVJTX0RJUiA9IFwiZm9sZGVyc1wiO1xuY29uc3QgT1BGU19ERUZBVUxUX0ZPTERFUiA9IFwiZGVmYXVsdFwiO1xuZnVuY3Rpb24gb3Bmc0N1cnJlbnRLZXkoKSB7IHJldHVybiBnZXRGaWxlQVBJS2V5KCkgKyBcIjpvcGZzOmN1cnJlbnRcIjsgfVxuZnVuY3Rpb24gZ2V0Q3VycmVudE9wZnNGb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0ob3Bmc0N1cnJlbnRLZXkoKSkgfHwgT1BGU19ERUZBVUxUX0ZPTERFUjtcbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRPcGZzRm9sZGVyKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG9wZnNDdXJyZW50S2V5KCksIG5hbWUpO1xufVxuXG4vLyBTd2l0Y2hlcyBnZXREaXJlY3RvcnlIYW5kbGUgdG8gdGhlIE9yaWdpbiBQcml2YXRlIEZpbGUgU3lzdGVtLiBObyBkaXJlY3RvcnkgcGlja2VyLCBubyBwZXJtaXNzaW9uIHByb21wdCwgbm8gcmVtb3RlIHNlcnZlciBjaGVjay4gUGVyc2lzdHMgbm90aGluZyDigJQgY2FsbCBvbiBldmVyeSBhcHAgc3RhcnQgYmVmb3JlIHJlYWRpbmcgc3RvcmFnZS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcml2YXRlRmlsZVN5c3RlbSgpOiB2b2lkIHtcbiAgICBvcGZzRW5hYmxlZCA9IHRydWU7XG59XG5cbi8vIFdoZXRoZXIgdGhlIE9QRlMgYnJhbmNoIGlzIGluIGVmZmVjdCAoc28gb3RoZXIgY2FsbGVycyBjYW4gYWRhcHQg4oCUIGUuZy4gc2tpcCB0aGUgXCJmaW5kIGRhdGEgc3ViZGlyXCIgaGFjayBpbiBnZXRGaWxlU3RvcmFnZU5lc3RlZDIgc2luY2UgT1BGUyBpcyBhbHdheXMgYSBjbGVhbiByb290IHdlIG93biBlbmQtdG8tZW5kKS5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaXZhdGVGaWxlU3lzdGVtQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvcGZzRW5hYmxlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3Bmc0ZvbGRlcnNEaXIoKTogUHJvbWlzZTxGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iuc3RvcmFnZT8uZ2V0RGlyZWN0b3J5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByaXZhdGUgRmlsZSBTeXN0ZW0gQWNjZXNzIEFQSSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbiAgICB9XG4gICAgaWYgKGxvY2F0aW9uLnByb3RvY29sID09PSBcImZpbGU6XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJpdmF0ZSBGaWxlIFN5c3RlbSBBUEkgaXMgZGlzYWxsb3dlZCBpbiBmaWxlOi8vIGxvY2F0aW9ucy4gSG9zdCBvbiBhbiBhY3R1YWwgb3JpZ2luLlwiKTtcbiAgICB9XG4gICAgY29uc3Qgcm9vdCA9IGF3YWl0IG5hdmlnYXRvci5zdG9yYWdlLmdldERpcmVjdG9yeSgpO1xuICAgIGNvbnN0IGtleWVkID0gYXdhaXQgcm9vdC5nZXREaXJlY3RvcnlIYW5kbGUoZ2V0RmlsZUFQSUtleSgpLCB7IGNyZWF0ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gYXdhaXQga2V5ZWQuZ2V0RGlyZWN0b3J5SGFuZGxlKE9QRlNfRk9MREVSU19ESVIsIHsgY3JlYXRlOiB0cnVlIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50T3Bmc0hhbmRsZSgpOiBQcm9taXNlPERpcmVjdG9yeVdyYXBwZXI+IHtcbiAgICBjb25zdCBmb2xkZXJzID0gYXdhaXQgZ2V0T3Bmc0ZvbGRlcnNEaXIoKTtcbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBmb2xkZXJzLmdldERpcmVjdG9yeUhhbmRsZShnZXRDdXJyZW50T3Bmc0ZvbGRlcigpLCB7IGNyZWF0ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZm9sZGVyIGFzIHVua25vd24gYXMgRGlyZWN0b3J5V3JhcHBlcjtcbn1cblxuLy8gQWxsIHByZXZpb3VzbHktdXNlZCBPUEZTIHN1YmZvbGRlcnMgdW5kZXIgdGhpcyBmaWxlQVBJS2V5LCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgKHRpbWVzdGFtcC1uYW1lZCBhdXRvLWdlbmVyYXRlZCBmb2xkZXJzIHRoZXJlZm9yZSBzb3J0IGNocm9ub2xvZ2ljYWxseSkuIFVzZSB0aGlzIHRvIHN1cmZhY2UgYSBsaXN0LCB0aGVuIGNhbGwgcGlja1ByaXZhdGVGb2xkZXIobmFtZSkgdG8gc3dpdGNoLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQcml2YXRlRm9sZGVycygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iuc3RvcmFnZT8uZ2V0RGlyZWN0b3J5KSByZXR1cm4gW107XG4gICAgbGV0IGZvbGRlcnM6IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU7XG4gICAgdHJ5IHsgZm9sZGVycyA9IGF3YWl0IGdldE9wZnNGb2xkZXJzRGlyKCk7IH0gY2F0Y2ggeyByZXR1cm4gW107IH1cbiAgICBjb25zdCBuYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IFtuYW1lLCBoYW5kbGVdIG9mIChmb2xkZXJzIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxbc3RyaW5nLCB7IGtpbmQ6IHN0cmluZyB9XT4pKSB7XG4gICAgICAgIGlmIChoYW5kbGUua2luZCA9PT0gXCJkaXJlY3RvcnlcIikgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbn1cblxuLy8gU3dpdGNoIHRvIGEgc3BlY2lmaWMgT1BGUyBzdWJmb2xkZXIgYW5kIHJlbG9hZCBzbyBnZXREaXJlY3RvcnlIYW5kbGUgcmUtcmVzb2x2ZXMgdG8gaXQuIFRoZSBmb2xkZXIgaXMgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrUHJpdmF0ZUZvbGRlcihuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzZXRDdXJyZW50T3Bmc0ZvbGRlcihuYW1lKTtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG59XG5cbi8vIFJldHVybnMgdGhlIGRpcmVjdG9yeSBoYW5kbGUgdG8gdXNlIOKAlCBsb2NhbCAoTm9kZSAvIHBpY2tlZCBmb2xkZXIpIE9SIGEgcmVtb3RlIHNlcnZlciwgYm90aCBhcyB0aGUgc2FtZSBEaXJlY3RvcnlXcmFwcGVyLCBzbyBjYWxsZXJzIGRvbid0IGtub3cgb3IgY2FyZSB3aGljaCBpdCBpcy4gQSByZW1lbWJlcmVkIHNlcnZlciBpcyBWRVJJRklFRCAod2UgYWN0dWFsbHkgY29ubmVjdCkgYmVmb3JlIHVzZTsgaWYgaXQgbm8gbG9uZ2VyIHdvcmtzIHdlIHJlLXByb21wdCwganVzdCBsaWtlIGEgbG9jYWwgZm9sZGVyIHdob3NlIHBlcm1pc3Npb24gd2FzIGxvc3QuIEJsb2NrcyB1bnRpbCByZWFkeSAob3IgdGhlIHVzZXIgZGlzbWlzc2VzLCB3aGljaCByZWplY3RzKS5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RvcnlIYW5kbGUgPSBsYXp5KGFzeW5jIGZ1bmN0aW9uIGdldERpcmVjdG9yeUhhbmRsZSgpOiBQcm9taXNlPERpcmVjdG9yeVdyYXBwZXI+IHtcbiAgICAvLyBBbiBpbmplY3RlZCByb290IChlLmcuIGEgV2ViIFdvcmtlciBoYW5kZWQgdGhlIGhhbmRsZSBieSBpdHMgb3duaW5nIHdpbmRvdylcbiAgICAvLyBzaG9ydC1jaXJjdWl0cyB0aGUgd2hvbGUgaW50ZXJhY3RpdmUgcmVzb2x1dGlvbiDigJQgbm8gcGlja2VyLCBubyBET00sIG5vXG4gICAgLy8gbG9jYWxTdG9yYWdlLiBNdXN0IGNvbWUgZmlyc3Qgc28gYSB3b3JrZXIgbmV2ZXIgcmVhY2hlcyB0aGUgYnJhbmNoZXMgYmVsb3cuXG4gICAgaWYgKHN0b3JhZ2VSb290T3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2VSb290T3ZlcnJpZGUgYXMgdW5rbm93biBhcyBEaXJlY3RvcnlXcmFwcGVyO1xuICAgIH1cbiAgICAvLyBBIHdvcmtlciBjYW4ndCBzaG93IHRoZSBwaWNrZXIgKG5vIERPTSAvIG5vIHVzZXIgYWN0aXZhdGlvbikgYW5kIGNhbid0IHJlYWQgbG9jYWxTdG9yYWdlLCBidXQgaXQgQ0FOIG9wZW4gdGhlIHBvaW50ZXIgSW5kZXhlZERCIHRoZSBtYWluLXRocmVhZCBwaWNrZXIgcGVyc2lzdHMgdG8uIFBvbGwgaXQgZm9yIGEgaGFuZGxlIHdob3NlIHBlcm1pc3Npb24gaXMgYWxyZWFkeSBncmFudGVkOyB0aGUgb3duaW5nIHdpbmRvdyBtYXkgYWxzbyBwb3N0TWVzc2FnZSBhIGhhbmRsZSBpbiBtaWQtcG9sbCAoY2hlY2tlZCBlYWNoIGl0ZXJhdGlvbikuIFRoaXMgaGFzIHRvIGNvbWUgYmVmb3JlIHRoZSBpc05vZGUgYnJhbmNoOiB0eXBlc2FmZWNzcydzIGlzTm9kZSgpIHJldHVybnMgdHJ1ZSBpbiB3b3JrZXJzICh3aW5kb3cgaXMgdW5kZWZpbmVkKSwgc28gYSB3b3JrZXIgd291bGQgb3RoZXJ3aXNlIGZhbGwgaW50byB0aGUgTm9kZSBicmFuY2ggYW5kIHRyeSB0byB1c2UgZnMvcGF0aC5cbiAgICBpZiAoXCJXb3JrZXJHbG9iYWxTY29wZVwiIGluIGdsb2JhbFRoaXMpIHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzdG9yYWdlUm9vdE92ZXJyaWRlKSByZXR1cm4gc3RvcmFnZVJvb3RPdmVycmlkZSBhcyB1bmtub3duIGFzIERpcmVjdG9yeVdyYXBwZXI7XG4gICAgICAgICAgICBsZXQgaGFuZGxlID0gYXdhaXQgZmluZEdyYW50ZWRQb2ludGVySGFuZGxlKFwicmVhZHdyaXRlXCIpO1xuICAgICAgICAgICAgaWYgKGhhbmRsZSkgcmV0dXJuIGhhbmRsZSBhcyB1bmtub3duIGFzIERpcmVjdG9yeVdyYXBwZXI7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgV09SS0VSX1BPTExfSU5URVJWQUxfTVMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb2RlSlNEaXJlY3RvcnlIYW5kbGVXcmFwcGVyKHBhdGgucmVzb2x2ZShcIi4vZGF0YS9cIikpO1xuICAgIH1cbiAgICBpZiAob3Bmc0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRPcGZzSGFuZGxlKCk7XG4gICAgfVxuXG4gICAgLy8gQSBzZXJ2ZXIgY29ubmVjdGVkIGluIGEgcHJldmlvdXMgc2Vzc2lvbjogb25seSByZXVzZSBpdCBpZiBpdCBzdGlsbCBhY3R1YWxseSB3b3Jrcy5cbiAgICBjb25zdCBzYXZlZFJlbW90ZSA9IGxvYWRSZW1vdGVDb25maWcoKTtcbiAgICBpZiAoc2F2ZWRSZW1vdGUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGVzdFJlbW90ZUNvbm5lY3Rpb24oc2F2ZWRSZW1vdGUudXJsLCBzYXZlZFJlbW90ZS5wYXNzd29yZCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcIm9rXCIpIHJldHVybiBnZXRSZW1vdGVIYW5kbGUoc2F2ZWRSZW1vdGUpO1xuICAgICAgICBjb25zb2xlLndhcm4oYFNhdmVkIHJlbW90ZSBzZXJ2ZXIgZGlkbid0IGNvbm5lY3QgKCR7cmVzdWx0LnN0YXR1c30pJHtyZXN1bHQuc3RhdHVzID09PSBcInVucmVhY2hhYmxlXCIgPyBcIjogXCIgKyByZXN1bHQuZXJyb3IgOiBcIlwifSDigJQgcmUtcHJvbXB0aW5nLmApO1xuICAgIH1cblxuICAgIGxldCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpO1xuICAgIHByZWFjdC5yZW5kZXIoPERpcmVjdG9yeVByb21wdGVyIC8+LCByb290KTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgcmVzb2x2ZUhhbmRsZSE6IChoOiBEaXJlY3RvcnlXcmFwcGVyKSA9PiB2b2lkO1xuICAgICAgICBsZXQgcmVqZWN0SGFuZGxlITogKGU6IEVycm9yKSA9PiB2b2lkO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8RGlyZWN0b3J5V3JhcHBlcj4oKHJlcywgcmVqKSA9PiB7IHJlc29sdmVIYW5kbGUgPSByZXM7IHJlamVjdEhhbmRsZSA9IHJlajsgfSk7XG5cbiAgICAgICAgY29uc3QgcGlja0xvY2FsID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCB3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZS5yZXF1ZXN0UGVybWlzc2lvbih7IG1vZGU6IFwicmVhZHdyaXRlXCIgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmVkSWQgPSBhd2FpdCBzdG9yZUZpbGVTeXN0ZW1Qb2ludGVyKHsgbW9kZTogXCJyZWFkd3JpdGVcIiwgaGFuZGxlIH0pO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGdldEZpbGVBUElLZXkoKSwgc3RvcmVkSWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVIYW5kbGUoaGFuZGxlIGFzIGFueSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkRpcmVjdG9yeSBwaWNrIGZhaWxlZC9jYW5jZWxsZWQ6XCIsIGUpOyAvLyBzdGF5IG9uIHRoZSBwcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25Db25uZWN0ZWQgPSAoY29uZmlnOiBSZW1vdGVDb25maWcpID0+IHsgc2F2ZVJlbW90ZUNvbmZpZyhjb25maWcpOyByZXNvbHZlSGFuZGxlKGdldFJlbW90ZUhhbmRsZShjb25maWcpKTsgfTtcbiAgICAgICAgLy8gVGhlIHRocmVlIG9wdGlvbnMsIHJlbmRlcmVkIGZyZXNoIGVhY2ggdGltZS4gSWYgYSBzYXZlZCBzZXJ2ZXIganVzdCBmYWlsZWQsIHByZS1maWxsICsgZXhwYW5kIHRoZSBjb25uZWN0IGZvcm0gc28gdGhlIHVzZXIgY2FuIHJldHJ5IG9yIGZpeCBpdC5cbiAgICAgICAgY29uc3QgcmVuZGVyT3B0aW9ucyA9ICgpID0+IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2Nzcy5mb250U2l6ZSg0MCkucGFkMig4MCwgNDApfSBvbkNsaWNrPXtwaWNrTG9jYWx9PlBpY2sgRGF0YSBEaXJlY3Rvcnk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8U2VydmVyQ29ubmVjdEZvcm0gb25Db25uZWN0ZWQ9e29uQ29ubmVjdGVkfSBpbml0aWFsPXtzYXZlZFJlbW90ZX0gLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT17Y3NzLmZvbnRTaXplKDQwKS5wYWQyKDgwLCA0MCl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJlamVjdEhhbmRsZShuZXcgRXJyb3IoXCJVc2VyIGRpc21pc3NlZCBmaWxlIHN5c3RlbSBhY2Nlc3MgcHJvbXB0XCIpKX0+RGlzbWlzczwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQSBwcmV2aW91c2x5LXBpY2tlZCBsb2NhbCBmb2xkZXI6IHRyeSB0byByZXN0b3JlIGl0IChtYXkgbmVlZCBhIGNsaWNrKS4gU2tpcHBlZCB3aGVuIGEgc2F2ZWQgc2VydmVyIGZhaWxlZCDigJQgdGhhdCB1c2VyIHdhbnRzIHRoZSBzZXJ2ZXIsIHNvIGdvIHN0cmFpZ2h0IHRvIHRoZSAocHJlLWZpbGxlZCkgcHJvbXB0LlxuICAgICAgICBjb25zdCBzdG9yZWRJZCA9ICFzYXZlZFJlbW90ZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShnZXRGaWxlQVBJS2V5KCkpO1xuICAgICAgICBpZiAoc3RvcmVkSWQpIHtcbiAgICAgICAgICAgIGxldCBkb25lTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IGlmICghZG9uZUxvYWQpIGRpc3BsYXlEYXRhLnVpID0gXCJDbGljayBhbnl3aGVyZSB0byBhbGxvdyBmaWxlIHN5c3RlbSBhY2Nlc3NcIjsgfSwgNTAwKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gYXdhaXQgdHJ5VG9Mb2FkUG9pbnRlcihzdG9yZWRJZCk7XG4gICAgICAgICAgICAgICAgZG9uZUxvYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUpIHJldHVybiBoYW5kbGU7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZG9uZUxvYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgICAgICAgICAgIGlmIChtc2cuaW5jbHVkZXMoXCJ1c2VyIGFjdGl2YXRpb25cIikgfHwgbXNnLmluY2x1ZGVzKFwiVXNlciBhY3RpdmF0aW9uXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlEYXRhLnVpID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDIwKS5jZW50ZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPXtjc3MuZm9udFNpemUoNDApLnBhZDIoODAsIDQwKX0gb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RGF0YS51aSA9IFwiTG9hZGluZy4uLlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaCA9IGF3YWl0IHRyeVRvTG9hZFBvaW50ZXIoc3RvcmVkSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgpIHsgcmVzb2x2ZUhhbmRsZShoKTsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHJldHJ5RXJyb3IpIHsgY29uc29sZS5lcnJvcihcIlJldHJ5IGZhaWxlZDpcIiwgcmV0cnlFcnJvcik7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheURhdGEudWkgPSA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goMjApLmNlbnRlcn0+e3JlbmRlck9wdGlvbnMoKX08L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+Q2xpY2sgdG8gcmVzdG9yZSBmaWxlIHN5c3RlbSBhY2Nlc3M8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT3B0aW9ucygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXNwbGF5RGF0YS51aSA9IDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCgyMCkuY2VudGVyfT57cmVuZGVyT3B0aW9ucygpfTwvZGl2PjtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHByb21pc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcHJlYWN0LnJlbmRlcihudWxsLCByb290KTtcbiAgICAgICAgcm9vdC5yZW1vdmUoKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVTdG9yYWdlTmVzdGVkID0gY2FjaGUoYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVN0b3JhZ2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RvcmFnZT4ge1xuICAgIGxldCBiYXNlID0gYXdhaXQgZ2V0RGlyZWN0b3J5SGFuZGxlKCk7XG4gICAgZm9yIChsZXQgcGFydCBvZiBwYXRoLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBiYXNlID0gYXdhaXQgYmFzZS5nZXREaXJlY3RvcnlIYW5kbGUocGFydCwgeyBjcmVhdGU6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwSGFuZGxlKGJhc2UpO1xufSk7XG4vLyBTdXBwb3J0cyBpZiB0aGUgdXNlciBzZWxlY3RzIHRoZSBmb2xkZXIgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb2xkZXIgb3IgdGhlIGRhdGEgZm9sZGVyIGRpcmVjdGx5LiBJZiBwYXRoU3RyIGlzIGFuIGFic29sdXRlIHBhdGggKGFuZCB3ZSdyZSBpbiBub2RlanMpIHdlIHVzZSBpdCBkaXJlY3RseS5cbmV4cG9ydCBjb25zdCBnZXRGaWxlU3RvcmFnZU5lc3RlZDIgPSBjYWNoZShhc3luYyBmdW5jdGlvbiBnZXRGaWxlU3RvcmFnZShwYXRoU3RyOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdG9yYWdlPiB7XG4gICAgbGV0IGJhc2U6IERpcmVjdG9yeVdyYXBwZXI7XG4gICAgcGF0aFN0ciA9IHBhdGhTdHIucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpO1xuICAgIGlmIChpc05vZGUoKSkge1xuICAgICAgICBpZiAocGF0aC5pc0Fic29sdXRlKHBhdGhTdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcEhhbmRsZShuZXcgTm9kZUpTRGlyZWN0b3J5SGFuZGxlV3JhcHBlcihwYXRoU3RyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYmFzZSA9IG5ldyBOb2RlSlNEaXJlY3RvcnlIYW5kbGVXcmFwcGVyKHBhdGgucmVzb2x2ZShcIi4vZGF0YS9cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSBhd2FpdCBnZXREaXJlY3RvcnlIYW5kbGUoKTtcbiAgICAgICAgLy8gU2tpcCB0aGUgXCJmaW5kIGRhdGEgc3ViZGlyXCIgaGFjayB1bmRlciBPUEZTIOKAlCB0aGF0J3MgZm9yIHBpY2tlZCBkaXJlY3RvcmllcyB3aGVyZSB0aGUgdXNlciBtaWdodCBoYXZlIHNlbGVjdGVkIGEgZm9sZGVyIHdpdGggdW5yZWxhdGVkIGZpbGVzOyBPUEZTIGlzIGEgY2xlYW4gcm9vdCB3ZSBvd24gZW5kLXRvLWVuZC5cbiAgICAgICAgaWYgKCFvcGZzRW5hYmxlZCkge1xuICAgICAgICAgICAgbGV0IGRpcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBsZXQgYWxsczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgW25hbWUsIGVudHJ5XSBvZiBiYXNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmtpbmQgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlycy5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbGxzLnB1c2gobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIQUNLOiBJZiB0aGVyZSBhcmUgZW5vdWdoIGZpbGVzLCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgbm90IGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgY29sbGVjdGlvbnMuIEl0J3MgcHJvYmFibHkgdGhlIHVzZXIncyBkYXRhIGluc3RlYWRcbiAgICAgICAgICAgIGlmIChkaXJzLmluY2x1ZGVzKFwiLmdpdFwiKSB8fCBkaXJzLmluY2x1ZGVzKFwiZGF0YVwiKSB8fCBhbGxzLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgICAgIGJhc2UgPSBhd2FpdCBiYXNlLmdldERpcmVjdG9yeUhhbmRsZShcImRhdGFcIiwgeyBjcmVhdGU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgcGFydCBvZiBwYXRoU3RyLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBiYXNlID0gYXdhaXQgYmFzZS5nZXREaXJlY3RvcnlIYW5kbGUocGFydCwgeyBjcmVhdGU6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwSGFuZGxlKGJhc2UpO1xufSk7XG5leHBvcnQgY29uc3QgZ2V0RmlsZVN0b3JhZ2UgPSBsYXp5KGFzeW5jIGZ1bmN0aW9uIGdldEZpbGVTdG9yYWdlKCk6IFByb21pc2U8RmlsZVN0b3JhZ2U+IHtcbiAgICBpZiAoVVNFX0lOREVYRURfREIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEZpbGVTdG9yYWdlSW5kZXhEQigpO1xuICAgIH1cbiAgICBsZXQgaGFuZGxlID0gYXdhaXQgZ2V0RGlyZWN0b3J5SGFuZGxlKCk7XG4gICAgcmV0dXJuIHdyYXBIYW5kbGUoaGFuZGxlKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0U3RvcmFnZUxvY2F0aW9uKCkge1xuICAgIGlmIChvcGZzRW5hYmxlZCkge1xuICAgICAgICAvLyBEb24ndCBkZWxldGUgcHJldmlvdXMgZm9sZGVyIOKAlCBsaXN0UHJpdmF0ZUZvbGRlcnMgLyBwaWNrUHJpdmF0ZUZvbGRlciBzdGlsbCBuZWVkIGl0LiBKdXN0IHBvaW50IFwiY3VycmVudFwiIGF0IGEgZnJlc2ggdGltZXN0YW1wLW5hbWVkIG9uZSBzbyB0aGUgbmV4dCByZWxvYWQgc3RhcnRzIGNsZWFuLlxuICAgICAgICBzZXRDdXJyZW50T3Bmc0ZvbGRlcihuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCBcIi1cIikpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZ2V0RmlsZUFQSUtleSgpKTtcbiAgICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShyZW1vdGVDb25maWdLZXkoKSk7IH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfVxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbn1cblxuZXhwb3J0IHR5cGUgTmVzdGVkRmlsZVN0b3JhZ2UgPSB7XG4gICAgaGFzS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICBnZXRTdG9yYWdlKGtleTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RvcmFnZT47XG4gICAgcmVtb3ZlU3RvcmFnZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgZ2V0S2V5cyhpbmNsdWRlRm9sZGVycz86IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbGVTdG9yYWdlID0gSVN0b3JhZ2VSYXcgJiB7XG4gICAgZm9sZGVyOiBOZXN0ZWRGaWxlU3RvcmFnZTtcbiAgICAvLyBNaXJyb3JzIERpcmVjdG9yeVdyYXBwZXIuaXNSZW1vdGU6IHRydWUgd2hlbiB0aGlzIHN0b3JhZ2UgaXMgc2VydmVkIG92ZXIgdGhlIG5ldHdvcmsuIExldHMgY2FsbGVycyAoZS5nLiBCdWxrRGF0YWJhc2UyLCB3aGljaCBza2lwcyBhdXRvbWF0aWMgY29tcGFjdGlvbiBvdmVyIHRoZSBuZXR3b3JrIGJ5IGRlZmF1bHQpIGFkYXB0LlxuICAgIGlzUmVtb3RlPzogYm9vbGVhbjtcbn07XG5cbmxldCBhcHBlbmRRdWV1ZSA9IGNhY2hlKChrZXk6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBydW5JblNlcmlhbCgoZm5jOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiBmbmMoKSk7XG59KTtcblxuXG5hc3luYyBmdW5jdGlvbiBmaXhlZEdldEZpbGVIYW5kbGUoY29uZmlnOiB7XG4gICAgaGFuZGxlOiBEaXJlY3RvcnlXcmFwcGVyO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGNyZWF0ZTogdHJ1ZTtcbn0pOiBQcm9taXNlPEZpbGVXcmFwcGVyPjtcbmFzeW5jIGZ1bmN0aW9uIGZpeGVkR2V0RmlsZUhhbmRsZShjb25maWc6IHtcbiAgICBoYW5kbGU6IERpcmVjdG9yeVdyYXBwZXI7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgY3JlYXRlPzogYm9vbGVhbjtcbn0pOiBQcm9taXNlPEZpbGVXcmFwcGVyIHwgdW5kZWZpbmVkPjtcbmFzeW5jIGZ1bmN0aW9uIGZpeGVkR2V0RmlsZUhhbmRsZShjb25maWc6IHtcbiAgICBoYW5kbGU6IERpcmVjdG9yeVdyYXBwZXI7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgY3JlYXRlPzogYm9vbGVhbjtcbn0pOiBQcm9taXNlPEZpbGVXcmFwcGVyIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKGNvbmZpZy5rZXkuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVzZSBmb2xkZXJzIGRpcmVjdGx5IGluIGZpbGUgc3lzdGVtIHJlYWQgLyB3cml0ZXMuIFVzZSBhIHdyYXBwZXIgd2hpY2ggaGFuZGxlcyB0aGUgZm9sZGVyIG5hdmlnYXRpb24uIFBhdGggd2FzICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLmtleSl9YCk7XG4gICAgfVxuICAgIC8vIEFMV0FZUyB0cnkgd2l0aG91dCBjcmVhdGUsIGJlY2F1c2UgdGhlIHNzaGZzLXdpbiBzdWNrcyBhbmQgZG9lc24ndCBzdXBwb3J0IGBjcmVhdGU6IHRydWVgPyBXdGYuLi5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgY29uZmlnLmhhbmRsZS5nZXRGaWxlSGFuZGxlKGNvbmZpZy5rZXkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICBpZiAoIWNvbmZpZy5jcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBjb25maWcuaGFuZGxlLmdldEZpbGVIYW5kbGUoY29uZmlnLmtleSwgeyBjcmVhdGU6IHRydWUgfSk7XG59XG5cbi8vIEEgZmlsZSB0aGF0IGdlbnVpbmVseSBkb2VzIG5vdCBleGlzdC4gV2UgbXVzdCBOT1QgcmV0cnkgdGhlc2UsIG90aGVyd2lzZSByZWFkaW5nIG1hbnkgbWlzc2luZyBmaWxlcyAoYSBjb21tb24gcGF0dGVybikgZ2V0cyBjYXRhc3Ryb3BoaWNhbGx5IHNsb3cuXG5mdW5jdGlvbiBpc01pc3NpbmdFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGxldCBuYW1lID0gKGVycm9yIGFzIHsgbmFtZT86IHN0cmluZyB9KT8ubmFtZTtcbiAgICBsZXQgY29kZSA9IChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgcmV0dXJuIG5hbWUgPT09IFwiTm90Rm91bmRFcnJvclwiIHx8IGNvZGUgPT09IFwiRU5PRU5UXCI7XG59XG5cbmNvbnN0IE1BWF9SRUFEX1JFVFJJRVMgPSA2O1xuXG4vLyBUaGUgYnJvd3NlciBGaWxlIFN5c3RlbSBBY2Nlc3MgQVBJIGNhbiB0cmFuc2llbnRseSBmYWlsIHJlYWRzIHVuZGVyIGhlYXZ5IGxvYWQgKGl0IGFwcGVhcnMgdG8gdGhyb3R0bGUgd2hlbiBhIHBhZ2UgaXNzdWVzIG1hbnkgcmVhZHMgYXQgb25jZSkuIFRob3NlIGZhaWx1cmVzIHN1cmZhY2UgYXMgZXJyb3JzIE9USEVSIHRoYW4gXCJub3QgZm91bmRcIiwgc28gd2UgcmV0cnkgdGhlbSB3aXRoIGJhY2tvZmYuIEEgcmVhbCBtaXNzaW5nIGZpbGUgKE5vdEZvdW5kRXJyb3IgLyBFTk9FTlQpIHJldHVybnMgdW5kZWZpbmVkIGltbWVkaWF0ZWx5IHdpdGggbm8gcmV0cnkuXG5hc3luYyBmdW5jdGlvbiByZWFkV2l0aFJldHJ5PFQ+KGxhYmVsOiBzdHJpbmcsIGtleTogc3RyaW5nLCByZWFkOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGJhY2tvZmYgPSAyNTtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgOyBhdHRlbXB0KyspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZWFkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNNaXNzaW5nRXJyb3IoZXJyb3IpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IG5hbWUgPSAoZXJyb3IgYXMgeyBuYW1lPzogc3RyaW5nIH0pPy5uYW1lIHx8IFwiRXJyb3JcIjtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gKGVycm9yIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpO1xuICAgICAgICAgICAgaWYgKGF0dGVtcHQgPj0gTUFYX1JFQURfUkVUUklFUykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtsYWJlbH0gZ2F2ZSB1cCBvbiAke0pTT04uc3RyaW5naWZ5KGtleSl9IGFmdGVyICR7YXR0ZW1wdH0gcmV0cmllcyAoJHtuYW1lfSk6ICR7bWVzc2FnZS5zbGljZSgwLCAyMDApfWApO1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7bGFiZWx9IHJldHJ5aW5nICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0sICR7bmFtZX0pOiAke21lc3NhZ2Uuc2xpY2UoMCwgMjAwKX1gKTtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiYWNrb2ZmKSk7XG4gICAgICAgICAgICBiYWNrb2ZmID0gTWF0aC5taW4oYmFja29mZiAqIDIsIDEwMDApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB3cmFwSGFuZGxlRmlsZXMoaGFuZGxlOiBEaXJlY3RvcnlXcmFwcGVyKTogSVN0b3JhZ2VSYXcge1xuICAgIC8vIExvZyB0aGUgZnVsbCBwYXRoIChyb290ICsgZmlsZW5hbWUpIHdoZW4gYXZhaWxhYmxlLCBzbyBhIGZhaWxpbmcgZmlsZSBpcyBpZGVudGlmaWFibGUuXG4gICAgY29uc3QgcGF0aE9mID0gKGtleTogc3RyaW5nKSA9PiBoYW5kbGUuZnVsbFBhdGggPyBoYW5kbGUuZnVsbFBhdGggKyBcIi9cIiArIGtleSA6IGtleTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZFdpdGhSZXRyeShcImdldEluZm9cIiwgcGF0aE9mKGtleSksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmdldEZpbGVIYW5kbGUoa2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IGZpbGUuZ2V0RmlsZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGZpbGVDb250ZW50LnNpemUsXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZUNvbnRlbnQubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkV2l0aFJldHJ5KFwiZ2V0XCIsIHBhdGhPZihrZXkpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGhhbmRsZS5nZXRGaWxlSGFuZGxlKGtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmaWxlLmdldEZpbGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGVDb250ZW50LmFycmF5QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgLy8gVW5kZXIgbG9hZCB0aGUgRlMgQWNjZXNzIEFQSSBjYW4gcmVzb2x2ZSB3aXRoIGEgdHJ1bmNhdGVkIGJ1ZmZlciBhbmQgbm8gZXJyb3IuIFRyZWF0IGEgc2hvcnQgcmVhZCBhcyB0cmFuc2llbnQgc28gcmVhZFdpdGhSZXRyeSByZXRyaWVzIGl0LlxuICAgICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoICE9PSBmaWxlQ29udGVudC5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGBTaG9ydCByZWFkOiBnb3QgJHthcnJheUJ1ZmZlci5ieXRlTGVuZ3RofSBvZiAke2ZpbGVDb250ZW50LnNpemV9IGJ5dGVzYCksIHsgbmFtZTogXCJTaG9ydFJlYWRFcnJvclwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZ2V0UmFuZ2Uoa2V5OiBzdHJpbmcsIGNvbmZpZzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgICAgIHJldHVybiByZWFkV2l0aFJldHJ5KFwiZ2V0UmFuZ2VcIiwgcGF0aE9mKGtleSksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgaGFuZGxlLmdldEZpbGVIYW5kbGUoa2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IGZpbGUuZ2V0RmlsZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYW1wZWRTdGFydCA9IE1hdGgubWluKE1hdGgubWF4KGNvbmZpZy5zdGFydCwgMCksIGZpbGVDb250ZW50LnNpemUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYW1wZWRFbmQgPSBNYXRoLm1pbihNYXRoLm1heChjb25maWcuZW5kLCBjbGFtcGVkU3RhcnQpLCBmaWxlQ29udGVudC5zaXplKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGVDb250ZW50LnNsaWNlKGNvbmZpZy5zdGFydCwgY29uZmlnLmVuZCkuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCAhPT0gY2xhbXBlZEVuZCAtIGNsYW1wZWRTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihgU2hvcnQgcmFuZ2UgcmVhZDogZ290ICR7YXJyYXlCdWZmZXIuYnl0ZUxlbmd0aH0gb2YgJHtjbGFtcGVkRW5kIC0gY2xhbXBlZFN0YXJ0fSBieXRlc2ApLCB7IG5hbWU6IFwiU2hvcnRSZWFkRXJyb3JcIiB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGFwcGVuZChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgYXdhaXQgYXBwZW5kUXVldWUoa2V5KShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTk9URTogSW50ZXJlc3RpbmcgcG9pbnQuIENocm9tZSBkb2Vzbid0IG9wdGltaXplIHRoaXMgdG8gYmUgYW4gYXBwZW5kLCBhbmQgaW5zdGVhZCByZXdyaXRlcyB0aGUgZW50aXJlIGZpbGUuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpeGVkR2V0RmlsZUhhbmRsZSh7IGhhbmRsZSwga2V5LCBjcmVhdGU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JpdGFibGUgPSBhd2FpdCBmaWxlLmNyZWF0ZVdyaXRhYmxlKHsga2VlcEV4aXN0aW5nRGF0YTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gKGF3YWl0IGZpbGUuZ2V0RmlsZSgpKS5zaXplO1xuICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLnNlZWsob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB3cml0YWJsZS53cml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUuY2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpeGVkR2V0RmlsZUhhbmRsZSh7IGhhbmRsZSwga2V5LCBjcmVhdGU6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGZpbGUuY3JlYXRlV3JpdGFibGUoKTtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLndyaXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRhYmxlLmNsb3NlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgcmVtb3ZlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUucmVtb3ZlRW50cnkoa2V5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBnZXRLZXlzKGluY2x1ZGVGb2xkZXJzOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IFtuYW1lLCBlbnRyeV0gb2YgaGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5raW5kID09PSBcImZpbGVcIiB8fCBpbmNsdWRlRm9sZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGVudHJ5Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IChlcnJvciBhcyB7IG5hbWU/OiBzdHJpbmcgfSk/Lm5hbWUgfHwgXCJFcnJvclwiO1xuICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gKGVycm9yIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KT8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBtaWQtaXRlcmF0aW9uIHdvdWxkIHNpbGVudGx5IHRydW5jYXRlIHRoZSBsaXN0aW5nLCBzbyBzdXJmYWNlIGl0IGxvdWRseS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBnZXRLZXlzIGRpcmVjdG9yeSBpdGVyYXRpb24gZmFpbGVkIGFmdGVyICR7a2V5cy5sZW5ndGh9IGVudHJpZXMgKCR7bmFtZX0pOiAke21lc3NhZ2Uuc2xpY2UoMCwgMzAwKX1gKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHJlc2V0KCkge1xuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBbbmFtZSwgZW50cnldIG9mIGhhbmRsZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZS5yZW1vdmVFbnRyeShlbnRyeS5uYW1lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB3cmFwSGFuZGxlTmVzdGVkKGhhbmRsZTogRGlyZWN0b3J5V3JhcHBlcik6IE5lc3RlZEZpbGVTdG9yYWdlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBoYXNLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShrZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZ2V0U3RvcmFnZShrZXk6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0b3JhZ2U+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkRpcmVjdG9yeSA9IGF3YWl0IGhhbmRsZS5nZXREaXJlY3RvcnlIYW5kbGUoa2V5LCB7IGNyZWF0ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwSGFuZGxlKHN1YkRpcmVjdG9yeSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgcmVtb3ZlU3RvcmFnZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgYXdhaXQgaGFuZGxlLnJlbW92ZUVudHJ5KGtleSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZ2V0S2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBbbmFtZSwgZW50cnldIG9mIGhhbmRsZSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5raW5kID09PSBcImRpcmVjdG9yeVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcEhhbmRsZShoYW5kbGU6IERpcmVjdG9yeVdyYXBwZXIpOiBGaWxlU3RvcmFnZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ud3JhcEhhbmRsZUZpbGVzKGhhbmRsZSksXG4gICAgICAgIGZvbGRlcjogd3JhcEhhbmRsZU5lc3RlZChoYW5kbGUpLFxuICAgICAgICBpc1JlbW90ZTogaGFuZGxlLmlzUmVtb3RlLFxuICAgIH07XG59XG5cbi8vIFJldHVybnMgYSBVUkwgZm9yIGEgZmlsZSdzIGJ5dGVzLCByZWFkeSB0byBkcm9wIGludG8gPHZpZGVvPi88aW1nPi9mZXRjaC4gQSBuYXRpdmUgKGxvY2FsKSBmaWxlIGJlY29tZXMgYW4gaW4tbWVtb3J5IGJsb2I6IFVSTDsgYSByZW1vdGUgZmlsZSBiZWNvbWVzIGFuIGh0dHBzIFVSTCBpbnRvIHRoZSBzZXJ2ZXIncyByYW5nZS1jYXBhYmxlIC9tZWRpYSBlbmRwb2ludCAoYXV0aCB0b2tlbiBpbiB0aGUgcXVlcnksIHNpbmNlIGEgbWVkaWEgZWxlbWVudCBjYW4ndCBzZW5kIGhlYWRlcnMpLiBCb3RoIHN1cHBvcnQgSFRUUCByYW5nZSAvIHNlZWtpbmcuIEFMV0FZUyBoYW5kIHRoZSByZXN1bHQgdG8gZGlzcG9zZUZpbGVVUkwgd2hlbiBmaW5pc2hlZCDigJQgZm9yIGJsb2I6IFVSTHMgdGhhdCBmcmVlcyBtZW1vcnkuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVVSTChmaWxlOiBGaWxlV3JhcHBlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGZpbGUuZ2V0VVJMKSByZXR1cm4gZmlsZS5nZXRVUkwoKTtcbiAgICAvLyBOYXRpdmUgRmlsZVN5c3RlbUZpbGVIYW5kbGUgKG9yIGFueSBCbG9iLWJhY2tlZCBmaWxlKTogYSBibG9iOiBVUkwgb3ZlciB0aGUgRmlsZSBpdHNlbGYuXG4gICAgY29uc3QgZiA9IGF3YWl0IGZpbGUuZ2V0RmlsZSgpO1xuICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGYgYXMgdW5rbm93biBhcyBCbG9iKTtcbn1cblxuLy8gUmVsZWFzZXMgYSBVUkwgZnJvbSBnZXRGaWxlVVJMLiBibG9iOiBVUkxzIGxlYWsgdW50aWwgdGhlIGRvY3VtZW50IGlzIGdvbmUgdW5sZXNzIHJldm9rZWQ7IGh0dHBzL2ZpbGU6IFVSTHMgbmVlZCBubyBjbGVhbnVwLCBzbyB0aGlzIGlzIGEgbm8tb3AgZm9yIHRoZW0uXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZUZpbGVVUkwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCJibG9iOlwiKSkge1xuICAgICAgICB0cnkgeyBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7IH0gY2F0Y2ggeyAvKiBub3QgaW4gYSBicm93c2VyLCBvciBhbHJlYWR5IHJldm9rZWQgKi8gfVxuICAgIH1cbn1cblxuLy8gQSBTdG9yYWdlRmFjdG9yeSBiYWNrZWQgYnkgYSByZW1vdGUgc2VydmVyIChwYXRoIC0+IEZpbGVTdG9yYWdlKSwgZm9yIGNvZGUgdGhhdCBpbmplY3RzIGl0cyBvd24gc3RvcmFnZSBpbnRvIEJ1bGtEYXRhYmFzZTIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgZGlyZWN0b3J5IHByb21wdC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW1vdGVGaWxlU3RvcmFnZUZhY3RvcnkodXJsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIG9wdGlvbnM/OiBSZW1vdGVPcHRpb25zKTogKHBhdGhTdHI6IHN0cmluZykgPT4gUHJvbWlzZTxGaWxlU3RvcmFnZT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRSZW1vdGVEaXJlY3RvcnlIYW5kbGUodXJsLCBwYXNzd29yZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGFzeW5jIChwYXRoU3RyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGJhc2U6IERpcmVjdG9yeVdyYXBwZXIgPSByb290O1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aFN0ci5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikuc3BsaXQoXCIvXCIpKSB7XG4gICAgICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgYmFzZSA9IGF3YWl0IGJhc2UuZ2V0RGlyZWN0b3J5SGFuZGxlKHBhcnQsIHsgY3JlYXRlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwSGFuZGxlKGJhc2UpO1xuICAgIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlUb0xvYWRQb2ludGVyKHBvaW50ZXI6IHN0cmluZykge1xuICAgIGxldCByZXN1bHQgPSBhd2FpdCBnZXRGaWxlU3lzdGVtUG9pbnRlcih7IHBvaW50ZXIgfSk7XG4gICAgaWYgKCFyZXN1bHQpIHJldHVybjtcbiAgICBsZXQgaGFuZGxlID0gYXdhaXQgcmVzdWx0Py5vblVzZXJBY3RpdmF0aW9uKCk7XG4gICAgaWYgKCFoYW5kbGUpIHJldHVybjtcbiAgICByZXR1cm4gaGFuZGxlIGFzIGFueSBhcyBEaXJlY3RvcnlXcmFwcGVyO1xufSJdfQ==
751
- /* _JS_SOURCE_HASH = "40f30251e3193734da28d8ef206eaca3f4e342e7c10875277cd8232e4e819682"; */
751
+ /* _JS_SOURCE_HASH = "75c8e6414439d8fe38f6f4220f9932f80d4a8ff3aedf0a28faf2cb93cb9dd164"; */