From 132e849e335cdd8ab91ccd75564a6a76fe7cebbb Mon Sep 17 00:00:00 2001 From: zigholding Date: Sun, 1 Dec 2024 19:53:10 +0800 Subject: [PATCH] fix \g to / --- data.json | 4 ++-- main.js | 8 +++++--- src/fseditor.ts | 6 ++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/data.json b/data.json index dbb924e..ceef3b8 100644 --- a/data.json +++ b/data.json @@ -1,4 +1,4 @@ { - "pluginDirExporter": "D:\\iLanix\\isync\\Obsidian\\.obsidian\\plugins", - "vaultDir": "D:\\iLanix\\isync\\Obsidian" + "pluginDirExporter": "D:\\iLanix\\Obsidian\\.obsidian\\plugins\nD:\\iLanix\\Obsidian\\.mobile\\plugins\nD:\\DataSync\\BaiduSyncdisk\\ZigHoldingShare\\ObsidianBaiduDisk\\.obsidian\\plugins\nD:\\github\\ObsidianZ-final\\.obsidian\\plugins", + "vaultDir": "D:\\iLanix\\isync\\Obsidian\nD:\\github\\ObsidianZ-final\nD:\\iLanix\\Obsidian" } \ No newline at end of file diff --git a/main.js b/main.js index 5ddffc4..b8ebccc 100644 --- a/main.js +++ b/main.js @@ -128,18 +128,20 @@ var FsEditor = class { } mirror_tfile(tfile, vault_root, mode = "mtime", attachment = true, outlink = false) { if (tfile) { - vault_root = vault_root.replace(/\\g/, "/"); + vault_root = vault_root.replace(/\\/g, "/"); let src = this.root + "/" + tfile.path; let dst = vault_root + "/" + tfile.path; this.mkdir_recursive(this.path.dirname(dst)); this.copy_file(src, dst, mode); if (attachment) { + console.log("attachment"); let nc = this.plugin.app.plugins.getPlugin("note-chain"); if (!nc) { return; } - let tfiles = nc.chain.get_outlinks(tfile); + let tfiles = nc.chain.get_outlinks(tfile, false); for (let t of tfiles) { + console.log(t.name); if (!(t.extension === "md")) { this.mirror_tfile(t, vault_root, mode, false); } else if (outlink) { @@ -471,4 +473,4 @@ var VExporterSettingTab = class extends import_obsidian2.PluginSettingTab { })); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyIsICJzcmMvZnNlZGl0b3IudHMiLCAic3JjL3N0cmluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCAqIGFzIE1vZHVsZSBmcm9tICdtb2R1bGUnO1xyXG5pbXBvcnQgeyBBcHAsIEVkaXRvciwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcsIFRGaWxlLCBURm9sZGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW1wb3J0IHsgRnNFZGl0b3IgfSBmcm9tICdzcmMvZnNlZGl0b3InO1xyXG5pbXBvcnQgeyBzdHJpbmdzIH0gZnJvbSAnc3JjL3N0cmluZ3MnO1xyXG5cclxuaW50ZXJmYWNlIFZFeHBvcnRlclNldHRpbmdzIHtcclxuXHRwbHVnaW5EaXJFeHBvcnRlcjpzdHJpbmc7XHJcblx0dmF1bHREaXI6c3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBWRXhwb3J0ZXJTZXR0aW5ncyA9IHtcclxuXHRwbHVnaW5EaXJFeHBvcnRlcjonJyxcclxuXHR2YXVsdERpcjonJ1xyXG59XHJcblxyXG5cclxuY29uc3QgY21kX2V4cG9ydF9jdXJyZW50X25vdGUgPSAocGx1Z2luOlZhdWx0RXhwb3RlclBsdWdpbikgPT4gKHtcclxuXHRpZDogJ2NtZF9leHBvcnRfY3VycmVudF9ub3RlJyxcclxuXHRuYW1lOiBzdHJpbmdzLmNtZF9leHBvcnRfY3VycmVudF9ub3RlLFxyXG5cdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRjb25zdCBuYyA9IHBsdWdpbi5ub3RlY2hhaW47XHJcblx0XHRsZXQgdGZpbGUgPSBuYy5jaGFpbi5jdXJyZW50X25vdGU7XHJcblx0XHRhd2FpdCBwbHVnaW4uZXhwb3J0X3JlYWRtZSh0ZmlsZSxudWxsKTtcclxuXHR9XHJcbn0pO1xyXG5cclxuY29uc3QgY21kX3NldF92ZXhwb3J0ZXIgPSAocGx1Z2luOlZhdWx0RXhwb3RlclBsdWdpbikgPT4gKHtcclxuXHRpZDogJ2NtZF9zZXRfdmV4cG9ydGVyJyxcclxuXHRuYW1lOiBzdHJpbmdzLmNtZF9zZXRfdmV4cG9ydGVyLFxyXG5cdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRjb25zdCBuYyA9IHBsdWdpbi5ub3RlY2hhaW47XHJcblx0XHRsZXQgZGlyID0gYXdhaXQgbmMuY2hhaW4udHBfcHJvbXB0KHN0cmluZ3MucHJvbXB0X3BhdGhfb2ZfZm9sZGVyKTtcclxuXHRcdGxldCBpdGVtOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblx0XHRpZihwbHVnaW4uZnNFZGl0b3IuZnMuZXhpc3RzU3luYyhkaXIpKXtcclxuXHRcdFx0aXRlbVsnRGlyJ10gPSBkaXI7XHJcblx0XHR9XHJcblx0XHRpdGVtWydOYW1lJ10gPSAncmVhZE1lJztcclxuXHRcdGl0ZW1bJ0Fzc2V0cyddID0gJy4vYXNzZXRzJztcclxuXHRcdGl0ZW1bJ1JlbW92ZU1ldGEnXSA9IHRydWU7XHJcblx0XHRpdGVtWydVc2VHaXRMaW5rJ10gPSB0cnVlO1xyXG5cclxuXHRcdGF3YWl0IG5jLmVkaXRvci5zZXRfZnJvbnRtYXR0ZXIoXHJcblx0XHRcdG5jLmNoYWluLmN1cnJlbnRfbm90ZSxcclxuXHRcdFx0J3ZleHBvcnRlcicsXHJcblx0XHRcdGl0ZW1cclxuXHRcdClcclxuXHR9XHJcbn0pO1xyXG5cclxuY29uc3QgY21kX2V4cG9ydF9wbHVnaW4gPSAocGx1Z2luOlZhdWx0RXhwb3RlclBsdWdpbikgPT4gKHtcclxuXHRpZDogJ2NtZF9leHBvcnRfcGx1Z2luJyxcclxuXHRuYW1lOiBzdHJpbmdzLmNtZF9leHBvcnRfcGx1Z2luLFxyXG5cdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRjb25zdCBuYyA9IHBsdWdpbi5ub3RlY2hhaW47XHJcblx0XHRcclxuXHRcdGxldCBwbHVnaW5zID0gT2JqZWN0LmtleXMoKHBsdWdpbi5hcHAgYXMgYW55KS5wbHVnaW5zLnBsdWdpbnMpO1xyXG5cdFx0bGV0IHAgPSBhd2FpdCBuYy5jaGFpbi50cF9zdWdnZXN0ZXIocGx1Z2lucyxwbHVnaW5zKTtcclxuXHRcdGxldCBlcGx1Z2luID0gKHBsdWdpbi5hcHAgYXMgYW55KS5wbHVnaW5zLmdldFBsdWdpbihwKTtcclxuXHRcdGlmKGVwbHVnaW4pe1xyXG5cdFx0XHRsZXQgdGFyZ2V0ID0gYXdhaXQgcGx1Z2luLmZzRWRpdG9yLnNlbGVjdF92YWxpZF9kaXIoXHJcblx0XHRcdFx0cGx1Z2luLnNldHRpbmdzLnBsdWdpbkRpckV4cG9ydGVyLnNwbGl0KFwiXFxuXCIpXHJcblx0XHRcdClcclxuXHRcdFx0aWYoIXBsdWdpbi5mc0VkaXRvci5mcy5leGlzdHNTeW5jKHRhcmdldCkpe1xyXG5cdFx0XHRcdHRhcmdldCA9IGF3YWl0IG5jLmNoYWluLnRwX3Byb21wdChzdHJpbmdzLnByb21wdF9wYXRoX29mX2ZvbGRlcik7XHJcblx0XHRcdH1cclxuXHRcdFx0dGFyZ2V0ID0gdGFyZ2V0LnJlcGxhY2UoL1xcXFwvZywnLycpO1xyXG5cdFx0XHRpZighdGFyZ2V0LmVuZHNXaXRoKCcvJyArIHApKXtcclxuXHRcdFx0XHR0YXJnZXQgPSB0YXJnZXQgKyAnLycgKyBwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCFwbHVnaW4uZnNFZGl0b3IuZnMuZXhpc3RzU3luYyh0YXJnZXQpKXtcclxuXHRcdFx0XHRwbHVnaW4uZnNFZGl0b3IuZnMubWtkaXJTeW5jKHRhcmdldCk7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGl0ZW1zID0gWydtYWluLmpzJywnbWFuaWZlc3QuanNvbicsJ3N0eWxlcy5jc3MnXTtcclxuXHRcdFx0Zm9yKGxldCBpdGVtIG9mIGl0ZW1zKXtcclxuXHRcdFx0XHRsZXQgc3JjID0gYCR7cGx1Z2luLmZzRWRpdG9yLnJvb3R9LyR7ZXBsdWdpbi5tYW5pZmVzdC5kaXJ9LyR7aXRlbX1gO1xyXG5cdFx0XHRcdGxldCBkc3QgPSBgJHt0YXJnZXR9LyR7aXRlbX1gO1xyXG5cdFx0XHRcdHBsdWdpbi5mc0VkaXRvci5jb3B5X2ZpbGUoc3JjLGRzdCwnb3ZlcndyaXRlJyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuY29uc3QgY29tbWFuZEJ1aWxkZXJzID0gW1xyXG5cdGNtZF9leHBvcnRfY3VycmVudF9ub3RlLFxyXG5cdGNtZF9zZXRfdmV4cG9ydGVyLFxyXG5cdGNtZF9leHBvcnRfcGx1Z2luXHJcbl07XHJcblxyXG5mdW5jdGlvbiBhZGRDb21tYW5kcyhwbHVnaW46VmF1bHRFeHBvdGVyUGx1Z2luKSB7XHJcbiAgICBjb21tYW5kQnVpbGRlcnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgIHBsdWdpbi5hZGRDb21tYW5kKGMocGx1Z2luKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmF1bHRFeHBvdGVyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRzZXR0aW5nczogVkV4cG9ydGVyU2V0dGluZ3M7XHJcblx0ZnNFZGl0b3IgOiBGc0VkaXRvcjtcclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5mc0VkaXRvciA9IG5ldyBGc0VkaXRvcih0aGlzKTtcclxuXHRcdC8vIFRoaXMgYWRkcyBhIHNldHRpbmdzIHRhYiBzbyB0aGUgdXNlciBjYW4gY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGx1Z2luXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IFZFeHBvcnRlclNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHRcdGFkZENvbW1hbmRzKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJFdmVudChcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFwiZmlsZS1tZW51XCIsIChtZW51LCBmaWxlKSA9PiB7XHJcblx0XHRcdFx0bWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHRpdGVtXHJcblx0XHRcdFx0XHQuc2V0VGl0bGUoXCJNaXJyb3IgdG8gb3RoZXIgdmF1bHRcIilcclxuXHRcdFx0XHRcdC5zZXRJY29uKFwiZG9jdW1lbnRcIilcclxuXHRcdFx0XHRcdC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0bGV0IGRzdCA9IGF3YWl0IHRoaXMuZnNFZGl0b3Iuc2VsZWN0X3ZhbGlkX2RpcihcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLnZhdWx0RGlyLnNwbGl0KFwiXFxuXCIpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGlmKCFkc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdGxldCBuYz0gKHRoaXMuYXBwIGFzIGFueSkucGx1Z2lucy5nZXRQbHVnaW4oXCJub3RlLWNoYWluXCIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKCFuYyl7XHJcblx0XHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKFwiUGx1Z2luIG5vdGUtY2hhaW4gaXMgbmVlZGVkIVwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZHN0ID0gYXdhaXQgbmMuY2hhaW4udHBfcHJvbXB0KFwiUm9vdCBvZiB2YXVsdFwiKTtcclxuXHRcdFx0XHRcdFx0XHRpZighdGhpcy5mc0VkaXRvci5pc2Rpcihkc3QpKXtcclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJJbnZhbGlkIHJvb3Q6IFwiICsgZHN0KTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKXtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZzRWRpdG9yLm1pcnJvcl90ZmlsZShmaWxlLGRzdCwnbXRpbWUnLHRydWUsZmFsc2UpO1xyXG5cclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZnNFZGl0b3IubWlycm9yX3Rmb2xkZXIoZmlsZSxkc3QsJ210aW1lJyx0cnVlLGZhbHNlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Z2V0IG5vdGVjaGFpbigpe1xyXG5cdFx0cmV0dXJuICh0aGlzLmFwcCBhcyBhbnkpLnBsdWdpbnMuZ2V0UGx1Z2luKCdub3RlLWNoYWluJyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cdFxyXG5cdGFzeW5jIGV4cG9ydF9yZWFkbWUodGZpbGU6VEZpbGUsZHN0OnN0cmluZ3xudWxsKXtcclxuXHRcdGxldCBuYyA9ICh0aGlzLmFwcCBhcyBhbnkpLnBsdWdpbnMuZ2V0UGx1Z2luKCdub3RlLWNoYWluJyk7XHJcblx0XHRpZighdGZpbGUpe3RmaWxlID0gbmMuY2hhaW4uY3VycmVudF9ub3RlO31cclxuXHRcdFxyXG5cdFx0Ly8gXHU4QkJFXHU3RjZFXHU4RjkzXHU1MUZBXHU3NkVFXHU1RjU1XHJcblx0XHRpZighZHN0KXtcclxuXHRcdFx0ZHN0ID0gbmMuZWRpdG9yLmdldF9mcm9udG1hdHRlcih0ZmlsZSwndmV4cG9ydGVyJyk/LkRpcjtcclxuXHRcdFx0aWYoIWRzdCl7XHJcblx0XHRcdFx0ZHN0ID0gYXdhaXQgbmMuY2hhaW4udHBfcHJvbXB0KCdQYXRoIG9mIExvY2FsR2l0UHJvamVjdCcpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZighZHN0IHx8ICF0aGlzLmZzRWRpdG9yLmZzLmV4aXN0c1N5bmMoZHN0KSl7XHJcblx0XHRcdG5ldyBOb3RpY2Uoc3RyaW5ncy5ub3RpY2Vfbm9zdWNoZGlyLDMwMDApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRkc3QgPSBkc3QucmVwbGFjZSgvXFxcXC9nLCcvJyk7XHJcblx0XHRcclxuXHRcdFxyXG5cdFx0Ly8gXHU1QkZDXHU1MUZBXHU1RjUzXHU1MjREXHU3QjE0XHU4QkIwXHJcblx0XHRsZXQgdG1wO1xyXG5cdFx0bGV0IG5hbWUgPSBuYy5lZGl0b3IuZ2V0X2Zyb250bWF0dGVyKHRmaWxlLCd2ZXhwb3J0ZXInKT8uTmFtZTtcclxuXHRcdGlmKG5hbWUgJiYgIShuYW1lPT09JycpKXtcclxuXHRcdFx0dG1wID0gZHN0KycvJytuYW1lKycubWQnO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdHRtcCA9IGRzdCsnLycrdGZpbGUuYmFzZW5hbWUrJy5tZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYodGhpcy5mc0VkaXRvci5jb3B5X3RmaWxlKHRmaWxlLHRtcCkpe1xyXG5cdFx0XHRpZihuYy5lZGl0b3IuZ2V0X2Zyb250bWF0dGVyKHRmaWxlLCd2ZXhwb3J0ZXInKT8uUmVtb3ZlTWV0YSl7XHJcblx0XHRcdFx0Y29uc3QgdWZ1bmMgPSAocGF0aDpzdHJpbmcsZGF0YTpzdHJpbmcpPT57XHJcblx0XHRcdFx0XHRsZXQgcmVzID0gZGF0YTtcclxuXHRcdFx0XHRcdGlmKG5jLmVkaXRvci5nZXRfZnJvbnRtYXR0ZXIodGZpbGUsJ3ZleHBvcnRlcicpPy5SZW1vdmVNZXRhKXtcclxuXHRcdFx0XHRcdFx0cmVzID0gcmVzLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0Ly0tLVtcXG4oXFxyXFxuKV1bXFxzXFxTXSo/LS0tW1xcbihcXHJcXG4pXS8sXHJcblx0XHRcdFx0XHRcdFx0JydcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYobmMuZWRpdG9yLmdldF9mcm9udG1hdHRlcih0ZmlsZSwndmV4cG9ydGVyJyk/LlVzZUdpdExpbmsgJiYgYXNzZXRzKXtcclxuXHRcdFx0XHRcdFx0cmVzID0gcmVzLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0L1xcIVxcW1xcWyguKj8pXFxdXFxdL2csXHJcblx0XHRcdFx0XHRcdFx0KG1hdGNoOmFueSwgbmFtZTpzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBgIVske25hbWV9XSgke2Fzc2V0c30vJHtuYW1lfSlgO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmZzRWRpdG9yLm1vZGlmeSh0bXAsdWZ1bmMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyBcdTVCRkNcdTUxRkFcdTk2NDRcdTRFRjZcclxuXHRcdGxldCBhc3NldHMgPSBuYy5lZGl0b3IuZ2V0X2Zyb250bWF0dGVyKHRmaWxlLCd2ZXhwb3J0ZXInKT8uQXNzZXRzO1xyXG5cdFx0aWYoYXNzZXRzKXtcclxuXHRcdFx0bGV0IG9saW5rcyA9IG5jLmNoYWluLmdldF9vdXRsaW5rcyh0ZmlsZSk7XHJcblx0XHRcdGxldCBhZGlyID0gZHN0KycvJythc3NldHM7XHJcblx0XHRcdHRoaXMuZnNFZGl0b3IubWtkaXJfcmVjdXJzaXZlKGFkaXIpO1xyXG5cdFx0XHRmb3IobGV0IGYgb2Ygb2xpbmtzKXtcclxuXHRcdFx0XHRpZighKGYuZXh0ZW5zaW9uPT09J21kJykpe1xyXG5cdFx0XHRcdFx0dGhpcy5mc0VkaXRvci5jb3B5X3RmaWxlKGYsYWRpcisnLycrZi5iYXNlbmFtZSsnLicrZi5leHRlbnNpb24pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuY2xhc3MgVkV4cG9ydGVyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cdHBsdWdpbjogVmF1bHRFeHBvdGVyUGx1Z2luO1xyXG5cdFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBWYXVsdEV4cG90ZXJQbHVnaW4pIHtcclxuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG5cdH1cclxuXHJcblx0Z2V0U2V0dGluZ1ZhbHVlKGZpZWxkOiBrZXlvZiBWRXhwb3J0ZXJTZXR0aW5ncykge1xyXG5cdFx0cmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzW2ZpZWxkXTtcclxuXHR9XHJcblxyXG5cdGFkZF90b2dnbGUobmFtZTpzdHJpbmcsZGVzYzpzdHJpbmcsZmllbGQ6a2V5b2YgVkV4cG9ydGVyU2V0dGluZ3Mpe1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblx0XHRsZXQgdmFsdWUgPSAodGhpcy5wbHVnaW4uc2V0dGluZ3MgYXMgYW55KVtmaWVsZF0gYXMgYm9vbGVhbjtcclxuXHRcdGxldCBpdGVtID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpICBcclxuXHRcdFx0LnNldE5hbWUobmFtZSlcclxuXHRcdFx0LnNldERlc2MoZGVzYylcclxuXHRcdFx0LmFkZFRvZ2dsZSh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHQuc2V0VmFsdWUodmFsdWUpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTpuZXZlcikgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3NbZmllbGRdID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0cmV0dXJuIGl0ZW07XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHRcdFxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKHN0cmluZ3Muc2V0dGluZ19wbHVnaW5fZGlyKVxyXG5cdFx0XHQuYWRkVGV4dEFyZWEodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnBsdWdpbkRpckV4cG9ydGVyKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnBsdWdpbkRpckV4cG9ydGVyID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHRcdC5zZXROYW1lKHN0cmluZ3Muc2V0dGluZ192YXVsdF9kaXIpXHJcblx0XHRcdFx0LmFkZFRleHRBcmVhKHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnZhdWx0RGlyKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy52YXVsdERpciA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdH0pKTtcclxuXHR9XHJcbn1cclxuIiwgIlxyXG5pbXBvcnQgeyBBcHAsIEVkaXRvciwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcsIFRGaWxlLCBURm9sZGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZzRWRpdG9ye1xyXG4gICAgZnM7XHJcbiAgICBwYXRoO1xyXG4gICAgcGx1Z2luIDpQbHVnaW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocGx1Z2luOlBsdWdpbil7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICAgICAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdGhpcy5wYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCl7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuYWRhcHRlciBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIGEuYmFzZVBhdGgucmVwbGFjZSgvXFxcXC9nLCcvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJzcGF0aCh0ZmlsZTpURmlsZSl7XHJcblx0XHRpZih0ZmlsZSl7XHJcblx0XHRcdHJldHVybiB0aGlzLnJvb3QrJy8nK3RmaWxlLnBhdGg7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuICAgIGlzZmlsZShwYXRoOnN0cmluZyl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyhwYXRoKSAmJiB0aGlzLmZzLnN0YXRTeW5jKHBhdGgpLmlzRmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzZGlyKHBhdGg6c3RyaW5nKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcy5leGlzdHNTeW5jKHBhdGgpICYmIHRoaXMuZnMuc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJzdF92YWxpZF9kaXIocGF0aHM6QXJyYXk8c3RyaW5nPnxzdHJpbmcpe1xyXG4gICAgICAgIGZvcihsZXQgcGF0aCBvZiBwYXRocyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNkaXIocGF0aCkpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VsZWN0X3ZhbGlkX2RpcihwYXRoczpBcnJheTxzdHJpbmc+KXtcclxuICAgICAgICBsZXQgeHBhdGhzID0gcGF0aHMuZmlsdGVyKChwOnN0cmluZyk9PnRoaXMuaXNkaXIocCkpO1xyXG4gICAgICAgIGlmKHhwYXRocy5sZW5ndGg9PT0wKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfWVsc2UgaWYoeHBhdGhzLmxlbmd0aD09MSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4cGF0aHNbMF07XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGxldCBuYyA9ICh0aGlzLnBsdWdpbi5hcHAgYXMgYW55KS5wbHVnaW5zLmdldFBsdWdpbignbm90ZS1jaGFpbicpO1xyXG4gICAgICAgICAgICBpZihuYyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IGF3YWl0IG5jLmNoYWluLnRwX3N1Z2dlc3Rlcih4cGF0aHMseHBhdGhzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgbWtkaXJfcmVjdXJzaXZlKHBhdGg6c3RyaW5nKXtcclxuICAgICAgICBpZih0aGlzLmlzZGlyKHBhdGgpKXtyZXR1cm4gdHJ1ZTt9XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wYXRoLmRpcm5hbWUocGF0aCk7XHJcbiAgICAgICAgaWYoIXRoaXMuaXNkaXIocGFyZW50KSl7XHJcbiAgICAgICAgICAgIHRoaXMubWtkaXJfcmVjdXJzaXZlKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnMubWtkaXJTeW5jKHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCogXHU5NjQ0XHU0RUY2IHNyYyBcdTUyMzAgZHN0XHVGRjBDXHU0RTBEXHU1NzI4IHZhdWx0IFx1NEUyRFx1RkYwQ1x1OTcwMFx1ODk4MVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFxyXG5cdCogb3ZlcndyaXRlXHVGRjBDXHU1OTBEXHU3NkQ2XHVGRjFCbXRpbWVcdUZGMENcdTY1QjBcdTY1ODdcdTRFRjZcdUZGMUJcclxuXHQqL1xyXG4gICAgY29weV9maWxlKHNyYzpzdHJpbmcsZHN0OnN0cmluZyxtb2RlPSdwYXNzPm92ZXJ3cml0ZT5tdGltZScpIHtcclxuICAgICAgICBjb25zdCBmcyA9IHRoaXMuZnM7XHJcblxyXG4gICAgICAgIG1vZGUgPSBtb2RlLnNwbGl0KCc+JylbMF1cclxuICAgICAgICBpZighZnMuZXhpc3RzU3luYyhzcmMpKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihmcy5leGlzdHNTeW5jKGRzdCkpe1xyXG4gICAgICAgICAgICBpZihtb2RlPT09J292ZXJ3cml0ZScpe1xyXG4gICAgICAgICAgICAgICAgZnMudW5saW5rU3luYyhkc3QpO1xyXG4gICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKHNyYyxkc3QpO1xyXG4gICAgICAgICAgICAgICAgbmV3IE5vdGljZShgQ29weToke3NyY30tLT4ke2RzdH1gLDUwMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKG1vZGU9PT0nbXRpbWUnKXtcclxuICAgICAgICAgICAgICAgIC8vIGRzdCBcdTY2RjRcdTY1QjBcdTY1RjZcdTk1RjRcdTVDMEZcdTRFOEUgc3JjXHJcbiAgICAgICAgICAgICAgICBpZihmcy5zdGF0U3luYyhkc3QpLm10aW1lTXM8ZnMuc3RhdFN5bmMoc3JjKS5tdGltZU1zKXtcclxuICAgICAgICAgICAgICAgICAgICBmcy51bmxpbmtTeW5jKGRzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKHNyYyxkc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoYENvcHk6JHtzcmN9LS0+JHtkc3R9YCw1MDAwKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoc3JjLGRzdCk7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYENvcHk6JHtzcmN9LS0+JHtkc3R9YCw1MDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5X3RmaWxlKHRmaWxlOlRGaWxlLCBkc3Q6c3RyaW5nLG1vZGU9J210aW1lJykge1xyXG5cdFx0aWYodGZpbGUpe1xyXG5cdFx0XHRsZXQgc3JjID0gdGhpcy5hYnNwYXRoKHRmaWxlKTtcclxuXHRcdFx0cmV0dXJuIHNyYyAmJiB0aGlzLmNvcHlfZmlsZShzcmMsZHN0LG1vZGUpO1xyXG5cdFx0fVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG4gICAgbWlycm9yX3RmaWxlKHRmaWxlOlRGaWxlLHZhdWx0X3Jvb3Q6c3RyaW5nLG1vZGU9J210aW1lJyxhdHRhY2htZW50PXRydWUsb3V0bGluaz1mYWxzZSl7XHJcbiAgICAgICAgLy8gXHU1QzA2XHU3QjE0XHU4QkIwXHU5NTVDXHU1MENGXHU3OUZCXHU1MkE4XHU1MjMwXHU1MjJCXHU3Njg0XHU1RTkzXHU0RTJEXHVGRjBDXHU2NTg3XHU0RUY2XHU3RUQzXHU2Nzg0XHU0RTBFXHU1RjUzXHU1MjREXHU1RTkzXHU3NkY4XHU1NDBDXHJcbiAgICAgICAgaWYodGZpbGUpe1xyXG4gICAgICAgICAgICB2YXVsdF9yb290ID0gdmF1bHRfcm9vdC5yZXBsYWNlKC9cXFxcZy8sJy8nKTtcclxuXHRcdFx0bGV0IHNyYyA9IHRoaXMucm9vdCArICcvJyArIHRmaWxlLnBhdGg7XHJcbiAgICAgICAgICAgIGxldCBkc3QgPSB2YXVsdF9yb290KycvJyt0ZmlsZS5wYXRoO1xyXG4gICAgICAgICAgICB0aGlzLm1rZGlyX3JlY3Vyc2l2ZSh0aGlzLnBhdGguZGlybmFtZShkc3QpKTtcclxuXHRcdFx0dGhpcy5jb3B5X2ZpbGUoc3JjLGRzdCxtb2RlKTtcclxuICAgICAgICAgICAgaWYoYXR0YWNobWVudCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmMgPSAodGhpcy5wbHVnaW4uYXBwIGFzIGFueSkucGx1Z2lucy5nZXRQbHVnaW4oJ25vdGUtY2hhaW4nKTtcclxuICAgICAgICAgICAgICAgIGlmKCFuYyl7cmV0dXJuO31cclxuICAgICAgICAgICAgICAgIGxldCB0ZmlsZXMgPSBuYy5jaGFpbi5nZXRfb3V0bGlua3ModGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCB0IG9mIHRmaWxlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoISh0LmV4dGVuc2lvbj09PSdtZCcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taXJyb3JfdGZpbGUodCx2YXVsdF9yb290LG1vZGUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKG91dGxpbmspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pcnJvcl90ZmlsZSh0LHZhdWx0X3Jvb3QsbW9kZSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgbWlycm9yX3Rmb2xkZXIodGZvbGRlcjpURm9sZGVyLHZhdWx0X3Jvb3Q6c3RyaW5nLG1vZGU9J210aW1lJyxhdHRhY2htZW50PXRydWUsb3V0bGluaz1mYWxzZSl7XHJcbiAgICAgICAgaWYodGZvbGRlcil7XHJcbiAgICAgICAgICAgIGZvcihsZXQgdCBvZiB0Zm9sZGVyLmNoaWxkcmVuKXtcclxuICAgICAgICAgICAgICAgIGlmKHQgaW5zdGFuY2VvZiBURm9sZGVyKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pcnJvcl90Zm9sZGVyKHQsdmF1bHRfcm9vdCxtb2RlLGF0dGFjaG1lbnQsb3V0bGluayk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZih0IGluc3RhbmNlb2YgVEZpbGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlycm9yX3RmaWxlKHQsdmF1bHRfcm9vdCxtb2RlLGF0dGFjaG1lbnQsb3V0bGluayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHRcdH1cclxuICAgIH1cclxuXHJcbiAgICBtb2RpZnkocGF0aDpzdHJpbmcsY2FsbGJhY2s6RnVuY3Rpb24sZW5jb2Rpbmc9J3V0ZjgnKXtcclxuICAgICAgICBjb25zdCBmcyA9IHRoaXMuZnM7XHJcbiAgICAgICAgaWYoIWZzLmV4aXN0c1N5bmMocGF0aCkpe3JldHVybn07XHJcblxyXG4gICAgICAgIGZzLnJlYWRGaWxlKHBhdGgsIGVuY29kaW5nLCAoZXJyOkVycm9yLCBkYXRhOnN0cmluZykgPT4ge1xyXG5cdFx0XHRpZihlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVhZGluZyBmaWxlOicsIGVycik7O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBycyA9IGNhbGxiYWNrKHBhdGgsZGF0YSk7XHJcblx0XHRcdGZzLndyaXRlRmlsZShwYXRoLCBycywgZW5jb2RpbmcsIChlcnI6RXJyb3IpID0+IHtcclxuXHRcdFx0ICBpZiAoZXJyKSB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3Igd3JpdGluZyBmaWxlOicsIGVycik7XHJcblx0XHRcdCAgfSBlbHNlIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRmlsZSBjb250ZW50IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpO1xyXG5cdFx0XHQgIH1cclxuXHRcdFx0fSk7XHJcblx0XHQgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsICJcclxuY2xhc3MgU3RyaW5nc3tcclxuICAgIGxhbmd1YWdlOnN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgbGV0IGxhbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJyk7XHJcbiAgICAgICAgaWYobGFuZyl7XHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5nO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gJ2VuJztcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuICAgIGdldCBjbWRfZXhwb3J0X2N1cnJlbnRfbm90ZSgpe1xyXG4gICAgICAgIGlmKHRoaXMubGFuZ3VhZ2U9PSd6aCcpe1xyXG4gICAgICAgICAgICByZXR1cm4gJ1x1NUJGQ1x1NTFGQVx1NUY1M1x1NTI0RFx1N0IxNFx1OEJCMCdcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuICdFeHBvcnQgY3VycmVudCBub3RlJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNtZF9zZXRfdmV4cG9ydGVyKCl7XHJcbiAgICAgICAgaWYodGhpcy5sYW5ndWFnZT09J3poJyl7XHJcbiAgICAgICAgICAgIHJldHVybiAnXHU4QkJFXHU3RjZFXHU1QkZDXHU1MUZBXHU3QjE0XHU4QkIwXHU5MDA5XHU5ODc5J1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gJ1NldCBjb25maWcgdG8gZXhwb3J0IG5vdGUnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgY21kX2V4cG9ydF9wbHVnaW4oKXtcclxuICAgICAgICBpZih0aGlzLmxhbmd1YWdlPT0nemgnKXtcclxuICAgICAgICAgICAgcmV0dXJuICdcdTVCRkNcdTUxRkFcdTYzRDJcdTRFRjYnXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnRXhwb3J0IHBsdWdpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9tcHRfcGF0aF9vZl9mb2xkZXIoKXtcclxuICAgICAgICBpZih0aGlzLmxhbmd1YWdlPT0nemgnKXtcclxuICAgICAgICAgICAgcmV0dXJuICdcdThGOTNcdTUxNjVcdTY1ODdcdTRFRjZcdTU5MzlcdThERUZcdTVGODQnXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnSW5wdXQgcGF0aCBvZiBmb2xkZXInO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm90aWNlX291dHB1dCgpe1xyXG4gICAgICAgIGlmKHRoaXMubGFuZ3VhZ2U9PSd6aCcpe1xyXG4gICAgICAgICAgICByZXR1cm4gJ1x1NUJGQ1x1NTFGQVx1RkYxQSdcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuICdPdXRwdXQ6JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgbm90aWNlX25vc3VjaGRpcigpe1xyXG4gICAgICAgIGlmKHRoaXMubGFuZ3VhZ2U9PSd6aCcpe1xyXG4gICAgICAgICAgICByZXR1cm4gJ1x1NjVFMFx1NjU0OFx1NzZFRVx1NUY1NSdcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuICdJbnZhaWQgcGF0aC4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ19wbHVnaW5fZGlyKCl7XHJcbiAgICAgICAgaWYodGhpcy5sYW5ndWFnZT09J3poJyl7XHJcbiAgICAgICAgICAgIHJldHVybiAnXHU2M0QyXHU0RUY2XHU1QkZDXHU1MUZBXHU3NkVFXHU1RjU1JztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuICdQbHVnaW4gZGlyIHRvIGV4cG9ydCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0aW5nX3ZhdWx0X2Rpcigpe1xyXG4gICAgICAgIGlmKHRoaXMubGFuZ3VhZ2U9PSd6aCcpe1xyXG4gICAgICAgICAgICByZXR1cm4gJ1x1NUU5M1x1NzZFRVx1NUY1NSc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnUm9vdCBkaXIgb2YgdmF1bHQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGxldCBzdHJpbmdzID0gbmV3IFN0cmluZ3MoKTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsSUFBQUEsbUJBQTRHOzs7QUNBNUcsc0JBQTRHO0FBRXJHLElBQU0sV0FBTixNQUFjO0FBQUEsRUFLakIsWUFBWSxRQUFjO0FBQ3RCLFNBQUssU0FBUztBQUNkLFNBQUssS0FBSyxRQUFRLElBQUk7QUFDdEIsU0FBSyxPQUFPLFFBQVEsTUFBTTtBQUFBLEVBQzlCO0FBQUEsRUFFQSxJQUFJLE9BQU07QUFDTixRQUFJLElBQUksS0FBSyxPQUFPLElBQUksTUFBTTtBQUM5QixXQUFPLEVBQUUsU0FBUyxRQUFRLE9BQU0sR0FBRztBQUFBLEVBQ3ZDO0FBQUEsRUFFQSxRQUFRLE9BQVk7QUFDdEIsUUFBRyxPQUFNO0FBQ1IsYUFBTyxLQUFLLE9BQUssTUFBSSxNQUFNO0FBQUEsSUFDNUIsT0FBSztBQUNKLGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQUFBLEVBRUcsT0FBTyxNQUFZO0FBQ2YsV0FBTyxLQUFLLEdBQUcsV0FBVyxJQUFJLEtBQUssS0FBSyxHQUFHLFNBQVMsSUFBSSxFQUFFLE9BQU87QUFB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyIsICJzcmMvZnNlZGl0b3IudHMiLCAic3JjL3N0cmluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCAqIGFzIE1vZHVsZSBmcm9tICdtb2R1bGUnO1xyXG5pbXBvcnQgeyBBcHAsIEVkaXRvciwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcsIFRGaWxlLCBURm9sZGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW1wb3J0IHsgRnNFZGl0b3IgfSBmcm9tICdzcmMvZnNlZGl0b3InO1xyXG5pbXBvcnQgeyBzdHJpbmdzIH0gZnJvbSAnc3JjL3N0cmluZ3MnO1xyXG5cclxuaW50ZXJmYWNlIFZFeHBvcnRlclNldHRpbmdzIHtcclxuXHRwbHVnaW5EaXJFeHBvcnRlcjpzdHJpbmc7XHJcblx0dmF1bHREaXI6c3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBWRXhwb3J0ZXJTZXR0aW5ncyA9IHtcclxuXHRwbHVnaW5EaXJFeHBvcnRlcjonJyxcclxuXHR2YXVsdERpcjonJ1xyXG59XHJcblxyXG5cclxuY29uc3QgY21kX2V4cG9ydF9jdXJyZW50X25vdGUgPSAocGx1Z2luOlZhdWx0RXhwb3RlclBsdWdpbikgPT4gKHtcclxuXHRpZDogJ2NtZF9leHBvcnRfY3VycmVudF9ub3RlJyxcclxuXHRuYW1lOiBzdHJpbmdzLmNtZF9leHBvcnRfY3VycmVudF9ub3RlLFxyXG5cdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRjb25zdCBuYyA9IHBsdWdpbi5ub3RlY2hhaW47XHJcblx0XHRsZXQgdGZpbGUgPSBuYy5jaGFpbi5jdXJyZW50X25vdGU7XHJcblx0XHRhd2FpdCBwbHVnaW4uZXhwb3J0X3JlYWRtZSh0ZmlsZSxudWxsKTtcclxuXHR9XHJcbn0pO1xyXG5cclxuY29uc3QgY21kX3NldF92ZXhwb3J0ZXIgPSAocGx1Z2luOlZhdWx0RXhwb3RlclBsdWdpbikgPT4gKHtcclxuXHRpZDogJ2NtZF9zZXRfdmV4cG9ydGVyJyxcclxuXHRuYW1lOiBzdHJpbmdzLmNtZF9zZXRfdmV4cG9ydGVyLFxyXG5cdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRjb25zdCBuYyA9IHBsdWdpbi5ub3RlY2hhaW47XHJcblx0XHRsZXQgZGlyID0gYXdhaXQgbmMuY2hhaW4udHBfcHJvbXB0KHN0cmluZ3MucHJvbXB0X3BhdGhfb2ZfZm9sZGVyKTtcclxuXHRcdGxldCBpdGVtOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblx0XHRpZihwbHVnaW4uZnNFZGl0b3IuZnMuZXhpc3RzU3luYyhkaXIpKXtcclxuXHRcdFx0aXRlbVsnRGlyJ10gPSBkaXI7XHJcblx0XHR9XHJcblx0XHRpdGVtWydOYW1lJ10gPSAncmVhZE1lJztcclxuXHRcdGl0ZW1bJ0Fzc2V0cyddID0gJy4vYXNzZXRzJztcclxuXHRcdGl0ZW1bJ1JlbW92ZU1ldGEnXSA9IHRydWU7XHJcblx0XHRpdGVtWydVc2VHaXRMaW5rJ10gPSB0cnVlO1xyXG5cclxuXHRcdGF3YWl0IG5jLmVkaXRvci5zZXRfZnJvbnRtYXR0ZXIoXHJcblx0XHRcdG5jLmNoYWluLmN1cnJlbnRfbm90ZSxcclxuXHRcdFx0J3ZleHBvcnRlcicsXHJcblx0XHRcdGl0ZW1cclxuXHRcdClcclxuXHR9XHJcbn0pO1xyXG5cclxuY29uc3QgY21kX2V4cG9ydF9wbHVnaW4gPSAocGx1Z2luOlZhdWx0RXhwb3RlclBsdWdpbikgPT4gKHtcclxuXHRpZDogJ2NtZF9leHBvcnRfcGx1Z2luJyxcclxuXHRuYW1lOiBzdHJpbmdzLmNtZF9leHBvcnRfcGx1Z2luLFxyXG5cdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRjb25zdCBuYyA9IHBsdWdpbi5ub3RlY2hhaW47XHJcblx0XHRcclxuXHRcdGxldCBwbHVnaW5zID0gT2JqZWN0LmtleXMoKHBsdWdpbi5hcHAgYXMgYW55KS5wbHVnaW5zLnBsdWdpbnMpO1xyXG5cdFx0bGV0IHAgPSBhd2FpdCBuYy5jaGFpbi50cF9zdWdnZXN0ZXIocGx1Z2lucyxwbHVnaW5zKTtcclxuXHRcdGxldCBlcGx1Z2luID0gKHBsdWdpbi5hcHAgYXMgYW55KS5wbHVnaW5zLmdldFBsdWdpbihwKTtcclxuXHRcdGlmKGVwbHVnaW4pe1xyXG5cdFx0XHRsZXQgdGFyZ2V0ID0gYXdhaXQgcGx1Z2luLmZzRWRpdG9yLnNlbGVjdF92YWxpZF9kaXIoXHJcblx0XHRcdFx0cGx1Z2luLnNldHRpbmdzLnBsdWdpbkRpckV4cG9ydGVyLnNwbGl0KFwiXFxuXCIpXHJcblx0XHRcdClcclxuXHRcdFx0aWYoIXBsdWdpbi5mc0VkaXRvci5mcy5leGlzdHNTeW5jKHRhcmdldCkpe1xyXG5cdFx0XHRcdHRhcmdldCA9IGF3YWl0IG5jLmNoYWluLnRwX3Byb21wdChzdHJpbmdzLnByb21wdF9wYXRoX29mX2ZvbGRlcik7XHJcblx0XHRcdH1cclxuXHRcdFx0dGFyZ2V0ID0gdGFyZ2V0LnJlcGxhY2UoL1xcXFwvZywnLycpO1xyXG5cdFx0XHRpZighdGFyZ2V0LmVuZHNXaXRoKCcvJyArIHApKXtcclxuXHRcdFx0XHR0YXJnZXQgPSB0YXJnZXQgKyAnLycgKyBwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCFwbHVnaW4uZnNFZGl0b3IuZnMuZXhpc3RzU3luYyh0YXJnZXQpKXtcclxuXHRcdFx0XHRwbHVnaW4uZnNFZGl0b3IuZnMubWtkaXJTeW5jKHRhcmdldCk7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGl0ZW1zID0gWydtYWluLmpzJywnbWFuaWZlc3QuanNvbicsJ3N0eWxlcy5jc3MnXTtcclxuXHRcdFx0Zm9yKGxldCBpdGVtIG9mIGl0ZW1zKXtcclxuXHRcdFx0XHRsZXQgc3JjID0gYCR7cGx1Z2luLmZzRWRpdG9yLnJvb3R9LyR7ZXBsdWdpbi5tYW5pZmVzdC5kaXJ9LyR7aXRlbX1gO1xyXG5cdFx0XHRcdGxldCBkc3QgPSBgJHt0YXJnZXR9LyR7aXRlbX1gO1xyXG5cdFx0XHRcdHBsdWdpbi5mc0VkaXRvci5jb3B5X2ZpbGUoc3JjLGRzdCwnb3ZlcndyaXRlJyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuY29uc3QgY29tbWFuZEJ1aWxkZXJzID0gW1xyXG5cdGNtZF9leHBvcnRfY3VycmVudF9ub3RlLFxyXG5cdGNtZF9zZXRfdmV4cG9ydGVyLFxyXG5cdGNtZF9leHBvcnRfcGx1Z2luXHJcbl07XHJcblxyXG5mdW5jdGlvbiBhZGRDb21tYW5kcyhwbHVnaW46VmF1bHRFeHBvdGVyUGx1Z2luKSB7XHJcbiAgICBjb21tYW5kQnVpbGRlcnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgIHBsdWdpbi5hZGRDb21tYW5kKGMocGx1Z2luKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmF1bHRFeHBvdGVyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRzZXR0aW5nczogVkV4cG9ydGVyU2V0dGluZ3M7XHJcblx0ZnNFZGl0b3IgOiBGc0VkaXRvcjtcclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5mc0VkaXRvciA9IG5ldyBGc0VkaXRvcih0aGlzKTtcclxuXHRcdC8vIFRoaXMgYWRkcyBhIHNldHRpbmdzIHRhYiBzbyB0aGUgdXNlciBjYW4gY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGx1Z2luXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IFZFeHBvcnRlclNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHRcdGFkZENvbW1hbmRzKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJFdmVudChcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFwiZmlsZS1tZW51XCIsIChtZW51LCBmaWxlKSA9PiB7XHJcblx0XHRcdFx0bWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0XHRpdGVtXHJcblx0XHRcdFx0XHQuc2V0VGl0bGUoXCJNaXJyb3IgdG8gb3RoZXIgdmF1bHRcIilcclxuXHRcdFx0XHRcdC5zZXRJY29uKFwiZG9jdW1lbnRcIilcclxuXHRcdFx0XHRcdC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdFx0bGV0IGRzdCA9IGF3YWl0IHRoaXMuZnNFZGl0b3Iuc2VsZWN0X3ZhbGlkX2RpcihcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLnZhdWx0RGlyLnNwbGl0KFwiXFxuXCIpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGlmKCFkc3Qpe1xyXG5cdFx0XHRcdFx0XHRcdGxldCBuYz0gKHRoaXMuYXBwIGFzIGFueSkucGx1Z2lucy5nZXRQbHVnaW4oXCJub3RlLWNoYWluXCIpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKCFuYyl7XHJcblx0XHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKFwiUGx1Z2luIG5vdGUtY2hhaW4gaXMgbmVlZGVkIVwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZHN0ID0gYXdhaXQgbmMuY2hhaW4udHBfcHJvbXB0KFwiUm9vdCBvZiB2YXVsdFwiKTtcclxuXHRcdFx0XHRcdFx0XHRpZighdGhpcy5mc0VkaXRvci5pc2Rpcihkc3QpKXtcclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJJbnZhbGlkIHJvb3Q6IFwiICsgZHN0KTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKXtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZzRWRpdG9yLm1pcnJvcl90ZmlsZShmaWxlLGRzdCwnbXRpbWUnLHRydWUsZmFsc2UpO1xyXG5cclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpe1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZnNFZGl0b3IubWlycm9yX3Rmb2xkZXIoZmlsZSxkc3QsJ210aW1lJyx0cnVlLGZhbHNlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Z2V0IG5vdGVjaGFpbigpe1xyXG5cdFx0cmV0dXJuICh0aGlzLmFwcCBhcyBhbnkpLnBsdWdpbnMuZ2V0UGx1Z2luKCdub3RlLWNoYWluJyk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cdFxyXG5cdGFzeW5jIGV4cG9ydF9yZWFkbWUodGZpbGU6VEZpbGUsZHN0OnN0cmluZ3xudWxsKXtcclxuXHRcdGxldCBuYyA9ICh0aGlzLmFwcCBhcyBhbnkpLnBsdWdpbnMuZ2V0UGx1Z2luKCdub3RlLWNoYWluJyk7XHJcblx0XHRpZighdGZpbGUpe3RmaWxlID0gbmMuY2hhaW4uY3VycmVudF9ub3RlO31cclxuXHRcdFxyXG5cdFx0Ly8gXHU4QkJFXHU3RjZFXHU4RjkzXHU1MUZBXHU3NkVFXHU1RjU1XHJcblx0XHRpZighZHN0KXtcclxuXHRcdFx0ZHN0ID0gbmMuZWRpdG9yLmdldF9mcm9udG1hdHRlcih0ZmlsZSwndmV4cG9ydGVyJyk/LkRpcjtcclxuXHRcdFx0aWYoIWRzdCl7XHJcblx0XHRcdFx0ZHN0ID0gYXdhaXQgbmMuY2hhaW4udHBfcHJvbXB0KCdQYXRoIG9mIExvY2FsR2l0UHJvamVjdCcpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZighZHN0IHx8ICF0aGlzLmZzRWRpdG9yLmZzLmV4aXN0c1N5bmMoZHN0KSl7XHJcblx0XHRcdG5ldyBOb3RpY2Uoc3RyaW5ncy5ub3RpY2Vfbm9zdWNoZGlyLDMwMDApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRkc3QgPSBkc3QucmVwbGFjZSgvXFxcXC9nLCcvJyk7XHJcblx0XHRcclxuXHRcdFxyXG5cdFx0Ly8gXHU1QkZDXHU1MUZBXHU1RjUzXHU1MjREXHU3QjE0XHU4QkIwXHJcblx0XHRsZXQgdG1wO1xyXG5cdFx0bGV0IG5hbWUgPSBuYy5lZGl0b3IuZ2V0X2Zyb250bWF0dGVyKHRmaWxlLCd2ZXhwb3J0ZXInKT8uTmFtZTtcclxuXHRcdGlmKG5hbWUgJiYgIShuYW1lPT09JycpKXtcclxuXHRcdFx0dG1wID0gZHN0KycvJytuYW1lKycubWQnO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdHRtcCA9IGRzdCsnLycrdGZpbGUuYmFzZW5hbWUrJy5tZCc7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYodGhpcy5mc0VkaXRvci5jb3B5X3RmaWxlKHRmaWxlLHRtcCkpe1xyXG5cdFx0XHRpZihuYy5lZGl0b3IuZ2V0X2Zyb250bWF0dGVyKHRmaWxlLCd2ZXhwb3J0ZXInKT8uUmVtb3ZlTWV0YSl7XHJcblx0XHRcdFx0Y29uc3QgdWZ1bmMgPSAocGF0aDpzdHJpbmcsZGF0YTpzdHJpbmcpPT57XHJcblx0XHRcdFx0XHRsZXQgcmVzID0gZGF0YTtcclxuXHRcdFx0XHRcdGlmKG5jLmVkaXRvci5nZXRfZnJvbnRtYXR0ZXIodGZpbGUsJ3ZleHBvcnRlcicpPy5SZW1vdmVNZXRhKXtcclxuXHRcdFx0XHRcdFx0cmVzID0gcmVzLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0Ly0tLVtcXG4oXFxyXFxuKV1bXFxzXFxTXSo/LS0tW1xcbihcXHJcXG4pXS8sXHJcblx0XHRcdFx0XHRcdFx0JydcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYobmMuZWRpdG9yLmdldF9mcm9udG1hdHRlcih0ZmlsZSwndmV4cG9ydGVyJyk/LlVzZUdpdExpbmsgJiYgYXNzZXRzKXtcclxuXHRcdFx0XHRcdFx0cmVzID0gcmVzLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdFx0L1xcIVxcW1xcWyguKj8pXFxdXFxdL2csXHJcblx0XHRcdFx0XHRcdFx0KG1hdGNoOmFueSwgbmFtZTpzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBgIVske25hbWV9XSgke2Fzc2V0c30vJHtuYW1lfSlgO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRhd2FpdCB0aGlzLmZzRWRpdG9yLm1vZGlmeSh0bXAsdWZ1bmMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyBcdTVCRkNcdTUxRkFcdTk2NDRcdTRFRjZcclxuXHRcdGxldCBhc3NldHMgPSBuYy5lZGl0b3IuZ2V0X2Zyb250bWF0dGVyKHRmaWxlLCd2ZXhwb3J0ZXInKT8uQXNzZXRzO1xyXG5cdFx0aWYoYXNzZXRzKXtcclxuXHRcdFx0bGV0IG9saW5rcyA9IG5jLmNoYWluLmdldF9vdXRsaW5rcyh0ZmlsZSk7XHJcblx0XHRcdGxldCBhZGlyID0gZHN0KycvJythc3NldHM7XHJcblx0XHRcdHRoaXMuZnNFZGl0b3IubWtkaXJfcmVjdXJzaXZlKGFkaXIpO1xyXG5cdFx0XHRmb3IobGV0IGYgb2Ygb2xpbmtzKXtcclxuXHRcdFx0XHRpZighKGYuZXh0ZW5zaW9uPT09J21kJykpe1xyXG5cdFx0XHRcdFx0dGhpcy5mc0VkaXRvci5jb3B5X3RmaWxlKGYsYWRpcisnLycrZi5iYXNlbmFtZSsnLicrZi5leHRlbnNpb24pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuY2xhc3MgVkV4cG9ydGVyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cdHBsdWdpbjogVmF1bHRFeHBvdGVyUGx1Z2luO1xyXG5cdFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBWYXVsdEV4cG90ZXJQbHVnaW4pIHtcclxuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG5cdH1cclxuXHJcblx0Z2V0U2V0dGluZ1ZhbHVlKGZpZWxkOiBrZXlvZiBWRXhwb3J0ZXJTZXR0aW5ncykge1xyXG5cdFx0cmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzW2ZpZWxkXTtcclxuXHR9XHJcblxyXG5cdGFkZF90b2dnbGUobmFtZTpzdHJpbmcsZGVzYzpzdHJpbmcsZmllbGQ6a2V5b2YgVkV4cG9ydGVyU2V0dGluZ3Mpe1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblx0XHRsZXQgdmFsdWUgPSAodGhpcy5wbHVnaW4uc2V0dGluZ3MgYXMgYW55KVtmaWVsZF0gYXMgYm9vbGVhbjtcclxuXHRcdGxldCBpdGVtID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpICBcclxuXHRcdFx0LnNldE5hbWUobmFtZSlcclxuXHRcdFx0LnNldERlc2MoZGVzYylcclxuXHRcdFx0LmFkZFRvZ2dsZSh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHQuc2V0VmFsdWUodmFsdWUpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTpuZXZlcikgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3NbZmllbGRdID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0cmV0dXJuIGl0ZW07XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHRcdFxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKHN0cmluZ3Muc2V0dGluZ19wbHVnaW5fZGlyKVxyXG5cdFx0XHQuYWRkVGV4dEFyZWEodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnBsdWdpbkRpckV4cG9ydGVyKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnBsdWdpbkRpckV4cG9ydGVyID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHRcdC5zZXROYW1lKHN0cmluZ3Muc2V0dGluZ192YXVsdF9kaXIpXHJcblx0XHRcdFx0LmFkZFRleHRBcmVhKHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnZhdWx0RGlyKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy52YXVsdERpciA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdH0pKTtcclxuXHR9XHJcbn1cclxuIiwgIlxyXG5pbXBvcnQgeyBBcHAsIEVkaXRvciwgTWFya2Rvd25WaWV3LCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcsIFRGaWxlLCBURm9sZGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZzRWRpdG9ye1xyXG4gICAgZnM7XHJcbiAgICBwYXRoO1xyXG4gICAgcGx1Z2luIDpQbHVnaW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocGx1Z2luOlBsdWdpbil7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICAgICAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdGhpcy5wYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCl7XHJcbiAgICAgICAgbGV0IGEgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuYWRhcHRlciBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIGEuYmFzZVBhdGgucmVwbGFjZSgvXFxcXC9nLCcvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJzcGF0aCh0ZmlsZTpURmlsZSl7XHJcblx0XHRpZih0ZmlsZSl7XHJcblx0XHRcdHJldHVybiB0aGlzLnJvb3QrJy8nK3RmaWxlLnBhdGg7XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuICAgIGlzZmlsZShwYXRoOnN0cmluZyl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyhwYXRoKSAmJiB0aGlzLmZzLnN0YXRTeW5jKHBhdGgpLmlzRmlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzZGlyKHBhdGg6c3RyaW5nKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcy5leGlzdHNTeW5jKHBhdGgpICYmIHRoaXMuZnMuc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJzdF92YWxpZF9kaXIocGF0aHM6QXJyYXk8c3RyaW5nPnxzdHJpbmcpe1xyXG4gICAgICAgIGZvcihsZXQgcGF0aCBvZiBwYXRocyl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaXNkaXIocGF0aCkpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VsZWN0X3ZhbGlkX2RpcihwYXRoczpBcnJheTxzdHJpbmc+KXtcclxuICAgICAgICBsZXQgeHBhdGhzID0gcGF0aHMuZmlsdGVyKChwOnN0cmluZyk9PnRoaXMuaXNkaXIocCkpO1xyXG4gICAgICAgIGlmKHhwYXRocy5sZW5ndGg9PT0wKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfWVsc2UgaWYoeHBhdGhzLmxlbmd0aD09MSl7XHJcbiAgICAgICAgICAgIHJldHVybiB4cGF0aHNbMF07XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGxldCBuYyA9ICh0aGlzLnBsdWdpbi5hcHAgYXMgYW55KS5wbHVnaW5zLmdldFBsdWdpbignbm90ZS1jaGFpbicpO1xyXG4gICAgICAgICAgICBpZihuYyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IGF3YWl0IG5jLmNoYWluLnRwX3N1Z2dlc3Rlcih4cGF0aHMseHBhdGhzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgbWtkaXJfcmVjdXJzaXZlKHBhdGg6c3RyaW5nKXtcclxuICAgICAgICBpZih0aGlzLmlzZGlyKHBhdGgpKXtyZXR1cm4gdHJ1ZTt9XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wYXRoLmRpcm5hbWUocGF0aCk7XHJcbiAgICAgICAgaWYoIXRoaXMuaXNkaXIocGFyZW50KSl7XHJcbiAgICAgICAgICAgIHRoaXMubWtkaXJfcmVjdXJzaXZlKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnMubWtkaXJTeW5jKHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCogXHU5NjQ0XHU0RUY2IHNyYyBcdTUyMzAgZHN0XHVGRjBDXHU0RTBEXHU1NzI4IHZhdWx0IFx1NEUyRFx1RkYwQ1x1OTcwMFx1ODk4MVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFxyXG5cdCogb3ZlcndyaXRlXHVGRjBDXHU1OTBEXHU3NkQ2XHVGRjFCbXRpbWVcdUZGMENcdTY1QjBcdTY1ODdcdTRFRjZcdUZGMUJcclxuXHQqL1xyXG4gICAgY29weV9maWxlKHNyYzpzdHJpbmcsZHN0OnN0cmluZyxtb2RlPSdwYXNzPm92ZXJ3cml0ZT5tdGltZScpIHtcclxuICAgICAgICBjb25zdCBmcyA9IHRoaXMuZnM7XHJcblxyXG4gICAgICAgIG1vZGUgPSBtb2RlLnNwbGl0KCc+JylbMF1cclxuICAgICAgICBpZighZnMuZXhpc3RzU3luYyhzcmMpKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihmcy5leGlzdHNTeW5jKGRzdCkpe1xyXG4gICAgICAgICAgICBpZihtb2RlPT09J292ZXJ3cml0ZScpe1xyXG4gICAgICAgICAgICAgICAgZnMudW5saW5rU3luYyhkc3QpO1xyXG4gICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKHNyYyxkc3QpO1xyXG4gICAgICAgICAgICAgICAgbmV3IE5vdGljZShgQ29weToke3NyY30tLT4ke2RzdH1gLDUwMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKG1vZGU9PT0nbXRpbWUnKXtcclxuICAgICAgICAgICAgICAgIC8vIGRzdCBcdTY2RjRcdTY1QjBcdTY1RjZcdTk1RjRcdTVDMEZcdTRFOEUgc3JjXHJcbiAgICAgICAgICAgICAgICBpZihmcy5zdGF0U3luYyhkc3QpLm10aW1lTXM8ZnMuc3RhdFN5bmMoc3JjKS5tdGltZU1zKXtcclxuICAgICAgICAgICAgICAgICAgICBmcy51bmxpbmtTeW5jKGRzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKHNyYyxkc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoYENvcHk6JHtzcmN9LS0+JHtkc3R9YCw1MDAwKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoc3JjLGRzdCk7XHJcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoYENvcHk6JHtzcmN9LS0+JHtkc3R9YCw1MDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5X3RmaWxlKHRmaWxlOlRGaWxlLCBkc3Q6c3RyaW5nLG1vZGU9J210aW1lJykge1xyXG5cdFx0aWYodGZpbGUpe1xyXG5cdFx0XHRsZXQgc3JjID0gdGhpcy5hYnNwYXRoKHRmaWxlKTtcclxuXHRcdFx0cmV0dXJuIHNyYyAmJiB0aGlzLmNvcHlfZmlsZShzcmMsZHN0LG1vZGUpO1xyXG5cdFx0fVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG4gICAgbWlycm9yX3RmaWxlKHRmaWxlOlRGaWxlLHZhdWx0X3Jvb3Q6c3RyaW5nLG1vZGU9J210aW1lJyxhdHRhY2htZW50PXRydWUsb3V0bGluaz1mYWxzZSl7XHJcbiAgICAgICAgLy8gXHU1QzA2XHU3QjE0XHU4QkIwXHU5NTVDXHU1MENGXHU3OUZCXHU1MkE4XHU1MjMwXHU1MjJCXHU3Njg0XHU1RTkzXHU0RTJEXHVGRjBDXHU2NTg3XHU0RUY2XHU3RUQzXHU2Nzg0XHU0RTBFXHU1RjUzXHU1MjREXHU1RTkzXHU3NkY4XHU1NDBDXHJcbiAgICAgICAgaWYodGZpbGUpe1xyXG4gICAgICAgICAgICB2YXVsdF9yb290ID0gdmF1bHRfcm9vdC5yZXBsYWNlKC9cXFxcL2csJy8nKTtcclxuXHRcdFx0bGV0IHNyYyA9IHRoaXMucm9vdCArICcvJyArIHRmaWxlLnBhdGg7XHJcbiAgICAgICAgICAgIGxldCBkc3QgPSB2YXVsdF9yb290KycvJyt0ZmlsZS5wYXRoO1xyXG4gICAgICAgICAgICB0aGlzLm1rZGlyX3JlY3Vyc2l2ZSh0aGlzLnBhdGguZGlybmFtZShkc3QpKTtcclxuXHRcdFx0dGhpcy5jb3B5X2ZpbGUoc3JjLGRzdCxtb2RlKTtcclxuICAgICAgICAgICAgaWYoYXR0YWNobWVudCl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYXR0YWNobWVudCcpXHJcbiAgICAgICAgICAgICAgICBsZXQgbmMgPSAodGhpcy5wbHVnaW4uYXBwIGFzIGFueSkucGx1Z2lucy5nZXRQbHVnaW4oJ25vdGUtY2hhaW4nKTtcclxuICAgICAgICAgICAgICAgIGlmKCFuYyl7cmV0dXJuO31cclxuICAgICAgICAgICAgICAgIGxldCB0ZmlsZXMgPSBuYy5jaGFpbi5nZXRfb3V0bGlua3ModGZpbGUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCB0IG9mIHRmaWxlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codC5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCEodC5leHRlbnNpb249PT0nbWQnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlycm9yX3RmaWxlKHQsdmF1bHRfcm9vdCxtb2RlLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihvdXRsaW5rKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taXJyb3JfdGZpbGUodCx2YXVsdF9yb290LG1vZGUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cdFx0fVxyXG4gICAgfVxyXG5cclxuICAgIG1pcnJvcl90Zm9sZGVyKHRmb2xkZXI6VEZvbGRlcix2YXVsdF9yb290OnN0cmluZyxtb2RlPSdtdGltZScsYXR0YWNobWVudD10cnVlLG91dGxpbms9ZmFsc2Upe1xyXG4gICAgICAgIGlmKHRmb2xkZXIpe1xyXG4gICAgICAgICAgICBmb3IobGV0IHQgb2YgdGZvbGRlci5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICBpZih0IGluc3RhbmNlb2YgVEZvbGRlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXJyb3JfdGZvbGRlcih0LHZhdWx0X3Jvb3QsbW9kZSxhdHRhY2htZW50LG91dGxpbmspO1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodCBpbnN0YW5jZW9mIFRGaWxlKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pcnJvcl90ZmlsZSh0LHZhdWx0X3Jvb3QsbW9kZSxhdHRhY2htZW50LG91dGxpbmspO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgbW9kaWZ5KHBhdGg6c3RyaW5nLGNhbGxiYWNrOkZ1bmN0aW9uLGVuY29kaW5nPSd1dGY4Jyl7XHJcbiAgICAgICAgY29uc3QgZnMgPSB0aGlzLmZzO1xyXG4gICAgICAgIGlmKCFmcy5leGlzdHNTeW5jKHBhdGgpKXtyZXR1cm59O1xyXG5cclxuICAgICAgICBmcy5yZWFkRmlsZShwYXRoLCBlbmNvZGluZywgKGVycjpFcnJvciwgZGF0YTpzdHJpbmcpID0+IHtcclxuXHRcdFx0aWYoZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlYWRpbmcgZmlsZTonLCBlcnIpOztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcnMgPSBjYWxsYmFjayhwYXRoLGRhdGEpO1xyXG5cdFx0XHRmcy53cml0ZUZpbGUocGF0aCwgcnMsIGVuY29kaW5nLCAoZXJyOkVycm9yKSA9PiB7XHJcblx0XHRcdCAgaWYgKGVycikge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdyaXRpbmcgZmlsZTonLCBlcnIpO1xyXG5cdFx0XHQgIH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ0ZpbGUgY29udGVudCB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4nKTtcclxuXHRcdFx0ICB9XHJcblx0XHRcdH0pO1xyXG5cdFx0ICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCAiXHJcbmNsYXNzIFN0cmluZ3N7XHJcbiAgICBsYW5ndWFnZTpzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIGxldCBsYW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpO1xyXG4gICAgICAgIGlmKGxhbmcpe1xyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gbGFuZztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZSA9ICdlbic7XHJcbiAgICAgICAgfVxyXG5cdH1cclxuXHJcbiAgICBnZXQgY21kX2V4cG9ydF9jdXJyZW50X25vdGUoKXtcclxuICAgICAgICBpZih0aGlzLmxhbmd1YWdlPT0nemgnKXtcclxuICAgICAgICAgICAgcmV0dXJuICdcdTVCRkNcdTUxRkFcdTVGNTNcdTUyNERcdTdCMTRcdThCQjAnXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnRXhwb3J0IGN1cnJlbnQgbm90ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBjbWRfc2V0X3ZleHBvcnRlcigpe1xyXG4gICAgICAgIGlmKHRoaXMubGFuZ3VhZ2U9PSd6aCcpe1xyXG4gICAgICAgICAgICByZXR1cm4gJ1x1OEJCRVx1N0Y2RVx1NUJGQ1x1NTFGQVx1N0IxNFx1OEJCMFx1OTAwOVx1OTg3OSdcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcmV0dXJuICdTZXQgY29uZmlnIHRvIGV4cG9ydCBub3RlJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNtZF9leHBvcnRfcGx1Z2luKCl7XHJcbiAgICAgICAgaWYodGhpcy5sYW5ndWFnZT09J3poJyl7XHJcbiAgICAgICAgICAgIHJldHVybiAnXHU1QkZDXHU1MUZBXHU2M0QyXHU0RUY2J1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gJ0V4cG9ydCBwbHVnaW4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbXB0X3BhdGhfb2ZfZm9sZGVyKCl7XHJcbiAgICAgICAgaWYodGhpcy5sYW5ndWFnZT09J3poJyl7XHJcbiAgICAgICAgICAgIHJldHVybiAnXHU4RjkzXHU1MTY1XHU2NTg3XHU0RUY2XHU1OTM5XHU4REVGXHU1Rjg0J1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gJ0lucHV0IHBhdGggb2YgZm9sZGVyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdGljZV9vdXRwdXQoKXtcclxuICAgICAgICBpZih0aGlzLmxhbmd1YWdlPT0nemgnKXtcclxuICAgICAgICAgICAgcmV0dXJuICdcdTVCRkNcdTUxRkFcdUZGMUEnXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnT3V0cHV0Oic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IG5vdGljZV9ub3N1Y2hkaXIoKXtcclxuICAgICAgICBpZih0aGlzLmxhbmd1YWdlPT0nemgnKXtcclxuICAgICAgICAgICAgcmV0dXJuICdcdTY1RTBcdTY1NDhcdTc2RUVcdTVGNTUnXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnSW52YWlkIHBhdGguJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdfcGx1Z2luX2Rpcigpe1xyXG4gICAgICAgIGlmKHRoaXMubGFuZ3VhZ2U9PSd6aCcpe1xyXG4gICAgICAgICAgICByZXR1cm4gJ1x1NjNEMlx1NEVGNlx1NUJGQ1x1NTFGQVx1NzZFRVx1NUY1NSc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiAnUGx1Z2luIGRpciB0byBleHBvcnQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ192YXVsdF9kaXIoKXtcclxuICAgICAgICBpZih0aGlzLmxhbmd1YWdlPT0nemgnKXtcclxuICAgICAgICAgICAgcmV0dXJuICdcdTVFOTNcdTc2RUVcdTVGNTUnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gJ1Jvb3QgZGlyIG9mIHZhdWx0JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBsZXQgc3RyaW5ncyA9IG5ldyBTdHJpbmdzKCk7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLElBQUFBLG1CQUE0Rzs7O0FDQTVHLHNCQUE0RztBQUVyRyxJQUFNLFdBQU4sTUFBYztBQUFBLEVBS2pCLFlBQVksUUFBYztBQUN0QixTQUFLLFNBQVM7QUFDZCxTQUFLLEtBQUssUUFBUSxJQUFJO0FBQ3RCLFNBQUssT0FBTyxRQUFRLE1BQU07QUFBQSxFQUM5QjtBQUFBLEVBRUEsSUFBSSxPQUFNO0FBQ04sUUFBSSxJQUFJLEtBQUssT0FBTyxJQUFJLE1BQU07QUFDOUIsV0FBTyxFQUFFLFNBQVMsUUFBUSxPQUFNLEdBQUc7QUFBQSxFQUN2QztBQUFBLEVBRUEsUUFBUSxPQUFZO0FBQ3RCLFFBQUcsT0FBTTtBQUNSLGFBQU8sS0FBSyxPQUFLLE1BQUksTUFBTTtBQUFBLElBQzVCLE9BQUs7QUFDSixhQUFPO0FBQUEsSUFDUjtBQUFB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QUFnQixJQUFJO0FBQ2xDLGVBQVEsS0FBSyxRQUFPO0FBQ25CLFlBQUcsRUFBRSxFQUFFLGNBQVksT0FBTTtBQUN4QixlQUFLLFNBQVMsV0FBVyxHQUFFLE9BQUssTUFBSSxFQUFFLFdBQVMsTUFBSSxFQUFFLFNBQVM7QUFBQSxRQUMvRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUNEO0FBRUEsSUFBTSxzQkFBTixjQUFrQyxrQ0FBaUI7QUFBQSxFQUlsRCxZQUFZLEtBQVUsUUFBNEI7QUFDakQsVUFBTSxLQUFLLE1BQU07QUFDakIsU0FBSyxTQUFTO0FBQUEsRUFDZjtBQUFBLEVBRUEsZ0JBQWdCLE9BQWdDO0FBQy9DLFdBQU8sS0FBSyxPQUFPLFNBQVMsS0FBSztBQUFBLEVBQ2xDO0FBQUEsRUFFQSxXQUFXLE1BQVksTUFBWSxPQUE4QjtBQUNoRSxVQUFNLEVBQUMsWUFBVyxJQUFJO0FBQ3RCLFFBQUksUUFBUyxLQUFLLE9BQU8sU0FBaUIsS0FBSztBQUMvQyxRQUFJLE9BQU8sSUFBSSx5QkFBUSxXQUFXLEVBQ2hDLFFBQVEsSUFBSSxFQUNaLFFBQVEsSUFBSSxFQUNaO0FBQUEsTUFBVSxVQUFRLEtBQ2pCLFNBQVMsS0FBSyxFQUNkLFNBQVMsT0FBT0MsV0FBZ0I7QUFDaEMsYUFBSyxPQUFPLFNBQVMsS0FBSyxJQUFJQTtBQUM5QixjQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsTUFDaEMsQ0FBQztBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsVUFBZ0I7QUFDZixVQUFNLEVBQUMsWUFBVyxJQUFJO0FBRXRCLGdCQUFZLE1BQU07QUFFbEIsUUFBSSx5QkFBUSxXQUFXLEVBQ3JCLFFBQVEsUUFBUSxrQkFBa0IsRUFDbEMsWUFBWSxVQUFRLEtBQ25CLFNBQVMsS0FBSyxPQUFPLFNBQVMsaUJBQWlCLEVBQy9DLFNBQVMsT0FBTyxVQUFVO0FBQzFCLFdBQUssT0FBTyxTQUFTLG9CQUFvQjtBQUN6QyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDaEMsQ0FBQyxDQUFDO0FBRUosUUFBSSx5QkFBUSxXQUFXLEVBQ3BCLFFBQVEsUUFBUSxpQkFBaUIsRUFDakMsWUFBWSxVQUFRLEtBQ25CLFNBQVMsS0FBSyxPQUFPLFNBQVMsUUFBUSxFQUN0QyxTQUFTLE9BQU8sVUFBVTtBQUMxQixXQUFLLE9BQU8sU0FBUyxXQUFXO0FBQ2hDLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNoQyxDQUFDLENBQUM7QUFBQSxFQUNOO0FBQ0Q7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJlcnIiLCAiX2EiLCAiX2IiLCAibmFtZSIsICJ2YWx1ZSJdCn0K diff --git a/src/fseditor.ts b/src/fseditor.ts index ae96b93..35dd407 100644 --- a/src/fseditor.ts +++ b/src/fseditor.ts @@ -114,16 +114,18 @@ export class FsEditor{ mirror_tfile(tfile:TFile,vault_root:string,mode='mtime',attachment=true,outlink=false){ // 将笔记镜像移动到别的库中,文件结构与当前库相同 if(tfile){ - vault_root = vault_root.replace(/\\g/,'/'); + vault_root = vault_root.replace(/\\/g,'/'); let src = this.root + '/' + tfile.path; let dst = vault_root+'/'+tfile.path; this.mkdir_recursive(this.path.dirname(dst)); this.copy_file(src,dst,mode); if(attachment){ + console.log('attachment') let nc = (this.plugin.app as any).plugins.getPlugin('note-chain'); if(!nc){return;} - let tfiles = nc.chain.get_outlinks(tfile); + let tfiles = nc.chain.get_outlinks(tfile,false); for(let t of tfiles){ + console.log(t.name) if(!(t.extension==='md')){ this.mirror_tfile(t,vault_root,mode,false); }else if(outlink){