sliftutils 1.7.36 → 1.7.38
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/allowclient.flag +0 -0
- package/electron/electronRenderer.tsx +2 -0
- package/examplestorage/browser.tsx +1 -1
- package/index.d.ts +4 -0
- package/misc/apiKeys.tsx +2 -0
- package/misc/dist/getSecret.ts.cache +2 -2
- package/misc/dist/strings.ts.cache +3 -4
- package/misc/https/certs.ts +0 -2
- package/misc/https/dist/certs.ts.cache +3 -4
- package/misc/https/dist/hostServer.ts.cache +49 -3
- package/misc/https/dist/httpsCerts.ts.cache +5 -11
- package/misc/https/dist/persistentLocalStorage.ts.cache +3 -4
- package/misc/https/persistentLocalStorage.ts +0 -2
- package/misc/strings.ts +0 -2
- package/package.json +1 -1
- package/render-utils/DropdownCustom.tsx +2 -0
- package/render-utils/FullscreenModal.tsx +2 -0
- package/render-utils/Input.tsx +0 -2
- package/render-utils/InputLabel.tsx +1 -1
- package/render-utils/InputPicker.tsx +2 -0
- package/render-utils/LocalStorageParam.ts +2 -0
- package/render-utils/SyncedController.ts +2 -0
- package/render-utils/Table.tsx +2 -0
- package/render-utils/URLParam.ts +2 -0
- package/render-utils/asyncObservable.ts +2 -0
- package/render-utils/colors.tsx +0 -2
- package/render-utils/dist/observer.tsx.cache +3 -3
- package/render-utils/mobxTyped.ts +2 -0
- package/render-utils/modal.tsx +2 -0
- package/render-utils/observer.tsx +1 -1
- package/storage/FileFolderAPI.tsx +2 -0
- package/storage/IArchives.ts +0 -2
- package/storage/PendingManager.tsx +2 -0
- package/storage/StorageObservable.ts +2 -0
- package/storage/dist/FileFolderAPI.tsx.cache +3 -2
- package/storage/dist/IArchives.ts.cache +4 -5
- package/storage/dist/PendingManager.tsx.cache +3 -2
- package/storage/dist/backblaze.ts.cache +2 -2
- package/storage/remoteStorage/ArchivesRemote.ts +0 -2
- package/storage/remoteStorage/ArchivesUrl.ts +0 -2
- package/storage/remoteStorage/accessPage.tsx +1 -1
- package/storage/remoteStorage/createArchives.ts +0 -2
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -3
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -3
- package/storage/remoteStorage/dist/accessPage.tsx.cache +4 -8
- package/storage/remoteStorage/dist/createArchives.ts.cache +2 -3
- package/storage/remoteStorage/dist/productionEnv.ts.cache +5 -0
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -3
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +2 -3
- package/storage/remoteStorage/dist/storageController.ts.cache +2 -3
- package/storage/remoteStorage/dist/storageServer.ts.cache +31 -18
- package/storage/remoteStorage/dist/storageServerCli.ts.cache +2 -3
- package/storage/remoteStorage/productionEnv.d.ts +0 -0
- package/storage/remoteStorage/remoteConfig.ts +0 -2
- package/storage/remoteStorage/sourceWrapper.ts +0 -2
- package/storage/remoteStorage/storageController.ts +0 -2
- package/storage/remoteStorage/storageServer.ts +2 -0
- package/storage/remoteStorage/storageServerCli.ts +0 -1
- package/testsite/browser.tsx +1 -1
- package/testsite/serverInfoController.ts +0 -2
- package/web/ExamplePage.tsx +2 -0
- package/web/browser.tsx +2 -0
|
@@ -9,7 +9,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
12
|
-
|
|
12
|
+
process.env.NODE_ENV = "production";
|
|
13
13
|
const preact_1 = __importDefault(require("preact"));
|
|
14
14
|
const mobx_1 = require("mobx");
|
|
15
15
|
const observer_1 = require("../../render-utils/observer");
|
|
@@ -18,11 +18,7 @@ const typesafecss_1 = require("typesafecss");
|
|
|
18
18
|
const SocketFunction_1 = require("socket-function/SocketFunction");
|
|
19
19
|
const storageController_1 = require("./storageController");
|
|
20
20
|
const ArchivesRemote_1 = require("./ArchivesRemote");
|
|
21
|
-
// The storage server's access page. Visit https://<storageDomain>:<port>/<accountName> to request
|
|
22
|
-
// access to that account for this browser's machine identity. Once granted, lists the machines that
|
|
23
|
-
// have access. To approve someone else's request, the user must type in the requester's IP —
|
|
24
|
-
// pending requests are NEVER shown unsolicited (so a trusted user can't accidentally approve a
|
|
25
|
-
// random machine's request).
|
|
21
|
+
// The storage server's access page. Visit https://<storageDomain>:<port>/<accountName> to request access to that account for this browser's machine identity. Once granted, lists the machines that have access. To approve someone else's request, the user must type in the requester's IP — pending requests are NEVER shown unsolicited (so a trusted user can't accidentally approve a random machine's request).
|
|
26
22
|
const REFRESH_INTERVAL = 1000 * 15;
|
|
27
23
|
const COPIED_RESET_DELAY = 2000;
|
|
28
24
|
let CopyableCommand = class CopyableCommand extends preact_1.default.Component {
|
|
@@ -218,5 +214,5 @@ async function main() {
|
|
|
218
214
|
preact_1.default.render(preact_1.default.createElement(AccessPage, null), document.body);
|
|
219
215
|
}
|
|
220
216
|
main().catch(console.error);
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzUGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFjY2Vzc1BhZ2UudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFFMUIsb0RBQTRCO0FBQzVCLCtCQUFrQztBQUNsQywwREFBdUQ7QUFDdkQsbURBQWtEO0FBQ2xELDZDQUFrQztBQUNsQyxtRUFBZ0U7QUFDaEUsMkRBQTBGO0FBQzFGLHFEQUF1RDtBQUV2RCxrR0FBa0c7QUFDbEcsb0dBQW9HO0FBQ3BHLDZGQUE2RjtBQUM3RiwrRkFBK0Y7QUFDL0YsNkJBQTZCO0FBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUdoQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFnQixTQUFRLGdCQUFNLENBQUMsU0FBOEI7SUFBbkU7O1FBQ0ksV0FBTSxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFtQlAsQ0FBQztJQWpCRyxNQUFNO1FBQ0YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDakMsT0FBTyx3Q0FBSyxTQUFTLEVBQUUsaUJBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUN2RCwyQ0FBUSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3hCLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENB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YWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLXV0aWxzL29ic2VydmVyXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBjc3MgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIEFjY2Vzc1N0YXRlLCBBY2Nlc3NSZXF1ZXN0IH0gZnJvbSBcIi4vc3RvcmFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGF1dGhlbnRpY2F0ZVN0b3JhZ2UgfSBmcm9tIFwiLi9BcmNoaXZlc1JlbW90ZVwiO1xuXG4vLyBUaGUgc3RvcmFnZSBzZXJ2ZXIncyBhY2Nlc3MgcGFnZS4gVmlzaXQgaHR0cHM6Ly88c3RvcmFnZURvbWFpbj46PHBvcnQ+LzxhY2NvdW50TmFtZT4gdG8gcmVxdWVzdFxuLy8gYWNjZXNzIHRvIHRoYXQgYWNjb3VudCBmb3IgdGhpcyBicm93c2VyJ3MgbWFjaGluZSBpZGVudGl0eS4gT25jZSBncmFudGVkLCBsaXN0cyB0aGUgbWFjaGluZXMgdGhhdFxuLy8gaGF2ZSBhY2Nlc3MuIFRvIGFwcHJvdmUgc29tZW9uZSBlbHNlJ3MgcmVxdWVzdCwgdGhlIHVzZXIgbXVzdCB0eXBlIGluIHRoZSByZXF1ZXN0ZXIncyBJUCDigJRcbi8vIHBlbmRpbmcgcmVxdWVzdHMgYXJlIE5FVkVSIHNob3duIHVuc29saWNpdGVkIChzbyBhIHRydXN0ZWQgdXNlciBjYW4ndCBhY2NpZGVudGFsbHkgYXBwcm92ZSBhXG4vLyByYW5kb20gbWFjaGluZSdzIHJlcXVlc3QpLlxuXG5jb25zdCBSRUZSRVNIX0lOVEVSVkFMID0gMTAwMCAqIDE1O1xuY29uc3QgQ09QSUVEX1JFU0VUX0RFTEFZID0gMjAwMDtcblxuQG9ic2VydmVyXG5jbGFzcyBDb3B5YWJsZUNvbW1hbmQgZXh0ZW5kcyBwcmVhY3QuQ29tcG9uZW50PHsgY29tbWFuZDogc3RyaW5nIH0+IHtcbiAgICBzeW5jZWQgPSBvYnNlcnZhYmxlKHtcbiAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IGNvbW1hbmQgPSB0aGlzLnByb3BzLmNvbW1hbmQ7XG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzLmhib3goOCkuYWxpZ25JdGVtcyhcImZsZXgtc3RhcnRcIil9PlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jZWQuY29waWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5zeW5jZWQuY29waWVkID0gZmFsc2U7IH0sIENPUElFRF9SRVNFVF9ERUxBWSk7XG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICB7dGhpcy5zeW5jZWQuY29waWVkICYmIFwiQ29waWVkIVwiIHx8IFwiQ29weVwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9e2Nzcy5mb250RmFtaWx5KFwibW9ub3NwYWNlXCIpLndoaXRlU3BhY2UoXCJwcmUtd3JhcFwiKVxuICAgICAgICAgICAgICAgIC5oc2woMCwgMCwgOTIpLnBhZDIoOCwgNCkuYm9yZGVyUmFkaXVzKDQpXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHtjb21tYW5kfVxuICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICA8L2Rpdj47XG4gICAgfVxufVxuXG5Ab2JzZXJ2ZXJcbmNsYXNzIEFjY2Vzc1BhZ2UgZXh0ZW5kcyBwcmVhY3QuQ29tcG9uZW50IHtcbiAgICBzeW5jZWQgPSBvYnNlcnZhYmxlKHtcbiAgICAgICAgYWNjb3VudDogXCJcIixcbiAgICAgICAgc3RhdGU6IHVuZGVmaW5lZCBhcyBBY2Nlc3NTdGF0ZSB8IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IFwiXCIsXG4gICAgICAgIGxvb2t1cElwOiBcIlwiLFxuICAgICAgICBsb29rdXBSZXN1bHRzOiB1bmRlZmluZWQgYXMgeyBpcDogc3RyaW5nOyByZXF1ZXN0czogQWNjZXNzUmVxdWVzdFtdIH0gfCB1bmRlZmluZWQsXG4gICAgICAgIGxvb2t1cEVycm9yOiBcIlwiLFxuICAgICAgICBsb29raW5nOiBmYWxzZSxcbiAgICAgICAgZ3JhbnRpbmc6IFwiXCIsXG4gICAgfSk7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgbGV0IGFjY291bnQgPSBkZWNvZGVVUklDb21wb25lbnQobG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpWzFdIHx8IFwiXCIpO1xuICAgICAgICB0aGlzLnN5bmNlZC5hY2NvdW50ID0gYWNjb3VudDtcbiAgICAgICAgaWYgKCFhY2NvdW50KSByZXR1cm47XG4gICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKGFjY291bnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jZWQuZXJyb3IgPSBTdHJpbmcoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN5bmNlZC5zdGF0ZT8uaGFzQWNjZXNzKSBicmVhaztcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgUkVGUkVTSF9JTlRFUlZBTCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXN5bmMgY29udHJvbGxlcigpIHtcbiAgICAgICAgbGV0IGFkZHJlc3MgPSBsb2NhdGlvbi5ob3N0bmFtZTtcbiAgICAgICAgbGV0IHBvcnQgPSArbG9jYXRpb24ucG9ydCB8fCA0NDM7XG4gICAgICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzcywgcG9ydCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGF1dGhlbnRpY2F0ZVN0b3JhZ2UoeyBhZGRyZXNzLCBwb3J0LCBub2RlSWQgfSk7XG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBSZW1vdGVTdG9yYWdlQ29udHJvbGxlci5ub2Rlc1tub2RlSWRdO1xuICAgIH1cbiAgICBwcml2YXRlIGFzeW5jIHJlZnJlc2goYWNjb3VudDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjb250cm9sbGVyID0gYXdhaXQgdGhpcy5jb250cm9sbGVyKCk7XG4gICAgICAgIGF3YWl0IGNvbnRyb2xsZXIucmVxdWVzdEFjY2VzcyhhY2NvdW50KTtcbiAgICAgICAgdGhpcy5zeW5jZWQuc3RhdGUgPSBhd2FpdCBjb250cm9sbGVyLmdldEFjY2Vzc1N0YXRlKGFjY291bnQpO1xuICAgICAgICB0aGlzLnN5bmNlZC5lcnJvciA9IFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb29rdXBJUCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGlwID0gdGhpcy5zeW5jZWQubG9va3VwSXAudHJpbSgpO1xuICAgICAgICBpZiAoIWlwKSByZXR1cm47XG4gICAgICAgIHRoaXMuc3luY2VkLmxvb2tpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBFcnJvciA9IFwiXCI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29udHJvbGxlciA9IGF3YWl0IHRoaXMuY29udHJvbGxlcigpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgY29udHJvbGxlci5saXN0UmVxdWVzdHNGb3JJUCh0aGlzLnN5bmNlZC5hY2NvdW50LCBpcCk7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBSZXN1bHRzID0geyBpcCwgcmVxdWVzdHMgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQubG9va3VwRXJyb3IgPSBTdHJpbmcoZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29raW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBhcHByb3ZlID0gYXN5bmMgKHJlcXVlc3Q6IEFjY2Vzc1JlcXVlc3QpID0+IHtcbiAgICAgICAgdGhpcy5zeW5jZWQuZ3JhbnRpbmcgPSByZXF1ZXN0LnJlcXVlc3RJZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBjb250cm9sbGVyID0gYXdhaXQgdGhpcy5jb250cm9sbGVyKCk7XG4gICAgICAgICAgICBhd2FpdCBjb250cm9sbGVyLmdyYW50QWNjZXNzKHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN5bmNlZC5sb29rdXBSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cyA9IHRoaXMuc3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMuZmlsdGVyKHIgPT4gci5yZXF1ZXN0SWQgIT09IHJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCh0aGlzLnN5bmNlZC5hY2NvdW50KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5zeW5jZWQubG9va3VwRXJyb3IgPSBTdHJpbmcoZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5ncmFudGluZyA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgc3luY2VkID0gdGhpcy5zeW5jZWQ7XG4gICAgICAgIGxldCB7IGFjY291bnQsIHN0YXRlLCBlcnJvciB9ID0gc3luY2VkO1xuICAgICAgICBpZiAoIWFjY291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goOCkucGFkMigxNil9PlxuICAgICAgICAgICAgICAgIDxkaXY+UmVtb3RlIHN0b3JhZ2Ugc2VydmVyLjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+VmlzaXQgLyhhY2NvdW50IG5hbWUpIHRvIHJlcXVlc3QgYWNjZXNzIHRvIGFuIGFjY291bnQgZm9yIHRoaXMgYnJvd3Nlci48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDEyKS5wYWQyKDE2KX0+XG4gICAgICAgICAgICA8ZGl2PlN0b3JhZ2UgYWNjb3VudDoge2FjY291bnR9PC9kaXY+XG4gICAgICAgICAgICB7ZXJyb3IgJiYgPGRpdj5FcnJvcjoge2Vycm9yfTwvZGl2Pn1cbiAgICAgICAgICAgIHshc3RhdGUgJiYgIWVycm9yICYmIDxkaXY+UmVxdWVzdGluZyBhY2Nlc3MuLi48L2Rpdj59XG4gICAgICAgICAgICB7c3RhdGUgJiYgIXN0YXRlLmhhc0FjY2VzcyAmJiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goOCl9PlxuICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBtYWNoaW5lICh7c3RhdGUubWFjaGluZUlkfSwgaXAge3N0YXRlLmlwfSkgZG9lcyBOT1QgaGF2ZSBhY2Nlc3MgeWV0LjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+QW4gYWNjZXNzIHJlcXVlc3QgaGFzIGJlZW4gbWFkZS4gVG8gZ3JhbnQgaXQsIHJ1biB0aGlzIGNvbW1hbmQ6PC9kaXY+XG4gICAgICAgICAgICAgICAge3N0YXRlLmdyYW50QWNjZXNzQ29tbWFuZCAmJiA8Q29weWFibGVDb21tYW5kIGNvbW1hbmQ9e3N0YXRlLmdyYW50QWNjZXNzQ29tbWFuZH0gLz59XG4gICAgICAgICAgICAgICAgPGRpdj5UaGlzIHBhZ2UgcmVjaGVja3MgZXZlcnkge1JFRlJFU0hfSU5URVJWQUwgLyAxMDAwfSBzZWNvbmRzLjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+fVxuICAgICAgICAgICAge3N0YXRlICYmIHN0YXRlLmhhc0FjY2VzcyAmJiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goMTYpfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgbWFjaGluZSAoe3N0YXRlLm1hY2hpbmVJZH0sIGlwIHtzdGF0ZS5pcH0pIGhhcyBhY2Nlc3MuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDYpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5NYWNoaW5lcyB3aXRoIGFjY2Vzczo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+TWFjaGluZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9PklQPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+R3JhbnRlZDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzdGF0ZS50cnVzdGVkTWFjaGluZXMgfHwgW10pLm1hcChtID0+IDx0ciBrZXk9e20ubWFjaGluZUlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PnttLm1hY2hpbmVJZH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e20uaXB9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PntuZXcgRGF0ZShtLnRpbWUpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCg2KX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+QXBwcm92ZSByZXF1ZXN0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuaGJveCg4KS5hbGlnbkl0ZW1zKFwiY2VudGVyXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzeW5jZWQubG9va3VwSXB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25JbnB1dD17ZSA9PiB7IHN5bmNlZC5sb29rdXBJcCA9IChlLmN1cnJlbnRUYXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHsgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHZvaWQgdGhpcy5sb29rdXBJUCgpOyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGlzYWJsZWQ9e3N5bmNlZC5sb29raW5nIHx8ICFzeW5jZWQubG9va3VwSXAudHJpbSgpfSBvbkNsaWNrPXt0aGlzLmxvb2t1cElQfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3N5bmNlZC5sb29rdXBFcnJvciAmJiA8ZGl2PkVycm9yOiB7c3luY2VkLmxvb2t1cEVycm9yfTwvZGl2Pn1cbiAgICAgICAgICAgICAgICAgICAge3N5bmNlZC5sb29rdXBSZXN1bHRzICYmIHN5bmNlZC5sb29rdXBSZXN1bHRzLnJlcXVlc3RzLmxlbmd0aCA9PT0gMCAmJiA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gcGVuZGluZyByZXF1ZXN0cyBmb3Ige3N5bmNlZC5sb29rdXBSZXN1bHRzLmlwfSBvbiB0aGlzIGFjY291bnQuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgICAgICAgICAgICAge3N5bmNlZC5sb29rdXBSZXN1bHRzICYmIHN5bmNlZC5sb29rdXBSZXN1bHRzLnJlcXVlc3RzLmxlbmd0aCA+IDAgJiYgPHRhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+TWFjaGluZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpLnRleHRBbGlnbihcImxlZnRcIil9PklQPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+UmVxdWVzdGVkPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMubWFwKHIgPT4gPHRyIGtleT17ci5yZXF1ZXN0SWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e3IubWFjaGluZUlkfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57ci5pcH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e25ldyBEYXRlKHIudGltZSkudG9Mb2NhbGVTdHJpbmcoKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRpc2FibGVkPXshIXN5bmNlZC5ncmFudGluZ30gb25DbGljaz17YXN5bmMgKCkgPT4gdGhpcy5hcHByb3ZlKHIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmdyYW50aW5nID09PSByLnJlcXVlc3RJZCAmJiBcIkFwcHJvdmluZy4uLlwiIHx8IFwiQXBwcm92ZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgIDwvZGl2PjtcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gICAgaWYgKGlzTm9kZSgpKSByZXR1cm47XG4gICAgcHJlYWN0LnJlbmRlcig8QWNjZXNzUGFnZSAvPiwgZG9jdW1lbnQuYm9keSk7XG59XG5cbm1haW4oKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiJdfQ=//=
|
|
222
|
-
/* _JS_SOURCE_HASH = "
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzUGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFjY2Vzc1BhZ2UudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXBDLG9EQUE0QjtBQUM1QiwrQkFBa0M7QUFDbEMsMERBQXVEO0FBQ3ZELG1EQUFrRDtBQUNsRCw2Q0FBa0M7QUFDbEMsbUVBQWdFO0FBQ2hFLDJEQUEwRjtBQUMxRixxREFBdUQ7QUFFdkQsdVpBQXVaO0FBRXZaLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUdoQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFnQixTQUFRLGdCQUFNLENBQUMsU0FBOEI7SUFBbkU7O1FBQ0ksV0FBTSxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFtQlAsQ0FBQztJQWpCRyxNQUFNO1FBQ0YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDakMsT0FBTyx3Q0FBSyxTQUFTLEVBQUUsaUJBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUN2RCwyQ0FBUSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3hCLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDLElBQ0ks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QUFDLEVBQUUsQ0FBQyxDQUFDLElBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBTTs0QkFDakQsdUNBQUksU0FBUyxFQUFFLGlCQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBRyxDQUFDLENBQUMsRUFBRSxDQUFNOzRCQUMxQyx1Q0FBSSxTQUFTLEVBQUUsaUJBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBTTs0QkFDdkUsdUNBQUksU0FBUyxFQUFFLGlCQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBQ3pCLDJDQUFRLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUNwRSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxTQUFTLElBQUksY0FBYyxJQUFJLFNBQVMsQ0FDMUQsQ0FDUixDQUNKLENBQUMsQ0FDRixDQUNKLENBQ04sQ0FDSixDQUNKLENBQUM7SUFDWCxDQUFDO0NBQ0osQ0FBQTtBQWxLSyxVQUFVO0lBRGYsbUJBQVE7R0FDSCxVQUFVLENBa0tmO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDZixJQUFJLElBQUEsYUFBTSxHQUFFO1FBQUUsT0FBTztJQUNyQixnQkFBTSxDQUFDLE1BQU0sQ0FBQywrQkFBQyxVQUFVLE9BQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJwcm9jZXNzLmVudi5OT0RFX0VOViA9IFwicHJvZHVjdGlvblwiO1xuXG5pbXBvcnQgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLXV0aWxzL29ic2VydmVyXCI7XG5pbXBvcnQgeyBpc05vZGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBjc3MgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIEFjY2Vzc1N0YXRlLCBBY2Nlc3NSZXF1ZXN0IH0gZnJvbSBcIi4vc3RvcmFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGF1dGhlbnRpY2F0ZVN0b3JhZ2UgfSBmcm9tIFwiLi9BcmNoaXZlc1JlbW90ZVwiO1xuXG4vLyBUaGUgc3RvcmFnZSBzZXJ2ZXIncyBhY2Nlc3MgcGFnZS4gVmlzaXQgaHR0cHM6Ly88c3RvcmFnZURvbWFpbj46PHBvcnQ+LzxhY2NvdW50TmFtZT4gdG8gcmVxdWVzdCBhY2Nlc3MgdG8gdGhhdCBhY2NvdW50IGZvciB0aGlzIGJyb3dzZXIncyBtYWNoaW5lIGlkZW50aXR5LiBPbmNlIGdyYW50ZWQsIGxpc3RzIHRoZSBtYWNoaW5lcyB0aGF0IGhhdmUgYWNjZXNzLiBUbyBhcHByb3ZlIHNvbWVvbmUgZWxzZSdzIHJlcXVlc3QsIHRoZSB1c2VyIG11c3QgdHlwZSBpbiB0aGUgcmVxdWVzdGVyJ3MgSVAg4oCUIHBlbmRpbmcgcmVxdWVzdHMgYXJlIE5FVkVSIHNob3duIHVuc29saWNpdGVkIChzbyBhIHRydXN0ZWQgdXNlciBjYW4ndCBhY2NpZGVudGFsbHkgYXBwcm92ZSBhIHJhbmRvbSBtYWNoaW5lJ3MgcmVxdWVzdCkuXG5cbmNvbnN0IFJFRlJFU0hfSU5URVJWQUwgPSAxMDAwICogMTU7XG5jb25zdCBDT1BJRURfUkVTRVRfREVMQVkgPSAyMDAwO1xuXG5Ab2JzZXJ2ZXJcbmNsYXNzIENvcHlhYmxlQ29tbWFuZCBleHRlbmRzIHByZWFjdC5Db21wb25lbnQ8eyBjb21tYW5kOiBzdHJpbmcgfT4ge1xuICAgIHN5bmNlZCA9IG9ic2VydmFibGUoe1xuICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgY29tbWFuZCA9IHRoaXMucHJvcHMuY29tbWFuZDtcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3MuaGJveCg4KS5hbGlnbkl0ZW1zKFwiZmxleC1zdGFydFwiKX0+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5jb3BpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnN5bmNlZC5jb3BpZWQgPSBmYWxzZTsgfSwgQ09QSUVEX1JFU0VUX0RFTEFZKTtcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIHt0aGlzLnN5bmNlZC5jb3BpZWQgJiYgXCJDb3BpZWQhXCIgfHwgXCJDb3B5XCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT17Y3NzLmZvbnRGYW1pbHkoXCJtb25vc3BhY2VcIikud2hpdGVTcGFjZShcInByZS13cmFwXCIpXG4gICAgICAgICAgICAgICAgLmhzbCgwLCAwLCA5MikucGFkMig4LCA0KS5ib3JkZXJSYWRpdXMoNClcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge2NvbW1hbmR9XG4gICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgIDwvZGl2PjtcbiAgICB9XG59XG5cbkBvYnNlcnZlclxuY2xhc3MgQWNjZXNzUGFnZSBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHN5bmNlZCA9IG9ic2VydmFibGUoe1xuICAgICAgICBhY2NvdW50OiBcIlwiLFxuICAgICAgICBzdGF0ZTogdW5kZWZpbmVkIGFzIEFjY2Vzc1N0YXRlIHwgdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogXCJcIixcbiAgICAgICAgbG9va3VwSXA6IFwiXCIsXG4gICAgICAgIGxvb2t1cFJlc3VsdHM6IHVuZGVmaW5lZCBhcyB7IGlwOiBzdHJpbmc7IHJlcXVlc3RzOiBBY2Nlc3NSZXF1ZXN0W10gfSB8IHVuZGVmaW5lZCxcbiAgICAgICAgbG9va3VwRXJyb3I6IFwiXCIsXG4gICAgICAgIGxvb2tpbmc6IGZhbHNlLFxuICAgICAgICBncmFudGluZzogXCJcIixcbiAgICB9KTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBsZXQgYWNjb3VudCA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIilbMV0gfHwgXCJcIik7XG4gICAgICAgIHRoaXMuc3luY2VkLmFjY291bnQgPSBhY2NvdW50O1xuICAgICAgICBpZiAoIWFjY291bnQpIHJldHVybjtcbiAgICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goYWNjb3VudCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lcnJvciA9IFN0cmluZyhlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3luY2VkLnN0YXRlPy5oYXNBY2Nlc3MpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBSRUZSRVNIX0lOVEVSVkFMKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhc3luYyBjb250cm9sbGVyKCkge1xuICAgICAgICBsZXQgYWRkcmVzcyA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuICAgICAgICBsZXQgcG9ydCA9ICtsb2NhdGlvbi5wb3J0IHx8IDQ0MztcbiAgICAgICAgbGV0IG5vZGVJZCA9IFNvY2tldEZ1bmN0aW9uLmNvbm5lY3QoeyBhZGRyZXNzLCBwb3J0IH0pO1xuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgYXdhaXQgYXV0aGVudGljYXRlU3RvcmFnZSh7IGFkZHJlc3MsIHBvcnQsIG5vZGVJZCB9KTtcbiAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW25vZGVJZF07XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgcmVmcmVzaChhY2NvdW50OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICAgICAgYXdhaXQgY29udHJvbGxlci5yZXF1ZXN0QWNjZXNzKGFjY291bnQpO1xuICAgICAgICB0aGlzLnN5bmNlZC5zdGF0ZSA9IGF3YWl0IGNvbnRyb2xsZXIuZ2V0QWNjZXNzU3RhdGUoYWNjb3VudCk7XG4gICAgICAgIHRoaXMuc3luY2VkLmVycm9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvb2t1cElQID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgaXAgPSB0aGlzLnN5bmNlZC5sb29rdXBJcC50cmltKCk7XG4gICAgICAgIGlmICghaXApIHJldHVybjtcbiAgICAgICAgdGhpcy5zeW5jZWQubG9va2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3luY2VkLmxvb2t1cEVycm9yID0gXCJcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBjb250cm9sbGVyID0gYXdhaXQgdGhpcy5jb250cm9sbGVyKCk7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBjb250cm9sbGVyLmxpc3RSZXF1ZXN0c0ZvcklQKHRoaXMuc3luY2VkLmFjY291bnQsIGlwKTtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2t1cFJlc3VsdHMgPSB7IGlwLCByZXF1ZXN0cyB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBFcnJvciA9IFN0cmluZyhlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmxvb2tpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGFwcHJvdmUgPSBhc3luYyAocmVxdWVzdDogQWNjZXNzUmVxdWVzdCkgPT4ge1xuICAgICAgICB0aGlzLnN5bmNlZC5ncmFudGluZyA9IHJlcXVlc3QucmVxdWVzdElkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuZ3JhbnRBY2Nlc3MocmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3luY2VkLmxvb2t1cFJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBSZXN1bHRzLnJlcXVlc3RzID0gdGhpcy5zeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cy5maWx0ZXIociA9PiByLnJlcXVlc3RJZCAhPT0gcmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKHRoaXMuc3luY2VkLmFjY291bnQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNlZC5sb29rdXBFcnJvciA9IFN0cmluZyhlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmdyYW50aW5nID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBzeW5jZWQgPSB0aGlzLnN5bmNlZDtcbiAgICAgICAgbGV0IHsgYWNjb3VudCwgc3RhdGUsIGVycm9yIH0gPSBzeW5jZWQ7XG4gICAgICAgIGlmICghYWNjb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCg4KS5wYWQyKDE2KX0+XG4gICAgICAgICAgICAgICAgPGRpdj5SZW1vdGUgc3RvcmFnZSBzZXJ2ZXIuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5WaXNpdCAvKGFjY291bnQgbmFtZSkgdG8gcmVxdWVzdCBhY2Nlc3MgdG8gYW4gYWNjb3VudCBmb3IgdGhpcyBicm93c2VyLjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goMTIpLnBhZDIoMTYpfT5cbiAgICAgICAgICAgIDxkaXY+U3RvcmFnZSBhY2NvdW50OiB7YWNjb3VudH08L2Rpdj5cbiAgICAgICAgICAgIHtlcnJvciAmJiA8ZGl2PkVycm9yOiB7ZXJyb3J9PC9kaXY+fVxuICAgICAgICAgICAgeyFzdGF0ZSAmJiAhZXJyb3IgJiYgPGRpdj5SZXF1ZXN0aW5nIGFjY2Vzcy4uLjwvZGl2Pn1cbiAgICAgICAgICAgIHtzdGF0ZSAmJiAhc3RhdGUuaGFzQWNjZXNzICYmIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCg4KX0+XG4gICAgICAgICAgICAgICAgPGRpdj5UaGlzIG1hY2hpbmUgKHtzdGF0ZS5tYWNoaW5lSWR9LCBpcCB7c3RhdGUuaXB9KSBkb2VzIE5PVCBoYXZlIGFjY2VzcyB5ZXQuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5BbiBhY2Nlc3MgcmVxdWVzdCBoYXMgYmVlbiBtYWRlLiBUbyBncmFudCBpdCwgcnVuIHRoaXMgY29tbWFuZDo8L2Rpdj5cbiAgICAgICAgICAgICAgICB7c3RhdGUuZ3JhbnRBY2Nlc3NDb21tYW5kICYmIDxDb3B5YWJsZUNvbW1hbmQgY29tbWFuZD17c3RhdGUuZ3JhbnRBY2Nlc3NDb21tYW5kfSAvPn1cbiAgICAgICAgICAgICAgICA8ZGl2PlRoaXMgcGFnZSByZWNoZWNrcyBldmVyeSB7UkVGUkVTSF9JTlRFUlZBTCAvIDEwMDB9IHNlY29uZHMuPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgICAgICB7c3RhdGUgJiYgc3RhdGUuaGFzQWNjZXNzICYmIDxkaXYgY2xhc3NOYW1lPXtjc3MudmJveCgxNil9PlxuICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBtYWNoaW5lICh7c3RhdGUubWFjaGluZUlkfSwgaXAge3N0YXRlLmlwfSkgaGFzIGFjY2Vzcy48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnZib3goNil9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pk1hY2hpbmVzIHdpdGggYWNjZXNzOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5NYWNoaW5lPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+SVA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5HcmFudGVkPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YXRlLnRydXN0ZWRNYWNoaW5lcyB8fCBbXSkubWFwKG0gPT4gPHRyIGtleT17bS5tYWNoaW5lSWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e20ubWFjaGluZUlkfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57bS5pcH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKX0+e25ldyBEYXRlKG0udGltZSkudG9Mb2NhbGVTdHJpbmcoKX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy52Ym94KDYpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5BcHByb3ZlIHJlcXVlc3Q8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5oYm94KDgpLmFsaWduSXRlbXMoXCJjZW50ZXJcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N5bmNlZC5sb29rdXBJcH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbklucHV0PXtlID0+IHsgc3luY2VkLmxvb2t1cElwID0gKGUuY3VycmVudFRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTsgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249e2UgPT4geyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgdm9pZCB0aGlzLmxvb2t1cElQKCk7IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkaXNhYmxlZD17c3luY2VkLmxvb2tpbmcgfHwgIXN5bmNlZC5sb29rdXBJcC50cmltKCl9IG9uQ2xpY2s9e3RoaXMubG9va3VwSVB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cEVycm9yICYmIDxkaXY+RXJyb3I6IHtzeW5jZWQubG9va3VwRXJyb3J9PC9kaXY+fVxuICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cFJlc3VsdHMgJiYgc3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMubGVuZ3RoID09PSAwICYmIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBObyBwZW5kaW5nIHJlcXVlc3RzIGZvciB7c3luY2VkLmxvb2t1cFJlc3VsdHMuaXB9IG9uIHRoaXMgYWNjb3VudC5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+fVxuICAgICAgICAgICAgICAgICAgICB7c3luY2VkLmxvb2t1cFJlc3VsdHMgJiYgc3luY2VkLmxvb2t1cFJlc3VsdHMucmVxdWVzdHMubGVuZ3RoID4gMCAmJiA8dGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5NYWNoaW5lPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMikudGV4dEFsaWduKFwibGVmdFwiKX0+SVA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT5SZXF1ZXN0ZWQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPXtjc3MucGFkMig4LCAyKS50ZXh0QWxpZ24oXCJsZWZ0XCIpfT48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW5jZWQubG9va3VwUmVzdWx0cy5yZXF1ZXN0cy5tYXAociA9PiA8dHIga2V5PXtyLnJlcXVlc3RJZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57ci5tYWNoaW5lSWR9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT17Y3NzLnBhZDIoOCwgMil9PntyLmlwfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT57bmV3IERhdGUoci50aW1lKS50b0xvY2FsZVN0cmluZygpfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9e2Nzcy5wYWQyKDgsIDIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGlzYWJsZWQ9eyEhc3luY2VkLmdyYW50aW5nfSBvbkNsaWNrPXthc3luYyAoKSA9PiB0aGlzLmFwcHJvdmUocil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzeW5jZWQuZ3JhbnRpbmcgPT09IHIucmVxdWVzdElkICYmIFwiQXBwcm92aW5nLi4uXCIgfHwgXCJBcHByb3ZlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICBpZiAoaXNOb2RlKCkpIHJldHVybjtcbiAgICBwcmVhY3QucmVuZGVyKDxBY2Nlc3NQYWdlIC8+LCBkb2N1bWVudC5ib2R5KTtcbn1cblxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuIl1//9
|
|
218
|
+
/* _JS_SOURCE_HASH = "e70082498ed97b1e3ee8e4680d1c1b26ba77ddb020ea92fd440e49335df56ec8"; */
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.getBucketInfo = exports.clearServerWriteStats = exports.activateServerBucket = exports.getServerActiveBucket = exports.listServerBuckets = exports.createArchives = exports.ArchivesChain = exports.createApiArchives = exports.getBucketBaseUrl = exports.parseBackblazeUrl = exports.parseHostedUrl = void 0;
|
|
4
|
-
module.allowclient = true;
|
|
5
4
|
const misc_1 = require("socket-function/src/misc");
|
|
6
5
|
const batching_1 = require("socket-function/src/batching");
|
|
7
6
|
const IArchives_1 = require("../IArchives");
|
|
@@ -782,5 +781,5 @@ async function getBucketInfo(config) {
|
|
|
782
781
|
return await remote.getConfig();
|
|
783
782
|
}
|
|
784
783
|
exports.getBucketInfo = getBucketInfo;
|
|
785
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXJjaGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBcmNoaXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUUxQixtREFBd0Q7QUFDeEQsMkRBQXFEO0FBQ3JELDRDQUlzQjtBQUN0QixpREFJd0I7QUFDeEIsK0RBQW1FO0FBQ25FLG1FQUFnRTtBQUNoRSxxREFBd0Y7QUFDeEYsdUVBQW1FO0FBQ25FLDRDQUFpRDtBQUNqRCw2REFBNEg7QUFDNUgsMkRBQXlGO0FBQ3pGLG1EQUFrRztBQUVsRyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUUvQyxxTkFBcU47QUFDck4sK0NBQXFGO0FBQTVFLDhHQUFBLGNBQWMsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBQUUsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFNUQsU0FBZ0IsaUJBQWlCLENBQUMsTUFBc0M7SUFDcEUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSw2QkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFBLGdDQUFpQixFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RM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LENBQUMsQ0FBQztJQUMzRSxPQUFPLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFIRCxzQ0FHQyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5hbGxvd2NsaWVudCA9IHRydWU7XG5cbmltcG9ydCB7IGlzTm9kZSwgc29ydCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7XG4gICAgSUFyY2hpdmVzLCBSZW1vdGVDb25maWcsIFJlbW90ZUNvbmZpZ0Jhc2UsIEhvc3RlZENvbmZpZywgQmFja2JsYXplQ29uZmlnLFxuICAgIEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1csXG4gICAgU1RPUkFHRV9XUk9OR19ST1VURSwgRlVMTF9ST1VURSwgVkFSSUFCTEVfU0hBUkQsXG59IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7XG4gICAgUk9VVElOR19GSUxFLCBnZXRDb25maWdWZXJzaW9uLCBwYXJzZUhvc3RlZFVybCwgcGFyc2VCYWNrYmxhemVVcmwsXG4gICAgbm9ybWFsaXplUmVtb3RlQ29uZmlnLCBub3JtYWxpemVTb3VyY2UsIHNlcmlhbGl6ZVJlbW90ZUNvbmZpZyxcbiAgICBnZXRSb3V0ZSwgcm91dGVDb250YWlucywgcGFyc2VWYXJpYWJsZVJvdXRlLFxufSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7IHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzIH0gZnJvbSBcIi4vaW50ZXJtZWRpYXRlU291cmNlc1wiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1JlbW90ZSwgcGFyc2VTdG9yYWdlVXJsLCBhdXRoZW50aWNhdGVTdG9yYWdlIH0gZnJvbSBcIi4vQXJjaGl2ZXNSZW1vdGVcIjtcbmltcG9ydCB7IG9uU2VydmVyUm91dGluZ0NoYW5nZWQgfSBmcm9tIFwiLi9zdG9yYWdlQ2xpZW50Q29udHJvbGxlclwiO1xuaW1wb3J0IHsgQXJjaGl2ZXNCYWNrYmxhemUgfSBmcm9tIFwiLi4vYmFja2JsYXplXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwsIGdldExvY2FsQXJjaGl2ZXMsIFNlcnZlckJ1Y2tldEluZm8sIEFjdGl2ZUJ1Y2tldEluZm8gfSBmcm9tIFwiLi9zdG9yYWdlU2VydmVyU3RhdGVcIjtcbmltcG9ydCB7IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLCBTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEIH0gZnJvbSBcIi4vc3RvcmFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IFNvdXJjZVdyYXBwZXIsIFJFVFJZX1NUQVJUX0RFTEFZLCBSRVRSWV9NQVhfREVMQVksIFJFVFJZX0dST1dUSCB9IGZyb20gXCIuL3NvdXJjZVdyYXBwZXJcIjtcblxuY29uc3QgQ09ORklHX1BPTExfSU5URVJWQUwgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgV1JPTkdfVEFSR0VUX0JPVU5EQVJZX1dJTkRPVyA9IDMwICogMTAwMDtcbmNvbnN0IFdST05HX1RBUkdFVF9CT1VOREFSWV9SRVRSWV9ERUxBWSA9IDE1ICogMTAwMDtcbmNvbnN0IENPTkZJR19SRUZSRVNIX1RIUk9UVExFID0gMzAgKiAxMDAwO1xuY29uc3QgQVZBSUxBQklMSVRZX1JFQ0hFQ0tfVEhST1RUTEUgPSA1ICogMTAwMDtcblxuLyoqIFRoZSBhZGRyZXNzLCBwb3J0LCBhY2NvdW50LCBhbmQgYnVja2V0IG5hbWUgYSBidWNrZXQgcm91dGluZyBVUkwgYWRkcmVzc2VzLiBUaHJvd3Mgd2hlbiB0aGUgVVJMIGlzbid0IGEgaG9zdGVkIGJ1Y2tldCByb3V0aW5nIFVSTCAoaHR0cHM6Ly9ob3N0OnBvcnQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvbikuICovXG5leHBvcnQgeyBwYXJzZUhvc3RlZFVybCwgcGFyc2VCYWNrYmxhemVVcmwsIGdldEJ1Y2tldEJhc2VVcmwgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaUFyY2hpdmVzKHNvdXJjZTogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKTogSUFyY2hpdmVzIHtcbiAgICBpZiAoc291cmNlLnR5cGUgPT09IFwiYmFja2JsYXplXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmNoaXZlc0JhY2tibGF6ZSh7IGJ1Y2tldE5hbWU6IHBhcnNlQmFja2JsYXplVXJsKHNvdXJjZS51cmwpLmJ1Y2tldE5hbWUsIHB1YmxpYzogc291cmNlLnB1YmxpYywgaW1tdXRhYmxlOiBzb3VyY2UuaW1tdXRhYmxlLCBhbGxvd2VkT3JpZ2luczogc291cmNlLmFsbG93ZWRPcmlnaW5zIH0pO1xuICAgIH1cbiAgICBsZXQgcGFyc2VkID0gcGFyc2VIb3N0ZWRVcmwoc291cmNlLnVybCk7XG4gICAgbGV0IHNlcnZlciA9IGlzTm9kZSgpICYmIGdldFN0b3JhZ2VTZXJ2ZXJDb25maWdPcHRpb25hbCgpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VydmVyICYmIHBhcnNlZC5hZGRyZXNzID09PSBzZXJ2ZXIuZG9tYWluICYmIHBhcnNlZC5wb3J0ID09PSBzZXJ2ZXIucG9ydCkge1xuICAgICAgICByZXR1cm4gZ2V0TG9jYWxBcmNoaXZlcyhwYXJzZWQuYWNjb3VudCwgcGFyc2VkLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFyY2hpdmVzUmVtb3RlKHsgdXJsOiBzb3VyY2UudXJsLCB3YWl0Rm9yQWNjZXNzOiBmYWxzZSB9KTtcbn1cblxudHlwZSBDaGFpblN0YXRlID0ge1xuICAgIGNvbmZpZzogUmVtb3RlQ29uZmlnO1xuICAgIHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXTtcbn07XG5cbmZ1bmN0aW9uIGNvbmZpZ1dpbmRvd0N1cnJlbnQoY29uZmlnOiBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgW3N0YXJ0LCBlbmRdID0gY29uZmlnLnZhbGlkV2luZG93O1xuICAgIHJldHVybiBzdGFydCA8PSBub3cgJiYgbm93IDwgZW5kO1xufVxuXG5mdW5jdGlvbiBjb25maWdBY2NlcHRzV3JpdGVzKGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpZ1dpbmRvd0N1cnJlbnQoY29uZmlnKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFyY2hpdmVzQ2hhaW4gaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIHByaXZhdGUgY29uZmlndXJlZDogUmVtb3RlQ29uZmlnO1xuICAgIHByaXZhdGUgYWN0aXZlQ29uZmlnOiBSZW1vdGVDb25maWc7XG4gICAgcHJpdmF0ZSBzdGF0ZVByb21pc2U6IFByb21pc2U8Q2hhaW5TdGF0ZT4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBpbml0UmV0cnlEZWxheSA9IFJFVFJZX1NUQVJUX0RFTEFZO1xuICAgIHByaXZhdGUgaW5pdFJldHJ5VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcG9sbFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVSb3V0aW5nUHVzaDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBSZW1vdGVDb25maWcgfCBSZW1vdGVDb25maWdCYXNlKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJlZCA9IG5vcm1hbGl6ZVJlbW90ZUNvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IHRoaXMuY29uZmlndXJlZDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVJvdXRpbmdQdXNoID0gb25TZXJ2ZXJSb3V0aW5nQ2hhbmdlZCgoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRoaXMucmVmcmVzaEFjdGl2ZUNvbmZpZygpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgQ29uZmlnIHJlZnJlc2ggZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKSB7XG4gICAgICAgIGxldCB1cmxzID0gdGhpcy5hY3RpdmVDb25maWcuc291cmNlcy5tYXAoeCA9PiB0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB4IHx8ICh4IGFzIEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZykudXJsKTtcbiAgICAgICAgcmV0dXJuIGBjaGFpbiAke3VybHMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdGF0ZSgpOiBQcm9taXNlPENoYWluU3RhdGU+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEFyY2hpdmVzQ2hhaW4gJHt0aGlzLmdldERlYnVnTmFtZSgpfSBoYXMgYmVlbiBkaXNwb3NlZGApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVQcm9taXNlKSB7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVByb21pc2UgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeURlbGF5ID0gUkVUUllfU1RBUlRfREVMQVk7XG4gICAgICAgICAgICB9LCAoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCB0aGlzLmluaXRSZXRyeVRpbWVyKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU3RvcmFnZSBpbml0IGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgcmV0cnlpbmcgaW4gJHtNYXRoLnJvdW5kKHRoaXMuaW5pdFJldHJ5RGVsYXkgLyAxMDAwKX1zLiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlUHJvbWlzZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdGF0ZSgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5pbml0UmV0cnlEZWxheSk7XG4gICAgICAgICAgICAgICAgKHRoaXMuaW5pdFJldHJ5VGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5RGVsYXkgPSBNYXRoLm1pbihSRVRSWV9NQVhfREVMQVksIHRoaXMuaW5pdFJldHJ5RGVsYXkgKiBSRVRSWV9HUk9XVEgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVQcm9taXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPENoYWluU3RhdGU+IHtcbiAgICAgICAgbGV0IGNvbmZpZ3MgPSB0aGlzLmNvbmZpZ3VyZWQuc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKTtcbiAgICAgICAgbGV0IGZldGNoZXMgPSBhd2FpdCBQcm9taXNlLmFsbChjb25maWdzLm1hcChhc3luYyBzb3VyY2VDb25maWcgPT4ge1xuICAgICAgICAgICAgbGV0IHByb2JlID0gYXdhaXQgU291cmNlV3JhcHBlci5jcmVhdGUoc291cmNlQ29uZmlnLCB7IGJhY2tncm91bmQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgcHJvYmUucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9iZSwgc291cmNlQ29uZmlnLCByZXNwb25kZWQ6IHRydWUsIGxhdGVuY3k6IERhdGUubm93KCkgLSBzdGFydCwgZXhpc3RpbmcsIGVycm9yOiBcIlwiIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvYmUsIHNvdXJjZUNvbmZpZywgcmVzcG9uZGVkOiBmYWxzZSwgbGF0ZW5jeTogMCwgZXhpc3Rpbmc6IHVuZGVmaW5lZCwgZXJyb3I6IGAke3NvdXJjZUNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmV0Y2hlcy5maW5kKHggPT4geC5yZXNwb25kZWQpO1xuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluaXRpYWxpemUgc3RvcmFnZSBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogbm8gc291cmNlIGFuc3dlcmVkLiAke2ZldGNoZXMubWFwKHggPT4geC5lcnJvcikuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGZvdW5kLmV4aXN0aW5nO1xuICAgICAgICAgICAgbGV0IGFjdGl2ZSA9IHRoaXMuY29uZmlndXJlZDtcbiAgICAgICAgICAgIGxldCBuZWVkc1dyaXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBnZXRDb25maWdWZXJzaW9uKGV4aXN0aW5nKSA+PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnVmVyc2lvbihleGlzdGluZykgPT09IGdldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKSAmJiBKU09OLnN0cmluZ2lmeShleGlzdGluZykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXJjaGl2ZXMgY29uZmlndXJhdGlvbiB1cGRhdGVkIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHZlcnNpb24sIGZvciAke2ZvdW5kLnNvdXJjZUNvbmZpZy51cmx9LiBVcGRhdGVzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCB5b3UgaW5jcmVhc2UgdGhlIHZlcnNpb24uIFVzaW5nOiAke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nKX0sIGlnbm9yaW5nOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJlZCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGV4aXN0aW5nO1xuICAgICAgICAgICAgICAgIG5lZWRzV3JpdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZWVkc1dyaXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJlc3Q6IFJlbW90ZUNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsZXQgY29uZmxpY3RVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBmZXRjaCBvZiBmZXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdG9yZWQgPSBmZXRjaC5leGlzdGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9yZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJlc3QgfHwgZ2V0Q29uZmlnVmVyc2lvbihzdG9yZWQpID4gZ2V0Q29uZmlnVmVyc2lvbihiZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IHN0b3JlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnVmVyc2lvbihzdG9yZWQpID09PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkgJiYgSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWd1cmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RVcmwgPSBmZXRjaC5zb3VyY2VDb25maWcudXJsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiZXN0ICYmIGdldENvbmZpZ1ZlcnNpb24oYmVzdCkgPj0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25mbGljdFVybCAmJiBnZXRDb25maWdWZXJzaW9uKGJlc3QpID09PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFyY2hpdmVzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSB2ZXJzaW9uLCBmb3IgJHtjb25mbGljdFVybH0uIFVwZGF0ZXMgd2lsbCBiZSBpZ25vcmVkIHVudGlsIHlvdSBpbmNyZWFzZSB0aGUgdmVyc2lvbi4gVXNpbmc6ICR7SlNPTi5zdHJpbmdpZnkoYmVzdCl9LCBpZ25vcmluZzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ3VyZWQpfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGJlc3Q7XG4gICAgICAgICAgICAgICAgICAgIG5lZWRzV3JpdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc291cmNlcyA9IGF3YWl0IHRoaXMuYnVpbGRTb3VyY2VzKGFjdGl2ZSk7XG4gICAgICAgICAgICBpZiAobmVlZHNXcml0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBtaXNzaW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IHNvdXJjZS5oYXNXcml0ZUFjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfSAoY2hlY2sgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTm90IHdyaXRpbmcgdGhlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCl9KTogbm8gd3JpdGUgYWNjZXNzIHRvICR7bWlzc2luZy5qb2luKFwiLCBcIil9LiAke2V4aXN0aW5nICYmIGBSdW5uaW5nIG9uIHRoZSBzdG9yZWQgY29uZmlnICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihleGlzdGluZyl9KSBpbnN0ZWFkLmAgfHwgYE5vIHN0b3JlZCBjb25maWcgZXhpc3RzLCBzbyB0aGUgYnVja2V0IGNhbm5vdCBiZSBjcmVhdGVkIHVudGlsIHdyaXRlIGFjY2VzcyBpcyBncmFudGVkLmB9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzID0gYXdhaXQgdGhpcy5idWlsZFNvdXJjZXMoYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGluZ0RhdGEgPSBzZXJpYWxpemVSZW1vdGVDb25maWcodGhpcy5jb25maWd1cmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3V0aW5nV3JpdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3cml0dGVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlblVybHMuaGFzKHNvdXJjZS5jb25maWcudXJsKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlblVybHMuYWRkKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IGlzIG91dCBvZiBkYXRlIChzdG9yZWQgdmVyc2lvbiAke2V4aXN0aW5nICYmIGdldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpIHx8IFwibm9uZVwifSwgb3VycyAke2dldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKX0pOiB3cml0aW5nIG91cnMgdG8gYWxsICR7d3JpdHRlblVybHMuc2l6ZX0gbm9kZXMgKHdyaXRlIHRpbWUgJHtuZXcgRGF0ZShyb3V0aW5nV3JpdGVUaW1lKS50b0lTT1N0cmluZygpfSk6ICR7Wy4uLndyaXR0ZW5VcmxzXS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0dGVuVXJscy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlblVybHMuaGFzKHNvdXJjZS5jb25maWcudXJsKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlblVybHMuYWRkKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KFJPVVRJTkdfRklMRSwgcm91dGluZ0RhdGEsIHsgbGFzdE1vZGlmaWVkOiByb3V0aW5nV3JpdGVUaW1lIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgc3RvcmFnZSByb3V0aW5nIGNvbmZpZyB2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpfSB0byAke3NvdXJjZS5jb25maWcudXJsfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmV0Y2ggPSBmZXRjaGVzLmZpbmQoeCA9PiB4LnJlc3BvbmRlZCAmJiB4LnNvdXJjZUNvbmZpZy51cmwgPT09IHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnNlZWRMYXRlbmN5KGZldGNoLmxhdGVuY3kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5zdGFydENvbmZpZ1BvbGwoKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbmZpZzogYWN0aXZlLCBzb3VyY2VzIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmZXRjaCBvZiBmZXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2gucHJvYmUuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDaGFpblNvdXJjZShzb3VyY2VDb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyk6IFByb21pc2U8U291cmNlV3JhcHBlcj4ge1xuICAgICAgICBsZXQgc291cmNlID0gYXdhaXQgU291cmNlV3JhcHBlci5jcmVhdGUoc291cmNlQ29uZmlnKTtcbiAgICAgICAgc291cmNlLnN0YXJ0UGluZ2luZygpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRTb3VyY2VzKGNvbmZpZzogUmVtb3RlQ29uZmlnKTogUHJvbWlzZTxTb3VyY2VXcmFwcGVyW10+IHtcbiAgICAgICAgbGV0IHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2VDb25maWcgb2YgY29uZmlnLnNvdXJjZXMubWFwKG5vcm1hbGl6ZVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZUNoYWluU291cmNlKHNvdXJjZUNvbmZpZykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRDb25maWdQb2xsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb2xsVGltZXIgfHwgdGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBvbGxUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5yZWZyZXNoQWN0aXZlQ29uZmlnKCkuY2F0Y2goKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ2hlY2tpbmcgZm9yIGEgbmV3IHN0b3JhZ2Ugcm91dGluZyBjb25maWcgZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBDT05GSUdfUE9MTF9JTlRFUlZBTCk7XG4gICAgICAgICh0aGlzLnBvbGxUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLy8gRGVkdXBsaWNhdGVzIGNvbmN1cnJlbnQgcmVmcmVzaGVzICh0aGUgcG9sbCB0aW1lciBhbmQgd3JvbmctdGFyZ2V0IHdyaXRlIHJldHJpZXMgc2hhcmUgdGhpcylcbiAgICBwcml2YXRlIGNvbmZpZ1JlZnJlc2hJbkZsaWdodDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlZnJlc2hBY3RpdmVDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWdSZWZyZXNoSW5GbGlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0ID0gdGhpcy5jaGVja0Zvck5ld0NvbmZpZygpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0O1xuICAgIH1cblxuICAgIC8vIFRoZSBsYXRlc3QgY29uZmlnLCBhcyB0aGUgc2VydmVyIElOVEVSUFJFVFMgaXQ6IGdldENvbmZpZyBjYXJyaWVzIGluLW1lbW9yeSBvdmVybGF5cyAoZGVwbG95XG4gICAgcHJpdmF0ZSBhc3luYyBmZXRjaExhdGVzdENvbmZpZyhzdGF0ZTogQ2hhaW5TdGF0ZSk6IFByb21pc2U8UmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBsYXRlc3QgPSBhd2FpdCBzb3VyY2UucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAobGF0ZXN0KSByZXR1cm4gbm9ybWFsaXplUmVtb3RlQ29uZmlnKGxhdGVzdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSBzdGF0ZS5zb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdG9yYWdlIHNvdXJjZSBjb3VsZCBnaXZlIHVzIHRoZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlcnJvcnMuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tGb3JOZXdDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkIHx8ICF0aGlzLnN0YXRlUHJvbWlzZSkgcmV0dXJuO1xuICAgICAgICBsZXQgc3RhdGU6IENoYWluU3RhdGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGVQcm9taXNlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGF0ZXN0ID0gYXdhaXQgdGhpcy5mZXRjaExhdGVzdENvbmZpZyhzdGF0ZSk7XG4gICAgICAgIGlmICghbGF0ZXN0KSByZXR1cm47XG4gICAgICAgIGF3YWl0IHRoaXMuYWRvcHROZXdDb25maWcoc3RhdGUsIGxhdGVzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhZG9wdE5ld0NvbmZpZyhzdGF0ZTogQ2hhaW5TdGF0ZSwgbGF0ZXN0OiBSZW1vdGVDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGxhdGVzdCkgPT09IEpTT04uc3RyaW5naWZ5KHN0YXRlLmNvbmZpZykpIHJldHVybjtcbiAgICAgICAgbGV0IHJlY2VpdmVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICBsZXQgb25seUludGVybWVkaWF0ZXNDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkocmVzb2x2ZUludGVybWVkaWF0ZVNvdXJjZXMobGF0ZXN0KSkgPT09IEpTT04uc3RyaW5naWZ5KHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzKHN0YXRlLmNvbmZpZykpO1xuICAgICAgICBpZiAob25seUludGVybWVkaWF0ZXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcmFnZSByb3V0aW5nIHN3aXRjaG92ZXIgd2luZG93cyBjaGFuZ2VkICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihzdGF0ZS5jb25maWcpfSAtPiAke2dldENvbmZpZ1ZlcnNpb24obGF0ZXN0KX0pLCByZWNlaXZlZCAke3JlY2VpdmVkfSwgcmVidWlsZGluZyBzb3VyY2VzLiBOZXcgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGxhdGVzdCl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcmFnZSByb3V0aW5nIGNvbmZpZyBjaGFuZ2VkICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihzdGF0ZS5jb25maWcpfSAtPiAke2dldENvbmZpZ1ZlcnNpb24obGF0ZXN0KX0pLCByZWNlaXZlZCAke3JlY2VpdmVkfSwgcmVidWlsZGluZyBzb3VyY2VzLiBOZXcgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGxhdGVzdCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0cmlwcGVkS2V5ID0gKGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKSA9PiBKU09OLnN0cmluZ2lmeSh7IC4uLmNvbmZpZywgdmFsaWRXaW5kb3c6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgbGV0IG9sZEJ5Q29uZmlnID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVdyYXBwZXJbXT4oKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBzdHJpcHBlZEtleShzb3VyY2UuY29uZmlnKTtcbiAgICAgICAgICAgIGxldCBsaXN0ID0gb2xkQnlDb25maWcuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XG4gICAgICAgICAgICAgICAgb2xkQnlDb25maWcuc2V0KGtleSwgbGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0LnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc291cmNlczogU291cmNlV3JhcHBlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZUNvbmZpZyBvZiBsYXRlc3Quc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKSkge1xuICAgICAgICAgICAgbGV0IG9sZCA9IG9sZEJ5Q29uZmlnLmdldChzdHJpcHBlZEtleShzb3VyY2VDb25maWcpKT8uc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvbGQpIHtcbiAgICAgICAgICAgICAgICBvbGQudXBkYXRlVmFsaWRXaW5kb3coc291cmNlQ29uZmlnLnZhbGlkV2luZG93KTtcbiAgICAgICAgICAgICAgICBzb3VyY2VzLnB1c2gob2xkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlcy5wdXNoKGF3YWl0IHRoaXMuY3JlYXRlQ2hhaW5Tb3VyY2Uoc291cmNlQ29uZmlnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbGVmdG92ZXJzIG9mIG9sZEJ5Q29uZmlnLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsZWZ0b3ZlciBvZiBsZWZ0b3ZlcnMpIHtcbiAgICAgICAgICAgICAgICBsZWZ0b3Zlci5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcgPSBsYXRlc3Q7XG4gICAgICAgIHRoaXMuc3RhdGVQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHsgY29uZmlnOiBsYXRlc3QsIHNvdXJjZXMgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsYXN0QXZhaWxhYmlsaXR5UmVjaGVjayA9IDA7XG4gICAgcHJpdmF0ZSBhdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWNoZWNrQXZhaWxhYmlsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQpIHJldHVybiB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodDtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RBdmFpbGFiaWxpdHlSZWNoZWNrIDwgQVZBSUxBQklMSVRZX1JFQ0hFQ0tfVEhST1RUTEUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy5sYXN0QXZhaWxhYmlsaXR5UmVjaGVjayA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0ID0gdGhpcy5yZWNoZWNrQXZhaWxhYmlsaXR5Tm93KCkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodDtcbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyByZWNoZWNrQXZhaWxhYmlsaXR5Tm93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCAhdGhpcy5zdGF0ZVByb21pc2UpIHJldHVybjtcbiAgICAgICAgbGV0IHN0YXRlOiBDaGFpblN0YXRlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYEV2ZXJ5IHN0b3JhZ2Ugc291cmNlIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTsgcmUtY29udGFjdGluZyBhbGwgJHtzdGF0ZS5zb3VyY2VzLmxlbmd0aH0gc291cmNlcyAocm91dGluZyByZS1yZWFkICsgY29ubmVjdGlvbiByZS1hdHRlbXB0KWApO1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHN0YXRlLnNvdXJjZXMubWFwKGFzeW5jIHNvdXJjZSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb3VyY2UucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGxhdGVzdCA9IHJlc3VsdHMuZmluZCh4ID0+IHgpO1xuICAgICAgICBpZiAoIWxhdGVzdCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmFkb3B0TmV3Q29uZmlnKHN0YXRlLCBsYXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuPFQ+KHN0YXRlOiBDaGFpblN0YXRlLCBjb25maWc6IHsgYXBpT25seT86IGJvb2xlYW47IHdyaXRlPzogYm9vbGVhbjsgcm91dGU/OiBudW1iZXIgfSwgcnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAoY29uZmlnLndyaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5Xcml0ZShjb25maWcucm91dGUsIHJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5yb3V0ZSAhPT0gdW5kZWZpbmVkICYmICFyb3V0ZUNvbnRhaW5zKHNvdXJjZS5jb25maWcucm91dGUsIGNvbmZpZy5yb3V0ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnV2luZG93Q3VycmVudChzb3VyY2UuY29uZmlnKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGlPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBpID0gc291cmNlLmFwaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9IGhhcyBVUkwtb25seSBhY2Nlc3MsIHdoaWNoIGNhbm5vdCBzZXJ2ZSB0aGlzIG9wZXJhdGlvbmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bihhcGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb3VyY2UucmVhZChydW4pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0Nvbm5lY3RlZCgpKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbGwgc291cmNlcyBmYWlsZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0ke2NvbmZpZy5yb3V0ZSAhPT0gdW5kZWZpbmVkICYmIGAgKHJvdXRlICR7Y29uZmlnLnJvdXRlfSlgIHx8IFwiXCJ9OiAke2Vycm9ycy5qb2luKFwiIHwgXCIpIHx8IFwibm8gc291cmNlcyBhdmFpbGFibGVcIn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuV3JpdGU8VD4ocm91dGU6IG51bWJlciB8IHVuZGVmaW5lZCwgcnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBsZXQgcmV0cmllZFdyb25nV2luZG93ID0gZmFsc2U7XG4gICAgICAgIGxldCByZXRyaWVkV3JvbmdSb3V0ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gc3RhdGUuc291cmNlcy5maW5kKHggPT4gY29uZmlnQWNjZXB0c1dyaXRlcyh4LmNvbmZpZykgJiYgKHJvdXRlID09PSB1bmRlZmluZWQgfHwgcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgcm91dGUpKSk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgYWNjZXB0cyB3cml0ZXMgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0ke3JvdXRlICE9PSB1bmRlZmluZWQgJiYgYCAocm91dGUgJHtyb3V0ZX0pYCB8fCBcIlwifSAoZXZlcnkgc291cmNlIGlzIG91dHNpZGUgaXRzIHZhbGlkIHdpbmRvdyBvciBvdXRzaWRlIHRoZSBrZXkncyByb3V0ZSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRhcmdldC53cml0ZShydW4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKTtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1ZBTElEX1dJTkRPVykgJiYgIXJldHJpZWRXcm9uZ1dpbmRvdykge1xuICAgICAgICAgICAgICAgICAgICByZXRyaWVkV3JvbmdXaW5kb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlLCBcIndpbmRvd1wiKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfV1JPTkdfUk9VVEUpICYmICFyZXRyaWVkV3JvbmdSb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXRyaWVkV3JvbmdSb3V0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZVdyb25nVGFyZ2V0UmV0cnkoc3RhdGUsIFwicm91dGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY2hlY2tlZEF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbGFzdENvbmZpZ1JlZnJlc2ggPSAwO1xuICAgIHByaXZhdGUgYXN5bmMgcHJlcGFyZVdyb25nVGFyZ2V0UmV0cnkoc3RhdGU6IENoYWluU3RhdGUsIGtpbmQ6IFwid2luZG93XCIgfCBcInJvdXRlXCIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwid2luZG93XCIpIHtcbiAgICAgICAgICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IG5lYXJCb3VuZGFyeSA9IHN0YXRlLnNvdXJjZXMuc29tZShzb3VyY2UgPT4gc291cmNlLmNvbmZpZy52YWxpZFdpbmRvdy5zb21lKHQgPT4gdCA+IDAgJiYgdCA8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSICYmIE1hdGguYWJzKHQgLSBub3cpIDw9IFdST05HX1RBUkdFVF9CT1VOREFSWV9XSU5ET1cpKTtcbiAgICAgICAgICAgIGlmIChuZWFyQm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGUgcmVqZWN0ZWQgYnkgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogcmFjZWQgYSB2YWxpZCB3aW5kb3cgYm91bmRhcnk7IHdhaXRpbmcgJHtXUk9OR19UQVJHRVRfQk9VTkRBUllfUkVUUllfREVMQVkgLyAxMDAwfXMgYW5kIHJldHJ5aW5nYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoV1JPTkdfVEFSR0VUX0JPVU5EQVJZX1JFVFJZX0RFTEFZKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RDb25maWdSZWZyZXNoIDwgQ09ORklHX1JFRlJFU0hfVEhST1RUTEUpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXN0Q29uZmlnUmVmcmVzaCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBXcml0ZSByZWplY3RlZCBieSAke3RoaXMuZ2V0RGVidWdOYW1lKCl9ICh3cm9uZyAke2tpbmR9KTogb3VyIGNvbmZpZyBpcyBzdGFsZSAobGlrZWx5IGEgZGVwbG95IHN3aXRjaG92ZXIpOyByZWZyZXNoaW5nIGl0IGFuZCByZXRyeWluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY3RpdmVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlcXVlc3Q8VD4oY29uZmlnOiB7IGFwaU9ubHk/OiBib29sZWFuOyB3cml0ZT86IGJvb2xlYW47IHJvdXRlPzogbnVtYmVyIH0sIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW4oc3RhdGUsIGNvbmZpZywgcnVuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgd2FpdGluZ0ZvckFjY2VzcygpOiBQcm9taXNlPHsgbGluazogc3RyaW5nOyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuYXBpIGluc3RhbmNlb2YgQXJjaGl2ZXNSZW1vdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgd2FpdGluZyA9IGF3YWl0IHNvdXJjZS5hcGkud2FpdGluZ0ZvckFjY2VzcygpO1xuICAgICAgICAgICAgICAgIGlmICh3YWl0aW5nKSByZXR1cm4gd2FpdGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogeyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHsgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7IHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0SW5mbyhmaWxlTmFtZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0Q292ZXJpbmdTb3VyY2VzKHN0YXRlOiBDaGFpblN0YXRlLCBleGNsdWRlZDogU2V0PFNvdXJjZVdyYXBwZXI+KTogU291cmNlV3JhcHBlcltdIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBzdGF0ZS5zb3VyY2VzLmZpbHRlcih4ID0+IGNvbmZpZ1dpbmRvd0N1cnJlbnQoeC5jb25maWcpICYmIHguYXBpICYmICFleGNsdWRlZC5oYXMoeCkpO1xuICAgICAgICBsZXQgY2hvc2VuOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgbGV0IGNvdmVyZWQgPSAwO1xuICAgICAgICB3aGlsZSAoY292ZXJlZCA8IDEpIHtcbiAgICAgICAgICAgIGxldCBiZXN0OiBTb3VyY2VXcmFwcGVyIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGJlc3RFbmQgPSBjb3ZlcmVkO1xuICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgW3N0YXJ0LCBlbmRdID0gc291cmNlLmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+IGNvdmVyZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChlbmQgPiBiZXN0RW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RFbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGJlc3QgPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFiZXN0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY292ZXIgdGhlIGZ1bGwgcm91dGUgc3BhY2UgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHRoZSBhdmFpbGFibGUgc291cmNlcyBvbmx5IGNvdmVyIHVwIHRvICR7Y292ZXJlZH0gKHNvbWUgc2hhcmRzIGFyZSBkb3duIG9yIFVSTC1vbmx5KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hvc2VuLnB1c2goYmVzdCk7XG4gICAgICAgICAgICBjb3ZlcmVkID0gYmVzdEVuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hvc2VuO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuT25Db3ZlcmluZzxUPihydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUW10+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgZXhjbHVkZWQgPSBuZXcgU2V0PFNvdXJjZVdyYXBwZXI+KCk7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgY292ZXJpbmcgPSB0aGlzLnNlbGVjdENvdmVyaW5nU291cmNlcyhzdGF0ZSwgZXhjbHVkZWQpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjb3ZlcmluZy5tYXAoYXN5bmMgc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYXBpID0gc291cmNlLmFwaTtcbiAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c291cmNlLmNvbmZpZy51cmx9IGhhcyBVUkwtb25seSBhY2Nlc3MsIHdoaWNoIGNhbm5vdCBzZXJ2ZSB0aGlzIG9wZXJhdGlvbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogYXdhaXQgcnVuKGFwaSkgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNDb25uZWN0ZWQoKSkgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkLmFkZChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHRzLmV2ZXJ5KHggPT4geCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoeCA9PiAoeCBhcyB7IHZhbHVlOiBUIH0pLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiB7IHNoYWxsb3c/OiBib29sZWFuOyB0eXBlOiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZmluZEluZm8ocHJlZml4LCBjb25maWcpKS5tYXAoeCA9PiB4LnBhdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU6IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgdGhpcy5ydW5PbkNvdmVyaW5nKGFyY2hpdmVzID0+IGFyY2hpdmVzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSk7XG4gICAgICAgIGxldCBieVBhdGggPSBuZXcgTWFwPHN0cmluZywgQXJjaGl2ZUZpbGVJbmZvPigpO1xuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgbGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGJ5UGF0aC5nZXQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nIHx8IGZpbGUuY3JlYXRlVGltZSA+IGV4aXN0aW5nLmNyZWF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnlQYXRoLnNldChmaWxlLnBhdGgsIGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWVyZ2VkID0gWy4uLmJ5UGF0aC52YWx1ZXMoKV07XG4gICAgICAgIHNvcnQobWVyZ2VkLCB4ID0+IHgucGF0aCk7XG4gICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIodGltZTogbnVtYmVyKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IHRoaXMucnVuT25Db3ZlcmluZyhhc3luYyBhcmNoaXZlcyA9PiB7XG4gICAgICAgICAgICBpZiAoIWFyY2hpdmVzLmdldENoYW5nZXNBZnRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcmNoaXZlcy5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3Qgc3VwcG9ydCBnZXRDaGFuZ2VzQWZ0ZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcmNoaXZlcy5nZXRDaGFuZ2VzQWZ0ZXIodGltZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgYnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBieVBhdGguZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZyB8fCBmaWxlLmNyZWF0ZVRpbWUgPiBleGlzdGluZy5jcmVhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5UGF0aC5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lcmdlZCA9IFsuLi5ieVBhdGgudmFsdWVzKCldO1xuICAgICAgICBzb3J0KG1lcmdlZCwgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICBsZXQgc3RhdHVzZXMgPSBhd2FpdCB0aGlzLnJ1bk9uQ292ZXJpbmcoYXN5bmMgYXJjaGl2ZXMgPT4ge1xuICAgICAgICAgICAgaWYgKCFhcmNoaXZlcy5nZXRTeW5jU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FyY2hpdmVzLmdldERlYnVnTmFtZSgpfSBkb2VzIG5vdCBzdXBwb3J0IGdldFN5bmNTdGF0dXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcmNoaXZlcy5nZXRTeW5jU3RhdHVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsU2NhbnNDb21wbGV0ZTogc3RhdHVzZXMuZXZlcnkoeCA9PiB4LmFsbFNjYW5zQ29tcGxldGUpLFxuICAgICAgICAgICAgaW5kZXhTaXplOiBzdGF0dXNlcy5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC5pbmRleFNpemUsIDApLFxuICAgICAgICAgICAgc291cmNlczogc3RhdHVzZXMuZmxhdE1hcCh4ID0+IHguc291cmNlcyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDb25maWcoKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGlmICghc3RhdGUuc291cmNlcy5zb21lKHggPT4geC5hcGkpKSByZXR1cm4geyByZW1vdGVDb25maWc6IHN0YXRlLmNvbmZpZyB9O1xuICAgICAgICBsZXQgY29uZmlnID0gYXdhaXQgdGhpcy5ydW4oc3RhdGUsIHsgYXBpT25seTogdHJ1ZSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5nZXRDb25maWcoKSk7XG4gICAgICAgIHJldHVybiB7IC4uLmNvbmZpZywgcmVtb3RlQ29uZmlnOiBzdGF0ZS5jb25maWcgfTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ0FjY2VwdHNXcml0ZXMoc291cmNlLmNvbmZpZykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBzb3VyY2UuaGFzV3JpdGVBY2Nlc3MoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXQoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiB7IGxhc3RNb2RpZmllZD86IG51bWJlciB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldFJvdXRpbmdDb25maWcoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoVkFSSUFCTEVfU0hBUkQpICYmIHBhcnNlVmFyaWFibGVSb3V0ZShmaWxlTmFtZSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0VmFyaWFibGVTaGFyZChmaWxlTmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyB3cml0ZTogdHJ1ZSwgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXQoZmlsZU5hbWUsIGRhdGEsIGNvbmZpZykpO1xuICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRSb3V0aW5nQ29uZmlnKGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IHdyaXRlVGltZSA9IGNvbmZpZz8ubGFzdE1vZGlmaWVkIHx8IERhdGUubm93KCk7XG4gICAgICAgIGxldCB3cml0dGVuOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGluZyBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IHRvIGV2ZXJ5IG5vZGUgKHdyaXRlIHRpbWUgJHtuZXcgRGF0ZSh3cml0ZVRpbWUpLnRvSVNPU3RyaW5nKCl9KTogJHtkYXRhLnRvU3RyaW5nKFwidXRmOFwiKS5zbGljZSgwLCAyMDAwKX1gKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhzb3VyY2UuY29uZmlnLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2Vlbi5hZGQoc291cmNlLmNvbmZpZy51cmwpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KFJPVVRJTkdfRklMRSwgZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSB9KSk7XG4gICAgICAgICAgICAgICAgd3JpdHRlbi5wdXNoKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgdGhlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgdG8gJHtzb3VyY2UuY29uZmlnLnVybH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgJHtzb3VyY2UuY29uZmlnLnVybH06ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWN0aXZlQ29uZmlnKCk7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0b3JhZ2Ugcm91dGluZyBjb25maWcgd3JpdGUgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gZmFpbGVkIG9uICR7ZXJyb3JzLmxlbmd0aH0gb2YgJHtzZWVuLnNpemV9IG5vZGVzIChzdWNjZWVkZWQgb246ICR7d3JpdHRlbi5qb2luKFwiLCBcIikgfHwgXCJub25lXCJ9KTogJHtlcnJvcnMuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUk9VVElOR19GSUxFO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KHsgd3JpdGU6IHRydWUsIHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZGVsKGZpbGVOYW1lKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRWYXJpYWJsZVNoYXJkKGtleTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0c0J5Um91dGUgPSBuZXcgTWFwPHN0cmluZywgU291cmNlV3JhcHBlcj4oKTtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWdBY2NlcHRzV3JpdGVzKHNvdXJjZS5jb25maWcpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgcm91dGVLZXkgPSBKU09OLnN0cmluZ2lmeShzb3VyY2UuY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEUpO1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0c0J5Um91dGUuaGFzKHJvdXRlS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzQnlSb3V0ZS5zZXQocm91dGVLZXksIHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRhcmdldHMgPSBbLi4udGFyZ2V0c0J5Um91dGUudmFsdWVzKCldO1xuICAgICAgICAgICAgc29ydCh0YXJnZXRzLCB4ID0+IHguZ2V0TGF0ZW5jeSgpKTtcbiAgICAgICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0YXJnZXQuY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEU7XG4gICAgICAgICAgICAgICAgbGV0IGZ1bGxLZXkgPSBrZXkucmVwbGFjZShWQVJJQUJMRV9TSEFSRCwgVkFSSUFCTEVfU0hBUkQgKyBcIl9cIiArIChzdGFydCArIE1hdGgucmFuZG9tKCkgKiAoZW5kIC0gc3RhcnQpKSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGFyZ2V0LndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChmdWxsS2V5LCBkYXRhLCBjb25maWcpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxLZXk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmlzQ29ubmVjdGVkKCkpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0ICR7dGFyZ2V0LmdldERlYnVnTmFtZSgpfSBpcyBkb3duOyBtb3ZpbmcgdG8gdGhlIG5leHQtbG93ZXN0LWxhdGVuY3kgc2hhcmRgKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFdmVyeSB2YXJpYWJsZS1zaGFyZCB3cml0ZSB0YXJnZXQgZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiAke2Vycm9ycy5qb2luKFwiIHwgXCIpIHx8IFwibm8gc291cmNlcyBhY2NlcHQgd3JpdGVzXCJ9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TGFyZ2VGaWxlKGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IGdldE5leHREYXRhKCk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aC5pbmNsdWRlcyhWQVJJQUJMRV9TSEFSRCkgJiYgcGFyc2VWYXJpYWJsZVJvdXRlKGNvbmZpZy5wYXRoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNldExhcmdlRmlsZSBkb2VzIG5vdCBzdXBwb3J0IFZBUklBQkxFX1NIQVJEIGtleXMgKHRoZXJlIGlzIG5vIHdheSB0byByZXR1cm4gdGhlIG1hdGVyaWFsaXplZCBrZXkpOyB3cml0ZSB0aGUgZmlsZSB3aXRoIHNldCwgb3IgbWF0ZXJpYWxpemUgdGhlIGtleSB5b3Vyc2VsZi4gS2V5OiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZy5wYXRoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm91dGUgPSBnZXRSb3V0ZShjb25maWcucGF0aCk7XG4gICAgICAgIGxldCByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBzdGF0ZS5zb3VyY2VzLmZpbmQoeCA9PiBjb25maWdBY2NlcHRzV3JpdGVzKHguY29uZmlnKSAmJiByb3V0ZUNvbnRhaW5zKHguY29uZmlnLnJvdXRlLCByb3V0ZSkpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlY2hlY2tlZEF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGFjY2VwdHMgd3JpdGVzIGZvciBzZXRMYXJnZUZpbGUgb24gJHt0aGlzLmdldERlYnVnTmFtZSgpfSAocm91dGUgJHtyb3V0ZX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRhcmdldC53cml0ZShhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXRMYXJnZUZpbGUoY29uZmlnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUocGF0aCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmNvbmZpZy5wdWJsaWMgPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcm91dGVDb250YWlucyhzb3VyY2UuY29uZmlnLnJvdXRlLCByb3V0ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS51cmwpIHJldHVybiBhd2FpdCBzb3VyY2UudXJsLmdldFVSTChwYXRoKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuYXBpKSByZXR1cm4gYXdhaXQgc291cmNlLmFwaS5nZXRVUkwocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwdWJsaWMgc291cmNlIGNvdmVyaW5nIHJvdXRlICR7cm91dGV9IHRvIGJ1aWxkIGEgVVJMIGZyb20gZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaD8uKCk7XG4gICAgICAgIGlmICh0aGlzLnBvbGxUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5pdFJldHJ5VGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluaXRSZXRyeVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhdGVQcm9taXNlID0gdGhpcy5zdGF0ZVByb21pc2U7XG4gICAgICAgIGlmIChzdGF0ZVByb21pc2UpIHtcbiAgICAgICAgICAgIHZvaWQgc3RhdGVQcm9taXNlLnRoZW4oc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKCkgPT4geyB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFyY2hpdmVzKGNvbmZpZzogUmVtb3RlQ29uZmlnIHwgUmVtb3RlQ29uZmlnQmFzZSk6IEFyY2hpdmVzQ2hhaW4ge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXNDaGFpbihjb25maWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsU2VydmVyPFQ+KHVybDogc3RyaW5nLCBydW46IChjb250cm9sbGVyOiB0eXBlb2YgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbc3RyaW5nXSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIFNvY2tldEZ1bmN0aW9uLkVOQUJMRV9DTElFTlRfTU9ERSA9IHRydWU7XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlU3RvcmFnZVVybCh1cmwpO1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0IH0pO1xuICAgIGxldCBjb250cm9sbGVyID0gUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbbm9kZUlkXTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuKGNvbnRyb2xsZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFTdHJpbmcoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB0aHJvdyBlO1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0LCBub2RlSWQgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBydW4oY29udHJvbGxlcik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZlckJ1Y2tldHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8U2VydmVyQnVja2V0SW5mb1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmxpc3RCdWNrZXRzKGNvbmZpZy5hY2NvdW50KSk7XG59XG5cbi8qKiBUaGUgbGl2ZSwgaW4tbWVtb3J5IHN0YXRlIG9mIG9uZSBidWNrZXQgb24gYSBzZXJ2ZXIgKHJvdXRpbmcgY29uZmlnIGluY2x1ZGVkKSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQ2hlYXAgLSBpdCBuZXZlciB0b3VjaGVzIHRoZSBzZXJ2ZXIncyBkaXNrIC0gYnV0IG9ubHkgd29ya3Mgd2hpbGUgdGhhdCBidWNrZXQgaXMgbG9hZGVkIHRoZXJlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZlckFjdGl2ZUJ1Y2tldChjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuZ2V0QWN0aXZlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSkpO1xufVxuXG4vKiogVGVsbHMgYSBzZXJ2ZXIgdG8gbG9hZCBvbmUgb2YgaXRzIGJ1Y2tldHMgaW50byBtZW1vcnkgKHN0YXJ0aW5nIGl0cyBzeW5jaHJvbml6YXRpb24pIGFuZCByZXR1cm5zIGl0cyBsaXZlIHN0YXRlLCBvciBhIHN0cmluZyBzYXlpbmcgd2h5IGl0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIE9ubHkgdG91Y2hlcyB0aGF0IHNlcnZlciAtIG5vdGhpbmcgaXMgd3JpdHRlbiBhbmQgbm8gb3RoZXIgc291cmNlIGlzIGNvbnRhY3RlZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZVNlcnZlckJ1Y2tldChjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuYWN0aXZhdGVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKSk7XG59XG5cbi8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdFNlcnZlckJ1Y2tldHMgcmVwb3J0cywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhclNlcnZlcldyaXRlU3RhdHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuY2xlYXJXcml0ZVN0YXRzKGNvbmZpZy5hY2NvdW50KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCdWNrZXRJbmZvKGNvbmZpZzogeyB1cmw6IHN0cmluZyB9KTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgIGxldCByZW1vdGUgPSBuZXcgQXJjaGl2ZXNSZW1vdGUoeyB1cmw6IGNvbmZpZy51cmwsIHdhaXRGb3JBY2Nlc3M6IGZhbHNlIH0pO1xuICAgIHJldHVybiBhd2FpdCByZW1vdGUuZ2V0Q29uZmlnKCk7XG59XG4iXX0=
|
|
786
|
-
/* _JS_SOURCE_HASH = "
|
|
784
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXJjaGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBcmNoaXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBd0Q7QUFDeEQsMkRBQXFEO0FBQ3JELDRDQUlzQjtBQUN0QixpREFJd0I7QUFDeEIsK0RBQW1FO0FBQ25FLG1FQUFnRTtBQUNoRSxxREFBd0Y7QUFDeEYsdUVBQW1FO0FBQ25FLDRDQUFpRDtBQUNqRCw2REFBNEg7QUFDNUgsMkRBQXlGO0FBQ3pGLG1EQUFrRztBQUVsRyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUUvQyxxTkFBcU47QUFDck4sK0NBQXFGO0FBQTVFLDhHQUFBLGNBQWMsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBQUUsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFNUQsU0FBZ0IsaUJBQWlCLENBQUMsTUFBc0M7SUFDcEUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSw2QkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFBLGdDQUFpQixFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RMLENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFBLDZCQUFj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LFNBQVMsRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFIRCxzQ0FHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm9kZSwgc29ydCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7XG4gICAgSUFyY2hpdmVzLCBSZW1vdGVDb25maWcsIFJlbW90ZUNvbmZpZ0Jhc2UsIEhvc3RlZENvbmZpZywgQmFja2JsYXplQ29uZmlnLFxuICAgIEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1csXG4gICAgU1RPUkFHRV9XUk9OR19ST1VURSwgRlVMTF9ST1VURSwgVkFSSUFCTEVfU0hBUkQsXG59IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7XG4gICAgUk9VVElOR19GSUxFLCBnZXRDb25maWdWZXJzaW9uLCBwYXJzZUhvc3RlZFVybCwgcGFyc2VCYWNrYmxhemVVcmwsXG4gICAgbm9ybWFsaXplUmVtb3RlQ29uZmlnLCBub3JtYWxpemVTb3VyY2UsIHNlcmlhbGl6ZVJlbW90ZUNvbmZpZyxcbiAgICBnZXRSb3V0ZSwgcm91dGVDb250YWlucywgcGFyc2VWYXJpYWJsZVJvdXRlLFxufSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7IHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzIH0gZnJvbSBcIi4vaW50ZXJtZWRpYXRlU291cmNlc1wiO1xuaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBBcmNoaXZlc1JlbW90ZSwgcGFyc2VTdG9yYWdlVXJsLCBhdXRoZW50aWNhdGVTdG9yYWdlIH0gZnJvbSBcIi4vQXJjaGl2ZXNSZW1vdGVcIjtcbmltcG9ydCB7IG9uU2VydmVyUm91dGluZ0NoYW5nZWQgfSBmcm9tIFwiLi9zdG9yYWdlQ2xpZW50Q29udHJvbGxlclwiO1xuaW1wb3J0IHsgQXJjaGl2ZXNCYWNrYmxhemUgfSBmcm9tIFwiLi4vYmFja2JsYXplXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwsIGdldExvY2FsQXJjaGl2ZXMsIFNlcnZlckJ1Y2tldEluZm8sIEFjdGl2ZUJ1Y2tldEluZm8gfSBmcm9tIFwiLi9zdG9yYWdlU2VydmVyU3RhdGVcIjtcbmltcG9ydCB7IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLCBTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEIH0gZnJvbSBcIi4vc3RvcmFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IFNvdXJjZVdyYXBwZXIsIFJFVFJZX1NUQVJUX0RFTEFZLCBSRVRSWV9NQVhfREVMQVksIFJFVFJZX0dST1dUSCB9IGZyb20gXCIuL3NvdXJjZVdyYXBwZXJcIjtcblxuY29uc3QgQ09ORklHX1BPTExfSU5URVJWQUwgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgV1JPTkdfVEFSR0VUX0JPVU5EQVJZX1dJTkRPVyA9IDMwICogMTAwMDtcbmNvbnN0IFdST05HX1RBUkdFVF9CT1VOREFSWV9SRVRSWV9ERUxBWSA9IDE1ICogMTAwMDtcbmNvbnN0IENPTkZJR19SRUZSRVNIX1RIUk9UVExFID0gMzAgKiAxMDAwO1xuY29uc3QgQVZBSUxBQklMSVRZX1JFQ0hFQ0tfVEhST1RUTEUgPSA1ICogMTAwMDtcblxuLyoqIFRoZSBhZGRyZXNzLCBwb3J0LCBhY2NvdW50LCBhbmQgYnVja2V0IG5hbWUgYSBidWNrZXQgcm91dGluZyBVUkwgYWRkcmVzc2VzLiBUaHJvd3Mgd2hlbiB0aGUgVVJMIGlzbid0IGEgaG9zdGVkIGJ1Y2tldCByb3V0aW5nIFVSTCAoaHR0cHM6Ly9ob3N0OnBvcnQvZmlsZS88YWNjb3VudD4vPGJ1Y2tldE5hbWU+L3N0b3JhZ2Uvc3RvcmFnZXJvdXRpbmcuanNvbikuICovXG5leHBvcnQgeyBwYXJzZUhvc3RlZFVybCwgcGFyc2VCYWNrYmxhemVVcmwsIGdldEJ1Y2tldEJhc2VVcmwgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwaUFyY2hpdmVzKHNvdXJjZTogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKTogSUFyY2hpdmVzIHtcbiAgICBpZiAoc291cmNlLnR5cGUgPT09IFwiYmFja2JsYXplXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmNoaXZlc0JhY2tibGF6ZSh7IGJ1Y2tldE5hbWU6IHBhcnNlQmFja2JsYXplVXJsKHNvdXJjZS51cmwpLmJ1Y2tldE5hbWUsIHB1YmxpYzogc291cmNlLnB1YmxpYywgaW1tdXRhYmxlOiBzb3VyY2UuaW1tdXRhYmxlLCBhbGxvd2VkT3JpZ2luczogc291cmNlLmFsbG93ZWRPcmlnaW5zIH0pO1xuICAgIH1cbiAgICBsZXQgcGFyc2VkID0gcGFyc2VIb3N0ZWRVcmwoc291cmNlLnVybCk7XG4gICAgbGV0IHNlcnZlciA9IGlzTm9kZSgpICYmIGdldFN0b3JhZ2VTZXJ2ZXJDb25maWdPcHRpb25hbCgpIHx8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VydmVyICYmIHBhcnNlZC5hZGRyZXNzID09PSBzZXJ2ZXIuZG9tYWluICYmIHBhcnNlZC5wb3J0ID09PSBzZXJ2ZXIucG9ydCkge1xuICAgICAgICByZXR1cm4gZ2V0TG9jYWxBcmNoaXZlcyhwYXJzZWQuYWNjb3VudCwgcGFyc2VkLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFyY2hpdmVzUmVtb3RlKHsgdXJsOiBzb3VyY2UudXJsLCB3YWl0Rm9yQWNjZXNzOiBmYWxzZSB9KTtcbn1cblxudHlwZSBDaGFpblN0YXRlID0ge1xuICAgIGNvbmZpZzogUmVtb3RlQ29uZmlnO1xuICAgIHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXTtcbn07XG5cbmZ1bmN0aW9uIGNvbmZpZ1dpbmRvd0N1cnJlbnQoY29uZmlnOiBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgW3N0YXJ0LCBlbmRdID0gY29uZmlnLnZhbGlkV2luZG93O1xuICAgIHJldHVybiBzdGFydCA8PSBub3cgJiYgbm93IDwgZW5kO1xufVxuXG5mdW5jdGlvbiBjb25maWdBY2NlcHRzV3JpdGVzKGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpZ1dpbmRvd0N1cnJlbnQoY29uZmlnKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFyY2hpdmVzQ2hhaW4gaW1wbGVtZW50cyBJQXJjaGl2ZXMge1xuICAgIHByaXZhdGUgY29uZmlndXJlZDogUmVtb3RlQ29uZmlnO1xuICAgIHByaXZhdGUgYWN0aXZlQ29uZmlnOiBSZW1vdGVDb25maWc7XG4gICAgcHJpdmF0ZSBzdGF0ZVByb21pc2U6IFByb21pc2U8Q2hhaW5TdGF0ZT4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBpbml0UmV0cnlEZWxheSA9IFJFVFJZX1NUQVJUX0RFTEFZO1xuICAgIHByaXZhdGUgaW5pdFJldHJ5VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcG9sbFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVSb3V0aW5nUHVzaDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBSZW1vdGVDb25maWcgfCBSZW1vdGVDb25maWdCYXNlKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJlZCA9IG5vcm1hbGl6ZVJlbW90ZUNvbmZpZyhjb25maWcpO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IHRoaXMuY29uZmlndXJlZDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVJvdXRpbmdQdXNoID0gb25TZXJ2ZXJSb3V0aW5nQ2hhbmdlZCgoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRoaXMucmVmcmVzaEFjdGl2ZUNvbmZpZygpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihgQ29uZmlnIHJlZnJlc2ggZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWJ1Z05hbWUoKSB7XG4gICAgICAgIGxldCB1cmxzID0gdGhpcy5hY3RpdmVDb25maWcuc291cmNlcy5tYXAoeCA9PiB0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiAmJiB4IHx8ICh4IGFzIEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZykudXJsKTtcbiAgICAgICAgcmV0dXJuIGBjaGFpbiAke3VybHMuam9pbihcIiwgXCIpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdGF0ZSgpOiBQcm9taXNlPENoYWluU3RhdGU+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEFyY2hpdmVzQ2hhaW4gJHt0aGlzLmdldERlYnVnTmFtZSgpfSBoYXMgYmVlbiBkaXNwb3NlZGApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVQcm9taXNlKSB7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVByb21pc2UgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeURlbGF5ID0gUkVUUllfU1RBUlRfREVMQVk7XG4gICAgICAgICAgICB9LCAoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCB0aGlzLmluaXRSZXRyeVRpbWVyKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU3RvcmFnZSBpbml0IGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSwgcmV0cnlpbmcgaW4gJHtNYXRoLnJvdW5kKHRoaXMuaW5pdFJldHJ5RGVsYXkgLyAxMDAwKX1zLiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlUHJvbWlzZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdGF0ZSgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5pbml0UmV0cnlEZWxheSk7XG4gICAgICAgICAgICAgICAgKHRoaXMuaW5pdFJldHJ5VGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJldHJ5RGVsYXkgPSBNYXRoLm1pbihSRVRSWV9NQVhfREVMQVksIHRoaXMuaW5pdFJldHJ5RGVsYXkgKiBSRVRSWV9HUk9XVEgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVQcm9taXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPENoYWluU3RhdGU+IHtcbiAgICAgICAgbGV0IGNvbmZpZ3MgPSB0aGlzLmNvbmZpZ3VyZWQuc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKTtcbiAgICAgICAgbGV0IGZldGNoZXMgPSBhd2FpdCBQcm9taXNlLmFsbChjb25maWdzLm1hcChhc3luYyBzb3VyY2VDb25maWcgPT4ge1xuICAgICAgICAgICAgbGV0IHByb2JlID0gYXdhaXQgU291cmNlV3JhcHBlci5jcmVhdGUoc291cmNlQ29uZmlnLCB7IGJhY2tncm91bmQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYXdhaXQgcHJvYmUucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwcm9iZSwgc291cmNlQ29uZmlnLCByZXNwb25kZWQ6IHRydWUsIGxhdGVuY3k6IERhdGUubm93KCkgLSBzdGFydCwgZXhpc3RpbmcsIGVycm9yOiBcIlwiIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvYmUsIHNvdXJjZUNvbmZpZywgcmVzcG9uZGVkOiBmYWxzZSwgbGF0ZW5jeTogMCwgZXhpc3Rpbmc6IHVuZGVmaW5lZCwgZXJyb3I6IGAke3NvdXJjZUNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmV0Y2hlcy5maW5kKHggPT4geC5yZXNwb25kZWQpO1xuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluaXRpYWxpemUgc3RvcmFnZSBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogbm8gc291cmNlIGFuc3dlcmVkLiAke2ZldGNoZXMubWFwKHggPT4geC5lcnJvcikuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGZvdW5kLmV4aXN0aW5nO1xuICAgICAgICAgICAgbGV0IGFjdGl2ZSA9IHRoaXMuY29uZmlndXJlZDtcbiAgICAgICAgICAgIGxldCBuZWVkc1dyaXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBnZXRDb25maWdWZXJzaW9uKGV4aXN0aW5nKSA+PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnVmVyc2lvbihleGlzdGluZykgPT09IGdldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKSAmJiBKU09OLnN0cmluZ2lmeShleGlzdGluZykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXJjaGl2ZXMgY29uZmlndXJhdGlvbiB1cGRhdGVkIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHZlcnNpb24sIGZvciAke2ZvdW5kLnNvdXJjZUNvbmZpZy51cmx9LiBVcGRhdGVzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCB5b3UgaW5jcmVhc2UgdGhlIHZlcnNpb24uIFVzaW5nOiAke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nKX0sIGlnbm9yaW5nOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJlZCl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGV4aXN0aW5nO1xuICAgICAgICAgICAgICAgIG5lZWRzV3JpdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZWVkc1dyaXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJlc3Q6IFJlbW90ZUNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsZXQgY29uZmxpY3RVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBmZXRjaCBvZiBmZXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdG9yZWQgPSBmZXRjaC5leGlzdGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9yZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJlc3QgfHwgZ2V0Q29uZmlnVmVyc2lvbihzdG9yZWQpID4gZ2V0Q29uZmlnVmVyc2lvbihiZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IHN0b3JlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnVmVyc2lvbihzdG9yZWQpID09PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkgJiYgSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWd1cmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RVcmwgPSBmZXRjaC5zb3VyY2VDb25maWcudXJsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiZXN0ICYmIGdldENvbmZpZ1ZlcnNpb24oYmVzdCkgPj0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25mbGljdFVybCAmJiBnZXRDb25maWdWZXJzaW9uKGJlc3QpID09PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFyY2hpdmVzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSB2ZXJzaW9uLCBmb3IgJHtjb25mbGljdFVybH0uIFVwZGF0ZXMgd2lsbCBiZSBpZ25vcmVkIHVudGlsIHlvdSBpbmNyZWFzZSB0aGUgdmVyc2lvbi4gVXNpbmc6ICR7SlNPTi5zdHJpbmdpZnkoYmVzdCl9LCBpZ25vcmluZzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ3VyZWQpfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGJlc3Q7XG4gICAgICAgICAgICAgICAgICAgIG5lZWRzV3JpdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc291cmNlcyA9IGF3YWl0IHRoaXMuYnVpbGRTb3VyY2VzKGFjdGl2ZSk7XG4gICAgICAgICAgICBpZiAobmVlZHNXcml0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBtaXNzaW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IHNvdXJjZS5oYXNXcml0ZUFjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfSAoY2hlY2sgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTm90IHdyaXRpbmcgdGhlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gKHZlcnNpb24gJHtnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCl9KTogbm8gd3JpdGUgYWNjZXNzIHRvICR7bWlzc2luZy5qb2luKFwiLCBcIil9LiAke2V4aXN0aW5nICYmIGBSdW5uaW5nIG9uIHRoZSBzdG9yZWQgY29uZmlnICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihleGlzdGluZyl9KSBpbnN0ZWFkLmAgfHwgYE5vIHN0b3JlZCBjb25maWcgZXhpc3RzLCBzbyB0aGUgYnVja2V0IGNhbm5vdCBiZSBjcmVhdGVkIHVudGlsIHdyaXRlIGFjY2VzcyBpcyBncmFudGVkLmB9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzID0gYXdhaXQgdGhpcy5idWlsZFNvdXJjZXMoYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGluZ0RhdGEgPSBzZXJpYWxpemVSZW1vdGVDb25maWcodGhpcy5jb25maWd1cmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3V0aW5nV3JpdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3cml0dGVuVXJscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlblVybHMuaGFzKHNvdXJjZS5jb25maWcudXJsKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlblVybHMuYWRkKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IGlzIG91dCBvZiBkYXRlIChzdG9yZWQgdmVyc2lvbiAke2V4aXN0aW5nICYmIGdldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpIHx8IFwibm9uZVwifSwgb3VycyAke2dldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKX0pOiB3cml0aW5nIG91cnMgdG8gYWxsICR7d3JpdHRlblVybHMuc2l6ZX0gbm9kZXMgKHdyaXRlIHRpbWUgJHtuZXcgRGF0ZShyb3V0aW5nV3JpdGVUaW1lKS50b0lTT1N0cmluZygpfSk6ICR7Wy4uLndyaXR0ZW5VcmxzXS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0dGVuVXJscy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlblVybHMuaGFzKHNvdXJjZS5jb25maWcudXJsKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlblVybHMuYWRkKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KFJPVVRJTkdfRklMRSwgcm91dGluZ0RhdGEsIHsgbGFzdE1vZGlmaWVkOiByb3V0aW5nV3JpdGVUaW1lIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgc3RvcmFnZSByb3V0aW5nIGNvbmZpZyB2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpfSB0byAke3NvdXJjZS5jb25maWcudXJsfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmV0Y2ggPSBmZXRjaGVzLmZpbmQoeCA9PiB4LnJlc3BvbmRlZCAmJiB4LnNvdXJjZUNvbmZpZy51cmwgPT09IHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnNlZWRMYXRlbmN5KGZldGNoLmxhdGVuY3kpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5zdGFydENvbmZpZ1BvbGwoKTtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbmZpZzogYWN0aXZlLCBzb3VyY2VzIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmZXRjaCBvZiBmZXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2gucHJvYmUuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVDaGFpblNvdXJjZShzb3VyY2VDb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyk6IFByb21pc2U8U291cmNlV3JhcHBlcj4ge1xuICAgICAgICBsZXQgc291cmNlID0gYXdhaXQgU291cmNlV3JhcHBlci5jcmVhdGUoc291cmNlQ29uZmlnKTtcbiAgICAgICAgc291cmNlLnN0YXJ0UGluZ2luZygpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRTb3VyY2VzKGNvbmZpZzogUmVtb3RlQ29uZmlnKTogUHJvbWlzZTxTb3VyY2VXcmFwcGVyW10+IHtcbiAgICAgICAgbGV0IHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2VDb25maWcgb2YgY29uZmlnLnNvdXJjZXMubWFwKG5vcm1hbGl6ZVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZUNoYWluU291cmNlKHNvdXJjZUNvbmZpZykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRDb25maWdQb2xsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb2xsVGltZXIgfHwgdGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBvbGxUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5yZWZyZXNoQWN0aXZlQ29uZmlnKCkuY2F0Y2goKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ2hlY2tpbmcgZm9yIGEgbmV3IHN0b3JhZ2Ugcm91dGluZyBjb25maWcgZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiAke2Uuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBDT05GSUdfUE9MTF9JTlRFUlZBTCk7XG4gICAgICAgICh0aGlzLnBvbGxUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLy8gRGVkdXBsaWNhdGVzIGNvbmN1cnJlbnQgcmVmcmVzaGVzICh0aGUgcG9sbCB0aW1lciBhbmQgd3JvbmctdGFyZ2V0IHdyaXRlIHJldHJpZXMgc2hhcmUgdGhpcylcbiAgICBwcml2YXRlIGNvbmZpZ1JlZnJlc2hJbkZsaWdodDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHJlZnJlc2hBY3RpdmVDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWdSZWZyZXNoSW5GbGlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0ID0gdGhpcy5jaGVja0Zvck5ld0NvbmZpZygpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0O1xuICAgIH1cblxuICAgIC8vIFRoZSBsYXRlc3QgY29uZmlnLCBhcyB0aGUgc2VydmVyIElOVEVSUFJFVFMgaXQ6IGdldENvbmZpZyBjYXJyaWVzIGluLW1lbW9yeSBvdmVybGF5cyAoZGVwbG95XG4gICAgcHJpdmF0ZSBhc3luYyBmZXRjaExhdGVzdENvbmZpZyhzdGF0ZTogQ2hhaW5TdGF0ZSk6IFByb21pc2U8UmVtb3RlQ29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBsYXRlc3QgPSBhd2FpdCBzb3VyY2UucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgICAgICBpZiAobGF0ZXN0KSByZXR1cm4gbm9ybWFsaXplUmVtb3RlQ29uZmlnKGxhdGVzdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSBzdGF0ZS5zb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdG9yYWdlIHNvdXJjZSBjb3VsZCBnaXZlIHVzIHRoZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlcnJvcnMuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tGb3JOZXdDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkIHx8ICF0aGlzLnN0YXRlUHJvbWlzZSkgcmV0dXJuO1xuICAgICAgICBsZXQgc3RhdGU6IENoYWluU3RhdGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuc3RhdGVQcm9taXNlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGF0ZXN0ID0gYXdhaXQgdGhpcy5mZXRjaExhdGVzdENvbmZpZyhzdGF0ZSk7XG4gICAgICAgIGlmICghbGF0ZXN0KSByZXR1cm47XG4gICAgICAgIGF3YWl0IHRoaXMuYWRvcHROZXdDb25maWcoc3RhdGUsIGxhdGVzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhZG9wdE5ld0NvbmZpZyhzdGF0ZTogQ2hhaW5TdGF0ZSwgbGF0ZXN0OiBSZW1vdGVDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGxhdGVzdCkgPT09IEpTT04uc3RyaW5naWZ5KHN0YXRlLmNvbmZpZykpIHJldHVybjtcbiAgICAgICAgbGV0IHJlY2VpdmVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICBsZXQgb25seUludGVybWVkaWF0ZXNDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkocmVzb2x2ZUludGVybWVkaWF0ZVNvdXJjZXMobGF0ZXN0KSkgPT09IEpTT04uc3RyaW5naWZ5KHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzKHN0YXRlLmNvbmZpZykpO1xuICAgICAgICBpZiAob25seUludGVybWVkaWF0ZXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcmFnZSByb3V0aW5nIHN3aXRjaG92ZXIgd2luZG93cyBjaGFuZ2VkICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihzdGF0ZS5jb25maWcpfSAtPiAke2dldENvbmZpZ1ZlcnNpb24obGF0ZXN0KX0pLCByZWNlaXZlZCAke3JlY2VpdmVkfSwgcmVidWlsZGluZyBzb3VyY2VzLiBOZXcgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGxhdGVzdCl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcmFnZSByb3V0aW5nIGNvbmZpZyBjaGFuZ2VkICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbihzdGF0ZS5jb25maWcpfSAtPiAke2dldENvbmZpZ1ZlcnNpb24obGF0ZXN0KX0pLCByZWNlaXZlZCAke3JlY2VpdmVkfSwgcmVidWlsZGluZyBzb3VyY2VzLiBOZXcgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGxhdGVzdCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0cmlwcGVkS2V5ID0gKGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKSA9PiBKU09OLnN0cmluZ2lmeSh7IC4uLmNvbmZpZywgdmFsaWRXaW5kb3c6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgbGV0IG9sZEJ5Q29uZmlnID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVdyYXBwZXJbXT4oKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBzdHJpcHBlZEtleShzb3VyY2UuY29uZmlnKTtcbiAgICAgICAgICAgIGxldCBsaXN0ID0gb2xkQnlDb25maWcuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgICAgICAgICBsaXN0ID0gW107XG4gICAgICAgICAgICAgICAgb2xkQnlDb25maWcuc2V0KGtleSwgbGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0LnB1c2goc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc291cmNlczogU291cmNlV3JhcHBlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZUNvbmZpZyBvZiBsYXRlc3Quc291cmNlcy5tYXAobm9ybWFsaXplU291cmNlKSkge1xuICAgICAgICAgICAgbGV0IG9sZCA9IG9sZEJ5Q29uZmlnLmdldChzdHJpcHBlZEtleShzb3VyY2VDb25maWcpKT8uc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChvbGQpIHtcbiAgICAgICAgICAgICAgICBvbGQudXBkYXRlVmFsaWRXaW5kb3coc291cmNlQ29uZmlnLnZhbGlkV2luZG93KTtcbiAgICAgICAgICAgICAgICBzb3VyY2VzLnB1c2gob2xkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlcy5wdXNoKGF3YWl0IHRoaXMuY3JlYXRlQ2hhaW5Tb3VyY2Uoc291cmNlQ29uZmlnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbGVmdG92ZXJzIG9mIG9sZEJ5Q29uZmlnLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsZWZ0b3ZlciBvZiBsZWZ0b3ZlcnMpIHtcbiAgICAgICAgICAgICAgICBsZWZ0b3Zlci5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcgPSBsYXRlc3Q7XG4gICAgICAgIHRoaXMuc3RhdGVQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHsgY29uZmlnOiBsYXRlc3QsIHNvdXJjZXMgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsYXN0QXZhaWxhYmlsaXR5UmVjaGVjayA9IDA7XG4gICAgcHJpdmF0ZSBhdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWNoZWNrQXZhaWxhYmlsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQpIHJldHVybiB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodDtcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RBdmFpbGFiaWxpdHlSZWNoZWNrIDwgQVZBSUxBQklMSVRZX1JFQ0hFQ0tfVEhST1RUTEUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy5sYXN0QXZhaWxhYmlsaXR5UmVjaGVjayA9IERhdGUubm93KCk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0ID0gdGhpcy5yZWNoZWNrQXZhaWxhYmlsaXR5Tm93KCkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodDtcbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyByZWNoZWNrQXZhaWxhYmlsaXR5Tm93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCAhdGhpcy5zdGF0ZVByb21pc2UpIHJldHVybjtcbiAgICAgICAgbGV0IHN0YXRlOiBDaGFpblN0YXRlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYEV2ZXJ5IHN0b3JhZ2Ugc291cmNlIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTsgcmUtY29udGFjdGluZyBhbGwgJHtzdGF0ZS5zb3VyY2VzLmxlbmd0aH0gc291cmNlcyAocm91dGluZyByZS1yZWFkICsgY29ubmVjdGlvbiByZS1hdHRlbXB0KWApO1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHN0YXRlLnNvdXJjZXMubWFwKGFzeW5jIHNvdXJjZSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb3VyY2UucmVhZFJvdXRpbmdDb25maWcoKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgbGV0IGxhdGVzdCA9IHJlc3VsdHMuZmluZCh4ID0+IHgpO1xuICAgICAgICBpZiAoIWxhdGVzdCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmFkb3B0TmV3Q29uZmlnKHN0YXRlLCBsYXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuPFQ+KHN0YXRlOiBDaGFpblN0YXRlLCBjb25maWc6IHsgYXBpT25seT86IGJvb2xlYW47IHdyaXRlPzogYm9vbGVhbjsgcm91dGU/OiBudW1iZXIgfSwgcnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAoY29uZmlnLndyaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5Xcml0ZShjb25maWcucm91dGUsIHJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5yb3V0ZSAhPT0gdW5kZWZpbmVkICYmICFyb3V0ZUNvbnRhaW5zKHNvdXJjZS5jb25maWcucm91dGUsIGNvbmZpZy5yb3V0ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnV2luZG93Q3VycmVudChzb3VyY2UuY29uZmlnKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGlPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBpID0gc291cmNlLmFwaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9IGhhcyBVUkwtb25seSBhY2Nlc3MsIHdoaWNoIGNhbm5vdCBzZXJ2ZSB0aGlzIG9wZXJhdGlvbmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bihhcGkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBzb3VyY2UucmVhZChydW4pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0Nvbm5lY3RlZCgpKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbGwgc291cmNlcyBmYWlsZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0ke2NvbmZpZy5yb3V0ZSAhPT0gdW5kZWZpbmVkICYmIGAgKHJvdXRlICR7Y29uZmlnLnJvdXRlfSlgIHx8IFwiXCJ9OiAke2Vycm9ycy5qb2luKFwiIHwgXCIpIHx8IFwibm8gc291cmNlcyBhdmFpbGFibGVcIn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuV3JpdGU8VD4ocm91dGU6IG51bWJlciB8IHVuZGVmaW5lZCwgcnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBsZXQgcmV0cmllZFdyb25nV2luZG93ID0gZmFsc2U7XG4gICAgICAgIGxldCByZXRyaWVkV3JvbmdSb3V0ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gc3RhdGUuc291cmNlcy5maW5kKHggPT4gY29uZmlnQWNjZXB0c1dyaXRlcyh4LmNvbmZpZykgJiYgKHJvdXRlID09PSB1bmRlZmluZWQgfHwgcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgcm91dGUpKSk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzb3VyY2UgYWNjZXB0cyB3cml0ZXMgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0ke3JvdXRlICE9PSB1bmRlZmluZWQgJiYgYCAocm91dGUgJHtyb3V0ZX0pYCB8fCBcIlwifSAoZXZlcnkgc291cmNlIGlzIG91dHNpZGUgaXRzIHZhbGlkIHdpbmRvdyBvciBvdXRzaWRlIHRoZSBrZXkncyByb3V0ZSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRhcmdldC53cml0ZShydW4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKTtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1ZBTElEX1dJTkRPVykgJiYgIXJldHJpZWRXcm9uZ1dpbmRvdykge1xuICAgICAgICAgICAgICAgICAgICByZXRyaWVkV3JvbmdXaW5kb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlLCBcIndpbmRvd1wiKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFNUT1JBR0VfV1JPTkdfUk9VVEUpICYmICFyZXRyaWVkV3JvbmdSb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXRyaWVkV3JvbmdSb3V0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZVdyb25nVGFyZ2V0UmV0cnkoc3RhdGUsIFwicm91dGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY2hlY2tlZEF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbGFzdENvbmZpZ1JlZnJlc2ggPSAwO1xuICAgIHByaXZhdGUgYXN5bmMgcHJlcGFyZVdyb25nVGFyZ2V0UmV0cnkoc3RhdGU6IENoYWluU3RhdGUsIGtpbmQ6IFwid2luZG93XCIgfCBcInJvdXRlXCIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwid2luZG93XCIpIHtcbiAgICAgICAgICAgIGxldCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IG5lYXJCb3VuZGFyeSA9IHN0YXRlLnNvdXJjZXMuc29tZShzb3VyY2UgPT4gc291cmNlLmNvbmZpZy52YWxpZFdpbmRvdy5zb21lKHQgPT4gdCA+IDAgJiYgdCA8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSICYmIE1hdGguYWJzKHQgLSBub3cpIDw9IFdST05HX1RBUkdFVF9CT1VOREFSWV9XSU5ET1cpKTtcbiAgICAgICAgICAgIGlmIChuZWFyQm91bmRhcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGUgcmVqZWN0ZWQgYnkgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogcmFjZWQgYSB2YWxpZCB3aW5kb3cgYm91bmRhcnk7IHdhaXRpbmcgJHtXUk9OR19UQVJHRVRfQk9VTkRBUllfUkVUUllfREVMQVkgLyAxMDAwfXMgYW5kIHJldHJ5aW5nYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGVsYXkoV1JPTkdfVEFSR0VUX0JPVU5EQVJZX1JFVFJZX0RFTEFZKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RDb25maWdSZWZyZXNoIDwgQ09ORklHX1JFRlJFU0hfVEhST1RUTEUpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXN0Q29uZmlnUmVmcmVzaCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBXcml0ZSByZWplY3RlZCBieSAke3RoaXMuZ2V0RGVidWdOYW1lKCl9ICh3cm9uZyAke2tpbmR9KTogb3VyIGNvbmZpZyBpcyBzdGFsZSAobGlrZWx5IGEgZGVwbG95IHN3aXRjaG92ZXIpOyByZWZyZXNoaW5nIGl0IGFuZCByZXRyeWluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBY3RpdmVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlcXVlc3Q8VD4oY29uZmlnOiB7IGFwaU9ubHk/OiBib29sZWFuOyB3cml0ZT86IGJvb2xlYW47IHJvdXRlPzogbnVtYmVyIH0sIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW4oc3RhdGUsIGNvbmZpZywgcnVuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgd2FpdGluZ0ZvckFjY2VzcygpOiBQcm9taXNlPHsgbGluazogc3RyaW5nOyBtYWNoaW5lSWQ6IHN0cmluZzsgaXA6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuYXBpIGluc3RhbmNlb2YgQXJjaGl2ZXNSZW1vdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgd2FpdGluZyA9IGF3YWl0IHNvdXJjZS5hcGkud2FpdGluZ0ZvckFjY2VzcygpO1xuICAgICAgICAgICAgICAgIGlmICh3YWl0aW5nKSByZXR1cm4gd2FpdGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogeyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfSB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHsgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5nZXQyKGZpbGVOYW1lLCBjb25maWcpKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7IHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0SW5mbyhmaWxlTmFtZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0Q292ZXJpbmdTb3VyY2VzKHN0YXRlOiBDaGFpblN0YXRlLCBleGNsdWRlZDogU2V0PFNvdXJjZVdyYXBwZXI+KTogU291cmNlV3JhcHBlcltdIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBzdGF0ZS5zb3VyY2VzLmZpbHRlcih4ID0+IGNvbmZpZ1dpbmRvd0N1cnJlbnQoeC5jb25maWcpICYmIHguYXBpICYmICFleGNsdWRlZC5oYXMoeCkpO1xuICAgICAgICBsZXQgY2hvc2VuOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgbGV0IGNvdmVyZWQgPSAwO1xuICAgICAgICB3aGlsZSAoY292ZXJlZCA8IDEpIHtcbiAgICAgICAgICAgIGxldCBiZXN0OiBTb3VyY2VXcmFwcGVyIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGJlc3RFbmQgPSBjb3ZlcmVkO1xuICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgW3N0YXJ0LCBlbmRdID0gc291cmNlLmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydCA+IGNvdmVyZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChlbmQgPiBiZXN0RW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RFbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIGJlc3QgPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFiZXN0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY292ZXIgdGhlIGZ1bGwgcm91dGUgc3BhY2UgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHRoZSBhdmFpbGFibGUgc291cmNlcyBvbmx5IGNvdmVyIHVwIHRvICR7Y292ZXJlZH0gKHNvbWUgc2hhcmRzIGFyZSBkb3duIG9yIFVSTC1vbmx5KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hvc2VuLnB1c2goYmVzdCk7XG4gICAgICAgICAgICBjb3ZlcmVkID0gYmVzdEVuZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hvc2VuO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuT25Db3ZlcmluZzxUPihydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUW10+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgZXhjbHVkZWQgPSBuZXcgU2V0PFNvdXJjZVdyYXBwZXI+KCk7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgY292ZXJpbmcgPSB0aGlzLnNlbGVjdENvdmVyaW5nU291cmNlcyhzdGF0ZSwgZXhjbHVkZWQpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjb3ZlcmluZy5tYXAoYXN5bmMgc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYXBpID0gc291cmNlLmFwaTtcbiAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c291cmNlLmNvbmZpZy51cmx9IGhhcyBVUkwtb25seSBhY2Nlc3MsIHdoaWNoIGNhbm5vdCBzZXJ2ZSB0aGlzIG9wZXJhdGlvbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogYXdhaXQgcnVuKGFwaSkgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNDb25uZWN0ZWQoKSkgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkLmFkZChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHRzLmV2ZXJ5KHggPT4geCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoeCA9PiAoeCBhcyB7IHZhbHVlOiBUIH0pLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiB7IHNoYWxsb3c/OiBib29sZWFuOyB0eXBlOiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZmluZEluZm8ocHJlZml4LCBjb25maWcpKS5tYXAoeCA9PiB4LnBhdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZmluZEluZm8ocHJlZml4OiBzdHJpbmcsIGNvbmZpZz86IHsgc2hhbGxvdz86IGJvb2xlYW47IHR5cGU6IFwiZmlsZXNcIiB8IFwiZm9sZGVyc1wiIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgdGhpcy5ydW5PbkNvdmVyaW5nKGFyY2hpdmVzID0+IGFyY2hpdmVzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSk7XG4gICAgICAgIGxldCBieVBhdGggPSBuZXcgTWFwPHN0cmluZywgQXJjaGl2ZUZpbGVJbmZvPigpO1xuICAgICAgICBmb3IgKGxldCBsaXN0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgbGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGJ5UGF0aC5nZXQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nIHx8IGZpbGUuY3JlYXRlVGltZSA+IGV4aXN0aW5nLmNyZWF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnlQYXRoLnNldChmaWxlLnBhdGgsIGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWVyZ2VkID0gWy4uLmJ5UGF0aC52YWx1ZXMoKV07XG4gICAgICAgIHNvcnQobWVyZ2VkLCB4ID0+IHgucGF0aCk7XG4gICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIodGltZTogbnVtYmVyKTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IHRoaXMucnVuT25Db3ZlcmluZyhhc3luYyBhcmNoaXZlcyA9PiB7XG4gICAgICAgICAgICBpZiAoIWFyY2hpdmVzLmdldENoYW5nZXNBZnRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcmNoaXZlcy5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3Qgc3VwcG9ydCBnZXRDaGFuZ2VzQWZ0ZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcmNoaXZlcy5nZXRDaGFuZ2VzQWZ0ZXIodGltZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgYnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBieVBhdGguZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZyB8fCBmaWxlLmNyZWF0ZVRpbWUgPiBleGlzdGluZy5jcmVhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5UGF0aC5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lcmdlZCA9IFsuLi5ieVBhdGgudmFsdWVzKCldO1xuICAgICAgICBzb3J0KG1lcmdlZCwgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3luY1N0YXR1cygpOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICBsZXQgc3RhdHVzZXMgPSBhd2FpdCB0aGlzLnJ1bk9uQ292ZXJpbmcoYXN5bmMgYXJjaGl2ZXMgPT4ge1xuICAgICAgICAgICAgaWYgKCFhcmNoaXZlcy5nZXRTeW5jU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FyY2hpdmVzLmdldERlYnVnTmFtZSgpfSBkb2VzIG5vdCBzdXBwb3J0IGdldFN5bmNTdGF0dXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBhcmNoaXZlcy5nZXRTeW5jU3RhdHVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsU2NhbnNDb21wbGV0ZTogc3RhdHVzZXMuZXZlcnkoeCA9PiB4LmFsbFNjYW5zQ29tcGxldGUpLFxuICAgICAgICAgICAgaW5kZXhTaXplOiBzdGF0dXNlcy5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC5pbmRleFNpemUsIDApLFxuICAgICAgICAgICAgc291cmNlczogc3RhdHVzZXMuZmxhdE1hcCh4ID0+IHguc291cmNlcyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRDb25maWcoKTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGlmICghc3RhdGUuc291cmNlcy5zb21lKHggPT4geC5hcGkpKSByZXR1cm4geyByZW1vdGVDb25maWc6IHN0YXRlLmNvbmZpZyB9O1xuICAgICAgICBsZXQgY29uZmlnID0gYXdhaXQgdGhpcy5ydW4oc3RhdGUsIHsgYXBpT25seTogdHJ1ZSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5nZXRDb25maWcoKSk7XG4gICAgICAgIHJldHVybiB7IC4uLmNvbmZpZywgcmVtb3RlQ29uZmlnOiBzdGF0ZS5jb25maWcgfTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGhhc1dyaXRlQWNjZXNzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ0FjY2VwdHNXcml0ZXMoc291cmNlLmNvbmZpZykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBzb3VyY2UuaGFzV3JpdGVBY2Nlc3MoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXQoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiB7IGxhc3RNb2RpZmllZD86IG51bWJlciB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldFJvdXRpbmdDb25maWcoZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZU5hbWUuaW5jbHVkZXMoVkFSSUFCTEVfU0hBUkQpICYmIHBhcnNlVmFyaWFibGVSb3V0ZShmaWxlTmFtZSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0VmFyaWFibGVTaGFyZChmaWxlTmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyB3cml0ZTogdHJ1ZSwgcm91dGU6IGdldFJvdXRlKGZpbGVOYW1lKSB9LCBhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXQoZmlsZU5hbWUsIGRhdGEsIGNvbmZpZykpO1xuICAgICAgICByZXR1cm4gZmlsZU5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRSb3V0aW5nQ29uZmlnKGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IHdyaXRlVGltZSA9IGNvbmZpZz8ubGFzdE1vZGlmaWVkIHx8IERhdGUubm93KCk7XG4gICAgICAgIGxldCB3cml0dGVuOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGluZyBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IHRvIGV2ZXJ5IG5vZGUgKHdyaXRlIHRpbWUgJHtuZXcgRGF0ZSh3cml0ZVRpbWUpLnRvSVNPU3RyaW5nKCl9KTogJHtkYXRhLnRvU3RyaW5nKFwidXRmOFwiKS5zbGljZSgwLCAyMDAwKX1gKTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHN0YXRlLnNvdXJjZXMpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhzb3VyY2UuY29uZmlnLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2Vlbi5hZGQoc291cmNlLmNvbmZpZy51cmwpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2Uud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KFJPVVRJTkdfRklMRSwgZGF0YSwgeyBsYXN0TW9kaWZpZWQ6IHdyaXRlVGltZSB9KSk7XG4gICAgICAgICAgICAgICAgd3JpdHRlbi5wdXNoKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgV3JvdGUgdGhlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgdG8gJHtzb3VyY2UuY29uZmlnLnVybH1gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgJHtzb3VyY2UuY29uZmlnLnVybH06ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWN0aXZlQ29uZmlnKCk7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0b3JhZ2Ugcm91dGluZyBjb25maWcgd3JpdGUgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gZmFpbGVkIG9uICR7ZXJyb3JzLmxlbmd0aH0gb2YgJHtzZWVuLnNpemV9IG5vZGVzIChzdWNjZWVkZWQgb246ICR7d3JpdHRlbi5qb2luKFwiLCBcIikgfHwgXCJub25lXCJ9KTogJHtlcnJvcnMuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUk9VVElOR19GSUxFO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KHsgd3JpdGU6IHRydWUsIHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZGVsKGZpbGVOYW1lKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRWYXJpYWJsZVNoYXJkKGtleTogc3RyaW5nLCBkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0c0J5Um91dGUgPSBuZXcgTWFwPHN0cmluZywgU291cmNlV3JhcHBlcj4oKTtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWdBY2NlcHRzV3JpdGVzKHNvdXJjZS5jb25maWcpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgcm91dGVLZXkgPSBKU09OLnN0cmluZ2lmeShzb3VyY2UuY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEUpO1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0c0J5Um91dGUuaGFzKHJvdXRlS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzQnlSb3V0ZS5zZXQocm91dGVLZXksIHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRhcmdldHMgPSBbLi4udGFyZ2V0c0J5Um91dGUudmFsdWVzKCldO1xuICAgICAgICAgICAgc29ydCh0YXJnZXRzLCB4ID0+IHguZ2V0TGF0ZW5jeSgpKTtcbiAgICAgICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0YXJnZXQuY29uZmlnLnJvdXRlIHx8IEZVTExfUk9VVEU7XG4gICAgICAgICAgICAgICAgbGV0IGZ1bGxLZXkgPSBrZXkucmVwbGFjZShWQVJJQUJMRV9TSEFSRCwgVkFSSUFCTEVfU0hBUkQgKyBcIl9cIiArIChzdGFydCArIE1hdGgucmFuZG9tKCkgKiAoZW5kIC0gc3RhcnQpKSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGFyZ2V0LndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChmdWxsS2V5LCBkYXRhLCBjb25maWcpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxLZXk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmlzQ29ubmVjdGVkKCkpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0ICR7dGFyZ2V0LmdldERlYnVnTmFtZSgpfSBpcyBkb3duOyBtb3ZpbmcgdG8gdGhlIG5leHQtbG93ZXN0LWxhdGVuY3kgc2hhcmRgKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFdmVyeSB2YXJpYWJsZS1zaGFyZCB3cml0ZSB0YXJnZXQgZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiAke2Vycm9ycy5qb2luKFwiIHwgXCIpIHx8IFwibm8gc291cmNlcyBhY2NlcHQgd3JpdGVzXCJ9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TGFyZ2VGaWxlKGNvbmZpZzogeyBwYXRoOiBzdHJpbmc7IGdldE5leHREYXRhKCk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aC5pbmNsdWRlcyhWQVJJQUJMRV9TSEFSRCkgJiYgcGFyc2VWYXJpYWJsZVJvdXRlKGNvbmZpZy5wYXRoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNldExhcmdlRmlsZSBkb2VzIG5vdCBzdXBwb3J0IFZBUklBQkxFX1NIQVJEIGtleXMgKHRoZXJlIGlzIG5vIHdheSB0byByZXR1cm4gdGhlIG1hdGVyaWFsaXplZCBrZXkpOyB3cml0ZSB0aGUgZmlsZSB3aXRoIHNldCwgb3IgbWF0ZXJpYWxpemUgdGhlIGtleSB5b3Vyc2VsZi4gS2V5OiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZy5wYXRoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm91dGUgPSBnZXRSb3V0ZShjb25maWcucGF0aCk7XG4gICAgICAgIGxldCByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBzdGF0ZS5zb3VyY2VzLmZpbmQoeCA9PiBjb25maWdBY2NlcHRzV3JpdGVzKHguY29uZmlnKSAmJiByb3V0ZUNvbnRhaW5zKHguY29uZmlnLnJvdXRlLCByb3V0ZSkpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlY2hlY2tlZEF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGFjY2VwdHMgd3JpdGVzIGZvciBzZXRMYXJnZUZpbGUgb24gJHt0aGlzLmdldERlYnVnTmFtZSgpfSAocm91dGUgJHtyb3V0ZX0pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRhcmdldC53cml0ZShhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXRMYXJnZUZpbGUoY29uZmlnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUocGF0aCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmNvbmZpZy5wdWJsaWMgPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcm91dGVDb250YWlucyhzb3VyY2UuY29uZmlnLnJvdXRlLCByb3V0ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS51cmwpIHJldHVybiBhd2FpdCBzb3VyY2UudXJsLmdldFVSTChwYXRoKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuYXBpKSByZXR1cm4gYXdhaXQgc291cmNlLmFwaS5nZXRVUkwocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwdWJsaWMgc291cmNlIGNvdmVyaW5nIHJvdXRlICR7cm91dGV9IHRvIGJ1aWxkIGEgVVJMIGZyb20gZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaD8uKCk7XG4gICAgICAgIGlmICh0aGlzLnBvbGxUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5pdFJldHJ5VGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluaXRSZXRyeVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhdGVQcm9taXNlID0gdGhpcy5zdGF0ZVByb21pc2U7XG4gICAgICAgIGlmIChzdGF0ZVByb21pc2UpIHtcbiAgICAgICAgICAgIHZvaWQgc3RhdGVQcm9taXNlLnRoZW4oc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKCkgPT4geyB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFyY2hpdmVzKGNvbmZpZzogUmVtb3RlQ29uZmlnIHwgUmVtb3RlQ29uZmlnQmFzZSk6IEFyY2hpdmVzQ2hhaW4ge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXNDaGFpbihjb25maWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsU2VydmVyPFQ+KHVybDogc3RyaW5nLCBydW46IChjb250cm9sbGVyOiB0eXBlb2YgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbc3RyaW5nXSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIFNvY2tldEZ1bmN0aW9uLkVOQUJMRV9DTElFTlRfTU9ERSA9IHRydWU7XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlU3RvcmFnZVVybCh1cmwpO1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0IH0pO1xuICAgIGxldCBjb250cm9sbGVyID0gUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbbm9kZUlkXTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuKGNvbnRyb2xsZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFTdHJpbmcoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB0aHJvdyBlO1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0LCBub2RlSWQgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBydW4oY29udHJvbGxlcik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZlckJ1Y2tldHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8U2VydmVyQnVja2V0SW5mb1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmxpc3RCdWNrZXRzKGNvbmZpZy5hY2NvdW50KSk7XG59XG5cbi8qKiBUaGUgbGl2ZSwgaW4tbWVtb3J5IHN0YXRlIG9mIG9uZSBidWNrZXQgb24gYSBzZXJ2ZXIgKHJvdXRpbmcgY29uZmlnIGluY2x1ZGVkKSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQ2hlYXAgLSBpdCBuZXZlciB0b3VjaGVzIHRoZSBzZXJ2ZXIncyBkaXNrIC0gYnV0IG9ubHkgd29ya3Mgd2hpbGUgdGhhdCBidWNrZXQgaXMgbG9hZGVkIHRoZXJlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZlckFjdGl2ZUJ1Y2tldChjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuZ2V0QWN0aXZlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSkpO1xufVxuXG4vKiogVGVsbHMgYSBzZXJ2ZXIgdG8gbG9hZCBvbmUgb2YgaXRzIGJ1Y2tldHMgaW50byBtZW1vcnkgKHN0YXJ0aW5nIGl0cyBzeW5jaHJvbml6YXRpb24pIGFuZCByZXR1cm5zIGl0cyBsaXZlIHN0YXRlLCBvciBhIHN0cmluZyBzYXlpbmcgd2h5IGl0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIE9ubHkgdG91Y2hlcyB0aGF0IHNlcnZlciAtIG5vdGhpbmcgaXMgd3JpdHRlbiBhbmQgbm8gb3RoZXIgc291cmNlIGlzIGNvbnRhY3RlZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZVNlcnZlckJ1Y2tldChjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuYWN0aXZhdGVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKSk7XG59XG5cbi8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdFNlcnZlckJ1Y2tldHMgcmVwb3J0cywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhclNlcnZlcldyaXRlU3RhdHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuY2xlYXJXcml0ZVN0YXRzKGNvbmZpZy5hY2NvdW50KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCdWNrZXRJbmZvKGNvbmZpZzogeyB1cmw6IHN0cmluZyB9KTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgIGxldCByZW1vdGUgPSBuZXcgQXJjaGl2ZXNSZW1vdGUoeyB1cmw6IGNvbmZpZy51cmwsIHdhaXRGb3JBY2Nlc3M6IGZhbHNlIH0pO1xuICAgIHJldHVybiBhd2FpdCByZW1vdGUuZ2V0Q29uZmlnKCk7XG59XG4iXX0=
|
|
785
|
+
/* _JS_SOURCE_HASH = "2fc0c0426e2498cd503de9c261ed92b3e94bc35e88513bbffc4a84a454534e72"; */
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
+
// Packages like mobx pick which build to require at runtime, from process.env.NODE_ENV. The browser require shim always runs as production, so a server holding the development build ships a module graph the client cannot satisfy ("Accessed unexpected module ./mobx.cjs.production.min.js"). Setting this is what makes both sides agree, and it must happen before anything imports such a package - hence its own module, imported first (import statements run in source order, so a plain statement at the top of storageServer.ts would run too late).
|
|
3
|
+
process.env.NODE_ENV = "production";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdGlvbkVudi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2R1Y3Rpb25FbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlpQkFBaWlCO0FBQ2ppQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQYWNrYWdlcyBsaWtlIG1vYnggcGljayB3aGljaCBidWlsZCB0byByZXF1aXJlIGF0IHJ1bnRpbWUsIGZyb20gcHJvY2Vzcy5lbnYuTk9ERV9FTlYuIFRoZSBicm93c2VyIHJlcXVpcmUgc2hpbSBhbHdheXMgcnVucyBhcyBwcm9kdWN0aW9uLCBzbyBhIHNlcnZlciBob2xkaW5nIHRoZSBkZXZlbG9wbWVudCBidWlsZCBzaGlwcyBhIG1vZHVsZSBncmFwaCB0aGUgY2xpZW50IGNhbm5vdCBzYXRpc2Z5IChcIkFjY2Vzc2VkIHVuZXhwZWN0ZWQgbW9kdWxlIC4vbW9ieC5janMucHJvZHVjdGlvbi5taW4uanNcIikuIFNldHRpbmcgdGhpcyBpcyB3aGF0IG1ha2VzIGJvdGggc2lkZXMgYWdyZWUsIGFuZCBpdCBtdXN0IGhhcHBlbiBiZWZvcmUgYW55dGhpbmcgaW1wb3J0cyBzdWNoIGEgcGFja2FnZSAtIGhlbmNlIGl0cyBvd24gbW9kdWxlLCBpbXBvcnRlZCBmaXJzdCAoaW1wb3J0IHN0YXRlbWVudHMgcnVuIGluIHNvdXJjZSBvcmRlciwgc28gYSBwbGFpbiBzdGF0ZW1lbnQgYXQgdGhlIHRvcCBvZiBzdG9yYWdlU2VydmVyLnRzIHdvdWxkIHJ1biB0b28gbGF0ZSkuXG5wcm9jZXNzLmVudi5OT0RFX0VOViA9IFwicHJvZHVjdGlvblwiO1xuIl19
|
|
5
|
+
/* _JS_SOURCE_HASH = "a8174affc94c85f294cba386f6b999ada00210f38c47a97ca74d948cdd1e0b3a"; */
|