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.
- package/.claude/settings.local.json +3 -1
- package/dist/treeSummary.ts.cache +2 -2
- package/index.d.ts +675 -296
- package/misc/dist/environment.ts.cache +2 -2
- package/misc/dist/getSecret.ts.cache +2 -2
- package/misc/dist/strings.ts.cache +2 -2
- package/misc/dist/zip.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +2 -2
- package/misc/https/dist/cloudflareHelpers.ts.cache +2 -2
- package/misc/https/dist/dns.ts.cache +2 -2
- package/misc/https/dist/hostServer.ts.cache +49 -21
- package/misc/https/dist/hostsFile.ts.cache +82 -0
- package/misc/https/dist/httpsCerts.ts.cache +2 -2
- package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
- package/misc/https/hostServer.d.ts +6 -2
- package/misc/https/hostServer.ts +52 -19
- package/misc/https/hostsFile.d.ts +7 -0
- package/misc/https/hostsFile.ts +66 -0
- package/package.json +1 -1
- package/render-utils/dist/observer.tsx.cache +2 -2
- package/storage/ArchivesDisk.d.ts +3 -6
- package/storage/ArchivesDisk.ts +26 -2
- package/storage/BulkDatabase2/BulkDatabaseReader.ts +1 -1
- package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +3 -3
- package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
- package/storage/IArchives.d.ts +37 -24
- package/storage/IArchives.ts +47 -62
- package/storage/LogMap.d.ts +56 -0
- package/storage/LogMap.ts +220 -0
- package/storage/archiveHelpers.d.ts +36 -0
- package/storage/archiveHelpers.ts +103 -0
- package/storage/backblaze.d.ts +7 -12
- package/storage/backblaze.ts +53 -48
- package/storage/dist/ArchivesDisk.ts.cache +28 -2
- package/storage/dist/FileFolderAPI.tsx.cache +2 -2
- package/storage/dist/IArchives.ts.cache +16 -52
- package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
- package/storage/dist/JSONStorage.ts.cache +2 -2
- package/storage/dist/LogMap.ts.cache +212 -0
- package/storage/dist/PendingManager.tsx.cache +2 -2
- package/storage/dist/TransactionStorage.ts.cache +2 -2
- package/storage/dist/backblaze.ts.cache +58 -44
- package/storage/dist/fileSystemPointer.ts.cache +2 -2
- package/storage/dist/remoteFileStorage.ts.cache +2 -2
- package/storage/remoteStorage/ArchivesDelayed.d.ts +66 -0
- package/storage/remoteStorage/ArchivesDelayed.ts +237 -0
- package/storage/remoteStorage/ArchivesRemote.d.ts +5 -6
- package/storage/remoteStorage/ArchivesRemote.ts +26 -5
- package/storage/remoteStorage/ArchivesUrl.d.ts +2 -5
- package/storage/remoteStorage/ArchivesUrl.ts +2 -2
- package/storage/remoteStorage/accessPage.tsx +12 -0
- package/storage/remoteStorage/accessStats.d.ts +1 -1
- package/storage/remoteStorage/accessStats.ts +3 -3
- package/storage/remoteStorage/blobStore.d.ts +162 -189
- package/storage/remoteStorage/blobStore.ts +495 -952
- package/storage/remoteStorage/bucketDisk.d.ts +24 -3
- package/storage/remoteStorage/bucketDisk.ts +56 -22
- package/storage/remoteStorage/certTrustModal.d.ts +1 -0
- package/storage/remoteStorage/certTrustModal.tsx +48 -0
- package/storage/remoteStorage/cliArgs.d.ts +2 -0
- package/storage/remoteStorage/cliArgs.ts +5 -0
- package/storage/remoteStorage/createArchives.d.ts +8 -7
- package/storage/remoteStorage/createArchives.ts +65 -26
- package/storage/remoteStorage/deployTakeover.ts +1 -1
- package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +220 -0
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +25 -5
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +3 -3
- package/storage/remoteStorage/dist/accessPage.tsx.cache +13 -3
- package/storage/remoteStorage/dist/accessStats.ts.cache +6 -6
- package/storage/remoteStorage/dist/blobStore.ts.cache +483 -965
- package/storage/remoteStorage/dist/bucketDisk.ts.cache +60 -29
- package/storage/remoteStorage/dist/certTrustModal.tsx.cache +55 -0
- package/storage/remoteStorage/dist/cliArgs.ts.cache +9 -4
- package/storage/remoteStorage/dist/createArchives.ts.cache +63 -26
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +5 -5
- package/storage/remoteStorage/dist/intermediateManagement.ts.cache +286 -0
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +122 -56
- package/storage/remoteStorage/dist/serverConfig.ts.cache +4 -4
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +7 -11
- package/storage/remoteStorage/dist/sourcesList.ts.cache +3 -6
- package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageController.ts.cache +27 -12
- package/storage/remoteStorage/dist/storageServer.ts.cache +27 -7
- package/storage/remoteStorage/dist/storageServerCli.ts.cache +7 -3
- package/storage/remoteStorage/dist/storageServerState.ts.cache +133 -696
- package/storage/remoteStorage/dist/storeConfig.ts.cache +52 -0
- package/storage/remoteStorage/dist/storePlan.ts.cache +110 -81
- package/storage/remoteStorage/dist/storeSources.ts.cache +51 -0
- package/storage/remoteStorage/dist/storeSync.ts.cache +650 -0
- package/storage/remoteStorage/dist/validation.ts.cache +14 -4
- package/storage/remoteStorage/intermediateManagement.d.ts +12 -0
- package/storage/remoteStorage/intermediateManagement.ts +264 -0
- package/storage/remoteStorage/remoteConfig.d.ts +32 -0
- package/storage/remoteStorage/remoteConfig.ts +115 -50
- package/storage/remoteStorage/serverConfig.d.ts +1 -1
- package/storage/remoteStorage/serverConfig.ts +1 -1
- package/storage/remoteStorage/sourceWrapper.ts +4 -8
- package/storage/remoteStorage/sourcesList.d.ts +0 -2
- package/storage/remoteStorage/sourcesList.ts +0 -3
- package/storage/remoteStorage/spec.md +18 -4
- package/storage/remoteStorage/storageController.d.ts +10 -0
- package/storage/remoteStorage/storageController.ts +29 -16
- package/storage/remoteStorage/storageServer.d.ts +2 -0
- package/storage/remoteStorage/storageServer.ts +28 -4
- package/storage/remoteStorage/storageServerCli.ts +5 -1
- package/storage/remoteStorage/storageServerState.d.ts +34 -21
- package/storage/remoteStorage/storageServerState.ts +147 -662
- package/storage/remoteStorage/storeConfig.d.ts +30 -0
- package/storage/remoteStorage/storeConfig.ts +62 -0
- package/storage/remoteStorage/storePlan.d.ts +29 -17
- package/storage/remoteStorage/storePlan.ts +112 -85
- package/storage/remoteStorage/storeSources.d.ts +11 -0
- package/storage/remoteStorage/storeSources.ts +47 -0
- package/storage/remoteStorage/storeSync.d.ts +53 -0
- package/storage/remoteStorage/storeSync.ts +632 -0
- package/storage/remoteStorage/validation.d.ts +2 -0
- package/storage/remoteStorage/validation.ts +10 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.runPlannedMerge = void 0;
|
|
4
4
|
const format_1 = require("socket-function/src/formatting/format");
|
|
@@ -317,4 +317,4 @@ async function executeBatch(plans, indexesPerSource, sources, sourceNames, write
|
|
|
317
317
|
return outputs;
|
|
318
318
|
}
|
|
319
319
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlTWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJCdWxrRGF0YWJhc2VNZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrRUFBcUU7QUFDckUsd0VBQXlFO0FBQ3pFLDZEQVE4QjtBQUU5QixxVEFBcVQ7QUFDclQsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFMUQsNkxBQTZMO0FBQzdMLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCLFNBQVMsUUFBUSxDQUFDLENBQVM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtRQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN6RCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7UUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RELENBQUM7QUE0Q0QsczlCQUFzOUI7QUFDLzhCLEtBQUssVUFBVSxlQUFlLENBQUMsTUFVckM7O0lBQ0csTUFBTSxlQUFlLEdBQUcsTUFBQSxNQUFNLENBQUMsZUFBZSxtQ0FBSSxzQ0FBaUIsQ0FBQztJQUNwRSxNQUFNLGdCQUFnQixHQUFHLE1BQUEsTUFBTSxDQUFDLGdCQUFnQixtQ0FBSSwwQkFBMEIsQ0FBQztJQUMvRSxNQUFNLEdBQUcsR0FB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RSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGJsdWUsIG1hZ2VudGEgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuaW1wb3J0IHtcbiAgICBCYXNlQnVsa0RhdGFiYXNlUmVhZGVyLFxuICAgIENvbHVtbkluZGV4LFxuICAgIGFzc2VtYmxlUGxhbm5lZEZpbGUsXG4gICAgY29sdW1uSW5kZXhCeXRlTGVuZ3RoLFxuICAgIEtFWV9DT0xVTU4sXG4gICAgVEFSR0VUX0ZJTEVfQllURVMsXG4gICAgVFlQRV9BQlNFTlRfVEFHLFxufSBmcm9tIFwiLi9CdWxrRGF0YWJhc2VGb3JtYXRcIjtcblxuLy8gRGVmYXVsdCB0b3RhbCBpbi1mbGlnaHQgYnVmZmVyIGJ1ZGdldCBmb3IgdGhlIGV4ZWN1dG9yOiBob3cgbXVjaCBvdXRwdXQgdmFsdWUtZGF0YSB3ZSBob2xkIGluIG1lbW9yeSBhdCBvbmNlLiBNdWx0aXBsZSBvdXRwdXQgZmlsZXMgKOKJpCBUQVJHRVRfRklMRV9CWVRFUyBlYWNoKSBhcmUgYnVpbHQgdG9nZXRoZXIgaW5zaWRlIHRoaXMgYnVkZ2V0IHNvIHJlYWRpbmcgaW5wdXRzIG9uY2UgYW1vcnRpemVzIHRoZWlyIEkvTyBhY3Jvc3Mgc2V2ZXJhbCBvdXRwdXRzLiBUaWdodGVyIGJ1ZGdldCDihpIgbW9yZSBwYXNzZXMsIGxlc3MgbWVtb3J5LlxuY29uc3QgREVGQVVMVF9PVVRQVVRfQkFUQ0hfQllURVMgPSAyICogMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vLyBQZXItdmFsdWUgb24tZGlzayBvdmVyaGVhZCAoNC1ieXRlIG9mZnNldCBlbnRyeSArIDEtYnl0ZSB0eXBlIHRhZykuIFVzZWQgZm9yIHRoZSBwYXJ0aXRpb24tY3V0IHNpemUgZXN0aW1hdGU7IHRoZSBleGVjdXRvciBkb2Vzbid0IHVzZSBpdCAob2Zmc2V0cy90eXBlcyBhcmUgc2l6ZWQgZXhhY3RseSBmcm9tIHRoZSBwbGFuKS5cbmNvbnN0IFBFUl9WQUxVRV9PVkVSSEVBRCA9IDU7XG5cbmZ1bmN0aW9uIGZtdEJ5dGVzKG46IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKG4gPCAxMDI0KSByZXR1cm4gbiArIFwiQlwiO1xuICAgIGlmIChuIDwgMTAyNCAqIDEwMjQpIHJldHVybiAobiAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIktCXCI7XG4gICAgaWYgKG4gPCAxMDI0ICogMTAyNCAqIDEwMjQpIHJldHVybiAobiAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJNQlwiO1xuICAgIHJldHVybiAobiAvIDEwMjQgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKSArIFwiR0JcIjtcbn1cblxuLy8gQSBjb250aWd1b3VzIGNvcHkgb3BlcmF0aW9uOiB0YWtlIGBzb3VyY2VFbmRSb3cgLSBzb3VyY2VTdGFydFJvd2AgY29uc2VjdXRpdmUgcm93cyBvZiBvbmUgc291cmNlIGNvbHVtbiwgc3BsaWNlIHRoZSByZXN1bHRpbmcgYnl0ZXMgaW50byB0aGUgb3V0cHV0IGNvbHVtbidzIGRhdGEgc2VjdGlvbiBhdCBvdXRwdXRCeXRlU3RhcnQuIEFkamFjZW50IHBlci1yb3cgZGVjaXNpb25zIGdldCBSTEUnZCBpbnRvIG9uZSBjb3B5IG9wIOKAlCBvbmUgc291cmNlLXNpZGUgcmVhZCArIG1lbWNweSBpbnN0ZWFkIG9mIG9uZSBwZXIgcm93LlxudHlwZSBDb3B5UnVuID0ge1xuICAgIHNvdXJjZUlkeDogbnVtYmVyO1xuICAgIHNvdXJjZVN0YXJ0Um93OiBudW1iZXI7XG4gICAgc291cmNlRW5kUm93OiBudW1iZXI7XG4gICAgb3V0cHV0Qnl0ZVN0YXJ0OiBudW1iZXI7XG4gICAgYnl0ZUxlbmd0aDogbnVtYmVyO1xufTtcblxudHlwZSBQbGFubmVkT3V0cHV0Q29sdW1uID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyBvZmZzZXRzW2ldLi5vZmZzZXRzW2krMV0gPSByb3cgaSdzIHZhbHVlIGJ5dGUgcmFuZ2UgaW4gdGhlIGNvbHVtbidzIGRhdGEgc2VjdGlvbi4gUG9wdWxhdGVkIGJ5IHRoZSBwbGFubmVyOyB0aGUgZXhlY3V0b3Igd3JpdGVzIGl0IHZlcmJhdGltIGludG8gdGhlIG91dHB1dCBjb2x1bW4gYmxvYi5cbiAgICBvZmZzZXRzOiBVaW50MzJBcnJheTtcbiAgICAvLyBQZXItcm93IHR5cGUgdGFnIChUWVBFX0FCU0VOVCBmb3IgZmFsbC10aHJvdWdoKS4gUG9wdWxhdGVkIGJ5IHRoZSBwbGFubmVyLlxuICAgIHR5cGVzOiBVaW50OEFycmF5O1xuICAgIC8vIFRvdGFsIGJ5dGVzIHRoZSBkYXRhIHNlY3Rpb24gd2lsbCBvY2N1cHkgPSBvZmZzZXRzW3Jvd0NvdW50XS5cbiAgICBkYXRhTGVuZ3RoOiBudW1iZXI7XG4gICAgLy8gUnVuLWxlbmd0aCBlbmNvZGVkIHBlci1yb3cgY29weSBkZWNpc2lvbnMsIGluIG91dHB1dCByb3cgb3JkZXIuIEFCU0VOVCByb3dzIGNvbnRyaWJ1dGUgbm8gcnVuLlxuICAgIHJ1bnM6IENvcHlSdW5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW5uZWRPdXRwdXRGaWxlID0ge1xuICAgIGtleXM6IHN0cmluZ1tdO1xuICAgIHRpbWVzOiBudW1iZXJbXTtcbiAgICBtaW5LZXk6IHN0cmluZztcbiAgICBtYXhLZXk6IHN0cmluZztcbiAgICBjb2x1bW5zOiBQbGFubmVkT3V0cHV0Q29sdW1uW107XG4gICAgLy8gU3VtIG9mIGFsbCBjb2x1bW4gZGF0YSBzaXplcyArIGluZGV4IG92ZXJoZWFkICsgaGVhZGVyIGd1ZXNzOyB1c2VkIHRvIGdyb3VwIG91dHB1dHMgaW50byBiYXRjaGVzLlxuICAgIGVzdGltYXRlZEZpbGVCeXRlczogbnVtYmVyO1xuICAgIC8vIHNvdXJjZUlkeCDihpIgbm9uLUFCU0VOVCBjZWxsIGNvdW50IGNvbnRyaWJ1dGVkIHRvIHRoaXMgb3V0cHV0IGZpbGUgKGZvciBsb2dnaW5nIFwid2hlcmUgaXQgY2FtZSBmcm9tXCIpLlxuICAgIHNvdXJjZUNvdW50czogTWFwPG51bWJlciwgbnVtYmVyPjtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW5uZWRNZXJnZU91dHB1dCA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWluS2V5OiBzdHJpbmc7XG4gICAgbWF4S2V5OiBzdHJpbmc7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBzaXplOiBudW1iZXI7XG4gICAgc291cmNlczogTWFwPHN0cmluZywgbnVtYmVyPjtcbn07XG5cbi8vIFBsYW4gYSBtZXJnZSBvdmVyIGBzb3VyY2VzYCBhbmQgZXhlY3V0ZSBpdCwgd3JpdGluZyBvbmUgb3IgbW9yZSBvdXRwdXQgZmlsZXMgdmlhIHRoZSBjYWxsZXIncyBgd3JpdGVGaWxlYC4gVHdvIHBoYXNlczog4oCiIFBsYW5uaW5nOiBsb2FkIG9ubHkgcGVyLWNvbHVtbiBJTkRFWEVTIChvZmZzZXRzICsgdHlwZXMg4oCUIH41IEIvcm93LCBzbWFsbCBldmVuIG9uIDIwR0IgY29sbGVjdGlvbnMpLCBkZXRlcm1pbmUgdGhlIHdpbm5pbmcgY2VsbCBwZXIgKGxpdmUga2V5LCBjb2x1bW4pIGJ5IG5ld2VzdCB3cml0ZS10aW1lICsgbm9uLUFCU0VOVCBmYWxsLXRocm91Z2gsIHNvcnQga2V5cywgcGFydGl0aW9uIGludG8gfnRhcmdldEZpbGVCeXRlcyBvdXRwdXQgZmlsZXMsIGFuZCBwcmUtY29tcHV0ZSBlYWNoIG91dHB1dCBjb2x1bW4ncyBvZmZzZXRzL3R5cGVzIGFycmF5cyBwbHVzIGEgcnVuLWxlbmd0aC1lbmNvZGVkIGNvcHkgcGxhbiAobm8gdmFsdWUgZGF0YSB0b3VjaGVkIHlldCkuIOKAoiBFeGVjdXRlOiBncm91cCBvdXRwdXRzIGludG8gfnRhcmdldEJhdGNoQnl0ZXMgYmF0Y2hlczsgcGVyIGJhdGNoLCBhbGxvY2F0ZSBjb2x1bW4gYmxvYnMgd2l0aCBvZmZzZXRzL3R5cGVzIGFscmVhZHkgZmlsbGVkIGluLCB0aGVuIGl0ZXJhdGUgaW5wdXQgc291cmNlcyBjb3B5aW5nIGNvbnRpZ3VvdXMgYnl0ZSBydW5zIHN0cmFpZ2h0IGludG8gdGhlIG91dHB1dCBidWZmZXJzLiBBIHNvdXJjZSB3aXRoIG5vIGNvbnRyaWJ1dGlvbiB0byB0aGlzIGJhdGNoIGlzIHNraXBwZWQgZW50aXJlbHkuIFJldHVybnMgdGhlIG5ldyBvdXRwdXQgZmlsZSBkZXNjcmlwdG9ycyBwbHVzIGFueSB0b21ic3RvbmVzIHdob3NlIG5ld2VzdCBldmVudCBpcyBzdGlsbCBhIGRlbGV0ZSAoY2FycmllZCBmb3J3YXJkIHdoZW4gb2xkZXIgZmlsZXMgb3V0c2lkZSB0aGUgbWVyZ2UgY291bGQgc3RpbGwgaG9sZCBhIG5vdy1zdGFsZSBzZXQgZm9yIHRoYXQga2V5KS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5QbGFubmVkTWVyZ2UoY29uZmlnOiB7XG4gICAgc291cmNlczogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcltdO1xuICAgIHNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBjb2xsZWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIHRhcmdldEZpbGVCeXRlcz86IG51bWJlcjtcbiAgICB0YXJnZXRCYXRjaEJ5dGVzPzogbnVtYmVyO1xuICAgIC8vIFNpbmsgZm9yIHN0ZXAgbGluZXMuIFdoZW4gb21pdHRlZCwgZmFsbHMgYmFjayB0byBhIGJsdWUtcHJlZml4ZWRcbiAgICAvLyBjb25zb2xlLmxvZyBzbyBzdGFuZGFsb25lIGNhbGxlcnMgc3RpbGwgZ2V0IGlkZW50aWZpYWJsZSBvdXRwdXQuXG4gICAgbG9nPzogKGxpbmU6IHN0cmluZykgPT4gdm9pZDtcbiAgICB3cml0ZUZpbGU6IChkYXRhOiBCdWZmZXIpID0+IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlciB9Pjtcbn0pOiBQcm9taXNlPHsgb3V0cHV0czogUGxhbm5lZE1lcmdlT3V0cHV0W107IGNhcnJpZWREZWxldGVzOiBNYXA8c3RyaW5nLCBudW1iZXI+OyB1c2VkU291cmNlTmFtZXM6IFNldDxzdHJpbmc+IH0+IHtcbiAgICBjb25zdCB0YXJnZXRGaWxlQnl0ZXMgPSBjb25maWcudGFyZ2V0RmlsZUJ5dGVzID8/IFRBUkdFVF9GSUxFX0JZVEVTO1xuICAgIGNvbnN0IHRhcmdldEJhdGNoQnl0ZXMgPSBjb25maWcudGFyZ2V0QmF0Y2hCeXRlcyA/PyBERUZBVUxUX09VVFBVVF9CQVRDSF9CWVRFUztcbiAgICBjb25zdCBsb2cgPSBjb25maWcubG9nID8/IChsaW5lID0+IGNvbnNvbGUubG9nKGAke2JsdWUoY29uZmlnLmNvbGxlY3Rpb25OYW1lKX0gJHtsaW5lfWApKTtcblxuICAgIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBQaGFzZSAxOiBwbGFuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBMb2FkIHBlci1zb3VyY2UgY29sdW1uIGluZGV4ZXMgRklSU1Qgc28gYSBmaWxlIHRoYXQncyBnb25lIChkZWxldGVkIGJldHdlZW4gY2FsbGVyJ3MgbGlzdEZpbGVzIGFuZCBub3cpIGdldHMgY2F1Z2h0IGhlcmUgYW5kIGV4Y2x1ZGVkIGZyb20gdGhlIG1lcmdlIGVudGlyZWx5LiBFYWNoIHNvdXJjZSdzIGxvYWQgaXMgd3JhcHBlZCBpbiBhIHRyeS9jYXRjaDsgb24gZmFpbHVyZSB3ZSBtYXJrIHRoZSBzb3VyY2UgYmFkLCBsb2cgYSBcInNraXBwZWRcIiBsaW5lLCBhbmQgdGhlIHJlc3Qgb2YgcGxhbm5pbmcgKyBleGVjdXRlIHByZXRlbmRzIHRoZSBzb3VyY2UgZG9lc24ndCBleGlzdC4gVGhlIGNhbGxlciBvbmx5IGRlbGV0ZXMgaW5wdXRzIHRoYXQgd2VyZSBhY3R1YWxseSB1c2VkLlxuICAgIGNvbnN0IHNvdXJjZU9rID0gbmV3IEFycmF5PGJvb2xlYW4+KGNvbmZpZy5zb3VyY2VzLmxlbmd0aCkuZmlsbCh0cnVlKTtcbiAgICBjb25zdCBpbmRleGVzUGVyU291cmNlOiBNYXA8c3RyaW5nLCBDb2x1bW5JbmRleD5bXSA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmZpZy5zb3VyY2VzLm1hcChhc3luYyAoc3JjLCBzaSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ29sdW1uSW5kZXg+KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzcmMuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmNvbHVtbiAhPT0gS0VZX0NPTFVNTilcbiAgICAgICAgICAgICAgICAubWFwKGFzeW5jIGMgPT4geyBtYXAuc2V0KGMuY29sdW1uLCBhd2FpdCBzcmMuZ2V0Q29sdW1uSW5kZXgoYy5jb2x1bW4pKTsgfSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBzb3VyY2VPa1tzaV0gPSBmYWxzZTtcbiAgICAgICAgICAgIGxvZyhgJHttYWdlbnRhKFwic2tpcHBlZFwiKX0gJHtjb25maWcuc291cmNlTmFtZXNbc2ldfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIC8vIFN0YWNrIGdvZXMgc3RyYWlnaHQgdG8gY29uc29sZSAobm90IHRoZSBidWZmZXJlZCBzdGVwIGxvZykgc28gdGhlIG1lcmdlIHN1bW1hcnkgc3RheXMgcmVhZGFibGUgYnV0IHdlIGNhbiBzdGlsbCB0cmFjZSB3aGVyZSB0aGUgZmFpbHVyZSBjYW1lIGZyb20uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtjb25maWcuY29sbGVjdGlvbk5hbWV9IHNraXBwZWQgJHtjb25maWcuc291cmNlTmFtZXNbc2ldfTpgLCAoZSBhcyBFcnJvcikuc3RhY2sgfHwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9KSk7XG4gICAgY29uc3QgdXNlZFNvdXJjZU5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICBpZiAoc291cmNlT2tbc2ldKSB1c2VkU291cmNlTmFtZXMuYWRkKGNvbmZpZy5zb3VyY2VOYW1lc1tzaV0pO1xuICAgIH1cblxuICAgIC8vIEFnZ3JlZ2F0ZSBrZXlUaW1lcyArIGRlbGV0ZVRpbWVzIGFjcm9zcyBHT09EIHNvdXJjZXMgb25seSAobWF4IHBlciBrZXkpLiBBIGJhZCBzb3VyY2UncyBjYWNoZWQgbWV0YWRhdGEgbWlnaHQgY2xhaW0gYSBrZXkgYXMgbmV3ZXN0LCBidXQgd2UgY2FuJ3QgYWN0dWFsbHkgcmVhZCBpdHMgY2VsbHMg4oCUIGxldHRpbmcgaXQgd2luIHRoZSB0aW1lIHJlc29sdXRpb24gd291bGQganVzdCBkcm9wIHRoYXQga2V5IG91dCBvZiB0aGUgb3V0cHV0LlxuICAgIGNvbnN0IGRlbGV0ZVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGNvbnN0IGtleVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCBjb25maWcuc291cmNlcy5sZW5ndGg7IHNpKyspIHtcbiAgICAgICAgaWYgKCFzb3VyY2VPa1tzaV0pIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzcmMgPSBjb25maWcuc291cmNlc1tzaV07XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHRdIG9mIHNyYy5rZXlUaW1lcykge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGtleVRpbWUuZ2V0KGspO1xuICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCB8fCB0ID4gcHJldikga2V5VGltZS5zZXQoaywgdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNyYy5kZWxldGVUaW1lcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdF0gb2Ygc3JjLmRlbGV0ZVRpbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGRlbGV0ZVRpbWUuZ2V0KGspO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2ID09PSB1bmRlZmluZWQgfHwgdCA+IHByZXYpIGRlbGV0ZVRpbWUuc2V0KGssIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGl2ZSBrZXlzIChuZXdlc3Qgc2V0IHN0cmljdGx5IG5ld2VyIHRoYW4gbmV3ZXN0IGRlbGV0ZSkgKyB0b21ic3RvbmVzIHRvIGNhcnJ5IGZvcndhcmQgKG5ld2VzdCBldmVudCBpcyBhIGRlbGV0ZSBhbmQgdGhlIG1lcmdlIGRvZXNuJ3QgaW5jbHVkZSB0aGUgb2xkZXN0IGRhdGEg4oCUIHRoYXQncyB0aGUgY2FsbGVyJ3MgY2FsbCkuXG4gICAgY29uc3QgbGl2ZUtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdF0gb2Yga2V5VGltZSkge1xuICAgICAgICBjb25zdCBkVCA9IGRlbGV0ZVRpbWUuZ2V0KGspID8/IC1JbmZpbml0eTtcbiAgICAgICAgaWYgKHQgPiBkVCkgbGl2ZUtleXMucHVzaChrKTtcbiAgICB9XG4gICAgY29uc3QgY2FycmllZERlbGV0ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgW2ssIGRUXSBvZiBkZWxldGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IHNUID0ga2V5VGltZS5nZXQoaykgPz8gLUluZmluaXR5O1xuICAgICAgICBpZiAoZFQgPj0gc1QpIGNhcnJpZWREZWxldGVzLnNldChrLCBkVCk7XG4gICAgfVxuXG4gICAgLy8gQWxsIGRpc3RpbmN0IHZhbHVlIGNvbHVtbnMgZnJvbSBHT09EIHNvdXJjZXMgKEtFWV9DT0xVTU4gZXhjbHVkZWQg4oCUIGl0J3MgYWRkZWQgYXQgZmlsZS1hc3NlbWJseSB0aW1lKS4gT3JkZXI6IGZpcnN0LXNlZW4sIG1hdGNoaW5nIHRoZSBleGlzdGluZyBidWlsZGVycy5cbiAgICBjb25zdCBhbGxDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW5Db2xzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICBpZiAoIXNvdXJjZU9rW3NpXSkgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBjb25maWcuc291cmNlc1tzaV0uY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGMuY29sdW1uID09PSBLRVlfQ09MVU1OIHx8IHNlZW5Db2xzLmhhcyhjLmNvbHVtbikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VlbkNvbHMuYWRkKGMuY29sdW1uKTtcbiAgICAgICAgICAgIGFsbENvbHVtbnMucHVzaChjLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgZWFjaCBsaXZlIGtleSwgZm9yIGVhY2ggY29sdW1uLCBmaW5kIHRoZSB3aW5uaW5nIHNvdXJjZTogYW1vbmcgc291cmNlcyB0aGF0IGhhdmUgdGhpcyBrZXksIHRoZSBvbmUgd2hvc2Uga2V5VGltZSBpcyBsYXJnZXN0IEFORCB3aG9zZSBjb2x1bW4taW5kZXggcmVwb3J0cyBub24tQUJTRU5ULiBSZWNvcmQgc291cmNlICsgc291cmNlUm93ICsgYnl0ZUxlbiArIHR5cGUgc28gdGhlIHBsYW5uZXIgY2FuIHNpemUgb2Zmc2V0cyBhbmQgdGhlIGV4ZWN1dG9yIGNhbiBjb3B5IHRoZSBieXRlcy5cbiAgICB0eXBlIENlbGxDaG9pY2UgPSB7IHNvdXJjZUlkeDogbnVtYmVyOyBzb3VyY2VSb3c6IG51bWJlcjsgYnl0ZUxlbjogbnVtYmVyOyB0eXBlOiBudW1iZXIgfTtcbiAgICBjb25zdCBjZWxsc1BlcktleSA9IG5ldyBNYXA8c3RyaW5nLCAoQ2VsbENob2ljZSB8IHVuZGVmaW5lZClbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBsaXZlS2V5cykge1xuICAgICAgICBjb25zdCBjZWxsczogKENlbGxDaG9pY2UgfCB1bmRlZmluZWQpW10gPSBuZXcgQXJyYXkoYWxsQ29sdW1ucy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBjaSA9IDA7IGNpIDwgYWxsQ29sdW1ucy5sZW5ndGg7IGNpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGFsbENvbHVtbnNbY2ldO1xuICAgICAgICAgICAgbGV0IGJlc3RUaW1lID0gLUluZmluaXR5O1xuICAgICAgICAgICAgbGV0IGJlc3Q6IENlbGxDaG9pY2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgY29uZmlnLnNvdXJjZXMubGVuZ3RoOyBzaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VPa1tzaV0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGNvbmZpZy5zb3VyY2VzW3NpXTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gc3JjLmtleVRpbWVzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lkeCA9IHNyYy5yb3dPZktleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChyb3dJZHggPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gaW5kZXhlc1BlclNvdXJjZVtzaV0uZ2V0KGNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpZHgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBpZHgudHlwZXNbcm93SWR4XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gVFlQRV9BQlNFTlRfVEFHKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAodCA+IGJlc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RUaW1lID0gdDtcbiAgICAgICAgICAgICAgICAgICAgYmVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkeDogc2ksXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSb3c6IHJvd0lkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVMZW46IGlkeC5vZmZzZXRzW3Jvd0lkeCArIDFdIC0gaWR4Lm9mZnNldHNbcm93SWR4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbHNbY2ldID0gYmVzdDtcbiAgICAgICAgfVxuICAgICAgICBjZWxsc1BlcktleS5zZXQoa2V5LCBjZWxscyk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBsaXZlIGtleXMgbGV4aWNvZ3JhcGhpY2FsbHkgc28gZWFjaCBvdXRwdXQgZmlsZSBpcyBrZXktY29udGlndW91cyAodGlnaHQgbWluS2V5L21heEtleSArIGZhc3Qgc2luZ2xlLWtleSByZWFkcyB2aWEgaGVhZGVyIHNraXApLlxuICAgIGxpdmVLZXlzLnNvcnQoKGEsIGIpID0+IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcblxuICAgIC8vIFBlci1rZXkgZXN0aW1hdGVkIGJ5dGVzIGZvciBwYXJ0aXRpb24gY3V0dGluZzogS0VZX0NPTFVNTiBjZWxsICsgcGVyIHZhbHVlLWNvbHVtbiBjZWxsIChieXRlcyArIDVCIG92ZXJoZWFkKSArIFRJTUVfQ09MVU1OIGNlbGwuIFJvdWdoIOKAlCBvbmx5IG5lZWRzIHRvIGtlZXAgZWFjaCBvdXRwdXQgbmVhciB0aGUgdGFyZ2V0LlxuICAgIGZ1bmN0aW9uIGtleVRvdGFsQnl0ZXMoa2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjZWxscyA9IGNlbGxzUGVyS2V5LmdldChrZXkpITtcbiAgICAgICAgbGV0IHRvdGFsID0ga2V5Lmxlbmd0aCAqIDIgKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBjZWxscykgdG90YWwgKz0gKGNlbGwgPyBjZWxsLmJ5dGVMZW4gOiAwKSArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICAgICAgdG90YWwgKz0gOCArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgIH1cblxuICAgIC8vIFdhbGsgc29ydGVkIGtleXMsIGN1dCBlYWNoIGZpbGUgd2hlbiBhY2N1bXVsYXRlZCBieXRlcyB3b3VsZCBleGNlZWQgdGFyZ2V0RmlsZUJ5dGVzLiBBIHNpbmdsZSBrZXkgbGFyZ2VyIHRoYW4gdGhlIHRhcmdldCBzdGlsbCBiZWNvbWVzIGl0cyBvd24gKG92ZXJzaXplZCkgZmlsZSDigJQgd2UgbmV2ZXIgc3BsaXQgd2l0aGluIGEga2V5LlxuICAgIGNvbnN0IGZpbGVLZXlSYW5nZXM6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfVtdID0gW107XG4gICAge1xuICAgICAgICBsZXQgY2h1bmtTdGFydCA9IDA7XG4gICAgICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXZlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2IgPSBrZXlUb3RhbEJ5dGVzKGxpdmVLZXlzW2ldKTtcbiAgICAgICAgICAgIGlmIChpID4gY2h1bmtTdGFydCAmJiBjaHVua0J5dGVzICsga2IgPiB0YXJnZXRGaWxlQnl0ZXMpIHtcbiAgICAgICAgICAgICAgICBmaWxlS2V5UmFuZ2VzLnB1c2goeyBzdGFydDogY2h1bmtTdGFydCwgZW5kOiBpIH0pO1xuICAgICAgICAgICAgICAgIGNodW5rU3RhcnQgPSBpO1xuICAgICAgICAgICAgICAgIGNodW5rQnl0ZXMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2h1bmtCeXRlcyArPSBrYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGl2ZUtleXMubGVuZ3RoID4gY2h1bmtTdGFydCkgZmlsZUtleVJhbmdlcy5wdXNoKHsgc3RhcnQ6IGNodW5rU3RhcnQsIGVuZDogbGl2ZUtleXMubGVuZ3RoIH0pO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHBlci1maWxlIHBsYW5zOiBvZmZzZXRzL3R5cGVzL2NvcHktcnVucyBwZXIgY29sdW1uLlxuICAgIGNvbnN0IHBsYW5zID0gZmlsZUtleVJhbmdlcy5tYXAocmFuZ2UgPT4gYnVpbGRPdXRwdXRQbGFuKHJhbmdlLCBsaXZlS2V5cywgY2VsbHNQZXJLZXksIGFsbENvbHVtbnMsIGtleVRpbWUpKTtcblxuICAgIGxvZyhgJHttYWdlbnRhKFwicGxhblwiKX06ICR7Zm9ybWF0TnVtYmVyKGxpdmVLZXlzLmxlbmd0aCl9IGxpdmUga2V5cywgJHtwbGFucy5sZW5ndGh9IG91dHB1dCBmaWxlKHMpLCAke2Zvcm1hdE51bWJlcihjYXJyaWVkRGVsZXRlcy5zaXplKX0gdG9tYnN0b25lcyBjYXJyaWVkYCk7XG5cbiAgICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgUGhhc2UgMjogZXhlY3V0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgR3JvdXAgb3V0cHV0IGZpbGVzIGludG8gYmF0Y2hlcyB0aGF0IGZpdCB3aXRoaW4gdGFyZ2V0QmF0Y2hCeXRlcyBzbyB3ZSByZWFkIGlucHV0cyBvbmNlIHBlciBiYXRjaCAoYW5kIHNraXAgaW5wdXRzIHRoYXQgY29udHJpYnV0ZSBub3RoaW5nIHRvIHRoaXMgYmF0Y2gpLlxuICAgIGNvbnN0IGJhdGNoZXM6IFBsYW5uZWRPdXRwdXRGaWxlW11bXSA9IFtdO1xuICAgIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgd2hpbGUgKHN0YXJ0IDwgcGxhbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgZW5kID0gc3RhcnQgKyAxO1xuICAgICAgICAgICAgbGV0IHRvdGFsID0gcGxhbnNbc3RhcnRdLmVzdGltYXRlZEZpbGVCeXRlcztcbiAgICAgICAgICAgIHdoaWxlIChlbmQgPCBwbGFucy5sZW5ndGggJiYgdG90YWwgKyBwbGFuc1tlbmRdLmVzdGltYXRlZEZpbGVCeXRlcyA8PSB0YXJnZXRCYXRjaEJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gcGxhbnNbZW5kXS5lc3RpbWF0ZWRGaWxlQnl0ZXM7XG4gICAgICAgICAgICAgICAgZW5kKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYXRjaGVzLnB1c2gocGxhbnMuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICAgICAgc3RhcnQgPSBlbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzOiBQbGFubmVkTWVyZ2VPdXRwdXRbXSA9IFtdO1xuICAgIGZvciAobGV0IGJpID0gMDsgYmkgPCBiYXRjaGVzLmxlbmd0aDsgYmkrKykge1xuICAgICAgICBjb25zdCBiYXRjaCA9IGJhdGNoZXNbYmldO1xuICAgICAgICBjb25zdCBiYXRjaEJ5dGVzID0gYmF0Y2gucmVkdWNlKChhLCBwKSA9PiBhICsgcC5lc3RpbWF0ZWRGaWxlQnl0ZXMsIDApO1xuICAgICAgICBsb2coYCR7bWFnZW50YShcImJhdGNoXCIpfSAke2JpICsgMX0vJHtiYXRjaGVzLmxlbmd0aH06ICR7YmF0Y2gubGVuZ3RofSBvdXRwdXQgZmlsZShzKSwgfiR7Zm10Qnl0ZXMoYmF0Y2hCeXRlcyl9IGJ1ZGdldGApO1xuICAgICAgICBjb25zdCBiYXRjaE91dHB1dHMgPSBhd2FpdCBleGVjdXRlQmF0Y2goYmF0Y2gsIGluZGV4ZXNQZXJTb3VyY2UsIGNvbmZpZy5zb3VyY2VzLCBjb25maWcuc291cmNlTmFtZXMsIGNvbmZpZy53cml0ZUZpbGUsIGxvZyk7XG4gICAgICAgIG91dHB1dHMucHVzaCguLi5iYXRjaE91dHB1dHMpO1xuICAgIH1cbiAgICBjb25zdCB3cml0dGVuQnl0ZXMgPSBvdXRwdXRzLnJlZHVjZSgoYSwgbykgPT4gYSArIG8uc2l6ZSwgMCk7XG4gICAgbG9nKGAke21hZ2VudGEoXCJleGVjdXRlXCIpfTogJHtvdXRwdXRzLmxlbmd0aH0gZmlsZShzKSwgJHtmbXRCeXRlcyh3cml0dGVuQnl0ZXMpfSB3cml0dGVuYCk7XG5cbiAgICByZXR1cm4geyBvdXRwdXRzLCBjYXJyaWVkRGVsZXRlcywgdXNlZFNvdXJjZU5hbWVzIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkT3V0cHV0UGxhbihcbiAgICByYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9LFxuICAgIGxpdmVLZXlzOiBzdHJpbmdbXSxcbiAgICBjZWxsc1BlcktleTogTWFwPHN0cmluZywgKHsgc291cmNlSWR4OiBudW1iZXI7IHNvdXJjZVJvdzogbnVtYmVyOyBieXRlTGVuOiBudW1iZXI7IHR5cGU6IG51bWJlciB9IHwgdW5kZWZpbmVkKVtdPixcbiAgICBhbGxDb2x1bW5zOiBzdHJpbmdbXSxcbiAgICBrZXlUaW1lOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuKTogUGxhbm5lZE91dHB1dEZpbGUge1xuICAgIGNvbnN0IGtleXMgPSBsaXZlS2V5cy5zbGljZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICBjb25zdCByb3dDb3VudCA9IGtleXMubGVuZ3RoO1xuICAgIGNvbnN0IHRpbWVzID0ga2V5cy5tYXAoayA9PiBrZXlUaW1lLmdldChrKSA/PyAwKTtcbiAgICBjb25zdCBzb3VyY2VDb3VudHMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuXG4gICAgY29uc3QgY29sdW1uczogUGxhbm5lZE91dHB1dENvbHVtbltdID0gYWxsQ29sdW1ucy5tYXAoKGNvbE5hbWUsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldHMgPSBuZXcgVWludDMyQXJyYXkocm93Q291bnQgKyAxKTtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCk7XG4gICAgICAgIGNvbnN0IHJ1bnM6IENvcHlSdW5bXSA9IFtdO1xuICAgICAgICBsZXQgb3V0cHV0Qnl0ZSA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50UnVuOiBDb3B5UnVuIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxzUGVyS2V5LmdldChrZXlzW2ldKSFbY2ldO1xuICAgICAgICAgICAgb2Zmc2V0c1tpXSA9IG91dHB1dEJ5dGU7XG4gICAgICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IFRZUEVfQUJTRU5UX1RBRztcbiAgICAgICAgICAgICAgICAvLyBBQlNFTlQgY29udHJpYnV0ZXMgbm90aGluZyB0byB0aGUgZGF0YSBzZWN0aW9uIGFuZCBicmVha3MgYW55IGV4dGVuZGluZyBydW4uXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSdW4pIHsgcnVucy5wdXNoKGN1cnJlbnRSdW4pOyBjdXJyZW50UnVuID0gdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0eXBlc1tpXSA9IGNlbGwudHlwZTtcbiAgICAgICAgICAgIHNvdXJjZUNvdW50cy5zZXQoY2VsbC5zb3VyY2VJZHgsIChzb3VyY2VDb3VudHMuZ2V0KGNlbGwuc291cmNlSWR4KSA/PyAwKSArIDEpO1xuICAgICAgICAgICAgLy8gUkxFOiBleHRlbmQgdGhlIGN1cnJlbnQgcnVuIGlmZiB0aGUgbmV4dCBjZWxsIGlzIHRoZSBuZXh0IHJvdyBvZiB0aGUgc2FtZSBzb3VyY2UgKGl0cyBzb3VyY2Utc2lkZSBieXRlcyBzaXQgaW1tZWRpYXRlbHkgYWZ0ZXIsIHNvIG9uZSByZWFkIHN1ZmZpY2VzKSBBTkQgbm9uLUFCU0VOVCAod2UgbmV2ZXIgbGFuZGVkIGluIHRoZSBicmVhay1wYXRoIGFib3ZlKS5cbiAgICAgICAgICAgIGlmIChjdXJyZW50UnVuICYmIGN1cnJlbnRSdW4uc291cmNlSWR4ID09PSBjZWxsLnNvdXJjZUlkeCAmJiBjdXJyZW50UnVuLnNvdXJjZUVuZFJvdyA9PT0gY2VsbC5zb3VyY2VSb3cpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UnVuLnNvdXJjZUVuZFJvdyA9IGNlbGwuc291cmNlUm93ICsgMTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UnVuLmJ5dGVMZW5ndGggKz0gY2VsbC5ieXRlTGVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJ1bikgcnVucy5wdXNoKGN1cnJlbnRSdW4pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSdW4gPSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkeDogY2VsbC5zb3VyY2VJZHgsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXJ0Um93OiBjZWxsLnNvdXJjZVJvdyxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRW5kUm93OiBjZWxsLnNvdXJjZVJvdyArIDEsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dEJ5dGVTdGFydDogb3V0cHV0Qnl0ZSxcbiAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogY2VsbC5ieXRlTGVuLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXRCeXRlICs9IGNlbGwuYnl0ZUxlbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFJ1bikgcnVucy5wdXNoKGN1cnJlbnRSdW4pO1xuICAgICAgICBvZmZzZXRzW3Jvd0NvdW50XSA9IG91dHB1dEJ5dGU7XG5cbiAgICAgICAgcmV0dXJuIHsgbmFtZTogY29sTmFtZSwgb2Zmc2V0cywgdHlwZXMsIGRhdGFMZW5ndGg6IG91dHB1dEJ5dGUsIHJ1bnMgfTtcbiAgICB9KTtcblxuICAgIC8vIEZpbGUgc2l6ZSBlc3RpbWF0ZTogS0VZX0NPTFVNTiBibG9iICsgdmFsdWUgY29sdW1uIGJsb2JzICsgVElNRV9DT0xVTU4gYmxvYiArIGhlYWRlciBndWVzcy4gVXNlZCB0byBiYXRjaCBvdXRwdXQgZmlsZXM7IG9ubHkgbmVlZHMgdG8gYmUgY2xvc2UsIG5vdCBleGFjdC5cbiAgICBsZXQgZXN0aW1hdGVkRmlsZUJ5dGVzID0gNCArIDIwNDg7XG4gICAgbGV0IGtleUJ5dGVzID0gMDtcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykga2V5Qnl0ZXMgKz0gay5sZW5ndGggKiAyO1xuICAgIGVzdGltYXRlZEZpbGVCeXRlcyArPSBjb2x1bW5JbmRleEJ5dGVMZW5ndGgocm93Q291bnQpICsga2V5Qnl0ZXM7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykgZXN0aW1hdGVkRmlsZUJ5dGVzICs9IGNvbHVtbkluZGV4Qnl0ZUxlbmd0aChyb3dDb3VudCkgKyBjb2wuZGF0YUxlbmd0aDtcbiAgICBlc3RpbWF0ZWRGaWxlQnl0ZXMgKz0gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKHJvd0NvdW50KSArIHJvd0NvdW50ICogODtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleXMsXG4gICAgICAgIHRpbWVzLFxuICAgICAgICBtaW5LZXk6IGtleXNbMF0gPz8gXCJcIixcbiAgICAgICAgbWF4S2V5OiBrZXlzW3Jvd0NvdW50IC0gMV0gPz8gXCJcIixcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgZXN0aW1hdGVkRmlsZUJ5dGVzLFxuICAgICAgICBzb3VyY2VDb3VudHMsXG4gICAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJhdGNoKFxuICAgIHBsYW5zOiBQbGFubmVkT3V0cHV0RmlsZVtdLFxuICAgIGluZGV4ZXNQZXJTb3VyY2U6IE1hcDxzdHJpbmcsIENvbHVtbkluZGV4PltdLFxuICAgIHNvdXJjZXM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXSxcbiAgICBzb3VyY2VOYW1lczogc3RyaW5nW10sXG4gICAgd3JpdGVGaWxlOiAoZGF0YTogQnVmZmVyKSA9PiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBzaXplOiBudW1iZXIgfT4sXG4gICAgbG9nOiAobGluZTogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxQbGFubmVkTWVyZ2VPdXRwdXRbXT4ge1xuICAgIC8vIEFsbG9jYXRlIG9uZSBiaWcgYnVmZmVyIHBlciAob3V0cHV0IGZpbGUsIGNvbHVtbikg4oCUIG9mZnNldHMgKyB0eXBlcyBhcmUgd3JpdHRlbiBpbW1lZGlhdGVseSBmcm9tIHRoZSBwbGFuLCB0aGUgZGF0YSBzZWN0aW9uIGlzIGZpbGxlZCBiZWxvdyBieSB0aGUgcGVyLXNvdXJjZSBjb3B5IGxvb3AuXG4gICAgdHlwZSBDb2x1bW5CdWZmZXIgPSB7IG5hbWU6IHN0cmluZzsgYmxvYjogQnVmZmVyOyBkYXRhU3RhcnQ6IG51bWJlciB9O1xuICAgIGNvbnN0IGJsb2JzUGVyRmlsZTogQ29sdW1uQnVmZmVyW11bXSA9IHBsYW5zLm1hcChwbGFuID0+IHBsYW4uY29sdW1ucy5tYXAoY29sID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhTaXplID0gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKGNvbC5vZmZzZXRzLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCBibG9iID0gQnVmZmVyLmFsbG9jKGluZGV4U2l6ZSArIGNvbC5kYXRhTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2wub2Zmc2V0cy5sZW5ndGg7IGkrKykgYmxvYi53cml0ZVVJbnQzMkxFKGNvbC5vZmZzZXRzW2ldLCBpICogNCk7XG4gICAgICAgIGJsb2Iuc2V0KGNvbC50eXBlcywgNCAqIGNvbC5vZmZzZXRzLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB7IG5hbWU6IGNvbC5uYW1lLCBibG9iLCBkYXRhU3RhcnQ6IGluZGV4U2l6ZSB9O1xuICAgIH0pKTtcblxuICAgIC8vIEZvciBlYWNoIHNvdXJjZSwgY29weSBpdHMgYnl0ZSBydW5zIGludG8gZXZlcnkgb3V0cHV0IGNvbHVtbiB3aG9zZSBwbGFuIHJlZmVyZW5jZXMgaXQuIEEgc291cmNlIHRoYXQncyBub3QgcmVmZXJlbmNlZCBieSBhbnkgY29sdW1uIGluIHRoaXMgYmF0Y2ggaXMgc2tpcHBlZCBlbnRpcmVseSDigJQgdGhhdCdzIHRoZSBwb2ludCBvZiB0aGUgYmF0Y2ggc2hhcGU6IHJlYWQgMjBHQiBvZiBpbnB1dHMgb25seSBvbmNlIGZvciB0aGUgd2hvbGUgcGFzcywgbm90IG9uY2UgcGVyIG91dHB1dC5cbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgc291cmNlcy5sZW5ndGg7IHNpKyspIHtcbiAgICAgICAgbGV0IGNvbnRyaWJ1dGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGggJiYgIWNvbnRyaWJ1dGVzOyBmaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBwbGFuc1tmaV0uY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb2wucnVucy5zb21lKHIgPT4gci5zb3VyY2VJZHggPT09IHNpKSkgeyBjb250cmlidXRlcyA9IHRydWU7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250cmlidXRlcykgY29udGludWU7XG5cbiAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGg7IGZpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBsYW4gPSBwbGFuc1tmaV07XG4gICAgICAgICAgICBmb3IgKGxldCBjaSA9IDA7IGNpIDwgcGxhbi5jb2x1bW5zLmxlbmd0aDsgY2krKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHBsYW4uY29sdW1uc1tjaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvYnNQZXJGaWxlW2ZpXVtjaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBpbmRleGVzUGVyU291cmNlW3NpXS5nZXQoY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sSW5kZXgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcnVuIG9mIGNvbC5ydW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChydW4uc291cmNlSWR4ICE9PSBzaSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgY29sSW5kZXgucmVhZFZhbHVlQnl0ZXMocnVuLnNvdXJjZVN0YXJ0Um93LCBydW4uc291cmNlRW5kUm93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gcnVuLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtydW4uYnl0ZUxlbmd0aH0gYnl0ZXMgZnJvbSBzb3VyY2UgIyR7c2l9ICgke3NvdXJjZU5hbWVzW3NpXX0pIGNvbHVtbiAke2NvbC5uYW1lfSByb3dzIFske3J1bi5zb3VyY2VTdGFydFJvd30sICR7cnVuLnNvdXJjZUVuZFJvd30pLCBnb3QgJHtieXRlcy5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnl0ZXMuY29weSh0YXJnZXQuYmxvYiwgdGFyZ2V0LmRhdGFTdGFydCArIHJ1bi5vdXRwdXRCeXRlU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICBieXRlc1JlYWQgKz0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYCR7bWFnZW50YShcImlucHV0XCIpfSAke3NpICsgMX0vJHtzb3VyY2VzLmxlbmd0aH0gJHtzb3VyY2VOYW1lc1tzaV19OiAke2ZtdEJ5dGVzKGJ5dGVzUmVhZCl9IHJlYWRgKTtcbiAgICB9XG5cbiAgICAvLyBBc3NlbWJsZSArIHdyaXRlIGVhY2ggb3V0cHV0IGZpbGUgaW4gdGhpcyBiYXRjaC5cbiAgICBjb25zdCBvdXRwdXRzOiBQbGFubmVkTWVyZ2VPdXRwdXRbXSA9IFtdO1xuICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGg7IGZpKyspIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHBsYW5zW2ZpXTtcbiAgICAgICAgY29uc3QgdmFsdWVDb2x1bW5zID0gYmxvYnNQZXJGaWxlW2ZpXS5tYXAoYiA9PiAoeyBuYW1lOiBiLm5hbWUsIGJsb2I6IGIuYmxvYiB9KSk7XG4gICAgICAgIGNvbnN0IGZpbGVCdWYgPSBhc3NlbWJsZVBsYW5uZWRGaWxlKHsgdmFsdWVDb2x1bW5zLCBrZXlzOiBwbGFuLmtleXMsIHRpbWVzOiBwbGFuLnRpbWVzIH0pO1xuICAgICAgICBjb25zdCB7IG5hbWUsIHNpemUgfSA9IGF3YWl0IHdyaXRlRmlsZShmaWxlQnVmKTtcbiAgICAgICAgY29uc3Qgc291cmNlc05hbWVkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBbc2ksIG5dIG9mIHBsYW4uc291cmNlQ291bnRzKSBzb3VyY2VzTmFtZWQuc2V0KHNvdXJjZU5hbWVzW3NpXSwgbik7XG4gICAgICAgIGxvZyhgJHttYWdlbnRhKFwib3V0cHV0XCIpfSAke2ZpICsgMX0vJHtwbGFucy5sZW5ndGh9OiAke2Zvcm1hdE51bWJlcihwbGFuLmtleXMubGVuZ3RoKX0gcm93cyBmcm9tICR7cGxhbi5zb3VyY2VDb3VudHMuc2l6ZX0gaW5wdXQocyksICR7Zm10Qnl0ZXMoc2l6ZSl9YCk7XG4gICAgICAgIG91dHB1dHMucHVzaCh7IG5hbWUsIG1pbktleTogcGxhbi5taW5LZXksIG1heEtleTogcGxhbi5tYXhLZXksIHJvd0NvdW50OiBwbGFuLmtleXMubGVuZ3RoLCBzaXplLCBzb3VyY2VzOiBzb3VyY2VzTmFtZWQgfSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRzO1xufVxuIl19
|
|
320
|
-
/* _JS_SOURCE_HASH = "
|
|
320
|
+
/* _JS_SOURCE_HASH = "b213dbfe353056b8f8767f975cd4f465cd0b1151a7a1ee60d00084fb70feba56"; */
|
|
@@ -162,7 +162,7 @@ class BulkDatabaseReader {
|
|
|
162
162
|
}
|
|
163
163
|
return { key, value: r.value, time: r.time };
|
|
164
164
|
}
|
|
165
|
-
// ──
|
|
165
|
+
// ── synchronized (reactive) reads ────────────────────────────────────────────────────────────────────────
|
|
166
166
|
getSingleFieldSync(key, column) {
|
|
167
167
|
var _a;
|
|
168
168
|
return (_a = this.getSingleFieldObjSync(key, column)) === null || _a === void 0 ? void 0 : _a.value;
|
|
@@ -294,5 +294,5 @@ class BulkDatabaseReader {
|
|
|
294
294
|
}
|
|
295
295
|
exports.BulkDatabaseReader = BulkDatabaseReader;
|
|
296
296
|
exports.READER_SIGNALS = { LOAD: LOAD_SIGNAL, OVERLAY: OVERLAY_SIGNAL };
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlUmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUF1RDtBQUV2RCxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztBQUM5QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyxTQUFTLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNsQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUEyUVEsNEJBQVE7QUFsUWpCLDJVQUEyVTtBQUMzVSxNQUFhLGtCQUFrQjtJQUMzQixZQUE2QixHQUFpQjtRQUFqQixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBRzlCLFlBQU8sR0FBRyxJQUFJLDJCQUFZLEVBQUUsQ0FBQztRQUVyQyxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBMkQsQ0FBQztRQUVqRixtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFbkMsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBb0Q1QixtTEFBbUw7UUFDM0ssb0JBQWUsR0FBRyxDQUFDLENBQUM7SUFoRXNCLENBQUM7SUFhbkQsSUFBSSxJQUFJLEtBQWEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsSUFBSSxJQUFJLEtBQW1CLE9BQU8sSUFBSSxDQUFDLEdB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TyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztDQUNKO0FBOVBELGdEQThQQztBQUVZLFFBQUEsY0FBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2FkZWRJbmRleCB9IGZyb20gXCIuL0xvYWRlZEluZGV4XCI7XG5pbXBvcnQgeyBERUxFVEVELCBXcml0ZU92ZXJsYXkgfSBmcm9tIFwiLi9Xcml0ZU92ZXJsYXlcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3RpdmVEZXBzIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlQmFzZVwiO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGJsdWUsIHJlZCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvbG9nQ29sb3JzXCI7XG5cbmNvbnN0IE5VTEwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xuY29uc3QgTE9BRF9TSUdOQUwgPSBOVUxMICsgXCJsb2FkXCI7XG5jb25zdCBPVkVSTEFZX1NJR05BTCA9IE5VTEwgKyBcIm92ZXJsYXlcIjtcbmNvbnN0IENPTVBBQ1RJTkdfU0lHTkFMID0gTlVMTCArIFwiY29tcGFjdGluZ1wiO1xuY29uc3QgVFJJR0dFUl9USFJPVFRMRV9GSVJTVF9TVEVQX01TID0gMTY7XG5cbmZ1bmN0aW9uIG51bGxKb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYSArIE5VTEwgKyBiO1xufVxuXG5leHBvcnQgdHlwZSBSZWFkZXJDb25maWcgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlcHM6IFJlYWN0aXZlRGVwcztcbiAgICAvLyBTZWUgQnVsa0RhdGFiYXNlMkNvbmZpZy5tYXhUcmlnZ2VyVGhyb3R0bGVNcy5cbiAgICBtYXhUcmlnZ2VyVGhyb3R0bGVNcz86IG51bWJlcjtcbn07XG5cbi8vIE93bnMgdGhlIGN1cnJlbnQgTG9hZGVkSW5kZXggYW5kIFdyaXRlT3ZlcmxheSBhbmQgc2VydmVzIGV2ZXJ5IHJlYWQgKGFzeW5jICsgc3luYyByZWFjdGl2ZSkuIEFwcGx5IHdyaXRlcy9kZWxldGVzIHRocm91Z2ggYXBwbHlXcml0ZS9hcHBseURlbGV0ZSBzbyB0aGUgcmlnaHQgc2lnbmFscyBmaXJlLiBUaGUgaG9zdCBzd2FwcyBpbiBhIGZyZXNoIExvYWRlZEluZGV4IGF0b21pY2FsbHkgdmlhIHNldEluZGV4IG9uY2UgdGhlIG5ldyBvbmUgaGFzIGZ1bGx5IGJ1aWx0IOKAlCBubyBsYXp5IHJlYnVpbGQgb24gdGhlIG5leHQgcmVhZCwgbm8gc3luY2hyb25vdXMgbGFnIHNwaWtlLlxuZXhwb3J0IGNsYXNzIEJ1bGtEYXRhYmFzZVJlYWRlcjxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9PiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZmc6IFJlYWRlckNvbmZpZykgeyB9XG5cbiAgICBwdWJsaWMgaW5kZXg6IExvYWRlZEluZGV4PFQ+IHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyByZWFkb25seSBvdmVybGF5ID0gbmV3IFdyaXRlT3ZlcmxheSgpO1xuXG4gICAgcHJpdmF0ZSBkYXRhR2VuID0gMDtcbiAgICBwcml2YXRlIGNvbHVtbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdPigpO1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nU2lnbmFscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgdHJpZ2dlclRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGN1cnJlbnRUcmlnZ2VyRGVsYXkgPSAwO1xuICAgIHByaXZhdGUgbGFzdFRyaWdnZXJUaW1lID0gMDtcblxuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNmZy5uYW1lOyB9XG4gICAgZ2V0IGRlcHMoKTogUmVhY3RpdmVEZXBzIHsgcmV0dXJuIHRoaXMuY2ZnLmRlcHM7IH1cbiAgICBnZXQgZGF0YUdlbmVyYXRpb24oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZGF0YUdlbjsgfVxuXG4gICAgc2V0SW5kZXgobmV3SW5kZXg6IExvYWRlZEluZGV4PFQ+LCBvcHRpb25zOiB7IGRyb3BTdGFsZUZhbGxiYWNrPzogYm9vbGVhbiB9ID0ge30pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmIChwcmV2ICYmICFvcHRpb25zLmRyb3BTdGFsZUZhbGxiYWNrKSBuZXdJbmRleC5pbmhlcml0U3RhbGVGcm9tKHByZXYpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLmJhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXdJbmRleDtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheS5zd2VlcENvdmVyZWQoa2V5ID0+IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIG5ld0luZGV4LnJlYWRlci5rZXlUaW1lcy5nZXQoa2V5KSA/PyAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgbmV3SW5kZXgucmVhZGVyLmRlbGV0ZVRpbWVzLmdldChrZXkpID8/IC1JbmZpbml0eSxcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhR2VuKys7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlU2lnbmFsKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXBwbHlXcml0ZShrZXk6IHN0cmluZywgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdhc0xpdmUgPSB0aGlzLmlzTGl2ZU5vdyhrZXkpO1xuICAgICAgICBjb25zdCB7IGludmFsaWRhdGVkQ29sdW1ucyB9ID0gdGhpcy5vdmVybGF5LndyaXRlUm93KGtleSwgcm93LCB0aW1lLCB3YXNMaXZlKTtcbiAgICAgICAgdGhpcy5ub3RpZnlPdmVybGF5TXV0YXRpb24oa2V5LCBpbnZhbGlkYXRlZENvbHVtbnMpO1xuICAgIH1cblxuICAgIGFwcGx5RGVsZXRlKGtleTogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2FzTGl2ZSA9IHRoaXMuaXNMaXZlTm93KGtleSk7XG4gICAgICAgIGNvbnN0IHsgaW52YWxpZGF0ZWRDb2x1bW5zIH0gPSB0aGlzLm92ZXJsYXkuZGVsZXRlS2V5KGtleSwgdGltZSwgd2FzTGl2ZSk7XG4gICAgICAgIHRoaXMubm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleSwgaW52YWxpZGF0ZWRDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBpc0tleVdhdGNoZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2ZnLmRlcHMuaXNPYnNlcnZlZD8uKGtleSkgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xpdmVOb3coa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGUpIHJldHVybiBlLnZhbHVlICE9PSBERUxFVEVEO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleD8uaXNMaXZlKGtleSkgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgbG9jYWxUaW1lKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGUpIHJldHVybiBlLnRpbWU7XG4gICAgICAgIGNvbnN0IHN0ID0gdGhpcy5pbmRleD8uc3RyZWFtVGltZXMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gc3Q7XG4gICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuXG4gICAgLy8gQ291bnRlciAoc28gY29uY3VycmVudCAvIG5lc3RlZCBtZXJnZXMgaW4gdGhlIHNhbWUgaW5zdGFuY2UgY29tcG9zZSBjb3JyZWN0bHkpLiBTaWduYWwgZmlyZXMgaW1tZWRpYXRlbHksIG5vdCB0aHJvdWdoIHRoZSB0cmlnZ2VyIHRocm90dGxlIOKAlCBVSSBzcGlubmVycyBzaG91bGQgc2hvdyByaWdodCBhd2F5LlxuICAgIHByaXZhdGUgY29tcGFjdGluZ0NvdW50ID0gMDtcbiAgICBiZWdpbkNvbXBhY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tcGFjdGluZ0NvdW50Kys7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RpbmdDb3VudCA9PT0gMSkgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKENPTVBBQ1RJTkdfU0lHTkFMKTtcbiAgICB9XG4gICAgZW5kQ29tcGFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wYWN0aW5nQ291bnQtLTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdGluZ0NvdW50ID09PSAwKSB0aGlzLmNmZy5kZXBzLmludmFsaWRhdGUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgIH1cbiAgICBpc0NvbXBhY3RpbmdTeW5jKCk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYWN0aW5nQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleTogc3RyaW5nLCBjb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFHZW4rKztcbiAgICAgICAgaWYgKGNvbHVtbnMgPT09IFwiYWxsXCIpIHRoaXMuY29sdW1uQ2FjaGUuY2xlYXIoKTtcbiAgICAgICAgZWxzZSBmb3IgKGNvbnN0IGMgb2YgY29sdW1ucykgdGhpcy5jb2x1bW5DYWNoZS5kZWxldGUoYyk7XG4gICAgICAgIGlmICh0aGlzLmNmZy5kZXBzLmlzT2JzZXJ2ZWQ/LihrZXkpID8/IHRydWUpIHRoaXMuaW52YWxpZGF0ZVNpZ25hbChrZXkpO1xuICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoT1ZFUkxBWV9TSUdOQUwpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBhc3luYyByZWFkcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBhc3luYyBnZXRLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5LnNpemUgPT09IDApIHJldHVybiBbLi4uaW5kZXgua2V5c107XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoaW5kZXgua2V5cyk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSBzZXQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBlbHNlIHNldC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnNldF07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNvbHVtbkNhY2hlLmdldChjb2wpO1xuICAgICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkIGFzIHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdO1xuICAgICAgICBjb25zdCBnZW4gPSB0aGlzLmRhdGFHZW47XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBsZXQgYmFzZSA9IGF3YWl0IGluZGV4LmdldENvbHVtbihjb2wpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vdmVybGF5LnBhdGNoQ29sdW1uKGJhc2UsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgIGlmIChlbGFwc2VkID4gNTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUoYCR7dGhpcy5jZmcubmFtZX0uZ2V0Q29sdW1uKCR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFHZW4gPT09IGdlbikgdGhpcy5jb2x1bW5DYWNoZS5zZXQoY29sLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGdldFNpbmdsZUZpZWxkPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogUHJvbWlzZTxUW0NdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaW5nbGVGaWVsZE9iaihrZXksIGNvbHVtbikpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTaW5nbGVGaWVsZE9iajxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PT0gREVMRVRFRCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2wgaW4gZW50cnkudmFsdWUpIHJldHVybiB7IGtleSwgdmFsdWU6IGVudHJ5LnZhbHVlW2NvbF0gYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBjb25zdCByID0gYXdhaXQgaW5kZXguZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2wpO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICBpZiAoZWxhcHNlZCA+IDUwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtibHVlKGAke3RoaXMuY2ZnLm5hbWV9LmdldFNpbmdsZUZpZWxkT2JqKCR7SlNPTi5zdHJpbmdpZnkoa2V5KX0sICR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogci52YWx1ZSBhcyBUW0NdLCB0aW1lOiByLnRpbWUgfTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgc3luYyAocmVhY3RpdmUpIHJlYWRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGdldFNpbmdsZUZpZWxkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFRbQ10gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTaW5nbGVGaWVsZE9ialN5bmMoa2V5LCBjb2x1bW4pPy52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVGaWVsZE9ialN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGtleTogc3RyaW5nLCBjb2x1bW46IEMpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoa2V5KTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChrZXkpO1xuICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbCBpbiBlbnRyeS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXg/LmVuc3VyZUJhc2VGaWVsZChrZXksIGNvbCwgKCkgPT4gdGhpcy5pbnZhbGlkYXRlU2lnbmFsKExPQURfU0lHTkFMKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogZW50cnkudmFsdWVbY29sXSBhcyBUW0NdLCB0aW1lOiBlbnRyeS50aW1lIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZSA9IGluZGV4LmdldEJhc2VGaWVsZChrZXksIGNvbCk7XG4gICAgICAgIC8vIFRyaWdnZXIgbG9hZCBpZiBub3QgbG9hZGVkIE9SIGxvYWRlZCBvbmx5IGZyb20gc3RhbGUgZmFsbGJhY2sgKHJlZnJlc2ggbmVlZGVkKS5cbiAgICAgICAgaWYgKCFiYXNlLmxvYWRlZCB8fCAhYmFzZS5mcmVzaCkgaW5kZXguZW5zdXJlQmFzZUZpZWxkKGtleSwgY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgaWYgKCFiYXNlLmxvYWRlZCB8fCBiYXNlLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSByZXR1cm4geyBrZXksIHZhbHVlOiB1bmRlZmluZWQgYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBiYXNlLnZhbHVlLnZhbHVlIGFzIFRbQ10sIHRpbWU6IGJhc2UudmFsdWUudGltZSB9O1xuICAgIH1cblxuICAgIGdldENvbHVtblN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGNvbHVtbjogQyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKExPQURfU0lHTkFMKTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY29sdW1uQ2FjaGUuZ2V0KGNvbCk7XG4gICAgICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgaWYgKCFpbmRleCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYmFzZSA9IGluZGV4LmdldEJhc2VDb2x1bW4oY29sKTtcbiAgICAgICAgLy8gVHJpZ2dlciBsb2FkIGlmIG5vdCBmcmVzaCAoZ2VudWluZSBmaXJzdCBsb2FkIE9SIGEgc3RhbGUgZmFsbGJhY2sgYXdhaXRpbmcgcmVmcmVzaCkuXG4gICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS5mcmVzaCkgaW5kZXguZW5zdXJlQmFzZUNvbHVtbihjb2wsICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICBpZiAoIWJhc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3ZlcmxheS5wYXRjaENvbHVtbihiYXNlLmVudHJpZXMsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGlmIChiYXNlLmZyZXNoKSB7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNhY2hlLnNldChjb2wsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpc0ZpZWxkTG9hZGVkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoa2V5KTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT09IERFTEVURUQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKFN0cmluZyhjb2x1bW4pIGluIGVudHJ5LnZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGluZGV4LmlzQmFzZUZpZWxkTG9hZGVkKGtleSwgU3RyaW5nKGNvbHVtbikpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaW5kZXguZW5zdXJlQmFzZUZpZWxkKGtleSwgU3RyaW5nKGNvbHVtbiksICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Mb2FkZWRTeW5jPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKExPQURfU0lHTkFMKTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkNhY2hlLmhhcyhjb2wpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpbmRleC5pc0Jhc2VDb2x1bW5Mb2FkZWQoY29sKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGluZGV4LmVuc3VyZUJhc2VDb2x1bW4oY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBCb3RoIGFzeW5jIHJlYWRzIGF3YWl0IHRoaXMuIFRoZSBob3N0IHdpcmVzIGFuIGBlbnN1cmVJbmRleGAgdGhhdCB0cmlnZ2VycyB0aGUgaW5pdGlhbCBidWlsZCBpZiBubyBpbmRleCBpcyBsb2FkZWQgeWV0IOKAlCByZWFkcyB0aGF0IHJhY2UgdGhlIGZpcnN0IGxvYWQgYWxsIHdhaXQgb24gdGhlIHNhbWUgcHJvbWlzZS5cbiAgICBzZXRFbnN1cmVJbmRleChmbjogKCkgPT4gUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4pOiB2b2lkIHsgdGhpcy5lbnN1cmVJbmRleEZuID0gZm47IH1cbiAgICBwcml2YXRlIGVuc3VyZUluZGV4Rm46ICgoKSA9PiBQcm9taXNlPExvYWRlZEluZGV4PFQ+PikgfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBhc3luYyByZXF1aXJlSW5kZXgoKTogUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4ge1xuICAgICAgICBpZiAodGhpcy5pbmRleCkgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5lbnN1cmVJbmRleEZuKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jZmcubmFtZX06IGluZGV4IG5vdCBzZXQg4oCUIGNhbGwgc2V0SW5kZXgoLi4uKSBiZWZvcmUgcmVhZGluZ2ApO1xuICAgICAgICByZXR1cm4gdGhpcy5lbnN1cmVJbmRleEZuKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRJbmZvKGluZGV4OiBMb2FkZWRJbmRleDxUPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgKGNvbGxlY3Rpb24gaGFzICR7Ymx1ZShmb3JtYXROdW1iZXIoaW5kZXgucmVhZGVyLnJvd0NvdW50KSl9IHJvd3MsICR7Ymx1ZShmb3JtYXROdW1iZXIoaW5kZXgucmVhZGVyLnRvdGFsQnl0ZXMpKX1CKWA7XG4gICAgfVxuXG4gICAgLy8gTm90aWZpY2F0aW9ucyBhcmUgcmFtcGluZ2x5IGRlbGF5ZWQgdW5kZXIgc3VzdGFpbmVkIGNoYW5nZXMgKHNvIGEgaGlnaC1yYXRlIHdyaXRlciBjYW4ndCByZS1ydW4gd2F0Y2hlcnMgcGVyIGNoYW5nZSkuIFVuZGVybHlpbmcgZGF0YSBpcyBhbHdheXMgY3VycmVudCDigJQgb25seSB0aGUgb2JzZXJ2YWJsZSBub3RpZmljYXRpb24gaXMgYmF0Y2hlZC9kZWxheWVkLlxuICAgIHByaXZhdGUgaW52YWxpZGF0ZVNpZ25hbChzaWduYWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXhNcyA9IHRoaXMuY2ZnLm1heFRyaWdnZXJUaHJvdHRsZU1zID8/IDA7XG4gICAgICAgIGlmIChtYXhNcyA8PSAwKSB7IHRoaXMuY2ZnLmRlcHMuaW52YWxpZGF0ZShzaWduYWwpOyByZXR1cm47IH1cbiAgICAgICAgdGhpcy5wZW5kaW5nU2lnbmFscy5hZGQoc2lnbmFsKTtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgbHVsbCA9IG5vdyAtIHRoaXMubGFzdFRyaWdnZXJUaW1lID4gbWF4TXM7XG4gICAgICAgIHRoaXMubGFzdFRyaWdnZXJUaW1lID0gbm93O1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyVGltZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmN1cnJlbnRUcmlnZ2VyRGVsYXkgPSBsdWxsID8gMCA6IE1hdGgubWluKG1heE1zLCBNYXRoLm1heChUUklHR0VSX1RIUk9UVExFX0ZJUlNUX1NURVBfTVMsIHRoaXMuY3VycmVudFRyaWdnZXJEZWxheSAqIDIpKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50cmlnZ2VyVGltZXIgPSB1bmRlZmluZWQ7IHRoaXMuZmx1c2hTaWduYWxzKCk7IH0sIHRoaXMuY3VycmVudFRyaWdnZXJEZWxheSk7XG4gICAgICAgICh0aGlzLnRyaWdnZXJUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbHVzaFNpZ25hbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdTaWduYWxzLnNpemUgPT09IDApIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2lnbmFscyA9IFsuLi50aGlzLnBlbmRpbmdTaWduYWxzXTtcbiAgICAgICAgdGhpcy5wZW5kaW5nU2lnbmFscy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLmJhdGNoKCgpID0+IHsgZm9yIChjb25zdCBzIG9mIHNpZ25hbHMpIHRoaXMuY2ZnLmRlcHMuaW52YWxpZGF0ZShzKTsgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVBREVSX1NJR05BTFMgPSB7IExPQUQ6IExPQURfU0lHTkFMLCBPVkVSTEFZOiBPVkVSTEFZX1NJR05BTCB9O1xuZXhwb3J0IHsgbnVsbEpvaW4gfTtcbiJdfQ==
|
|
298
|
-
/* _JS_SOURCE_HASH = "
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlUmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUF1RDtBQUV2RCxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztBQUM5QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyxTQUFTLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNsQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUEyUVEsNEJBQVE7QUFsUWpCLDJVQUEyVTtBQUMzVSxNQUFhLGtCQUFrQjtJQUMzQixZQUE2QixHQUFpQjtRQUFqQixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBRzlCLFlBQU8sR0FBRyxJQUFJLDJCQUFZLEVBQUUsQ0FBQztRQUVyQyxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBMkQsQ0FBQztRQUVqRixtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFbkMsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBb0Q1QixtTEFBbUw7UUFDM0ssb0JBQWUsR0FBRyxDQUFDLENBQUM7SUFoRXNCLENBQUM7SUFhbkQsSUFBSSxJQUFJLEtBQWEsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsSUFBSSxJQUFJLEtBQW1CLE9BQU8sSUFBSSxDQUFDLEdB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TyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztDQUNKO0FBOVBELGdEQThQQztBQUVZLFFBQUEsY0FBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2FkZWRJbmRleCB9IGZyb20gXCIuL0xvYWRlZEluZGV4XCI7XG5pbXBvcnQgeyBERUxFVEVELCBXcml0ZU92ZXJsYXkgfSBmcm9tIFwiLi9Xcml0ZU92ZXJsYXlcIjtcbmltcG9ydCB0eXBlIHsgUmVhY3RpdmVEZXBzIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlQmFzZVwiO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRUaW1lIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGJsdWUsIHJlZCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvbG9nQ29sb3JzXCI7XG5cbmNvbnN0IE5VTEwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xuY29uc3QgTE9BRF9TSUdOQUwgPSBOVUxMICsgXCJsb2FkXCI7XG5jb25zdCBPVkVSTEFZX1NJR05BTCA9IE5VTEwgKyBcIm92ZXJsYXlcIjtcbmNvbnN0IENPTVBBQ1RJTkdfU0lHTkFMID0gTlVMTCArIFwiY29tcGFjdGluZ1wiO1xuY29uc3QgVFJJR0dFUl9USFJPVFRMRV9GSVJTVF9TVEVQX01TID0gMTY7XG5cbmZ1bmN0aW9uIG51bGxKb2luKGE6IHN0cmluZywgYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYSArIE5VTEwgKyBiO1xufVxuXG5leHBvcnQgdHlwZSBSZWFkZXJDb25maWcgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlcHM6IFJlYWN0aXZlRGVwcztcbiAgICAvLyBTZWUgQnVsa0RhdGFiYXNlMkNvbmZpZy5tYXhUcmlnZ2VyVGhyb3R0bGVNcy5cbiAgICBtYXhUcmlnZ2VyVGhyb3R0bGVNcz86IG51bWJlcjtcbn07XG5cbi8vIE93bnMgdGhlIGN1cnJlbnQgTG9hZGVkSW5kZXggYW5kIFdyaXRlT3ZlcmxheSBhbmQgc2VydmVzIGV2ZXJ5IHJlYWQgKGFzeW5jICsgc3luYyByZWFjdGl2ZSkuIEFwcGx5IHdyaXRlcy9kZWxldGVzIHRocm91Z2ggYXBwbHlXcml0ZS9hcHBseURlbGV0ZSBzbyB0aGUgcmlnaHQgc2lnbmFscyBmaXJlLiBUaGUgaG9zdCBzd2FwcyBpbiBhIGZyZXNoIExvYWRlZEluZGV4IGF0b21pY2FsbHkgdmlhIHNldEluZGV4IG9uY2UgdGhlIG5ldyBvbmUgaGFzIGZ1bGx5IGJ1aWx0IOKAlCBubyBsYXp5IHJlYnVpbGQgb24gdGhlIG5leHQgcmVhZCwgbm8gc3luY2hyb25vdXMgbGFnIHNwaWtlLlxuZXhwb3J0IGNsYXNzIEJ1bGtEYXRhYmFzZVJlYWRlcjxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9PiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZmc6IFJlYWRlckNvbmZpZykgeyB9XG5cbiAgICBwdWJsaWMgaW5kZXg6IExvYWRlZEluZGV4PFQ+IHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyByZWFkb25seSBvdmVybGF5ID0gbmV3IFdyaXRlT3ZlcmxheSgpO1xuXG4gICAgcHJpdmF0ZSBkYXRhR2VuID0gMDtcbiAgICBwcml2YXRlIGNvbHVtbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdPigpO1xuXG4gICAgcHJpdmF0ZSBwZW5kaW5nU2lnbmFscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgdHJpZ2dlclRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGN1cnJlbnRUcmlnZ2VyRGVsYXkgPSAwO1xuICAgIHByaXZhdGUgbGFzdFRyaWdnZXJUaW1lID0gMDtcblxuICAgIGdldCBuYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNmZy5uYW1lOyB9XG4gICAgZ2V0IGRlcHMoKTogUmVhY3RpdmVEZXBzIHsgcmV0dXJuIHRoaXMuY2ZnLmRlcHM7IH1cbiAgICBnZXQgZGF0YUdlbmVyYXRpb24oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZGF0YUdlbjsgfVxuXG4gICAgc2V0SW5kZXgobmV3SW5kZXg6IExvYWRlZEluZGV4PFQ+LCBvcHRpb25zOiB7IGRyb3BTdGFsZUZhbGxiYWNrPzogYm9vbGVhbiB9ID0ge30pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmIChwcmV2ICYmICFvcHRpb25zLmRyb3BTdGFsZUZhbGxiYWNrKSBuZXdJbmRleC5pbmhlcml0U3RhbGVGcm9tKHByZXYpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLmJhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBuZXdJbmRleDtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheS5zd2VlcENvdmVyZWQoa2V5ID0+IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIG5ld0luZGV4LnJlYWRlci5rZXlUaW1lcy5nZXQoa2V5KSA/PyAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgbmV3SW5kZXgucmVhZGVyLmRlbGV0ZVRpbWVzLmdldChrZXkpID8/IC1JbmZpbml0eSxcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhR2VuKys7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlU2lnbmFsKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXBwbHlXcml0ZShrZXk6IHN0cmluZywgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdhc0xpdmUgPSB0aGlzLmlzTGl2ZU5vdyhrZXkpO1xuICAgICAgICBjb25zdCB7IGludmFsaWRhdGVkQ29sdW1ucyB9ID0gdGhpcy5vdmVybGF5LndyaXRlUm93KGtleSwgcm93LCB0aW1lLCB3YXNMaXZlKTtcbiAgICAgICAgdGhpcy5ub3RpZnlPdmVybGF5TXV0YXRpb24oa2V5LCBpbnZhbGlkYXRlZENvbHVtbnMpO1xuICAgIH1cblxuICAgIGFwcGx5RGVsZXRlKGtleTogc3RyaW5nLCB0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2FzTGl2ZSA9IHRoaXMuaXNMaXZlTm93KGtleSk7XG4gICAgICAgIGNvbnN0IHsgaW52YWxpZGF0ZWRDb2x1bW5zIH0gPSB0aGlzLm92ZXJsYXkuZGVsZXRlS2V5KGtleSwgdGltZSwgd2FzTGl2ZSk7XG4gICAgICAgIHRoaXMubm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleSwgaW52YWxpZGF0ZWRDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBpc0tleVdhdGNoZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2ZnLmRlcHMuaXNPYnNlcnZlZD8uKGtleSkgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0xpdmVOb3coa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGUpIHJldHVybiBlLnZhbHVlICE9PSBERUxFVEVEO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleD8uaXNMaXZlKGtleSkgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgbG9jYWxUaW1lKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGUpIHJldHVybiBlLnRpbWU7XG4gICAgICAgIGNvbnN0IHN0ID0gdGhpcy5pbmRleD8uc3RyZWFtVGltZXMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gc3Q7XG4gICAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgfVxuXG4gICAgLy8gQ291bnRlciAoc28gY29uY3VycmVudCAvIG5lc3RlZCBtZXJnZXMgaW4gdGhlIHNhbWUgaW5zdGFuY2UgY29tcG9zZSBjb3JyZWN0bHkpLiBTaWduYWwgZmlyZXMgaW1tZWRpYXRlbHksIG5vdCB0aHJvdWdoIHRoZSB0cmlnZ2VyIHRocm90dGxlIOKAlCBVSSBzcGlubmVycyBzaG91bGQgc2hvdyByaWdodCBhd2F5LlxuICAgIHByaXZhdGUgY29tcGFjdGluZ0NvdW50ID0gMDtcbiAgICBiZWdpbkNvbXBhY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tcGFjdGluZ0NvdW50Kys7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RpbmdDb3VudCA9PT0gMSkgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKENPTVBBQ1RJTkdfU0lHTkFMKTtcbiAgICB9XG4gICAgZW5kQ29tcGFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wYWN0aW5nQ291bnQtLTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdGluZ0NvdW50ID09PSAwKSB0aGlzLmNmZy5kZXBzLmludmFsaWRhdGUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgIH1cbiAgICBpc0NvbXBhY3RpbmdTeW5jKCk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYWN0aW5nQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleTogc3RyaW5nLCBjb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFHZW4rKztcbiAgICAgICAgaWYgKGNvbHVtbnMgPT09IFwiYWxsXCIpIHRoaXMuY29sdW1uQ2FjaGUuY2xlYXIoKTtcbiAgICAgICAgZWxzZSBmb3IgKGNvbnN0IGMgb2YgY29sdW1ucykgdGhpcy5jb2x1bW5DYWNoZS5kZWxldGUoYyk7XG4gICAgICAgIGlmICh0aGlzLmNmZy5kZXBzLmlzT2JzZXJ2ZWQ/LihrZXkpID8/IHRydWUpIHRoaXMuaW52YWxpZGF0ZVNpZ25hbChrZXkpO1xuICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoT1ZFUkxBWV9TSUdOQUwpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBhc3luYyByZWFkcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBhc3luYyBnZXRLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5LnNpemUgPT09IDApIHJldHVybiBbLi4uaW5kZXgua2V5c107XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoaW5kZXgua2V5cyk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSBzZXQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBlbHNlIHNldC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnNldF07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNvbHVtbkNhY2hlLmdldChjb2wpO1xuICAgICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkIGFzIHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdO1xuICAgICAgICBjb25zdCBnZW4gPSB0aGlzLmRhdGFHZW47XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBsZXQgYmFzZSA9IGF3YWl0IGluZGV4LmdldENvbHVtbihjb2wpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vdmVybGF5LnBhdGNoQ29sdW1uKGJhc2UsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgIGlmIChlbGFwc2VkID4gNTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUoYCR7dGhpcy5jZmcubmFtZX0uZ2V0Q29sdW1uKCR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFHZW4gPT09IGdlbikgdGhpcy5jb2x1bW5DYWNoZS5zZXQoY29sLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGdldFNpbmdsZUZpZWxkPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogUHJvbWlzZTxUW0NdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaW5nbGVGaWVsZE9iaihrZXksIGNvbHVtbikpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTaW5nbGVGaWVsZE9iajxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PT0gREVMRVRFRCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2wgaW4gZW50cnkudmFsdWUpIHJldHVybiB7IGtleSwgdmFsdWU6IGVudHJ5LnZhbHVlW2NvbF0gYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBjb25zdCByID0gYXdhaXQgaW5kZXguZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2wpO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICBpZiAoZWxhcHNlZCA+IDUwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtibHVlKGAke3RoaXMuY2ZnLm5hbWV9LmdldFNpbmdsZUZpZWxkT2JqKCR7SlNPTi5zdHJpbmdpZnkoa2V5KX0sICR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogci52YWx1ZSBhcyBUW0NdLCB0aW1lOiByLnRpbWUgfTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgc3luY2hyb25pemVkIChyZWFjdGl2ZSkgcmVhZHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgZ2V0U2luZ2xlRmllbGRTeW5jPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogVFtDXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNpbmdsZUZpZWxkT2JqU3luYyhrZXksIGNvbHVtbik/LnZhbHVlO1xuICAgIH1cblxuICAgIGdldFNpbmdsZUZpZWxkT2JqU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHRoaXMuY2ZnLmRlcHMub2JzZXJ2ZShMT0FEX1NJR05BTCk7XG4gICAgICAgIHRoaXMuY2ZnLmRlcHMub2JzZXJ2ZShrZXkpO1xuICAgICAgICBjb25zdCBjb2wgPSBTdHJpbmcoY29sdW1uKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT09IERFTEVURUQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY29sIGluIGVudHJ5LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleD8uZW5zdXJlQmFzZUZpZWxkKGtleSwgY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBlbnRyeS52YWx1ZVtjb2xdIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSByZXR1cm4geyBrZXksIHZhbHVlOiB1bmRlZmluZWQgYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXNlID0gaW5kZXguZ2V0QmFzZUZpZWxkKGtleSwgY29sKTtcbiAgICAgICAgLy8gVHJpZ2dlciBsb2FkIGlmIG5vdCBsb2FkZWQgT1IgbG9hZGVkIG9ubHkgZnJvbSBzdGFsZSBmYWxsYmFjayAocmVmcmVzaCBuZWVkZWQpLlxuICAgICAgICBpZiAoIWJhc2UubG9hZGVkIHx8ICFiYXNlLmZyZXNoKSBpbmRleC5lbnN1cmVCYXNlRmllbGQoa2V5LCBjb2wsICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICBpZiAoIWJhc2UubG9hZGVkIHx8IGJhc2UudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgZW50cnkudmFsdWUgIT09IERFTEVURUQpIHJldHVybiB7IGtleSwgdmFsdWU6IHVuZGVmaW5lZCBhcyBUW0NdLCB0aW1lOiBlbnRyeS50aW1lIH07XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleSwgdmFsdWU6IGJhc2UudmFsdWUudmFsdWUgYXMgVFtDXSwgdGltZTogYmFzZS52YWx1ZS50aW1lIH07XG4gICAgfVxuXG4gICAgZ2V0Q29sdW1uU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oY29sdW1uOiBDKTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W10gfCB1bmRlZmluZWQge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoT1ZFUkxBWV9TSUdOQUwpO1xuICAgICAgICBjb25zdCBjb2wgPSBTdHJpbmcoY29sdW1uKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5jb2x1bW5DYWNoZS5nZXQoY29sKTtcbiAgICAgICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZCBhcyB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH1bXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBiYXNlID0gaW5kZXguZ2V0QmFzZUNvbHVtbihjb2wpO1xuICAgICAgICAvLyBUcmlnZ2VyIGxvYWQgaWYgbm90IGZyZXNoIChnZW51aW5lIGZpcnN0IGxvYWQgT1IgYSBzdGFsZSBmYWxsYmFjayBhd2FpdGluZyByZWZyZXNoKS5cbiAgICAgICAgaWYgKCFiYXNlIHx8ICFiYXNlLmZyZXNoKSBpbmRleC5lbnN1cmVCYXNlQ29sdW1uKGNvbCwgKCkgPT4gdGhpcy5pbnZhbGlkYXRlU2lnbmFsKExPQURfU0lHTkFMKSk7XG4gICAgICAgIGlmICghYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5vdmVybGF5LnBhdGNoQ29sdW1uKGJhc2UuZW50cmllcywgY29sKSBhcyB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH1bXTtcbiAgICAgICAgaWYgKGJhc2UuZnJlc2gpIHtcbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uQ2FjaGUuc2V0KGNvbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlzRmllbGRMb2FkZWRTeW5jPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuY2ZnLmRlcHMub2JzZXJ2ZShMT0FEX1NJR05BTCk7XG4gICAgICAgIHRoaXMuY2ZnLmRlcHMub2JzZXJ2ZShrZXkpO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PT0gREVMRVRFRCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoU3RyaW5nKGNvbHVtbikgaW4gZW50cnkudmFsdWUpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgaWYgKCFpbmRleCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5kZXguaXNCYXNlRmllbGRMb2FkZWQoa2V5LCBTdHJpbmcoY29sdW1uKSkpIHJldHVybiB0cnVlO1xuICAgICAgICBpbmRleC5lbnN1cmVCYXNlRmllbGQoa2V5LCBTdHJpbmcoY29sdW1uKSwgKCkgPT4gdGhpcy5pbnZhbGlkYXRlU2lnbmFsKExPQURfU0lHTkFMKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0NvbHVtbkxvYWRlZFN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGNvbHVtbjogQyk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoT1ZFUkxBWV9TSUdOQUwpO1xuICAgICAgICBjb25zdCBjb2wgPSBTdHJpbmcoY29sdW1uKTtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uQ2FjaGUuaGFzKGNvbCkpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGluZGV4LmlzQmFzZUNvbHVtbkxvYWRlZChjb2wpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaW5kZXguZW5zdXJlQmFzZUNvbHVtbihjb2wsICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8g4pSA4pSAIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIEJvdGggYXN5bmMgcmVhZHMgYXdhaXQgdGhpcy4gVGhlIGhvc3Qgd2lyZXMgYW4gYGVuc3VyZUluZGV4YCB0aGF0IHRyaWdnZXJzIHRoZSBpbml0aWFsIGJ1aWxkIGlmIG5vIGluZGV4IGlzIGxvYWRlZCB5ZXQg4oCUIHJlYWRzIHRoYXQgcmFjZSB0aGUgZmlyc3QgbG9hZCBhbGwgd2FpdCBvbiB0aGUgc2FtZSBwcm9taXNlLlxuICAgIHNldEVuc3VyZUluZGV4KGZuOiAoKSA9PiBQcm9taXNlPExvYWRlZEluZGV4PFQ+Pik6IHZvaWQgeyB0aGlzLmVuc3VyZUluZGV4Rm4gPSBmbjsgfVxuICAgIHByaXZhdGUgZW5zdXJlSW5kZXhGbjogKCgpID0+IFByb21pc2U8TG9hZGVkSW5kZXg8VD4+KSB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGFzeW5jIHJlcXVpcmVJbmRleCgpOiBQcm9taXNlPExvYWRlZEluZGV4PFQ+PiB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSByZXR1cm4gdGhpcy5pbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLmVuc3VyZUluZGV4Rm4pIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNmZy5uYW1lfTogaW5kZXggbm90IHNldCDigJQgY2FsbCBzZXRJbmRleCguLi4pIGJlZm9yZSByZWFkaW5nYCk7XG4gICAgICAgIHJldHVybiB0aGlzLmVuc3VyZUluZGV4Rm4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdEluZm8oaW5kZXg6IExvYWRlZEluZGV4PFQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAoY29sbGVjdGlvbiBoYXMgJHtibHVlKGZvcm1hdE51bWJlcihpbmRleC5yZWFkZXIucm93Q291bnQpKX0gcm93cywgJHtibHVlKGZvcm1hdE51bWJlcihpbmRleC5yZWFkZXIudG90YWxCeXRlcykpfUIpYDtcbiAgICB9XG5cbiAgICAvLyBOb3RpZmljYXRpb25zIGFyZSByYW1waW5nbHkgZGVsYXllZCB1bmRlciBzdXN0YWluZWQgY2hhbmdlcyAoc28gYSBoaWdoLXJhdGUgd3JpdGVyIGNhbid0IHJlLXJ1biB3YXRjaGVycyBwZXIgY2hhbmdlKS4gVW5kZXJseWluZyBkYXRhIGlzIGFsd2F5cyBjdXJyZW50IOKAlCBvbmx5IHRoZSBvYnNlcnZhYmxlIG5vdGlmaWNhdGlvbiBpcyBiYXRjaGVkL2RlbGF5ZWQuXG4gICAgcHJpdmF0ZSBpbnZhbGlkYXRlU2lnbmFsKHNpZ25hbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1heE1zID0gdGhpcy5jZmcubWF4VHJpZ2dlclRocm90dGxlTXMgPz8gMDtcbiAgICAgICAgaWYgKG1heE1zIDw9IDApIHsgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKHNpZ25hbCk7IHJldHVybjsgfVxuICAgICAgICB0aGlzLnBlbmRpbmdTaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBsdWxsID0gbm93IC0gdGhpcy5sYXN0VHJpZ2dlclRpbWUgPiBtYXhNcztcbiAgICAgICAgdGhpcy5sYXN0VHJpZ2dlclRpbWUgPSBub3c7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJUaW1lciAhPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuY3VycmVudFRyaWdnZXJEZWxheSA9IGx1bGwgPyAwIDogTWF0aC5taW4obWF4TXMsIE1hdGgubWF4KFRSSUdHRVJfVEhST1RUTEVfRklSU1RfU1RFUF9NUywgdGhpcy5jdXJyZW50VHJpZ2dlckRlbGF5ICogMikpO1xuICAgICAgICB0aGlzLnRyaWdnZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnRyaWdnZXJUaW1lciA9IHVuZGVmaW5lZDsgdGhpcy5mbHVzaFNpZ25hbHMoKTsgfSwgdGhpcy5jdXJyZW50VHJpZ2dlckRlbGF5KTtcbiAgICAgICAgKHRoaXMudHJpZ2dlclRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsdXNoU2lnbmFscygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1NpZ25hbHMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaWduYWxzID0gWy4uLnRoaXMucGVuZGluZ1NpZ25hbHNdO1xuICAgICAgICB0aGlzLnBlbmRpbmdTaWduYWxzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2ZnLmRlcHMuYmF0Y2goKCkgPT4geyBmb3IgKGNvbnN0IHMgb2Ygc2lnbmFscykgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKHMpOyB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBSRUFERVJfU0lHTkFMUyA9IHsgTE9BRDogTE9BRF9TSUdOQUwsIE9WRVJMQVk6IE9WRVJMQVlfU0lHTkFMIH07XG5leHBvcnQgeyBudWxsSm9pbiB9O1xuIl19
|
|
298
|
+
/* _JS_SOURCE_HASH = "b5f7db4fc6cdd97a6e6546c07a28a503d663b16f432620991e3e23e128f9ac31"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.orderStreamEntries = exports.loadStreamEntries = exports.loadFileReader = exports.makeRawGetRange = exports.LoadedIndex = exports.MissingFileError = void 0;
|
|
4
4
|
const BulkDatabaseFormat_1 = require("./BulkDatabaseFormat");
|
|
@@ -420,4 +420,4 @@ function joinBulkDatabases(databases) {
|
|
|
420
420
|
};
|
|
421
421
|
}
|
|
422
422
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZGVkSW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMb2FkZWRJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0g7QUFDbEgsNkNBQW9EO0FBQ3BELDJDQUFrRztBQUNsRyxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLG9JQUFvSTtBQUNwSSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBTTFDLE1BQWEsZ0JBQWlCLFNBQVEsS0FBSztDQUFJO0FBQS9DLDRDQUErQztBQUMvQyxNQUFNLGlCQUFrQixTQUFRLEtBQUs7Q0FBSTtBQW9CekMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUIsU0FBUyxRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELG9XQUFvVztBQUNwVyxNQUFhLFdBQVc7SUFDcEIsWUFDb0IsSUFBWSxFQUNaLE9BQW9CLEVBQ3BCLFNBQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLE1BQXNCLEVBQ3RCLFdBQWdDLEVBQ2hDLFdBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBeUIsRUFDekIsU0FBMEI7UUFUMUIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQVN0QyxnQkFBVyxHQUFHLElBQUks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RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLFNBQVM7Z0JBQ2IsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSywyQkFBTTtvQkFBRSxTQUFTO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7b0JBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFBQyxDQUFDO1lBQ2xGLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3RSxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZpbGVTdG9yYWdlIH0gZnJvbSBcIi4uL0ZpbGVGb2xkZXJBUElcIjtcbmltcG9ydCB7IEFCU0VOVCwgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciwgRU1QVFlfQlVGRkVSLCBLRVlfQ09MVU1OLCBsb2FkQnVsa0RhdGFiYXNlIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlRm9ybWF0XCI7XG5pbXBvcnQgeyBibG9ja0NhY2hlLCBHZXRSYW5nZSB9IGZyb20gXCIuL2Jsb2NrQ2FjaGVcIjtcbmltcG9ydCB7IFNUUkVBTV9FWFRFTlNJT04sIFN0cmVhbUVudHJ5LCBwYXJzZVN0cmVhbSwgc3RyZWFtUmVhZGVyRnJvbUVudHJpZXMgfSBmcm9tIFwiLi9zdHJlYW1Mb2dcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBibHVlLCByZWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuXG4vLyBEdXBsaWNhdGVkIGZyb20gQnVsa0RhdGFiYXNlQmFzZSB0byBhdm9pZCBhIGNpcmN1bGFyIGltcG9ydCDigJQgdXNlZCBvbmx5IHRvIGJ1aWxkIGEgZnVsbGVyIHN0b3JhZ2UtcmVsYXRpdmUgcGF0aCBmb3IgbG9nIG1lc3NhZ2VzLlxuY29uc3QgQlVMS19ST09UX0ZPTERFUiA9IFwiYnVsa0RhdGFiYXNlczJcIjtcblxuZXhwb3J0IHR5cGUgQnVsa0ZpbGVJbmZvID0geyBmaWxlTmFtZTogc3RyaW5nOyBsZXZlbDogbnVtYmVyOyB0aW1lc3RhbXA6IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgU3RyZWFtRmlsZUluZm8gPSB7IGZpbGVOYW1lOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5ID0geyByZWFkU2l6ZTogbnVtYmVyOyBwYXJzZWRQb3M6IG51bWJlcjsgZW50cmllczogU3RyZWFtRW50cnlbXSB9O1xuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0ZpbGVFcnJvciBleHRlbmRzIEVycm9yIHsgfVxuY2xhc3MgRmlsZXNDaGFuZ2VkRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRSZWFkZXIgPSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICB0b3RhbEJ5dGVzOiBudW1iZXI7XG4gICAga2V5czogc3RyaW5nW107XG4gICAgcmF3S2V5Q291bnQ6IG51bWJlcjtcbiAgICByZWFkZXJDb3VudDogbnVtYmVyO1xuICAgIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGJ5dGVTaXplOiBudW1iZXIgfVtdO1xuICAgIGtleVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgIGRlbGV0ZVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgIGdldENvbHVtbjogKGNvbHVtbjogc3RyaW5nKSA9PiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdPjtcbiAgICBnZXRTaW5nbGVGaWVsZDogKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgdHlwZSBTdWJSZWFkZXJDYWNoZXMgPSB7XG4gICAgYnVsazogTWFwPHN0cmluZywgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcj47XG4gICAgc3RyZWFtOiBNYXA8c3RyaW5nLCBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5Pjtcbn07XG5cbmNvbnN0IE1BWF9SRUFEX0FUVEVNUFRTID0gODtcblxuZnVuY3Rpb24gbnVsbEpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBhICsgU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIGI7XG59XG5cbi8vIEEgbG9hZGVkIHNuYXBzaG90IG9mIG9uZSBjb2xsZWN0aW9uJ3Mgb24tZGlzayBzdGF0ZTogdGhlIHJlc29sdmVkIHJlYWRlciArIHRoZSBwZXItZmlsZSBkZWNvZGVkIHN1Yi0gcmVhZGVycyBpdCBzdGl0Y2hlZCwgdGhlIHN0cmVhbSBmaWxlIHNpemVzL3RpbWVzIGl0IG9ic2VydmVkLCBhbmQgdGhlIHN5bmMgKHJlYWN0aXZlKSBjYWNoZXMgdGhhdCBzdXJmYWNlIGNvbHVtbi9maWVsZCByZWFkcy4gQnVpbHQgb25jZSB2aWEgTG9hZGVkSW5kZXguYnVpbGQg4oCUIGVhZ2VybHksIHNvIHRoZSBzd2FwIGludG8gYSBmcmVzaCBMb2FkZWRJbmRleCBuZXZlciBibG9ja3MgYSByZWFkIG9uIGEgc3luY2hyb25vdXMgcmVidWlsZC5cbmV4cG9ydCBjbGFzcyBMb2FkZWRJbmRleDxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9PiB7XG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2U6IEZpbGVTdG9yYWdlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcmVhZGVyOiBSZXNvbHZlZFJlYWRlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmVhbVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtU2l6ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdHJlYW1Sb3dzT25EaXNrOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdHJlYW1CeXRlc09uRGlzazogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3ViQ2FjaGVzOiBTdWJSZWFkZXJDYWNoZXMsXG4gICAgKSB7XG4gICAgICAgIHRoaXMua2V5cyA9IG5ldyBTZXQocmVhZGVyLmtleXMpO1xuICAgICAgICB0aGlzLmZpbGVTZXQgPSBuZXcgU2V0KFsuLi5idWxrRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSksIC4uLnN0cmVhbUZpbGVzLm1hcChmID0+IGYuZmlsZU5hbWUpXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRvbmx5IGtleXM6IFNldDxzdHJpbmc+O1xuICAgIHB1YmxpYyByZWFkb25seSBmaWxlU2V0OiBTZXQ8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgYmFzZUNvbHVtbnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+KCk7XG4gICAgcHJpdmF0ZSBiYXNlQ29sdW1uc0xvYWRpbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGJhc2VGaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSBiYXNlRmllbGRzTG9hZGluZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIC8vIExhc3Qta25vd24gdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIGluZGV4LCBzZXJ2ZWQgdW50aWwgdGhpcyBpbmRleCBsb2FkcyBpdHMgb3duIGZyZXNoIHZhbHVlLCBzbyBhIHN3YXAgZG9lc24ndCBmbGFzaCBlbXB0eSBpbiBzeW5jIHJlYWRzLiBDbGVhcmVkIHBlci1lbnRyeSB3aGVuIHRoZSBmcmVzaCB2YWx1ZSBsYW5kcy5cbiAgICBwcml2YXRlIHN0YWxlQmFzZUNvbHVtbnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+KCk7XG4gICAgcHJpdmF0ZSBzdGFsZUJhc2VGaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICBnZXQgdG90YWxCeXRlcygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yZWFkZXIudG90YWxCeXRlczsgfVxuICAgIGdldCByb3dDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5yZWFkZXIucm93Q291bnQ7IH1cblxuICAgIGlzTGl2ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5rZXlzLmhhcyhrZXkpOyB9XG5cbiAgICBzdGF0aWMgYXN5bmMgYnVpbGQ8VCBleHRlbmRzIHsga2V5OiBzdHJpbmcgfT4oY29uZmlnOiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgc3RvcmFnZTogRmlsZVN0b3JhZ2U7XG4gICAgICAgIGJ1bGtGaWxlczogQnVsa0ZpbGVJbmZvW107XG4gICAgICAgIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdO1xuICAgICAgICBzdWJDYWNoZXM6IFN1YlJlYWRlckNhY2hlcztcbiAgICAgICAgb25VbnJlYWRhYmxlRmlsZT86IChmaWxlOiBCdWxrRmlsZUluZm8sIG1lc3NhZ2U6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9KTogUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCB7IGJ1bGtGaWxlcywgc3RyZWFtRmlsZXMgfSA9IGNvbmZpZztcbiAgICAgICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgdG9sZXJhdGVNaXNzaW5nID0gYXR0ZW1wdCA+PSBNQVhfUkVBRF9BVFRFTVBUUztcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGVzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtidWxrUmVhZGVyc1Jhdywgc3RyZWFtRGF0YV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKGJ1bGtGaWxlcy5tYXAoYXN5bmMgZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBsb2FkRmlsZVJlYWRlcihjb25maWcubmFtZSwgY29uZmlnLnN0b3JhZ2UsIGYsIGNvbmZpZy5zdWJDYWNoZXMuYnVsayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBNaXNzaW5nRmlsZUVycm9yKSB7IGZpbGVzQ2hhbmdlZCA9IHRydWU7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm9uVW5yZWFkYWJsZUZpbGUpIGF3YWl0IGNvbmZpZy5vblVucmVhZGFibGVGaWxlKGYsIChlIGFzIEVycm9yKS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIGxvYWRTdHJlYW1FbnRyaWVzKGNvbmZpZy5uYW1lLCBjb25maWcuc3RvcmFnZSwgc3RyZWFtRmlsZXMsIGNvbmZpZy5zdWJDYWNoZXMuc3RyZWFtKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtRGF0YS5taXNzaW5nKSBmaWxlc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlc0NoYW5nZWQgJiYgIXRvbGVyYXRlTWlzc2luZykgdGhyb3cgbmV3IEZpbGVzQ2hhbmdlZEVycm9yKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWxrUmVhZGVycyA9IGJ1bGtSZWFkZXJzUmF3LmZpbHRlcigocik6IHIgaXMgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciA9PiAhIXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlcnM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBzdHJlYW1UaW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZCA9IG9yZGVyU3RyZWFtRW50cmllcyhzdHJlYW1EYXRhLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgIGlmIChvcmRlcmVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBzdHJlYW1SZWFkZXJGcm9tRW50cmllcyhvcmRlcmVkLCBzdHJlYW1EYXRhLnRvdGFsQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZWFkZXJzLnB1c2goc3RyZWFtLnJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVRpbWVzID0gc3RyZWFtLnRpbWVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWFkZXJzLnB1c2goLi4uYnVsa1JlYWRlcnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IGpvaW5CdWxrRGF0YWJhc2VzKHJlYWRlcnMpO1xuXG4gICAgICAgICAgICAgICAgcHJ1bmVTdWJDYWNoZXMoYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcywgY29uZmlnLnN1YkNhY2hlcyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkID4gNTApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IHN0cmVhbURhdGEudG90YWxCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGJ1bGtSZWFkZXJzKSBieXRlc1JlYWQgKz0gci5jb2x1bW5zLmZpbmQoYyA9PiBjLmNvbHVtbiA9PT0gS0VZX0NPTFVNTik/LmJ5dGVTaXplID8/IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUoY29uZmlnLm5hbWUpfSBsb2FkZWQgaW4gJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICgke2JsdWUoZm9ybWF0TnVtYmVyKHJlYWRlci5yb3dDb3VudCkpfSByb3dzLCAke2J1bGtGaWxlcy5sZW5ndGh9IGJ1bGsgKyAke3N0cmVhbUZpbGVzLmxlbmd0aH0gc3RyZWFtIGZpbGVzLCByZWFkICR7Ymx1ZShmb3JtYXROdW1iZXIoYnl0ZXNSZWFkKSl9QilgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvYWRlZEluZGV4PFQ+KFxuICAgICAgICAgICAgICAgICAgICBjb25maWcubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJ1bGtGaWxlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtVGltZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbURhdGEuc2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbURhdGEuZW50cmllcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbURhdGEudG90YWxCeXRlcyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN1YkNhY2hlcyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRmlsZXNDaGFuZ2VkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkb3B0cyB0aGUgcHJldmlvdXMgaW5kZXgncyBsb2FkZWQgYmFzZSB2YWx1ZXMgYXMgU1RBTEUgb24gdGhpcyBvbmUsIHNvIGEgc3luYyByZWFkIG1pZC1zd2FwIGNhbiBzZXJ2ZSB0aGUgb2xkIHZhbHVlIChwYXRjaGVkIHdpdGggdGhlIGN1cnJlbnQgb3ZlcmxheSkgaW5zdGVhZCBvZiBmbGFzaGluZyBlbXB0eSB3aGlsZSB0aGUgZnJlc2ggbG9hZCBydW5zLiBQZXItZW50cnk6IGRyb3BwZWQgd2hlbiB0aGUgZnJlc2ggdmFsdWUgbGFuZHMgaGVyZS5cbiAgICBpbmhlcml0U3RhbGVGcm9tKHByZXY6IExvYWRlZEluZGV4PFQ+KTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHByZXYuYmFzZUNvbHVtbnMpIHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5zZXQoaywgdik7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHByZXYuc3RhbGVCYXNlQ29sdW1ucykgaWYgKCF0aGlzLnN0YWxlQmFzZUNvbHVtbnMuaGFzKGspKSB0aGlzLnN0YWxlQmFzZUNvbHVtbnMuc2V0KGssIHYpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBwcmV2LmJhc2VGaWVsZHMpIHRoaXMuc3RhbGVCYXNlRmllbGRzLnNldChrLCB2KTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgcHJldi5zdGFsZUJhc2VGaWVsZHMpIGlmICghdGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGspKSB0aGlzLnN0YWxlQmFzZUZpZWxkcy5zZXQoaywgdik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uKGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH1bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U2luZ2xlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIGVuc3VyZUJhc2VDb2x1bW4oY29sdW1uOiBzdHJpbmcsIG9uTG9hZGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmJhc2VDb2x1bW5zLmhhcyhjb2x1bW4pIHx8IHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmhhcyhjb2x1bW4pKSByZXR1cm47XG4gICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmFkZChjb2x1bW4pO1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlQ29sdW1ucy5zZXQoY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFsZUJhc2VDb2x1bW5zLmRlbGV0ZShjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmRlbGV0ZShjb2x1bW4pO1xuICAgICAgICAgICAgICAgIG9uTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlQ29sdW1uc0xvYWRpbmcuZGVsZXRlKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubmFtZX0uZ2V0Q29sdW1uU3luYygke0pTT04uc3RyaW5naWZ5KGNvbHVtbil9KSBsb2FkIGZhaWxlZCwgd2lsbCByZXRyeTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVCYXNlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nLCBvbkxvYWRlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjayA9IG51bGxKb2luKGNvbHVtbiwga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuYmFzZUZpZWxkcy5oYXMoY2spIHx8IHRoaXMuYmFzZUZpZWxkc0xvYWRpbmcuaGFzKGNrKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmJhc2VGaWVsZHNMb2FkaW5nLmFkZChjayk7XG4gICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlYWRlci5nZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzLnNldChjaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhbGVCYXNlRmllbGRzLmRlbGV0ZShjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzTG9hZGluZy5kZWxldGUoY2spO1xuICAgICAgICAgICAgICAgIG9uTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzTG9hZGluZy5kZWxldGUoY2spO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9LmdldFNpbmdsZUZpZWxkU3luYygke0pTT04uc3RyaW5naWZ5KGtleSl9LCAke0pTT04uc3RyaW5naWZ5KGNvbHVtbil9KSBsb2FkIGZhaWxlZCwgd2lsbCByZXRyeTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsb2FkZWQgdmFsdWUgKGZyZXNoIGlmIGF2YWlsYWJsZSwgZWxzZSBsYXN0LWtub3duIHN0YWxlKSBmb3IgdGhlIGNvbHVtbiwgb3IgdW5kZWZpbmVkIGlmIG5laXRoZXIgaXMgcHJlc2VudCB5ZXQuIFRoZSBib29sZWFuIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBmcmVzaDsgY2FsbGVycyBtYXkgc2tpcCBjYWNoaW5nIGEgc3RhbGUgdmFsdWUuXG4gICAgZ2V0QmFzZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IHsgZW50cmllczogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W107IGZyZXNoOiBib29sZWFuIH0gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmcmVzaCA9IHRoaXMuYmFzZUNvbHVtbnMuZ2V0KGNvbHVtbik7XG4gICAgICAgIGlmIChmcmVzaCkgcmV0dXJuIHsgZW50cmllczogZnJlc2gsIGZyZXNoOiB0cnVlIH07XG4gICAgICAgIGNvbnN0IHN0YWxlID0gdGhpcy5zdGFsZUJhc2VDb2x1bW5zLmdldChjb2x1bW4pO1xuICAgICAgICBpZiAoc3RhbGUpIHJldHVybiB7IGVudHJpZXM6IHN0YWxlLCBmcmVzaDogZmFsc2UgfTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRCYXNlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogeyB2YWx1ZTogeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7IGZyZXNoOiBib29sZWFuOyBsb2FkZWQ6IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IGNrID0gbnVsbEpvaW4oY29sdW1uLCBrZXkpO1xuICAgICAgICBpZiAodGhpcy5iYXNlRmllbGRzLmhhcyhjaykpIHJldHVybiB7IHZhbHVlOiB0aGlzLmJhc2VGaWVsZHMuZ2V0KGNrKSwgZnJlc2g6IHRydWUsIGxvYWRlZDogdHJ1ZSB9O1xuICAgICAgICBpZiAodGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGNrKSkgcmV0dXJuIHsgdmFsdWU6IHRoaXMuc3RhbGVCYXNlRmllbGRzLmdldChjayksIGZyZXNoOiBmYWxzZSwgbG9hZGVkOiB0cnVlIH07XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGZyZXNoOiBmYWxzZSwgbG9hZGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlzQmFzZUNvbHVtbkxvYWRlZChjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlQ29sdW1ucy5oYXMoY29sdW1uKSB8fCB0aGlzLnN0YWxlQmFzZUNvbHVtbnMuaGFzKGNvbHVtbik7XG4gICAgfVxuXG4gICAgaXNCYXNlRmllbGRMb2FkZWQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNrID0gbnVsbEpvaW4oY29sdW1uLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRmllbGRzLmhhcyhjaykgfHwgdGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGNrKTtcbiAgICB9XG5cbiAgICAvLyBEcm9wcyBpbi1tZW1vcnkgbG9hZGVkIHZhbHVlcyBmb3IgdGhpcyBpbmRleCwgc28gYSBzdWJzZXF1ZW50IHJlYWQgcmVsb2FkcyBmcmVzaCBmcm9tIGRpc2suIFVzZWQgYnkgcmVsb2FkRnJvbURpc2soKSDigJQgYSBoYXJkIHJlc2V0LCBubyBzdGFsZSBmYWxsYmFjayBzdXJ2aXZlcy5cbiAgICBkcm9wTG9hZGVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhc2VDb2x1bW5zLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYmFzZUZpZWxkcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmJhc2VGaWVsZHNMb2FkaW5nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5jbGVhcigpO1xuICAgICAgICB0aGlzLnN0YWxlQmFzZUZpZWxkcy5jbGVhcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VSYXdHZXRSYW5nZShzdG9yYWdlOiBGaWxlU3RvcmFnZSwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8eyByYXdHZXRSYW5nZTogR2V0UmFuZ2U7IHNpemU6IG51bWJlciB9PiB7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHN0b3JhZ2UuZ2V0SW5mbyhmaWxlTmFtZSk7XG4gICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGVFcnJvcihgYnVsayBmaWxlICR7ZmlsZU5hbWV9IGlzIG1pc3NpbmdgKTtcbiAgICBjb25zdCByYXdHZXRSYW5nZTogR2V0UmFuZ2UgPSBhc3luYyAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCBzdG9yYWdlLmdldFJhbmdlKGZpbGVOYW1lLCB7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgIGlmICghYnVmKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGVFcnJvcihgcmFuZ2UgWyR7c3RhcnR9LCAke2VuZH0pIG9mICR7ZmlsZU5hbWV9IGlzIG1pc3NpbmdgKTtcbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9O1xuICAgIHJldHVybiB7IHJhd0dldFJhbmdlLCBzaXplOiBpbmZvLnNpemUgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGaWxlUmVhZGVyKG5hbWU6IHN0cmluZywgc3RvcmFnZTogRmlsZVN0b3JhZ2UsIGY6IEJ1bGtGaWxlSW5mbywgY2FjaGU6IE1hcDxzdHJpbmcsIEJhc2VCdWxrRGF0YWJhc2VSZWFkZXI+KTogUHJvbWlzZTxCYXNlQnVsa0RhdGFiYXNlUmVhZGVyPiB7XG4gICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGYuZmlsZU5hbWUpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgbWFrZVJhd0dldFJhbmdlKHN0b3JhZ2UsIGYuZmlsZU5hbWUpO1xuICAgIGNvbnN0IGZpbGVJZCA9IG51bGxKb2luKG5hbWUsIGYuZmlsZU5hbWUpO1xuICAgIGNvbnN0IG9wZW5lZCA9IGF3YWl0IGJsb2NrQ2FjaGUub3BlbihmaWxlSWQsIHJhdy5zaXplLCByYXcucmF3R2V0UmFuZ2UpO1xuICAgIGNvbnN0IHJlYWRlciA9IGF3YWl0IGxvYWRCdWxrRGF0YWJhc2UoeyB0b3RhbEJ5dGVzOiBvcGVuZWQudW5jb21wcmVzc2VkU2l6ZSwgZ2V0UmFuZ2U6IG9wZW5lZC5nZXRSYW5nZSwgbmFtZTogYCR7QlVMS19ST09UX0ZPTERFUn0vJHtuYW1lfS8ke2YuZmlsZU5hbWV9YCB9KTtcbiAgICBjYWNoZS5zZXQoZi5maWxlTmFtZSwgcmVhZGVyKTtcbiAgICByZXR1cm4gcmVhZGVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN0cmVhbUVudHJpZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0b3JhZ2U6IEZpbGVTdG9yYWdlLFxuICAgIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLFxuICAgIGNhY2hlOiBNYXA8c3RyaW5nLCBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5Pixcbik6IFByb21pc2U8eyBlbnRyaWVzOiB7IHRpbWU6IG51bWJlcjsgZmlsZU5hbWU6IHN0cmluZzsgZW50cnk6IFN0cmVhbUVudHJ5IH1bXTsgdG90YWxCeXRlczogbnVtYmVyOyBtaXNzaW5nOiBib29sZWFuOyBzaXplczogTWFwPHN0cmluZywgbnVtYmVyPiB9PiB7XG4gICAgY29uc3Qgc2l6ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGlmICghc3RyZWFtRmlsZXMubGVuZ3RoKSByZXR1cm4geyBlbnRyaWVzOiBbXSwgdG90YWxCeXRlczogMCwgbWlzc2luZzogZmFsc2UsIHNpemVzIH07XG4gICAgbGV0IG1pc3NpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBwZXJGaWxlID0gYXdhaXQgUHJvbWlzZS5hbGwoc3RyZWFtRmlsZXMubWFwKGFzeW5jIChmKTogUHJvbWlzZTx7IGZpbGVOYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlcjsgZW50cmllczogU3RyZWFtRW50cnlbXSB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgc3RvcmFnZS5nZXRJbmZvKGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpbmZvKSB7IG1pc3NpbmcgPSB0cnVlOyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICBjb25zdCBzaXplID0gaW5mby5zaXplO1xuICAgICAgICAgICAgc2l6ZXMuc2V0KGYuZmlsZU5hbWUsIHNpemUpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucmVhZFNpemUgPT09IHNpemUpIHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplLCBlbnRyaWVzOiBjYWNoZWQuZW50cmllcyB9O1xuICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHsgY2FjaGUuc2V0KGYuZmlsZU5hbWUsIHsgcmVhZFNpemU6IDAsIHBhcnNlZFBvczogMCwgZW50cmllczogW10gfSk7IHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplOiAwLCBlbnRyaWVzOiBbXSB9OyB9XG4gICAgICAgICAgICAvLyBBcHBlbmQtb25seTogYSBsYXJnZXIgc2l6ZSBtZWFucyBuZXcgYnl0ZXMgYXQgdGhlIHRhaWwsIHBhcnNlIG9ubHkgdGhvc2UuXG4gICAgICAgICAgICBpZiAoY2FjaGVkICYmIHNpemUgPiBjYWNoZWQucmVhZFNpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWZmaXggPSBhd2FpdCBzdG9yYWdlLmdldFJhbmdlKGYuZmlsZU5hbWUsIHsgc3RhcnQ6IGNhY2hlZC5wYXJzZWRQb3MsIGVuZDogc2l6ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeCkgeyBtaXNzaW5nID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU3RyZWFtKHN1ZmZpeCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5iYWRCeXRlcyA+IDApIGNvbnNvbGUud2FybihgJHtuYW1lfSBzdHJlYW0gZmlsZSAke2YuZmlsZU5hbWV9IGhhZCAke3BhcnNlZC5iYWRCeXRlc30gdHJhaWxpbmcgYmFkL2luY29tcGxldGUgYnl0ZXMgKHN0b3BwZWQgcmVhZGluZyB0aGVyZSlgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gcGFyc2VkLmVudHJpZXMubGVuZ3RoID8gY2FjaGVkLmVudHJpZXMuY29uY2F0KHBhcnNlZC5lbnRyaWVzKSA6IGNhY2hlZC5lbnRyaWVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFBvcyA9IGNhY2hlZC5wYXJzZWRQb3MgKyAoc3VmZml4Lmxlbmd0aCAtIHBhcnNlZC5iYWRCeXRlcyk7XG4gICAgICAgICAgICAgICAgY2FjaGUuc2V0KGYuZmlsZU5hbWUsIHsgcmVhZFNpemU6IHNpemUsIHBhcnNlZFBvcywgZW50cmllcyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWxlTmFtZTogZi5maWxlTmFtZSwgc2l6ZSwgZW50cmllcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgc3RvcmFnZS5nZXRSYW5nZShmLmZpbGVOYW1lLCB7IHN0YXJ0OiAwLCBlbmQ6IHNpemUgfSk7XG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikgeyBtaXNzaW5nID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTdHJlYW0oYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuYmFkQnl0ZXMgPiAwKSBjb25zb2xlLndhcm4oYCR7bmFtZX0gc3RyZWFtIGZpbGUgJHtmLmZpbGVOYW1lfSBoYWQgJHtwYXJzZWQuYmFkQnl0ZXN9IHRyYWlsaW5nIGJhZC9pbmNvbXBsZXRlIGJ5dGVzIChzdG9wcGVkIHJlYWRpbmcgdGhlcmUpYCk7XG4gICAgICAgICAgICBjYWNoZS5zZXQoZi5maWxlTmFtZSwgeyByZWFkU2l6ZTogc2l6ZSwgcGFyc2VkUG9zOiBzaXplIC0gcGFyc2VkLmJhZEJ5dGVzLCBlbnRyaWVzOiBwYXJzZWQuZW50cmllcyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplLCBlbnRyaWVzOiBwYXJzZWQuZW50cmllcyB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIG1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBlbnRyaWVzOiB7IHRpbWU6IG51bWJlcjsgZmlsZU5hbWU6IHN0cmluZzsgZW50cnk6IFN0cmVhbUVudHJ5IH1bXSA9IFtdO1xuICAgIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgICBmb3IgKGNvbnN0IHBmIG9mIHBlckZpbGUpIHtcbiAgICAgICAgaWYgKCFwZikgY29udGludWU7XG4gICAgICAgIHRvdGFsQnl0ZXMgKz0gcGYuc2l6ZTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZi5lbnRyaWVzKSBlbnRyaWVzLnB1c2goeyB0aW1lOiBlbnRyeS50aW1lLCBmaWxlTmFtZTogcGYuZmlsZU5hbWUsIGVudHJ5IH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBlbnRyaWVzLCB0b3RhbEJ5dGVzLCBtaXNzaW5nLCBzaXplcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJTdHJlYW1FbnRyaWVzKGVudHJpZXM6IHsgdGltZTogbnVtYmVyOyBmaWxlTmFtZTogc3RyaW5nOyBlbnRyeTogU3RyZWFtRW50cnkgfVtdKTogU3RyZWFtRW50cnlbXSB7XG4gICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLnRpbWUgIT09IGIudGltZSkgcmV0dXJuIGEudGltZSAtIGIudGltZTtcbiAgICAgICAgcmV0dXJuIGEuZmlsZU5hbWUgPCBiLmZpbGVOYW1lICYmIC0xIHx8IGEuZmlsZU5hbWUgPiBiLmZpbGVOYW1lICYmIDEgfHwgMDtcbiAgICB9KTtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmVudHJ5KTtcbn1cblxuZnVuY3Rpb24gcHJ1bmVTdWJDYWNoZXMoYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSwgc3RyZWFtRmlsZXM6IFN0cmVhbUZpbGVJbmZvW10sIHN1YkNhY2hlczogU3ViUmVhZGVyQ2FjaGVzKSB7XG4gICAgY29uc3QgbGl2ZUJ1bGsgPSBuZXcgU2V0KGJ1bGtGaWxlcy5tYXAoZiA9PiBmLmZpbGVOYW1lKSk7XG4gICAgY29uc3QgbGl2ZVN0cmVhbSA9IG5ldyBTZXQoc3RyZWFtRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSkpO1xuICAgIGZvciAoY29uc3QgbiBvZiBzdWJDYWNoZXMuYnVsay5rZXlzKCkpIGlmICghbGl2ZUJ1bGsuaGFzKG4pKSBzdWJDYWNoZXMuYnVsay5kZWxldGUobik7XG4gICAgZm9yIChjb25zdCBuIG9mIHN1YkNhY2hlcy5zdHJlYW0ua2V5cygpKSBpZiAoIWxpdmVTdHJlYW0uaGFzKG4pKSBzdWJDYWNoZXMuc3RyZWFtLmRlbGV0ZShuKTtcbn1cblxuLy8gQSBjb3JydXB0L3VucmVhZGFibGUgY29sdW1uIGluIE9ORSB1bmRlcmx5aW5nIGZpbGUgbXVzdCBub3QgYnJlYWsgdGhlIHdob2xlIGpvaW5lZCByZWFkLiBXaGVuIGEgc291cmNlJ3MgY29sdW1uIHJlYWQgdGhyb3dzLCB3ZSBkcm9wIHRoYXQgc291cmNlIGZvciB0aGF0IGNvbHVtbiAoZmFsbGluZyB0aHJvdWdoIHRvIG9sZGVyIHJlYWRlcnMsIGV4YWN0bHkgYXMgaWYgdGhlIGZpbGUgbmV2ZXIgc2V0IHRoZSBjb2x1bW4pIGFuZCB3YXJuIG9uY2UgcGVyIChmaWxlLCBjb2x1bW4pIHNvIHRoZSBjb3JydXB0aW9uIGlzIHZpc2libGUgd2l0aG91dCBmbG9vZGluZyB0aGUgbG9nIG9uIGV2ZXJ5IHJlYnVpbGQuXG5jb25zdCB3YXJuZWRDb3JydXB0UmVhZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHdhcm5Db3JydXB0UmVhZChkYjogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciwgY29sdW1uOiBzdHJpbmcsIGU6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gZGIubmFtZSB8fCBcIih1bmtub3duIHNvdXJjZSlcIjtcbiAgICBjb25zdCBkZWR1cGVLZXkgPSBudWxsSm9pbihwYXRoLCBjb2x1bW4pO1xuICAgIGlmICh3YXJuZWRDb3JydXB0UmVhZHMuaGFzKGRlZHVwZUtleSkpIHJldHVybjtcbiAgICB3YXJuZWRDb3JydXB0UmVhZHMuYWRkKGRlZHVwZUtleSk7XG4gICAgY29uc29sZS53YXJuKGAke3JlZChcImNvcnJ1cHQgcmVhZFwiKX06IGZpbGUgJHtwYXRofSBjb2x1bW4gJHtKU09OLnN0cmluZ2lmeShjb2x1bW4pfSBjb3VsZCBub3QgYmUgcmVhZCAtIHNraXBwaW5nIGl0IChpdHMgZGF0YSBpcyBkcm9wcGVkIGZyb20gcmVzdWx0cyk6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG59XG5cbmZ1bmN0aW9uIGpvaW5CdWxrRGF0YWJhc2VzKGRhdGFiYXNlczogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcltdKTogUmVzb2x2ZWRSZWFkZXIge1xuICAgIGNvbnN0IGRlbGV0ZVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGlmICghZGIuZGVsZXRlVGltZXMpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHRdIG9mIGRiLmRlbGV0ZVRpbWVzKSBkZWxldGVUaW1lLnNldChrZXksIE1hdGgubWF4KGRlbGV0ZVRpbWUuZ2V0KGtleSkgPz8gLUluZmluaXR5LCB0KSk7XG4gICAgfVxuICAgIGNvbnN0IGtleVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdF0gb2YgZGIua2V5VGltZXMpIGtleVRpbWUuc2V0KGtleSwgTWF0aC5tYXgoa2V5VGltZS5nZXQoa2V5KSA/PyAtSW5maW5pdHksIHQpKTtcbiAgICB9XG4gICAgY29uc3QgZGVsT2YgPSAoa2V5OiBzdHJpbmcpID0+IGRlbGV0ZVRpbWUuZ2V0KGtleSkgPz8gLUluZmluaXR5O1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB0XSBvZiBrZXlUaW1lKSBpZiAodCA+IGRlbE9mKGtleSkpIGtleXMucHVzaChrZXkpO1xuXG4gICAgY29uc3QgY29sdW1uczogeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9W10gPSBbXTtcbiAgICBjb25zdCBjb2x1bW5CeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9PigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRiLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGNvbHVtbkJ5TmFtZS5nZXQoY29sLmNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcgPSB7IGNvbHVtbjogY29sLmNvbHVtbiwgYnl0ZVNpemU6IDAgfTtcbiAgICAgICAgICAgICAgICBjb2x1bW5CeU5hbWUuc2V0KGNvbC5jb2x1bW4sIGV4aXN0aW5nKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goZXhpc3RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhpc3RpbmcuYnl0ZVNpemUgKz0gY29sLmJ5dGVTaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWxCeXRlczogZGF0YWJhc2VzLnJlZHVjZSgoYWNjLCBkYikgPT4gYWNjICsgZGIudG90YWxCeXRlcywgMCksXG4gICAgICAgIHJvd0NvdW50OiBrZXlzLmxlbmd0aCxcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmF3S2V5Q291bnQ6IGRhdGFiYXNlcy5yZWR1Y2UoKGFjYywgZGIpID0+IGFjYyArIGRiLmtleVRpbWVzLnNpemUgKyAoZGIuZGVsZXRlVGltZXM/LnNpemUgPz8gMCksIDApLFxuICAgICAgICByZWFkZXJDb3VudDogZGF0YWJhc2VzLmxlbmd0aCxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAga2V5VGltZXM6IGtleVRpbWUsXG4gICAgICAgIGRlbGV0ZVRpbWVzOiBkZWxldGVUaW1lLFxuICAgICAgICBhc3luYyBnZXRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJSZWFkZXIgPSBhd2FpdCBQcm9taXNlLmFsbChkYXRhYmFzZXMubWFwKGFzeW5jIGRiID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiLmNvbHVtbnMuc29tZShjID0+IGMuY29sdW1uID09PSBjb2x1bW4pKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBkYi5nZXRDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXAoZW50cmllcy5tYXAoZSA9PiBbZS5rZXksIHsgdmFsdWU6IGUudmFsdWUsIHRpbWU6IGUudGltZSB9XSkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybkNvcnJ1cHRSZWFkKGRiLCBjb2x1bW4sIGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdFZhbDogdW5rbm93bjtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgcGVyUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBtICYmIG0uZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjZWxsLnZhbHVlID09PSBBQlNFTlQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC50aW1lID4gYmVzdFRpbWUpIHsgYmVzdFRpbWUgPSBjZWxsLnRpbWU7IGJlc3RWYWwgPSBjZWxsLnZhbHVlOyBmb3VuZCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbGl2ZSA9IGZvdW5kICYmIGJlc3RUaW1lID4gZGVsT2Yoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBsaXZlID8gYmVzdFZhbCA6IHVuZGVmaW5lZCwgdGltZTogbGl2ZSA/IGJlc3RUaW1lIDogKGtleVRpbWUuZ2V0KGtleSkgPz8gMCkgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBnZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3Qga3QgPSBrZXlUaW1lLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGt0ID09PSB1bmRlZmluZWQgfHwga3QgPD0gZGVsT2Yoa2V5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXN0VmFsOiB1bmtub3duO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRiIG9mIGRhdGFiYXNlcykge1xuICAgICAgICAgICAgICAgIGlmICghZGIuY29sdW1ucy5zb21lKGMgPT4gYy5jb2x1bW4gPT09IGNvbHVtbikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCByO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHIgPSBhd2FpdCBkYi5nZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuQ29ycnVwdFJlYWQoZGIsIGNvbHVtbiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAociA9PT0gQUJTRU5UKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoci50aW1lID4gYmVzdFRpbWUpIHsgYmVzdFRpbWUgPSByLnRpbWU7IGJlc3RWYWwgPSByLnZhbHVlOyBmb3VuZCA9IHRydWU7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpdmUgPSBmb3VuZCAmJiBiZXN0VGltZSA+IGRlbE9mKGtleSk7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbGl2ZSA/IGJlc3RWYWwgOiB1bmRlZmluZWQsIHRpbWU6IGxpdmUgPyBiZXN0VGltZSA6IGt0IH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
|
|
423
|
-
/* _JS_SOURCE_HASH = "
|
|
423
|
+
/* _JS_SOURCE_HASH = "13192b4052972ca23d4b5a81bc60ee4c3f60a369fd2bef55c76aef41b36ecc2b"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.WriteOverlay = exports.DELETED = void 0;
|
|
4
4
|
exports.DELETED = Symbol("deleted");
|
|
@@ -50,4 +50,4 @@ class WriteOverlay {
|
|
|
50
50
|
}
|
|
51
51
|
exports.WriteOverlay = WriteOverlay;
|
|
52
52
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3JpdGVPdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiV3JpdGVPdmVybGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUl6Qyw0V0FBNFc7QUFDNVcsTUFBYSxZQUFZO0lBQXpCO1FBQ1ksWUFBTyxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBd0N0RCxDQUFDO0lBdENHLElBQUksSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxHQUFXLElBQThCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEdBQUcsQ0FBQyxHQUFXLElBQWEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxLQUErQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsUUFBUSxDQUFDLEdBQVcsRUFBRSxHQUE0QixFQUFFLElBQVksRUFBRSxPQUFnQjtRQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUs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ZXRlZFwiKTtcblxuZXhwb3J0IHR5cGUgT3ZlcmxheUVudHJ5ID0geyB0aW1lOiBudW1iZXI7IHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHR5cGVvZiBERUxFVEVEIH07XG5cbi8vIEluLW1lbW9yeSBwZW5kaW5nIG11dGF0aW9ucyBsYXllcmVkIG9uIHRvcCBvZiBhIExvYWRlZEluZGV4LiBFYWNoIGVudHJ5IGNhcnJpZXMgdGhlIHdyaXRlJ3MgdW5pcXVlIHRpbWVzdGFtcCBzbyBjcm9zcy10YWIgd3JpdGVzIGNhbiBiZSBvcmRlcmVkICsgdGhlIHN3YXAgY2FuIGRyb3AgZW50cmllcyB0aGUgbmV3IGluZGV4IGFscmVhZHkgY292ZXJzLiBNZXRob2RzIHRoYXQgbXV0YXRlIHJlcG9ydCB3aGljaCBjb2x1bW5zIGludmFsaWRhdGUgKFwiYWxsXCIgaWYgdGhlIGtleSdzIGxpdmVuZXNzIGZsaXBwZWQpLCBzbyB0aGUgaG9zdCBjYW4gZHJvcCB0aGUgcmlnaHQgY2FjaGVzIHdpdGhvdXQgc2Nhbm5pbmcgZXZlcnkgY29sdW1uLlxuZXhwb3J0IGNsYXNzIFdyaXRlT3ZlcmxheSB7XG4gICAgcHJpdmF0ZSBlbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE92ZXJsYXlFbnRyeT4oKTtcblxuICAgIGdldCBzaXplKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmVudHJpZXMuc2l6ZTsgfVxuICAgIGdldChrZXk6IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGtleSk7IH1cbiAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZW50cmllcy5oYXMoa2V5KTsgfVxuICAgIGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+IHsgcmV0dXJuIHRoaXMuZW50cmllcy5rZXlzKCk7IH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJuIHRoaXMuZW50cmllc1tTeW1ib2wuaXRlcmF0b3JdKCk7IH1cblxuICAgIHdyaXRlUm93KGtleTogc3RyaW5nLCByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB0aW1lOiBudW1iZXIsIHdhc0xpdmU6IGJvb2xlYW4pOiB7IGludmFsaWRhdGVkQ29sdW1uczogSXRlcmFibGU8c3RyaW5nPiB8IFwiYWxsXCIgfSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5lbnRyaWVzLmdldChrZXkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV4aXN0aW5nICYmIGV4aXN0aW5nLnZhbHVlICE9PSBERUxFVEVEID8geyAuLi5leGlzdGluZy52YWx1ZSwgLi4ucm93IH0gOiB7IC4uLnJvdyB9O1xuICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgeyB0aW1lLCB2YWx1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHsgaW52YWxpZGF0ZWRDb2x1bW5zOiB3YXNMaXZlID8gT2JqZWN0LmtleXMocm93KSA6IFwiYWxsXCIgfTtcbiAgICB9XG5cbiAgICBkZWxldGVLZXkoa2V5OiBzdHJpbmcsIHRpbWU6IG51bWJlciwgd2FzTGl2ZTogYm9vbGVhbik6IHsgaW52YWxpZGF0ZWRDb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIiB9IHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNldChrZXksIHsgdGltZSwgdmFsdWU6IERFTEVURUQgfSk7XG4gICAgICAgIHJldHVybiB7IGludmFsaWRhdGVkQ29sdW1uczogd2FzTGl2ZSA/IFwiYWxsXCIgOiBbXSB9O1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQgeyB0aGlzLmVudHJpZXMuY2xlYXIoKTsgfVxuXG4gICAgLy8gRHJvcCBlbnRyaWVzIHRoZSBuZXcgaW5kZXggYWxyZWFkeSByZWZsZWN0cyAoaXRzIGtleVRpbWUgb3IgZGVsZXRlVGltZSDiiaUgdGhlIGVudHJ5J3MgdGltZSkuIFRoZSByZW1haW5pbmcgZW50cmllcyBhcmUgd3JpdGVzIHRoZSBpbmRleCBkb2Vzbid0IHlldCBzZWUg4oCUIHRoZXkgaGF2ZSB0byBrZWVwIHNlcnZpbmcgcmVhZHMuXG4gICAgc3dlZXBDb3ZlcmVkKGF1dGhvcml0eTogKGtleTogc3RyaW5nKSA9PiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudGltZSA8PSBhdXRob3JpdHkoa2V5KSkgdGhpcy5lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhpcyBvdmVybGF5IG9udG8gdGhlIGJhc2UgY29sdW1uIGVudHJpZXMuIEEgY29sdW1uLXVuc2V0IG92ZXJsYXkgZW50cnkgbGVhdmVzIHRoZSBiYXNlIHZhbHVlK3RpbWUgaW4gcGxhY2UgKGEgcGFydGlhbCB3cml0ZSBvbmx5IG92ZXJyaWRlcyB0aGUgY29sdW1ucyBpdCBzZXQpLlxuICAgIHBhdGNoQ29sdW1uKGJhc2U6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdLCBjb2x1bW46IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdIHtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5zaXplID09PSAwKSByZXR1cm4gYmFzZTtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcChiYXNlLm1hcChlID0+IFtlLmtleSwgeyB2YWx1ZTogZS52YWx1ZSwgdGltZTogZS50aW1lIH1dKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZW50cmllcykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSB7IG1hcC5kZWxldGUoa2V5KTsgY29udGludWU7IH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4gaW4gZW50cnkudmFsdWUpIG1hcC5zZXQoa2V5LCB7IHZhbHVlOiBlbnRyeS52YWx1ZVtjb2x1bW5dLCB0aW1lOiBlbnRyeS50aW1lIH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoIW1hcC5oYXMoa2V5KSkgbWFwLnNldChrZXksIHsgdmFsdWU6IHVuZGVmaW5lZCwgdGltZTogZW50cnkudGltZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLm1hcF0ubWFwKChba2V5LCB2XSkgPT4gKHsga2V5LCB2YWx1ZTogdi52YWx1ZSwgdGltZTogdi50aW1lIH0pKTtcbiAgICB9XG59XG4iXX0=
|
|
53
|
-
/* _JS_SOURCE_HASH = "
|
|
53
|
+
/* _JS_SOURCE_HASH = "a81c7a89fa7ca3ad8d04bb715acb26144f2ccab461dfa7dcb6fee59469458e0f"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.blockCache = exports.BlockCache = exports.encodeCompressedBlocks = void 0;
|
|
4
4
|
const LZ4_1 = require("socket-function/src/lz4/LZ4");
|
|
@@ -160,4 +160,4 @@ exports.BlockCache = BlockCache;
|
|
|
160
160
|
// Shared across every BulkDatabase2 collection/file (the 512MB budget is global).
|
|
161
161
|
exports.blockCache = new BlockCache();
|
|
162
162
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tDYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJsb2NrQ2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBRWxELCtGQUErRjtBQUMvRixHQUFHO0FBQ0gsMlhBQTJYO0FBQzNYLEdBQUc7QUFDSCxpRkFBaUY7QUFDakYsR0FBRztBQUNILDZYQUE2WDtBQUM3WCxHQUFHO0FBQ0gseUlBQXlJO0FBRXpJLE1BQU0sVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDaEUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVcsQ0FBQztBQWF4QywrRUFBK0U7QUFDL0UsU0FBZ0Isc0JBQXNCLENBQUMsSUFBWTtJQUMvQyxJQUFJLE1BQU0sR0FBZ0IsRUFBRSxDQUFDO0lBQzdCLElBQUksV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUMvQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLFVBQVUsR0FBRyxTQUFHLENBQUMsUUFBUSxDQUFDLEdB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LENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNoSixDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0o7QUFsSEQsZ0NBa0hDO0FBRUQsa0ZBQWtGO0FBQ3JFLFFBQUEsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMWjQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9sejQvTFo0XCI7XG5cbi8vIEJsb2NrLWFsaWduZWQsIHByb21pc2UtZGVkdXBlZCwgZGVjb21wcmVzc2luZyByYW5nZSBjYWNoZSBmb3IgQnVsa0RhdGFiYXNlMidzIG9uLWRpc2sgZmlsZXMuXG4vLyBcbi8vIE9uLWRpc2sgZm9ybWF0IChwcm9kdWNlZCBieSBlbmNvZGVDb21wcmVzc2VkQmxvY2tzKTogdGhlIGxvZ2ljYWwgKHVuY29tcHJlc3NlZCkgYnVsayBidWZmZXIgaXMgc3BsaXQgaW50byBmaXhlZCBCTE9DS19TSVpFIGJsb2NrczsgZWFjaCBibG9jayBpcyBMWjQtY29tcHJlc3NlZCB1bmxlc3MgdGhhdCB3b3VsZG4ndCBzaHJpbmsgaXQgYnkgYXQgbGVhc3QgMngsIGluIHdoaWNoIGNhc2UgaXQncyBzdG9yZWQgcmF3LiBUaGUgZmlsZSBzdGFydHMgd2l0aCBhIEpTT04gaW5kZXggbWFwcGluZyBlYWNoIGJsb2NrIHRvIGl0cyBzdG9yZWQgbGVuZ3RoICsgYSBjb21wcmVzc2VkIGZsYWcsIHNvIGEgcmVhZGVyIGNhbiBzZWVrIHN0cmFpZ2h0IHRvIGFueSBibG9jazpcbi8vIFxuLy8gICBbdTMyIGluZGV4TGVuZ3RoXVtpbmRleCBKU09OXVtibG9jayAwIHN0b3JlZCBieXRlc11bYmxvY2sgMSBzdG9yZWQgYnl0ZXNdLi4uXG4vLyBcbi8vIFRoZSBjYWNoZSBwcmVzZW50cyBhICpsb2dpY2FsKiBnZXRSYW5nZSAob3ZlciB1bmNvbXByZXNzZWQgYnl0ZXMpIHNvIEJ1bGtEYXRhYmFzZTIncyByZWFkZXIgaXMgb2JsaXZpb3VzIHRvIGNvbXByZXNzaW9uLiBJdCByZWFkcyBjb21wcmVzc2VkIGJ5dGVzIHZpYSB0aGUgdW5kZXJseWluZyBnZXRSYW5nZSwgZGVjb21wcmVzc2VzLCBhbmQgY2FjaGVzIHRoZSB1bmNvbXByZXNzZWQgYmxvY2tzLiBSZWFkcyBhcmUgcHJvbWlzZS1kZWR1cGVkIGFuZCBjb250aWd1b3VzIG1pc3NpbmcgYmxvY2tzIGFyZSBjb2FsZXNjZWQgaW50byBvbmUgdW5kZXJseWluZyByZWFkLiBGaWxlcyBhcmUgaW1tdXRhYmxlLCBzbyBjYWNoZWQgYmxvY2tzIGFyZSB2YWxpZCBmb3JldmVyLlxuLy8gXG4vLyBQZXItYmxvY2sgY29tcHJlc3Npb24gbWFpbmx5IGhlbHBzIHNsb3cgc3RvcmFnZSAoSEREKTogZmV3ZXIgYnl0ZXMgb2ZmIGRpc2sgcGVyIGJsb2NrLCBhdCB0aGUgY29zdCBvZiBhIGZhc3QgaW4tbWVtb3J5IExaNCBkZWNvbXByZXNzLlxuXG5jb25zdCBCTE9DS19TSVpFID0gMjU2ICogMTAyNDtcbmNvbnN0IE1BWF9CTE9DS1MgPSBNYXRoLmZsb29yKCg1MTIgKiAxMDI0ICogMTAyNCkgLyBCTE9DS19TSVpFKTtcbmNvbnN0IE1JTl9DT01QUkVTU0lPTl9SQVRJTyA9IDI7XG5cbmNvbnN0IEVNUFRZID0gQnVmZmVyLmFsbG9jKDApIGFzIEJ1ZmZlcjtcblxuZXhwb3J0IHR5cGUgR2V0UmFuZ2UgPSAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpID0+IFByb21pc2U8QnVmZmVyPjtcblxudHlwZSBCbG9ja01ldGEgPSB7IGxlbjogbnVtYmVyOyBjOiAwIHwgMSB9O1xudHlwZSBGaWxlSW5kZXggPSB7XG4gICAgdW5jb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICAgIGJsb2NrU2l6ZTogbnVtYmVyO1xuICAgIGJsb2NrczogQmxvY2tNZXRhW107XG4gICAgLy8gU3RvcmVkIGJ5dGUgb2Zmc2V0IG9mIGVhY2ggYmxvY2sgKG9mZnNldHNbaV0uLm9mZnNldHNbaV0rYmxvY2tzW2ldLmxlbiksIGZpbGxlZCBpbiBvbiBwYXJzZS5cbiAgICBvZmZzZXRzOiBudW1iZXJbXTtcbn07XG5cbi8vIFdyaXRlcyBhIGxvZ2ljYWwgYnVsayBidWZmZXIgaW4gdGhlIGNvbXByZXNzZWQtYmxvY2sgZm9ybWF0IGRlc2NyaWJlZCBhYm92ZS5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVDb21wcmVzc2VkQmxvY2tzKGRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgbGV0IGJsb2NrczogQmxvY2tNZXRhW10gPSBbXTtcbiAgICBsZXQgc3RvcmVkUGFydHM6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IGJsb2NrQ291bnQgPSBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyBCTE9DS19TSVpFKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrQ291bnQ7IGkrKykge1xuICAgICAgICBsZXQgcmF3ID0gZGF0YS5zdWJhcnJheShpICogQkxPQ0tfU0laRSwgTWF0aC5taW4oKGkgKyAxKSAqIEJMT0NLX1NJWkUsIGRhdGEubGVuZ3RoKSk7XG4gICAgICAgIGxldCBjb21wcmVzc2VkID0gTFo0LmNvbXByZXNzKHJhdyk7XG4gICAgICAgIC8vIE9ubHkga2VlcCB0aGUgY29tcHJlc3NlZCBmb3JtIGlmIGl0IHNocmlua3MgdGhlIGJsb2NrIGJ5IGF0IGxlYXN0IE1JTl9DT01QUkVTU0lPTl9SQVRJTy5cbiAgICAgICAgaWYgKGNvbXByZXNzZWQubGVuZ3RoICogTUlOX0NPTVBSRVNTSU9OX1JBVElPIDw9IHJhdy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0b3JlZFBhcnRzLnB1c2goY29tcHJlc3NlZCk7XG4gICAgICAgICAgICBibG9ja3MucHVzaCh7IGxlbjogY29tcHJlc3NlZC5sZW5ndGgsIGM6IDEgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdG9yZWRQYXJ0cy5wdXNoKHJhdyk7XG4gICAgICAgICAgICBibG9ja3MucHVzaCh7IGxlbjogcmF3Lmxlbmd0aCwgYzogMCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgaW5kZXhCdWYgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh7IHVuY29tcHJlc3NlZFNpemU6IGRhdGEubGVuZ3RoLCBibG9ja1NpemU6IEJMT0NLX1NJWkUsIGJsb2NrcyB9KSwgXCJ1dGY4XCIpO1xuICAgIGxldCBwcmVmaXggPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgcHJlZml4LndyaXRlVUludDMyTEUoaW5kZXhCdWYubGVuZ3RoLCAwKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbcHJlZml4LCBpbmRleEJ1ZiwgLi4uc3RvcmVkUGFydHNdKTtcbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrQ2FjaGUge1xuICAgIC8vIFVuY29tcHJlc3NlZCBibG9ja3M7IGluc2VydGlvbiBvcmRlciBpcyBMUlUgb3JkZXIgKHJlLWluc2VydGVkIG9uIGFjY2VzcykuXG4gICAgcHJpdmF0ZSBibG9ja3MgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxCdWZmZXI+PigpO1xuICAgIC8vIFBhcnNlZCBmaWxlIGluZGV4IHBlciBmaWxlSWQgKHNtYWxsOyBub3Qgc3ViamVjdCB0byB0aGUgYmxvY2sgTFJVKS5cbiAgICBwcml2YXRlIGluZGV4ZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxGaWxlSW5kZXg+PigpO1xuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmJsb2Nrcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmluZGV4ZXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXZpY3QoZmlsZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbmRleGVzLmRlbGV0ZShmaWxlSWQpO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBmaWxlSWQgKyBcIjpcIjtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5ibG9ja3Mua2V5cygpKSBpZiAoa2V5LnN0YXJ0c1dpdGgocHJlZml4KSkgdGhpcy5ibG9ja3MuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b3VjaChrZXk6IHN0cmluZywgdmFsdWU6IFByb21pc2U8QnVmZmVyPikge1xuICAgICAgICB0aGlzLmJsb2Nrcy5kZWxldGUoa2V5KTtcbiAgICAgICAgdGhpcy5ibG9ja3Muc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB3aGlsZSAodGhpcy5ibG9ja3Muc2l6ZSA+IE1BWF9CTE9DS1MpIHtcbiAgICAgICAgICAgIGxldCBvbGRlc3QgPSB0aGlzLmJsb2Nrcy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICAgIHRoaXMuYmxvY2tzLmRlbGV0ZShvbGRlc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVhZHMgKyB2YWxpZGF0ZXMgdGhlIGZpbGUgaW5kZXguIFJlamVjdHMgdGhlIFdIT0xFIGZpbGUgaWYgaXQgaXNuJ3QgZXhhY3RseSB0aGUgc2l6ZSBpdHMgaW5kZXggaW1wbGllcyDigJQgYSB0cnVuY2F0ZWQvcGFydGlhbCB3cml0ZSAoZS5nLiBhIGNyYXNoIG1pZC13cml0ZSkgaXMgZGV0ZWN0ZWQgaGVyZSByYXRoZXIgdGhhbiBzaWxlbnRseSByZXR1cm5pbmcgY29ycnVwdGVkIHZhbHVlcyBmb3IgdGhlIHJvd3MgbmVhciB0aGUgZW5kLlxuICAgIHByaXZhdGUgYXN5bmMgcmVhZEluZGV4KHJhd0dldFJhbmdlOiBHZXRSYW5nZSwgZmlsZVNpemU6IG51bWJlcik6IFByb21pc2U8RmlsZUluZGV4PiB7XG4gICAgICAgIGxldCBoZWFkID0gYXdhaXQgcmF3R2V0UmFuZ2UoMCwgNCk7XG4gICAgICAgIGlmIChoZWFkLmxlbmd0aCA8IDQpIHRocm93IG5ldyBFcnJvcihgYnVsayBmaWxlIHRvbyBzaG9ydCBmb3IgYW4gaW5kZXggaGVhZGVyICgke2ZpbGVTaXplfSBieXRlcylgKTtcbiAgICAgICAgbGV0IGluZGV4TGVuZ3RoID0gaGVhZC5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgIGlmIChpbmRleExlbmd0aCA8PSAwIHx8IDQgKyBpbmRleExlbmd0aCA+IGZpbGVTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJ1bGsgZmlsZSBpbmRleCBsZW5ndGggJHtpbmRleExlbmd0aH0gaXMgaW52YWxpZCBmb3IgYSAke2ZpbGVTaXplfS1ieXRlIGZpbGVgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXhCdWYgPSBhd2FpdCByYXdHZXRSYW5nZSg0LCA0ICsgaW5kZXhMZW5ndGgpO1xuICAgICAgICBsZXQgcGFyc2VkID0gSlNPTi5wYXJzZShpbmRleEJ1Zi50b1N0cmluZyhcInV0ZjhcIikpIGFzIHsgdW5jb21wcmVzc2VkU2l6ZTogbnVtYmVyOyBibG9ja1NpemU6IG51bWJlcjsgYmxvY2tzOiBCbG9ja01ldGFbXSB9O1xuICAgICAgICBsZXQgZGF0YUJhc2UgPSA0ICsgaW5kZXhMZW5ndGg7XG4gICAgICAgIGxldCBvZmZzZXRzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gZGF0YUJhc2U7XG4gICAgICAgIGZvciAobGV0IGJsb2NrIG9mIHBhcnNlZC5ibG9ja3MpIHtcbiAgICAgICAgICAgIG9mZnNldHMucHVzaChvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGJsb2NrLmxlbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgYmxvY2tzIG11c3QgYWNjb3VudCBmb3IgZXhhY3RseSB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gQW55IG1pc21hdGNoIG1lYW5zIHRoZSBmaWxlIGlzIHRydW5jYXRlZCBvciBvdGhlcndpc2UgY29ycnVwdCDigJQgcmVqZWN0IGl0IGVudGlyZWx5LlxuICAgICAgICBpZiAob2Zmc2V0ICE9PSBmaWxlU2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBidWxrIGZpbGUgaXMgJHtmaWxlU2l6ZX0gYnl0ZXMgYnV0IGl0cyBpbmRleCBpbXBsaWVzICR7b2Zmc2V0fSAodHJ1bmNhdGVkL2NvcnJ1cHQpYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4ucGFyc2VkLCBvZmZzZXRzIH07XG4gICAgfVxuXG4gICAgLy8gT3BlbnMgYW4gaW1tdXRhYmxlIGZpbGU6IHJlYWRzICsgdmFsaWRhdGVzIGl0cyBpbmRleCAoY2FjaGVkKSBhbmQgcmV0dXJucyB0aGUgbG9naWNhbCAodW5jb21wcmVzc2VkKSBzaXplIHBsdXMgYSBsb2dpY2FsIGdldFJhbmdlIHRoYXQgdGhlIGNhbGxlciBjYW4gdXNlIGV4YWN0bHkgbGlrZSBhbiB1bmNvbXByZXNzZWQgZmlsZS4gYGZpbGVTaXplYCBpcyB0aGUgYWN0dWFsIG9uLWRpc2sgYnl0ZSBsZW5ndGgsIHVzZWQgdG8gZGV0ZWN0IHRydW5jYXRpb24uXG4gICAgcHVibGljIGFzeW5jIG9wZW4oZmlsZUlkOiBzdHJpbmcsIGZpbGVTaXplOiBudW1iZXIsIHJhd0dldFJhbmdlOiBHZXRSYW5nZSk6IFByb21pc2U8eyB1bmNvbXByZXNzZWRTaXplOiBudW1iZXI7IGdldFJhbmdlOiBHZXRSYW5nZSB9PiB7XG4gICAgICAgIGxldCBpbmRleFByb21pc2UgPSB0aGlzLmluZGV4ZXMuZ2V0KGZpbGVJZCk7XG4gICAgICAgIGlmICghaW5kZXhQcm9taXNlKSB7XG4gICAgICAgICAgICBpbmRleFByb21pc2UgPSB0aGlzLnJlYWRJbmRleChyYXdHZXRSYW5nZSwgZmlsZVNpemUpO1xuICAgICAgICAgICAgdGhpcy5pbmRleGVzLnNldChmaWxlSWQsIGluZGV4UHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4ID0gYXdhaXQgaW5kZXhQcm9taXNlO1xuICAgICAgICByZXR1cm4geyB1bmNvbXByZXNzZWRTaXplOiBpbmRleC51bmNvbXByZXNzZWRTaXplLCBnZXRSYW5nZTogdGhpcy5tYWtlR2V0UmFuZ2UoZmlsZUlkLCBpbmRleCwgcmF3R2V0UmFuZ2UpIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlR2V0UmFuZ2UoZmlsZUlkOiBzdHJpbmcsIGluZGV4OiBGaWxlSW5kZXgsIHJhd0dldFJhbmdlOiBHZXRSYW5nZSk6IEdldFJhbmdlIHtcbiAgICAgICAgbGV0IGJsb2NrU2l6ZSA9IGluZGV4LmJsb2NrU2l6ZTtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChzdGFydCwgZW5kKSA9PiB7XG4gICAgICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICBsZXQgZmlyc3RCbG9jayA9IE1hdGguZmxvb3Ioc3RhcnQgLyBibG9ja1NpemUpO1xuICAgICAgICAgICAgbGV0IGxhc3RCbG9jayA9IE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gYmxvY2tTaXplKTtcblxuICAgICAgICAgICAgbGV0IHBhcnRzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IGJsb2NrID0gZmlyc3RCbG9jaztcbiAgICAgICAgICAgIHdoaWxlIChibG9jayA8PSBsYXN0QmxvY2spIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gYCR7ZmlsZUlkfToke2Jsb2NrfWA7XG4gICAgICAgICAgICAgICAgbGV0IGNhY2hlZCA9IHRoaXMuYmxvY2tzLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3VjaChrZXksIGNhY2hlZCk7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goYXdhaXQgY2FjaGVkKTtcbiAgICAgICAgICAgICAgICAgICAgYmxvY2srKztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIENvYWxlc2NlIGEgcnVuIG9mIGNvbnNlY3V0aXZlIG1pc3NpbmcgYmxvY2tzIGludG8gb25lIHVuZGVybHlpbmcgKGNvbXByZXNzZWQpIHJlYWQuXG4gICAgICAgICAgICAgICAgbGV0IHJ1blN0YXJ0ID0gYmxvY2s7XG4gICAgICAgICAgICAgICAgbGV0IHJ1bkVuZCA9IGJsb2NrICsgMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAocnVuRW5kIDw9IGxhc3RCbG9jayAmJiAhdGhpcy5ibG9ja3MuaGFzKGAke2ZpbGVJZH06JHtydW5FbmR9YCkpIHJ1bkVuZCsrO1xuICAgICAgICAgICAgICAgIGxldCBjb21wU3RhcnQgPSBpbmRleC5vZmZzZXRzW3J1blN0YXJ0XTtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdE1ldGEgPSBpbmRleC5ibG9ja3NbcnVuRW5kIC0gMV07XG4gICAgICAgICAgICAgICAgbGV0IGNvbXBFbmQgPSBpbmRleC5vZmZzZXRzW3J1bkVuZCAtIDFdICsgbGFzdE1ldGEubGVuO1xuICAgICAgICAgICAgICAgIGxldCBydW5Db21wcmVzc2VkID0gcmF3R2V0UmFuZ2UoY29tcFN0YXJ0LCBjb21wRW5kKTtcbiAgICAgICAgICAgICAgICAvLyBIb2xkIHRoaXMgcnVuJ3MgcHJvbWlzZXMgbG9jYWxseS4gUmVnaXN0ZXJpbmcgdGhlbSBpbiB0aGUgTFJVIGNhbiBldmljdCBlYXJsaWVyIGJsb2NrcyBvZiB0aGUgc2FtZSBydW4gKG9yIG9mIGEgY29uY3VycmVudCBydW4pIGJlZm9yZSB3ZSBnZXQgdG8gYXdhaXQgdGhlbSwgc28gcmVhZGluZyB0aGVtIGJhY2sgb3V0IG9mIHRoZSBjYWNoZSB3b3VsZCBzaWxlbnRseSBkcm9wIGJsb2NrcyBhbmQgcmV0dXJuIGEgc2hvcnQgYnVmZmVyLiBXZSBzdGlsbCByZWdpc3RlciBpbiB0aGUgTFJVIHNvIGNvbmN1cnJlbnQgcmVhZHMgZGVkdXBlIG9udG8gdGhlbS5cbiAgICAgICAgICAgICAgICBsZXQgcnVuUHJvbWlzZXM6IFByb21pc2U8QnVmZmVyPltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHJ1blN0YXJ0OyBpIDwgcnVuRW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1ldGEgPSBpbmRleC5ibG9ja3NbaV07XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWxPZmZzZXQgPSBpbmRleC5vZmZzZXRzW2ldIC0gY29tcFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmxvY2tQcm9taXNlID0gcnVuQ29tcHJlc3NlZC50aGVuKGJ1ZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcmVkID0gYnVmLnN1YmFycmF5KHJlbE9mZnNldCwgcmVsT2Zmc2V0ICsgbWV0YS5sZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGEuYykgcmV0dXJuIExaNC5kZWNvbXByZXNzKHN0b3JlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcnVuUHJvbWlzZXMucHVzaChibG9ja1Byb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdWNoKGAke2ZpbGVJZH06JHtpfWAsIGJsb2NrUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgcnVuUHJvbWlzZXMpIHBhcnRzLnB1c2goYXdhaXQgcHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgYmxvY2sgPSBydW5FbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb21iaW5lZCA9IHBhcnRzLmxlbmd0aCA9PT0gMSAmJiBwYXJ0c1swXSB8fCBCdWZmZXIuY29uY2F0KHBhcnRzKTtcbiAgICAgICAgICAgIGxldCBzbGljZVN0YXJ0ID0gc3RhcnQgLSBmaXJzdEJsb2NrICogYmxvY2tTaXplO1xuICAgICAgICAgICAgLy8gQSBzaG9ydCBjb21iaW5lZCBidWZmZXIgbWVhbnMgd2UgbG9zdCBibG9ja3M7IHN1YmFycmF5IHdvdWxkIGNsYW1wIGFuZCBoYW5kIGJhY2sgdHJ1bmNhdGVkIGRhdGEgdGhhdCBldmVyeSBjYWxsZXIgdHJlYXRzIGFzIHZhbGlkLiBGYWlsIGxvdWRseSBpbnN0ZWFkLlxuICAgICAgICAgICAgaWYgKGNvbWJpbmVkLmxlbmd0aCA8IHNsaWNlU3RhcnQgKyAoZW5kIC0gc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3NsaWNlU3RhcnQgKyAoZW5kIC0gc3RhcnQpfSBieXRlcyBvZiBibG9ja3MgZm9yIHJhbmdlIFske3N0YXJ0fSwgJHtlbmR9KSBvZiAke2ZpbGVJZH0sIHdhcyAke2NvbWJpbmVkLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lZC5zdWJhcnJheShzbGljZVN0YXJ0LCBzbGljZVN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSk7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vLyBTaGFyZWQgYWNyb3NzIGV2ZXJ5IEJ1bGtEYXRhYmFzZTIgY29sbGVjdGlvbi9maWxlICh0aGUgNTEyTUIgYnVkZ2V0IGlzIGdsb2JhbCkuXG5leHBvcnQgY29uc3QgYmxvY2tDYWNoZSA9IG5ldyBCbG9ja0NhY2hlKCk7XG4iXX0=
|
|
163
|
-
/* _JS_SOURCE_HASH = "
|
|
163
|
+
/* _JS_SOURCE_HASH = "3163c091d00d8e1d771e9b0df56046cefa6cce296d5712b1e59ea17780504faf"; */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
// Best-effort "only one tab merges this collection at a time" guard. This is purely an efficiency measure: correctness does NOT depend on it. Reads resolve by per-row write-time, merges write new files before deleting consumed ones, and a duplicate-heavy region gets re-merged — so two tabs merging at once only waste work and briefly duplicate data, never corrupt or lose it. The lock just stops that wasted work. It uses localStorage (shared across same-origin tabs) and is a no-op where localStorage is unavailable (Node) — there concurrent merges are harmless, which the Node stress tests exercise. localStorage has no atomic compare-and-swap, so we write-then-reread to shrink the race window, and a TTL frees a lock left behind by a tab that crashed or closed mid-merge.
|
|
3
3
|
//
|
|
4
4
|
// File-lock layer (see acquireMergeFileLock at the bottom): for cross-PROCESS safety (different browsers, different machines pointing at the same remote storage), we ALSO write a `.merge-lock` file inside the collection's storage with our ID. The protocol is check-write-wait-recheck — last writer wins after the 15s settle window. The localStorage lock above covers same-origin tabs; this covers everything else (separate processes, remote shared storage).
|
|
@@ -127,4 +127,4 @@ async function releaseMergeFileLock(storage, holderId) {
|
|
|
127
127
|
}
|
|
128
128
|
exports.releaseMergeFileLock = releaseMergeFileLock;
|
|
129
129
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2VMb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVyZ2VMb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5d0JBQXl3QjtBQUN6d0IsR0FBRztBQUNILDBjQUEwYzs7O0FBSTFjLE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFJOUIsU0FBUyxjQUFjLENBQUMsS0FBYTtJQUNqQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxHQUFHLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3BCLElBQUksQ0FBQztRQUNELE9BQU8sT0FBTyxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxRSxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ0wsT0FBTyxTQUFTLENBQUMsQ0FBQywyREFBMkQ7SUFDakYsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxVQUFrQjtJQUMvQixPQUFPLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsaVpBQWlaO0FBQ2paLFNBQWdCLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsUUFBZ0I7SUFDcEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxF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bUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sS0FBSyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ2xELENBQUM7QUFSRCwwREFRQztBQUVELGlTQUFpUztBQUNqUyxTQUFnQiwyQkFBMkIsQ0FBQyxPQUFvQixFQUFFLFFBQWdCOztJQUM5RSxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQzlCLEtBQUssa0JBQWtCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNCLE1BQUEsTUFBQyxRQUFtQyxFQUFDLEtBQUssa0RBQUksQ0FBQztJQUMvQyxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBTkQsa0VBTUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsT0FBb0IsRUFBRSxRQUFnQjtJQUM3RSxJQUFJLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUFFLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQUMsUUFBUSxZQUFZLElBQWQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFMRCxvREFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEJlc3QtZWZmb3J0IFwib25seSBvbmUgdGFiIG1lcmdlcyB0aGlzIGNvbGxlY3Rpb24gYXQgYSB0aW1lXCIgZ3VhcmQuIFRoaXMgaXMgcHVyZWx5IGFuIGVmZmljaWVuY3kgbWVhc3VyZTogY29ycmVjdG5lc3MgZG9lcyBOT1QgZGVwZW5kIG9uIGl0LiBSZWFkcyByZXNvbHZlIGJ5IHBlci1yb3cgd3JpdGUtdGltZSwgbWVyZ2VzIHdyaXRlIG5ldyBmaWxlcyBiZWZvcmUgZGVsZXRpbmcgY29uc3VtZWQgb25lcywgYW5kIGEgZHVwbGljYXRlLWhlYXZ5IHJlZ2lvbiBnZXRzIHJlLW1lcmdlZCDigJQgc28gdHdvIHRhYnMgbWVyZ2luZyBhdCBvbmNlIG9ubHkgd2FzdGUgd29yayBhbmQgYnJpZWZseSBkdXBsaWNhdGUgZGF0YSwgbmV2ZXIgY29ycnVwdCBvciBsb3NlIGl0LiBUaGUgbG9jayBqdXN0IHN0b3BzIHRoYXQgd2FzdGVkIHdvcmsuIEl0IHVzZXMgbG9jYWxTdG9yYWdlIChzaGFyZWQgYWNyb3NzIHNhbWUtb3JpZ2luIHRhYnMpIGFuZCBpcyBhIG5vLW9wIHdoZXJlIGxvY2FsU3RvcmFnZSBpcyB1bmF2YWlsYWJsZSAoTm9kZSkg4oCUIHRoZXJlIGNvbmN1cnJlbnQgbWVyZ2VzIGFyZSBoYXJtbGVzcywgd2hpY2ggdGhlIE5vZGUgc3RyZXNzIHRlc3RzIGV4ZXJjaXNlLiBsb2NhbFN0b3JhZ2UgaGFzIG5vIGF0b21pYyBjb21wYXJlLWFuZC1zd2FwLCBzbyB3ZSB3cml0ZS10aGVuLXJlcmVhZCB0byBzaHJpbmsgdGhlIHJhY2Ugd2luZG93LCBhbmQgYSBUVEwgZnJlZXMgYSBsb2NrIGxlZnQgYmVoaW5kIGJ5IGEgdGFiIHRoYXQgY3Jhc2hlZCBvciBjbG9zZWQgbWlkLW1lcmdlLlxuLy8gXG4vLyBGaWxlLWxvY2sgbGF5ZXIgKHNlZSBhY3F1aXJlTWVyZ2VGaWxlTG9jayBhdCB0aGUgYm90dG9tKTogZm9yIGNyb3NzLVBST0NFU1Mgc2FmZXR5IChkaWZmZXJlbnQgYnJvd3NlcnMsIGRpZmZlcmVudCBtYWNoaW5lcyBwb2ludGluZyBhdCB0aGUgc2FtZSByZW1vdGUgc3RvcmFnZSksIHdlIEFMU08gd3JpdGUgYSBgLm1lcmdlLWxvY2tgIGZpbGUgaW5zaWRlIHRoZSBjb2xsZWN0aW9uJ3Mgc3RvcmFnZSB3aXRoIG91ciBJRC4gVGhlIHByb3RvY29sIGlzIGNoZWNrLXdyaXRlLXdhaXQtcmVjaGVjayDigJQgbGFzdCB3cml0ZXIgd2lucyBhZnRlciB0aGUgMTVzIHNldHRsZSB3aW5kb3cuIFRoZSBsb2NhbFN0b3JhZ2UgbG9jayBhYm92ZSBjb3ZlcnMgc2FtZS1vcmlnaW4gdGFiczsgdGhpcyBjb3ZlcnMgZXZlcnl0aGluZyBlbHNlIChzZXBhcmF0ZSBwcm9jZXNzZXMsIHJlbW90ZSBzaGFyZWQgc3RvcmFnZSkuXG5cbmltcG9ydCB0eXBlIHsgRmlsZVN0b3JhZ2UgfSBmcm9tIFwiLi4vRmlsZUZvbGRlckFQSVwiO1xuXG5jb25zdCBMT0NLX1RUTF9NUyA9IDMwICogMTAwMDtcblxuZXhwb3J0IHR5cGUgTWVyZ2VMb2NrSW5mbyA9IHsgaG9sZGVySWQ6IHN0cmluZzsgZXhwaXJlc0luTXM6IG51bWJlciB9O1xuXG5mdW5jdGlvbiBwYXJzZUxvY2tUb2tlbih0b2tlbjogc3RyaW5nKTogeyBob2xkZXJJZDogc3RyaW5nOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY29sb24gPSB0b2tlbi5sYXN0SW5kZXhPZihcIjpcIik7XG4gICAgaWYgKGNvbG9uIDwgMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0aW1lID0gcGFyc2VJbnQodG9rZW4uc2xpY2UoY29sb24gKyAxKSwgMTApO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IGhvbGRlcklkOiB0b2tlbi5zbGljZSgwLCBjb2xvbiksIHRpbWUgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxTdG9yYWdlKCk6IFN0b3JhZ2UgfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSBcInVuZGVmaW5lZFwiID8gbG9jYWxTdG9yYWdlIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBhY2Nlc3NpbmcgbG9jYWxTdG9yYWdlIGNhbiB0aHJvdyAoZS5nLiBkaXNhYmxlZCBjb29raWVzKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9ja0tleShjb2xsZWN0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJ1bGtEYXRhYmFzZTItbWVyZ2U6XCIgKyBjb2xsZWN0aW9uO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgd2Ugbm93IGhvbGQgdGhlIGxvY2sgKG9yIHRoZXJlJ3Mgbm8gbG9jYWxTdG9yYWdlIHRvIGNvb3JkaW5hdGUgdGhyb3VnaCwgaW4gd2hpY2ggY2FzZSB3ZSBwcm9jZWVkIOKAlCBjb25jdXJyZW50IG1lcmdlcyBhcmUgaGFybWxlc3MpLiBSZXR1cm5zIGZhbHNlIG9ubHkgaWYgYSBESUZGRVJFTlQgaG9sZGVyIGhhcyBhIGZyZXNoIGxvY2suIFJlLXN0YW1waW5nIG91ciBvd24gbG9jayBhbHdheXMgc3VjY2VlZHMsIHNvIHRoaXMgZG91YmxlcyBhcyBhIGhlYXJ0YmVhdDogY2FsbCBpdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGEgbG9uZywgc3BhY2VkLW91dCBtZXJnZSB0byBrZWVwIHRoZSBsb2NrIGFsaXZlIChhbmQgZGV0ZWN0IGlmIGFub3RoZXIgdGFiIHRvb2sgaXQgb3ZlcikuXG5leHBvcnQgZnVuY3Rpb24gdHJ5QWNxdWlyZU1lcmdlTG9jayhjb2xsZWN0aW9uOiBzdHJpbmcsIGhvbGRlcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBscyA9IGdldExvY2FsU3RvcmFnZSgpO1xuICAgIGlmICghbHMpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGtleSA9IGxvY2tLZXkoY29sbGVjdGlvbik7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGxzLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoZXhpc3RpbmcgJiYgIWV4aXN0aW5nLnN0YXJ0c1dpdGgoaG9sZGVySWQgKyBcIjpcIikpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VMb2NrVG9rZW4oZXhpc3RpbmcpO1xuICAgICAgICBpZiAocGFyc2VkICYmIG5vdyAtIHBhcnNlZC50aW1lIDwgTE9DS19UVExfTVMpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBob2xkZXJJZCArIFwiOlwiICsgbm93O1xuICAgIGxzLnNldEl0ZW0oa2V5LCB0b2tlbik7XG4gICAgLy8gUmUtcmVhZCB0byBjYXRjaCBhIHJhY2luZyBzZXRJdGVtIGZyb20gYW5vdGhlciB0YWIgKGJlc3QtZWZmb3J0LCBub3QgYXRvbWljKS5cbiAgICByZXR1cm4gbHMuZ2V0SXRlbShrZXkpID09PSB0b2tlbjtcbn1cblxuLy8gTm9uLW11dGF0aW5nIGxvb2sgYXQgdGhlIHRhYiBsb2NrOiB3aG8gaG9sZHMgaXQgYW5kIGhvdyBsb25nIHVudGlsIGl0IGdvZXMgc3RhbGUgKG5lZ2F0aXZlID0gYWxyZWFkeSBzdGFsZSkuIEZvciBsb2dnaW5nIHdoeSBhIG1lcmdlIHdhcyBza2lwcGVkLlxuZXhwb3J0IGZ1bmN0aW9uIHBlZWtNZXJnZUxvY2soY29sbGVjdGlvbjogc3RyaW5nKTogTWVyZ2VMb2NrSW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbHMgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAoIWxzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gbHMuZ2V0SXRlbShsb2NrS2V5KGNvbGxlY3Rpb24pKTtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTG9ja1Rva2VuKGV4aXN0aW5nKTtcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyBob2xkZXJJZDogcGFyc2VkLmhvbGRlcklkLCBleHBpcmVzSW5NczogcGFyc2VkLnRpbWUgKyBMT0NLX1RUTF9NUyAtIERhdGUubm93KCkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2VNZXJnZUxvY2soY29sbGVjdGlvbjogc3RyaW5nLCBob2xkZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbHMgPSBnZXRMb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAoIWxzKSByZXR1cm47XG4gICAgY29uc3Qga2V5ID0gbG9ja0tleShjb2xsZWN0aW9uKTtcbiAgICBjb25zdCBleGlzdGluZyA9IGxzLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3Rpbmcuc3RhcnRzV2l0aChob2xkZXJJZCArIFwiOlwiKSkgbHMucmVtb3ZlSXRlbShrZXkpO1xufVxuXG4vLyDilIDilIAgRmlsZS1iYXNlZCBsb2NrIChjcm9zcy1wcm9jZXNzIC8gc2hhcmVkIHN0b3JhZ2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuY29uc3QgRklMRV9MT0NLX0tFWSA9IFwiLm1lcmdlLWxvY2tcIjtcbmNvbnN0IEZJTEVfTE9DS19UVExfTVMgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgRklMRV9MT0NLX1NFVFRMRV9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IEZJTEVfTE9DS19IRUFSVEJFQVRfTVMgPSAyICogNjAgKiAxMDAwO1xuXG5hc3luYyBmdW5jdGlvbiByZWFkTWVyZ2VGaWxlTG9jayhzdG9yYWdlOiBGaWxlU3RvcmFnZSk6IFByb21pc2U8eyBob2xkZXJJZDogc3RyaW5nOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGF3YWl0IHN0b3JhZ2UuZ2V0KEZJTEVfTE9DS19LRVkpO1xuICAgICAgICBpZiAoIWJ1ZikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHBhcnNlTG9ja1Rva2VuKGJ1Zi50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgIH0gY2F0Y2ggeyByZXR1cm4gdW5kZWZpbmVkOyB9XG59XG5cbi8vIE5vbi1tdXRhdGluZyBsb29rIGF0IHRoZSBjcm9zcy1wcm9jZXNzIGxvY2sgZmlsZSAoc2VlIHBlZWtNZXJnZUxvY2spLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlZWtNZXJnZUZpbGVMb2NrKHN0b3JhZ2U6IEZpbGVTdG9yYWdlKTogUHJvbWlzZTxNZXJnZUxvY2tJbmZvIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkTWVyZ2VGaWxlTG9jayhzdG9yYWdlKTtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IGhvbGRlcklkOiBleGlzdGluZy5ob2xkZXJJZCwgZXhwaXJlc0luTXM6IGV4aXN0aW5nLnRpbWUgKyBGSUxFX0xPQ0tfVFRMX01TIC0gRGF0ZS5ub3coKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZU1lcmdlRmlsZUxvY2soc3RvcmFnZTogRmlsZVN0b3JhZ2UsIGhvbGRlcklkOiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN0b3JhZ2Uuc2V0KEZJTEVfTE9DS19LRVksIEJ1ZmZlci5mcm9tKGAke2hvbGRlcklkfToke3RpbWV9YCwgXCJ1dGY4XCIpIGFzIEJ1ZmZlcik7XG59XG5cbi8vIEFjcXVpcmUgdGhlIGNyb3NzLXByb2Nlc3MgZmlsZSBsb2NrLiBSZXNvbHZlcyB0byB0cnVlIE9OTFkgaWYsIGFmdGVyIHdyaXRpbmcgb3VyIElEIGFuZCB3YWl0aW5nIEZJTEVfTE9DS19TRVRUTEVfTVMgZm9yIGNvbmN1cnJlbnQgd3JpdGVycyB0byBzZXR0bGUsIHRoZSBmaWxlIHN0aWxsIG5hbWVzIHVzLiBDYWxsZXIgbXVzdCByZWxlYXNlTWVyZ2VGaWxlTG9jaygpIG9uIHRoZSBzYW1lIHN0b3JhZ2UgKyBob2xkZXJJZCB3aGVuIGRvbmUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJ5QWNxdWlyZU1lcmdlRmlsZUxvY2soc3RvcmFnZTogRmlsZVN0b3JhZ2UsIGhvbGRlcklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZE1lcmdlRmlsZUxvY2soc3RvcmFnZSk7XG4gICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLmhvbGRlcklkICE9PSBob2xkZXJJZCAmJiBub3cgLSBleGlzdGluZy50aW1lIDwgRklMRV9MT0NLX1RUTF9NUykgcmV0dXJuIGZhbHNlO1xuICAgIGF3YWl0IHdyaXRlTWVyZ2VGaWxlTG9jayhzdG9yYWdlLCBob2xkZXJJZCwgbm93KTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgRklMRV9MT0NLX1NFVFRMRV9NUykpO1xuICAgIGNvbnN0IGFmdGVyID0gYXdhaXQgcmVhZE1lcmdlRmlsZUxvY2soc3RvcmFnZSk7XG4gICAgcmV0dXJuICEhYWZ0ZXIgJiYgYWZ0ZXIuaG9sZGVySWQgPT09IGhvbGRlcklkO1xufVxuXG4vLyBLZWVwIHRoZSBsb2NrIGZyZXNoLiBUaGUgbWVyZ2UgbWlnaHQgcnVuIGxvbmdlciB0aGFuIEZJTEVfTE9DS19UVExfTVM7IHdpdGhvdXQgcGVyaW9kaWMgcmUtc3RhbXBpbmcsIGFub3RoZXIgcHJvY2VzcyB3b3VsZCBzZWUgdGhlIGxvY2sgYXMgc3RhbGUgYW5kIGFjcXVpcmUgaXQuIFJldHVybnMgYSBzdG9wIGZ1bmN0aW9uIHRoZSBjYWxsZXIgY2FsbHMgaW4gYGZpbmFsbHlgLiBIZWFydGJlYXQgaXMgYmVzdC1lZmZvcnQ6IGEgZmFpbGVkIHdyaXRlIGlzIGxvZ2dlZCBidXQgbm90IHByb3BhZ2F0ZWQuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRNZXJnZUZpbGVMb2NrSGVhcnRiZWF0KHN0b3JhZ2U6IEZpbGVTdG9yYWdlLCBob2xkZXJJZDogc3RyaW5nKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHZvaWQgd3JpdGVNZXJnZUZpbGVMb2NrKHN0b3JhZ2UsIGhvbGRlcklkLCBEYXRlLm5vdygpKS5jYXRjaCgoKSA9PiB7IC8qIGJlc3QtZWZmb3J0ICovIH0pO1xuICAgIH0sIEZJTEVfTE9DS19IRUFSVEJFQVRfTVMpO1xuICAgIChpbnRlcnZhbCBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsZWFzZU1lcmdlRmlsZUxvY2soc3RvcmFnZTogRmlsZVN0b3JhZ2UsIGhvbGRlcklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRNZXJnZUZpbGVMb2NrKHN0b3JhZ2UpO1xuICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcuaG9sZGVySWQgPT09IGhvbGRlcklkKSBhd2FpdCBzdG9yYWdlLnJlbW92ZShGSUxFX0xPQ0tfS0VZKTtcbiAgICB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbn1cbiJdfQ==
|
|
130
|
-
/* _JS_SOURCE_HASH = "
|
|
130
|
+
/* _JS_SOURCE_HASH = "5195c5628e713ef973ebd5ca191fe0f42f1299a5439cfd9794739b87d603c89c"; */
|