MediaWiki:Gadget-TranslateVariants.js:修订间差异

MediaWiki系统消息页面
(新页面 改写 修正代码)
(Git commit 315405d: feat: sync upstream with Qiuwen)
标签手工回退
 
(未显示2个用户的22个中间版本)
第1行: 第1行:
/* <nowiki> */
/**
/**
* SPDX-License-Identifier: CC-BY-SA-4.0
* SPDX-License-Identifier: CC-BY-SA-4.0
* _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
* _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
*
*
* @source <zh.wikipedia.org/wiki/User:Xiplus/js/TranslateVariants>
* @base {@link https://zh.wikipedia.org/wiki/User:Xiplus/js/TranslateVariants}
* @source {@link https://github.com/TopRealm/YsArchives-Gadgets/tree/master/src/TranslateVariants}
* @license CC-BY-SA-4.0 {@link https://youshou.wiki/wiki/H:CC-BY-SA-4.0}
*/
*/
/**
/* globals TranslateVariants:true */
* +------------------------------------------------------------+
window.TranslateVariants = {};
* | === WARNING: GLOBAL GADGET FILE === |
if (!TranslateVariants.summary) {
* +------------------------------------------------------------+
TranslateVariants.summary = '自动转换变体自[[$1]] via [[MediaWiki:Gadget-TranslateVariants.js|TranslateVariants]]';
* | All changes should be made in the repository, |
* | otherwise they will be lost. |
* +------------------------------------------------------------+
* | Changes to this page may affect many users. |
* | Please discuss changes by opening an issue before editing. |
* +------------------------------------------------------------+
*/
/* <nowiki> */

(() => {

"use strict";

// dist/TranslateVariants/TranslateVariants.js
function _createForOfIteratorHelper(r, e) {
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var n = 0, F = function() {
};
return { s: F, n: function() {
return n >= r.length ? { done: true } : { done: false, value: r[n++] };
}, e: function(r2) {
throw r2;
}, f: F };
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o, a = true, u = false;
return { s: function() {
t = t.call(r);
}, n: function() {
var r2 = t.next();
return a = r2.done, r2;
}, e: function(r2) {
u = true, o = r2;
}, f: function() {
try {
a || null == t.return || t.return();
} finally {
if (u) throw o;
}
} };
}
}
(function ($, mw) {
function _unsupportedIterableToArray(r, a) {
if (r) {
var localize = window.i18n.localize;
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var main = function main() {
var t = {}.toString.call(r).slice(8, -1);
var langs = new Set(['zh', 'zh-hans', 'zh-cn', 'zh-my', 'zh-sg', 'zh-hant', 'zh-hk', 'zh-mo', 'zh-tw']);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
var langname = {
}
zh: '原始',
}
'zh-hans': '简体',
function _arrayLikeToArray(r, a) {
'zh-cn': '中国大陆简体',
(null == a || a > r.length) && (a = r.length);
'zh-my': '马来西亚简体',
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
'zh-sg': '新加坡简体',
return n;
'zh-hant': '繁體',
}
'zh-hk': '中國香港繁體',
var __create = Object.create;
'zh-mo': '中國澳門繁體',
var __defProp = Object.defineProperty;
'zh-tw': '中國臺灣繁體'
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
};
var __getOwnPropNames = Object.getOwnPropertyNames;
var result = {};
var __getProtoOf = Object.getPrototypeOf;
var api = new mw.Api();
var __hasOwnProp = Object.prototype.hasOwnProperty;
var basepagetext = '';
var __copyProps = (to, from, except, desc) => {
var table = $('<div>').attr('id', 'TranslateVariants').prependTo('#bodyContent');
if (from && typeof from === "object" || typeof from === "function") {
$("<div style=\"color:red\">".concat(localize({
var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step;
'zh-hans': '提醒:TranslateVariants工具使用IT及MediaWiki转换组进行自动转换,请确认转换结果是否正确!',
try {
'zh-hant': '提醒:TranslateVariants工具使用IT及MediaWiki轉換組進行自動轉換,請確認轉換結果是否正確!'
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
}), "</div>")).appendTo(table);
let key = _step.value;
var defaultlangs = 'zh,zh-hans,zh-cn,zh-my,zh-sg,zh-hant,zh-hk,zh-mo,zh-tw';
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
var runlangs = prompt(localize({
get: () => from[key],
'zh-hans': '转换以下语言(以逗号隔开):',
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
'zh-hant': '轉換以下語言(以逗號隔開):'
}), defaultlangs);
});
if (runlangs === null) {
}
} catch (err) {
runlangs = defaultlangs;
_iterator.e(err);
} finally {
_iterator.f();
}
}
}
var langqueue = runlangs.split(',').map(function (lang) {
return lang.trim();
return to;
};
}).filter(function (lang) {
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
return langs.has(lang);
// If the importer is in node compatibility mode or this is not an ESM
});
// file that has been converted to a CommonJS file using a Babel-
var process = function process() {
// compatible transform (i.e. "__esModule" has not been set), then set
if (langqueue.length === 0) {
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target,
mod
));
//! src/TranslateVariants/TranslateVariants.ts
var import_ext_gadget3 = require("ext.gadget.Util");
//! src/TranslateVariants/options.json
var translateVariantsSummary = "自动转换变体自[[$1]]([[MediaWiki:Gadget-TranslateVariants.js|TranslateVariants]])";
var contentID = "TranslateVariants-content";
var version = "2.0";
//! src/TranslateVariants/TranslateVariants.module.less
var noChanges = "TranslateVariants-module__noChanges_Yvm-lW";
var publishChanges = "TranslateVariants-module__publishChanges_Yvm-lW";
var submitAll = "TranslateVariants-module__submitAll_Yvm-lW";
var warning = "TranslateVariants-module__warning_Yvm-lW";
//! src/TranslateVariants/modules/translateVariants.tsx
var import_ext_gadget2 = __toESM(require("ext.gadget.React"), 1);
//! src/TranslateVariants/modules/api.ts
var import_ext_gadget = require("ext.gadget.Util");
var api = (0, import_ext_gadget.initMwApi)("TranslateVariants/".concat(version));
//! src/TranslateVariants/modules/translateVariants.tsx
var langs = /* @__PURE__ */ new Set(["zh", "zh-hans", "zh-cn", "zh-my", "zh-sg", "zh-hant", "zh-hk", "zh-mo", "zh-tw"]);
var nameOfLangs = {
zh: "原始",
"zh-hans": "简体",
"zh-cn": "中国大陆简体",
"zh-my": "马来西亚简体",
"zh-sg": "新加坡简体",
"zh-hant": "繁體",
"zh-hk": "中國香港繁體",
"zh-mo": "中國澳門繁體",
"zh-tw": "中國臺灣繁體"
};
var translateVariants = (wgPageName) => {
var _prompt;
const summary = translateVariantsSummary.replace(/\$1/g, wgPageName);
const $wrapper = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
id: "TranslateVariants"
})).prependTo("#bodyContent");
const $submitAll = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("button", {
className: ["cdx-button", "cdx-button--action-progressive", "cdx-button--weight-primary"]
}, window.wgULS("发布所有更改", "發佈所有變更")));
$submitAll.on("click", () => {
const $buttons = $wrapper.find(".".concat(publishChanges));
if (!$buttons.length) {
void mw.notify(window.wgULS("没有任何可以发布的更改", "沒有任何變更可發佈"), {
tag: "TranslateVariants",
type: "error"
});
return;
}
if (!confirm(window.wgULS("发布$1个更改?", "發佈$1個變更?").replace("$1", "".concat($buttons.length)))) {
void mw.notify(window.wgULS("已取消发布", "已取消發佈"), {
tag: "TranslateVariants",
type: "warn"
});
return;
}
var _iterator2 = _createForOfIteratorHelper($buttons), _step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
const button = _step2.value;
$(button).trigger("click");
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
});
$wrapper.append($(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
className: submitAll
})).append($submitAll), /* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
className: warning
}, window.wgULS("提醒:TranslateVariants工具使用IT及MediaWiki转换组进行自动转换,请确认转换结果是否正确!", "提醒:TranslateVariants工具使用IT及MediaWiki轉換組進行自動轉換,請確認轉換結果是否正確!")));
const defaultLangs = [...langs];
let runLangs = (_prompt = prompt(window.wgULS("转换以下语言(以逗号隔开):", "轉換以下語言(以逗號隔開):"), defaultLangs.join(","))) === null || _prompt === void 0 ? void 0 : _prompt.split(",");
if (runLangs === null) {
runLangs = defaultLangs;
}
const langQueue = runLangs.map((lang) => lang.trim()).filter((lang) => langs.has(lang));
const process = (pageContent) => {
if (!langQueue.length) {
return;
}
const lang = langQueue.shift();
const $diffTable = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
id: "TranslateVariants-diff-".concat(lang)
}));
$wrapper.append($diffTable, /* @__PURE__ */ import_ext_gadget2.default.createElement("hr", null));
const basePageName = wgPageName.replace(/\/zh$/, "");
const targetTitle = lang === "zh" ? basePageName : "".concat(basePageName, "/").concat(lang);
let newPageContent = "";
void api.parse('{{NoteTA|G1=IT|G2=MediaWiki}}<div id="'.concat(contentID, '">').concat(pageContent, "</div>"), {
uselang: lang
}).then((content) => {
newPageContent = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
innerHTML: content
})).find("#".concat(contentID)).text();
const _params = {
action: "query",
format: "json",
formatversion: "2",
titles: targetTitle,
prop: "revisions",
rvdifftotext: newPageContent
};
return api.post(_params);
}, (error) => {
void mw.notify(window.wgULS("解析$1时发生错误:", "解析$1時發生錯誤:").replace("$1", lang) + error, {
tag: "TranslateVariants",
type: "error"
});
return null;
}).then((data) => {
if (data === null) {
return;
return;
}
}
const $tool = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", null, /* @__PURE__ */ import_ext_gadget2.default.createElement("a", {
var lang = langqueue.shift();
href: mw.util.getUrl(targetTitle)
var diffTable = $("<div id=\"TranslateVariants-diff-".concat(lang, "\">")).appendTo(table);
}, lang, "(", nameOfLangs[lang], ")"), "(", /* @__PURE__ */ import_ext_gadget2.default.createElement("a", {
$('<hr>').appendTo(table);
var basename = mw.config.get('wgPageName').replace(/\/zh$/, '');
href: mw.util.getUrl(targetTitle, {
var targetTitle;
action: "edit"
})
targetTitle = lang === 'zh' ? String(basename) : "".concat(basename, "/").concat(lang);
}, window.wgULS("编", "編")), ")"));
var newtext;
$diffTable.append($tool);
api.parse("{{NoteTA|G1=IT|G2=MediaWiki}}<div id=\"TVcontent\">".concat(basepagetext, "</div>"), {
const [page] = data["query"].pages;
uselang: lang,
prop: 'text'
if (page.missing) {
const $submit = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("button", {
}).then(function (data) {
className: [publishChanges, "cdx-button"]
newtext = $('<div>').html(data).find('#TVcontent').text();
}, window.wgULS("发布页面", "發佈頁面")));
return api.post({
action: 'query',
$submit.on("click", () => {
prop: 'revisions',
$submit.remove();
titles: [targetTitle],
api.create(targetTitle, {
rvdifftotext: newtext,
summary
formatversion: '2'
}, newPageContent).then(() => {
void mw.notify(window.wgULS("已编辑 ", "已編輯 ") + targetTitle, {
});
tag: "TranslateVariants",
}, function (error) {
type: "success"
mw.notify("\u89E3\u6790".concat(lang).concat(localize({
'zh-hans': '时发生错误:',
});
'zh-hant': '時發生錯誤:'
}, (error) => {
void mw.notify(window.wgULS("编辑", "編輯 ") + targetTitle + window.wgULS(" 发生错误:", " 發生錯誤:") + error, {
})).concat(error));
tag: "TranslateVariants",
}).then(function (data) {
type: "error"
var tool = $("<div><a href=\"".concat(mw.util.getUrl(targetTitle), "\">").concat(lang, "\uFF08").concat(langname[lang], "\uFF09</a>\uFF08<a href=\"").concat(mw.util.getUrl(targetTitle, {
action: 'edit'
}), "\">").concat(localize({
'zh-hans': '编',
'zh-hant': '編'
}), "</a>\uFF09</div>")).appendTo(diffTable);
var page = data.query.pages[0];
if (page.missing) {
var submit = $("<button style=\"float: right;\">".concat(localize({
'zh-hans': '发布页面',
'zh-hant': '發佈頁面'
}), "</button>")).appendTo(tool);
submit.on('click', function () {
this.remove();
api.create(targetTitle, {
summary: TranslateVariants.summary.replace(/\$1/g, mw.config.get('wgPageName'))
}, newtext).then(function () {
mw.notify(localize({
'zh-hans': '已编辑 ',
'zh-hant': '已編輯 '
}) + targetTitle);
}, function (error) {
mw.notify(localize({
'zh-hans': '编辑',
'zh-hant': '編輯 '
}) + targetTitle + localize({
'zh-hans': ' 发生错误:',
'zh-hant': ' 發生錯誤:'
}) + error);
});
});
});
});
});
$('<pre>').html(newtext.replace(/[&<>]/gim, function (s) {
return "&#".concat(s.codePointAt(0), ";");
$tool.append($submit);
$diffTable.append(/* @__PURE__ */ import_ext_gadget2.default.createElement("pre", {
})).appendTo(diffTable);
innerHTML: newPageContent.replace(/[&<>]/gim, (string) => "&#".concat(string.codePointAt(0), ";"))
return;
}
}));
return;
var diff = page.revisions[0].diff.body;
if (diff === '') {
}
const diff = page.revisions[0].diff.body;
$("<span style=\"float: right;\">".concat(localize({
'zh-hans': '无变更',
if (diff === "") {
$tool.append(/* @__PURE__ */ import_ext_gadget2.default.createElement("span", {
'zh-hant': '無變更'
}), "</span>")).appendTo(tool);
className: noChanges
} else {
}, window.wgULS("无更改", "無變更")));
} else {
var _submit = $("<button style=\"float: right;\">".concat(localize({
const $submit = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("button", {
'zh-hans': '发布变更',
'zh-hant': '發佈變更'
className: [publishChanges, "cdx-button"]
}), "</button>")).appendTo(tool);
}, window.wgULS("发布更改", "發佈變更")));
_submit.on('click', function () {
$submit.on("click", () => {
this.remove();
$submit.remove();
api.edit(targetTitle, function () {
api.edit(targetTitle, () => ({
return {
summary,
text: newtext,
text: newPageContent,
nocreate: false
summary: TranslateVariants.summary.replace(/\$1/g, mw.config.get('wgPageName')),
nocreate: false
})).then(() => {
void mw.notify(window.wgULS("已编辑", "已編輯 ") + targetTitle, {
};
}).then(function () {
tag: "TranslateVariants",
mw.notify(localize({
type: "success"
'zh-hans': '已编辑',
});
'zh-hant': '已編輯 '
}, (error) => {
}) + targetTitle);
void mw.notify(window.wgULS("编辑$1发生错误:", "編輯$1發生錯誤:").replace("$1", targetTitle) + error, {
}, function (error) {
tag: "TranslateVariants",
mw.notify(localize({
type: "error"
'zh-hans': '编辑',
'zh-hant': '編輯 '
}) + targetTitle + localize({
'zh-hans': ' 发生错误:',
'zh-hant': ' 發生錯誤:'
}) + error);
});
});
});
});
});
$('<table>').attr('class', 'diff').html(diff).prepend('<colgroup><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content"></colgroup>').appendTo(diffTable);
}
$tool.append($submit);
$diffTable.append($(/* @__PURE__ */ import_ext_gadget2.default.createElement("table", {
}, function (error) {
mw.notify(localize({
className: "diff",
'zh-hans': '获取',
innerHTML: diff
})).prepend(/* @__PURE__ */ import_ext_gadget2.default.createElement("colgroup", null, /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
'zh-hant': '取得'
}) + lang + localize({
className: "diff-marker"
}), /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
'zh-hans': '差异时发生错误:',
'zh-hant': '差異時發生錯誤:'
className: "diff-content"
}), /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
}) + error);
className: "diff-marker"
}).always(function () {
}), /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
process();
className: "diff-content"
});
};
}))));
api.get({
action: 'query',
prop: 'revisions',
rvprop: ['content', 'timestamp'],
titles: [mw.config.get('wgPageName')],
formatversion: '2',
curtimestamp: true
}).then(function (data) {
if (!data.query || !data.query.pages) {
return $.Deferred().reject('unknown');
}
}
}, (error) => {
var page = data.query.pages[0];
void mw.notify(window.wgULS("获取$1差异时发生错误:", "取得$1差異時發生錯誤:").replace("$1", lang) + error, {
if (!page || page.invalid) {
tag: "TranslateVariants",
return $.Deferred().reject('invalidtitle');
}
type: "error"
if (page.missing) {
return $.Deferred().reject('nocreate-missing');
}
var revision = page.revisions[0];
return {
content: revision.content
};
}).then(function (data) {
var text = data.content;
result.zh = text;
text = text.replace(/[\s#&'*:<>[\]_{|}]/gim, function (s) {
return "&#".concat(s.codePointAt(0), ";");
});
text = text.replace(/(&#91;&#91;)((?:(?!&#124;)(?!&#93;).)+?)(&#124;(?:(?!&#93;).)+?&#93;&#93;)/g, '$1-{$2}-$3');
text = text.replace(/-&#123;(.+?)&#125;-/g, function (s) {
s = s.replace('-&#123;', '-{');
s = s.replace('-&#123;', '-{');
s = s.replace('&#125;-', '}-');
s = s.replace(/&#124;/g, '|');
s = s.replace(/&#32;/g, ' ');
s = s.replace(/&#61;/g, '=');
s = s.replace(/&#62;/g, '>');
s = s.replace(/&#58;/g, ':');
return s;
});
});
basepagetext = text;
}).always(() => {
process();
process(pageContent);
});
});
};
};
const params = {
if (/^MediaWiki:[^/]+(\/zh)?$/.test(mw.config.get('wgPageName'))) {
action: "query",
mw.loader.using(['mediawiki.api', 'mediawiki.diff.styles']).then(function () {
format: "json",
var link = mw.util.addPortletLink('p-cactions', '#', localize({
'zh-hans': '转换变体',
formatversion: "2",
prop: "revisions",
'zh-hant': '轉換變體'
}));
titles: wgPageName,
curtimestamp: true,
$(link).on('click', function () {
rvprop: ["content", "timestamp"]
this.remove();
};
main();
void api.get(params).then((data) => {
});
});
var _data$query;
if (!((_data$query = data["query"]) !== null && _data$query !== void 0 && _data$query.pages)) {
return $.Deferred().reject("unknown");
}
const [page] = data["query"].pages;
if (page.invalid) {
return $.Deferred().reject("invalidtitle");
}
if (page.missing) {
return $.Deferred().reject("nocreate-missing");
}
const [{
content
}] = page.revisions;
return content;
}).then((content) => {
let pageContent = content;
pageContent = pageContent.replace(/[\s#&'*:<>[\]_{|}]/gim, (string) => "&#".concat(string.codePointAt(0), ";"));
pageContent = pageContent.replace(/(&#91;&#91;)((?:(?!&#124;)(?!&#93;).)+?)(&#124;(?:(?!&#93;).)+?&#93;&#93;)/g, "$1-{$2}-$3");
pageContent = pageContent.replace(/-&#123;(.+?)&#125;-/g, (string) => string.replace("-&#123;", "-{").replace("-&#123;", "-{").replace("&#125;-", "}-").replace(/&#124;/g, "|").replace(/&#32;/g, " ").replace(/&#61;/g, "=").replace(/&#62;/g, ">").replace(/&#58;/g, ":"));
return pageContent;
}).then((pageContent) => {
process(pageContent);
});
};
//! src/TranslateVariants/TranslateVariants.ts
void (0, import_ext_gadget3.getBody)().then(($body) => {
const {
wgPageName
} = mw.config.get();
if (!/^MediaWiki:[^/]+(\/zh)?$/.test(wgPageName)) {
return;
}
}
const portletId = $body.find("#p-cactions").length ? "p-cactions" : "p-tb";
})(jQuery, mw);
const element = mw.util.addPortletLink(portletId, "#", window.wgULS("转换变体", "轉換變體"));
element === null || element === void 0 || element.addEventListener("click", () => {
element.remove();
translateVariants(wgPageName);
});
});

})();

/* </nowiki> */
/* </nowiki> */

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLnRzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9vcHRpb25zLmpzb24iLCAic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9tb2R1bGVzL3RyYW5zbGF0ZVZhcmlhbnRzLnRzeCIsICJzcmMvVHJhbnNsYXRlVmFyaWFudHMvbW9kdWxlcy9hcGkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Z2V0Qm9keX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcbmltcG9ydCB7dHJhbnNsYXRlVmFyaWFudHN9IGZyb20gJy4vbW9kdWxlcy90cmFuc2xhdGVWYXJpYW50cyc7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oKCRib2R5OiBKUXVlcnk8SFRNTEJvZHlFbGVtZW50Pik6IHZvaWQgPT4ge1xuXHRjb25zdCB7d2dQYWdlTmFtZX0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdGlmICghL15NZWRpYVdpa2k6W14vXSsoXFwvemgpPyQvLnRlc3Qod2dQYWdlTmFtZSkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBwb3J0bGV0SWQ6ICdwLWNhY3Rpb25zJyB8ICdwLXRiJyA9ICRib2R5LmZpbmQoJyNwLWNhY3Rpb25zJykubGVuZ3RoID8gJ3AtY2FjdGlvbnMnIDogJ3AtdGInO1xuXHRjb25zdCBlbGVtZW50OiBIVE1MTElFbGVtZW50IHwgbnVsbCA9IG13LnV0aWwuYWRkUG9ydGxldExpbmsocG9ydGxldElkLCAnIycsIHdpbmRvdy53Z1VMUygn6L2s5o2i5Y+Y5L2TJywgJ+i9ieaPm+iuiumrlCcpKTtcblxuXHRlbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHRlbGVtZW50LnJlbW92ZSgpO1xuXHRcdHRyYW5zbGF0ZVZhcmlhbnRzKHdnUGFnZU5hbWUpO1xuXHR9KTtcbn0pO1xuIiwgIntcblx0XCJ0cmFuc2xhdGVWYXJpYW50c1N1bW1hcnlcIjogXCLoh6rliqjovazmjaLlj5jkvZPoh6pbWyQxXV3vvIhbW01lZGlhV2lraTpHYWRnZXQtVHJhbnNsYXRlVmFyaWFudHMuanN8VHJhbnNsYXRlVmFyaWFudHNdXe+8iVwiLFxuXHRcImNvbnRlbnRJRFwiOiBcIlRyYW5zbGF0ZVZhcmlhbnRzLWNvbnRlbnRcIixcblx0XCJ2ZXJzaW9uXCI6IFwiMi4wXCJcbn1cbiIsICJpbXBvcnQgXCJlc2J1aWxkLWNzcy1tb2R1bGVzLXBsdWdpbi1ucy1jc3M6c3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzXCI7XG5leHBvcnQgY29uc3Qgbm9DaGFuZ2VzID0gXCJUcmFuc2xhdGVWYXJpYW50cy1tb2R1bGVfX25vQ2hhbmdlc19Zdm0tbFdcIjtcbmV4cG9ydCBjb25zdCBwdWJsaXNoQ2hhbmdlcyA9IFwiVHJhbnNsYXRlVmFyaWFudHMtbW9kdWxlX19wdWJsaXNoQ2hhbmdlc19Zdm0tbFdcIjtcbmV4cG9ydCBjb25zdCBzdWJtaXRBbGwgPSBcIlRyYW5zbGF0ZVZhcmlhbnRzLW1vZHVsZV9fc3VibWl0QWxsX1l2bS1sV1wiO1xuZXhwb3J0IGNvbnN0IHdhcm5pbmcgPSBcIlRyYW5zbGF0ZVZhcmlhbnRzLW1vZHVsZV9fd2FybmluZ19Zdm0tbFdcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIm5vQ2hhbmdlc1wiOiBub0NoYW5nZXMsXG4gIFwicHVibGlzaENoYW5nZXNcIjogcHVibGlzaENoYW5nZXMsXG4gIFwic3VibWl0QWxsXCI6IHN1Ym1pdEFsbCxcbiAgXCJ3YXJuaW5nXCI6IHdhcm5pbmdcbn07XG4gICAgICAiLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtub0NoYW5nZXMsIHB1Ymxpc2hDaGFuZ2VzLCBzdWJtaXRBbGwsIHdhcm5pbmd9IGZyb20gJy4uL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5cbnR5cGUgTGFuZ3MgPSAnemgnIHwgJ3poLWhhbnMnIHwgJ3poLWNuJyB8ICd6aC1teScgfCAnemgtc2cnIHwgJ3poLWhhbnQnIHwgJ3poLWhrJyB8ICd6aC1tbycgfCAnemgtdHcnO1xuY29uc3QgbGFuZ3M6IFNldDxMYW5ncz4gPSBuZXcgU2V0KFsnemgnLCAnemgtaGFucycsICd6aC1jbicsICd6aC1teScsICd6aC1zZycsICd6aC1oYW50JywgJ3poLWhrJywgJ3poLW1vJywgJ3poLXR3J10pO1xuY29uc3QgbmFtZU9mTGFuZ3MgPSB7XG5cdHpoOiAn5Y6f5aeLJyxcblx0J3poLWhhbnMnOiAn566A5L2TJyxcblx0J3poLWNuJzogJ+S4reWbveWkp+mZhueugOS9kycsXG5cdCd6aC1teSc6ICfpqazmnaXopb/kuprnroDkvZMnLFxuXHQnemgtc2cnOiAn5paw5Yqg5Z2h566A5L2TJyxcblx0J3poLWhhbnQnOiAn57mB6auUJyxcblx0J3poLWhrJzogJ+S4reWci+mmmea4r+e5gemrlCcsXG5cdCd6aC1tbyc6ICfkuK3lnIvmvrPploDnuYHpq5QnLFxuXHQnemgtdHcnOiAn5Lit5ZyL6Ie654Gj57mB6auUJyxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxMYW5ncywgc3RyaW5nPjtcblxuY29uc3QgdHJhbnNsYXRlVmFyaWFudHMgPSAod2dQYWdlTmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XG5cdGNvbnN0IHN1bW1hcnk6IHN0cmluZyA9IE9QVElPTlMudHJhbnNsYXRlVmFyaWFudHNTdW1tYXJ5LnJlcGxhY2UoL1xcJDEvZywgd2dQYWdlTmFtZSk7XG5cblx0Y29uc3QgJHdyYXBwZXI6IEpRdWVyeSA9ICgkKDxkaXYgaWQ9XCJUcmFuc2xhdGVWYXJpYW50c1wiIC8+KSBhcyBKUXVlcnkpLnByZXBlbmRUbygnI2JvZHlDb250ZW50Jyk7XG5cblx0Y29uc3QgJHN1Ym1pdEFsbDogSlF1ZXJ5ID0gJChcblx0XHQ8YnV0dG9uIGNsYXNzTmFtZT17WydjZHgtYnV0dG9uJywgJ2NkeC1idXR0b24tLWFjdGlvbi1wcm9ncmVzc2l2ZScsICdjZHgtYnV0dG9uLS13ZWlnaHQtcHJpbWFyeSddfT5cblx0XHRcdHt3aW5kb3cud2dVTFMoJ+WPkeW4g+aJgOacieabtOaUuScsICfnmbzkvYjmiYDmnInorormm7QnKX1cblx0XHQ8L2J1dHRvbj5cblx0KSBhcyBKUXVlcnk7XG5cdCRzdWJtaXRBbGwub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdGNvbnN0ICRidXR0b25zOiBKUXVlcnkgPSAkd3JhcHBlci5maW5kKGAuJHtwdWJsaXNoQ2hhbmdlc31gKTtcblx0XHRpZiAoISRidXR0b25zLmxlbmd0aCkge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCfmsqHmnInku7vkvZXlj6/ku6Xlj5HluIPnmoTmm7TmlLknLCAn5rKS5pyJ5Lu75L2V6K6K5pu05Y+v55m85L2IJyksIHtcblx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFjb25maXJtKHdpbmRvdy53Z1VMUygn5Y+R5biDJDHkuKrmm7TmlLnvvJ8nLCAn55m85L2IJDHlgIvorormm7TvvJ8nKS5yZXBsYWNlKCckMScsIGAkeyRidXR0b25zLmxlbmd0aH1gKSkpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5bey5Y+W5raI5Y+R5biDJywgJ+W3suWPlua2iOeZvOS9iCcpLCB7dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLCB0eXBlOiAnd2Fybid9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGJ1dHRvbiBvZiAkYnV0dG9ucykge1xuXHRcdFx0JChidXR0b24pLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0fVxuXHR9KTtcblxuXHQkd3JhcHBlci5hcHBlbmQoXG5cdFx0JCg8ZGl2IGNsYXNzTmFtZT17c3VibWl0QWxsfSAvPikuYXBwZW5kKCRzdWJtaXRBbGwpLFxuXHRcdDxkaXYgY2xhc3NOYW1lPXt3YXJuaW5nfT5cblx0XHRcdHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmj5DphpLvvJpUcmFuc2xhdGVWYXJpYW50c+W3peWFt+S9v+eUqElU5Y+KTWVkaWFXaWtp6L2s5o2i57uE6L+b6KGM6Ieq5Yqo6L2s5o2i77yM6K+356Gu6K6k6L2s5o2i57uT5p6c5piv5ZCm5q2j56Gu77yBJyxcblx0XHRcdFx0J+aPkOmGku+8mlRyYW5zbGF0ZVZhcmlhbnRz5bel5YW35L2/55SoSVTlj4pNZWRpYVdpa2novYnmj5vntYTpgLLooYzoh6rli5XovYnmj5vvvIzoq4vnorroqo3ovYnmj5vntZDmnpzmmK/lkKbmraPnorrvvIEnXG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpO1xuXG5cdGNvbnN0IGRlZmF1bHRMYW5nczogTGFuZ3NbXSA9IFsuLi5sYW5nc107XG5cblx0bGV0IHJ1bkxhbmdzID0gcHJvbXB0KFxuXHRcdHdpbmRvdy53Z1VMUygn6L2s5o2i5Lul5LiL6K+t6KiA77yI5Lul6YCX5Y+36ZqU5byA77yJ77yaJywgJ+i9ieaPm+S7peS4i+iqnuiogO+8iOS7pemAl+iZn+malOmWi++8ie+8micpLFxuXHRcdGRlZmF1bHRMYW5ncy5qb2luKCcsJylcblx0KT8uc3BsaXQoJywnKSBhcyBMYW5nc1tdIHwgbnVsbDtcblx0aWYgKHJ1bkxhbmdzID09PSBudWxsKSB7XG5cdFx0cnVuTGFuZ3MgPSBkZWZhdWx0TGFuZ3M7XG5cdH1cblxuXHRjb25zdCBsYW5nUXVldWU6IExhbmdzW10gPSBydW5MYW5nc1xuXHRcdC5tYXAoKGxhbmc6IExhbmdzKTogTGFuZ3MgPT4gbGFuZy50cmltKCkgYXMgTGFuZ3MpXG5cdFx0LmZpbHRlcigobGFuZzogTGFuZ3MpOiBib29sZWFuID0+IGxhbmdzLmhhcyhsYW5nKSk7XG5cblx0Y29uc3QgcHJvY2VzcyA9IChwYWdlQ29udGVudDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0aWYgKCFsYW5nUXVldWUubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFuZyA9IGxhbmdRdWV1ZS5zaGlmdCgpIGFzIExhbmdzO1xuXG5cdFx0Y29uc3QgJGRpZmZUYWJsZTogSlF1ZXJ5ID0gJCg8ZGl2IGlkPXtgVHJhbnNsYXRlVmFyaWFudHMtZGlmZi0ke2xhbmd9YH0gLz4pIGFzIEpRdWVyeTtcblx0XHQkd3JhcHBlci5hcHBlbmQoJGRpZmZUYWJsZSwgPGhyIC8+KTtcblxuXHRcdGNvbnN0IGJhc2VQYWdlTmFtZTogc3RyaW5nID0gd2dQYWdlTmFtZS5yZXBsYWNlKC9cXC96aCQvLCAnJyk7XG5cdFx0Y29uc3QgdGFyZ2V0VGl0bGU6IHN0cmluZyA9IGxhbmcgPT09ICd6aCcgPyBiYXNlUGFnZU5hbWUgOiBgJHtiYXNlUGFnZU5hbWV9LyR7bGFuZ31gO1xuXG5cdFx0bGV0IG5ld1BhZ2VDb250ZW50OiBzdHJpbmcgPSAnJztcblx0XHR2b2lkIGFwaVxuXHRcdFx0LnBhcnNlKGB7e05vdGVUQXxHMT1JVHxHMj1NZWRpYVdpa2l9fTxkaXYgaWQ9XCIke09QVElPTlMuY29udGVudElEfVwiPiR7cGFnZUNvbnRlbnR9PC9kaXY+YCwge1xuXHRcdFx0XHR1c2VsYW5nOiBsYW5nLFxuXHRcdFx0fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHQoY29udGVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0bmV3UGFnZUNvbnRlbnQgPSAkKDxkaXYgaW5uZXJIVE1MPXtjb250ZW50fSAvPilcblx0XHRcdFx0XHRcdC5maW5kKGAjJHtPUFRJT05TLmNvbnRlbnRJRH1gKVxuXHRcdFx0XHRcdFx0LnRleHQoKTtcblxuXHRcdFx0XHRcdGNvbnN0IF9wYXJhbXM6IEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdFx0XHR0aXRsZXM6IHRhcmdldFRpdGxlLFxuXHRcdFx0XHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHRcdFx0XHRydmRpZmZ0b3RleHQ6IG5ld1BhZ2VDb250ZW50LFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRyZXR1cm4gYXBpLnBvc3QoX3BhcmFtcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdChlcnJvcik6IG51bGwgPT4ge1xuXHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfop6PmnpAkMeaXtuWPkeeUn+mUmeivr++8micsICfop6PmnpAkMeaZgueZvOeUn+mMr+iqpO+8micpLnJlcGxhY2UoJyQxJywgbGFuZykgKyBlcnJvcixcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGRhdGEgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCAkdG9vbCA9ICQoXG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8YSBocmVmPXttdy51dGlsLmdldFVybCh0YXJnZXRUaXRsZSl9PlxuXHRcdFx0XHRcdFx0XHRcdHtsYW5nfe+8iHtuYW1lT2ZMYW5nc1tsYW5nXX3vvIlcblx0XHRcdFx0XHRcdFx0PC9hPlxuXHRcdFx0XHRcdFx0XHTvvIg8YSBocmVmPXttdy51dGlsLmdldFVybCh0YXJnZXRUaXRsZSwge2FjdGlvbjogJ2VkaXQnfSl9Pnt3aW5kb3cud2dVTFMoJ+e8licsICfnt6gnKX08L2E+77yJXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpIGFzIEpRdWVyeTtcblxuXHRcdFx0XHRcdCRkaWZmVGFibGUuYXBwZW5kKCR0b29sKTtcblxuXHRcdFx0XHRcdGNvbnN0IFtwYWdlXSA9IGRhdGFbJ3F1ZXJ5J10ucGFnZXM7XG5cdFx0XHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHRcdFx0Y29uc3QgJHN1Ym1pdCA9ICQoXG5cdFx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3NOYW1lPXtbcHVibGlzaENoYW5nZXMsICdjZHgtYnV0dG9uJ119PlxuXHRcdFx0XHRcdFx0XHRcdHt3aW5kb3cud2dVTFMoJ+WPkeW4g+mhtemdoicsICfnmbzkvYjpoIHpnaInKX1cblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHQpIGFzIEpRdWVyeTtcblx0XHRcdFx0XHRcdCRzdWJtaXQub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHQkc3VibWl0LnJlbW92ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGFwaS5jcmVhdGUoXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGl0bGUsXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdG5ld1BhZ2VDb250ZW50XG5cdFx0XHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdFx0XHQoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+W3sue8lui+kSAnLCAn5bey57eo6LyvICcpICsgdGFyZ2V0VGl0bGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnc3VjY2VzcycsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdChlcnJvcik6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn57yW6L6RJywgJ+e3qOi8ryAnKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGl0bGUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOWPkeeUn+mUmeivr++8micsICcg55m855Sf6Yyv6Kqk77yaJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdCR0b29sLmFwcGVuZCgkc3VibWl0KTtcblx0XHRcdFx0XHRcdCRkaWZmVGFibGUuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHQ8cHJlXG5cdFx0XHRcdFx0XHRcdFx0aW5uZXJIVE1MPXtuZXdQYWdlQ29udGVudC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0L1smPD5dL2dpbSxcblx0XHRcdFx0XHRcdFx0XHRcdChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PiBgJiMke3N0cmluZy5jb2RlUG9pbnRBdCgwKX07YFxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZGlmZjogc3RyaW5nID0gcGFnZS5yZXZpc2lvbnNbMF0uZGlmZi5ib2R5O1xuXHRcdFx0XHRcdGlmIChkaWZmID09PSAnJykge1xuXHRcdFx0XHRcdFx0JHRvb2wuYXBwZW5kKDxzcGFuIGNsYXNzTmFtZT17bm9DaGFuZ2VzfT57d2luZG93LndnVUxTKCfml6Dmm7TmlLknLCAn54Sh6K6K5pu0Jyl9PC9zcGFuPik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0ICRzdWJtaXQgPSAkKFxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzTmFtZT17W3B1Ymxpc2hDaGFuZ2VzLCAnY2R4LWJ1dHRvbiddfT5cblx0XHRcdFx0XHRcdFx0XHR7d2luZG93LndnVUxTKCflj5HluIPmm7TmlLknLCAn55m85L2I6K6K5pu0Jyl9XG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0KSBhcyBKUXVlcnk7XG5cdFx0XHRcdFx0XHQkc3VibWl0Lm9uKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0JHN1Ym1pdC5yZW1vdmUoKTtcblxuXHRcdFx0XHRcdFx0XHRhcGkuZWRpdCh0YXJnZXRUaXRsZSwgKCkgPT4gKHtcblx0XHRcdFx0XHRcdFx0XHRzdW1tYXJ5LFxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IG5ld1BhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdG5vY3JlYXRlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0fSkpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdFx0KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCflt7LnvJbovpEnLCAn5bey57eo6LyvICcpICsgdGFyZ2V0VGl0bGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnc3VjY2VzcycsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvd1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC53Z1VMUygn57yW6L6RJDHlj5HnlJ/plJnor6/vvJonLCAn57eo6LyvJDHnmbznlJ/pjK/oqqTvvJonKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCckMScsIHRhcmdldFRpdGxlKSArIGVycm9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdCR0b29sLmFwcGVuZCgkc3VibWl0KTtcblx0XHRcdFx0XHRcdCRkaWZmVGFibGUuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHQkKDx0YWJsZSBjbGFzc05hbWU9XCJkaWZmXCIgaW5uZXJIVE1MPXtkaWZmfSAvPikucHJlcGVuZChcblx0XHRcdFx0XHRcdFx0XHQ8Y29sZ3JvdXA+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y29sIGNsYXNzTmFtZT1cImRpZmYtbWFya2VyXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxjb2wgY2xhc3NOYW1lPVwiZGlmZi1jb250ZW50XCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxjb2wgY2xhc3NOYW1lPVwiZGlmZi1tYXJrZXJcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGNvbCBjbGFzc05hbWU9XCJkaWZmLWNvbnRlbnRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvY29sZ3JvdXA+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQoZXJyb3IpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+WJDHlt67lvILml7blj5HnlJ/plJnor6/vvJonLCAn5Y+W5b6XJDHlt67nlbDmmYLnmbznlJ/pjK/oqqTvvJonKS5yZXBsYWNlKCckMScsIGxhbmcpICsgZXJyb3IsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuYWx3YXlzKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0cHJvY2VzcyhwYWdlQ29udGVudCk7XG5cdFx0XHR9KTtcblx0fTtcblxuXHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zID0ge1xuXHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0dGl0bGVzOiB3Z1BhZ2VOYW1lLFxuXHRcdGN1cnRpbWVzdGFtcDogdHJ1ZSxcblx0XHRydnByb3A6IFsnY29udGVudCcsICd0aW1lc3RhbXAnXSxcblx0fTtcblxuXHR2b2lkIGFwaVxuXHRcdC5nZXQocGFyYW1zKVxuXHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoIWRhdGFbJ3F1ZXJ5J10/LnBhZ2VzKSB7XG5cdFx0XHRcdHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0KCd1bmtub3duJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IFtwYWdlXSA9IGRhdGFbJ3F1ZXJ5J10ucGFnZXM7XG5cblx0XHRcdGlmIChwYWdlLmludmFsaWQpIHtcblx0XHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QoJ2ludmFsaWR0aXRsZScpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHRyZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdCgnbm9jcmVhdGUtbWlzc2luZycpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBbe2NvbnRlbnR9XSA9IHBhZ2UucmV2aXNpb25zO1xuXG5cdFx0XHRyZXR1cm4gY29udGVudCBhcyBzdHJpbmc7XG5cdFx0fSlcblx0XHQudGhlbigoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdGxldCBwYWdlQ29udGVudDogc3RyaW5nID0gY29udGVudDtcblxuXHRcdFx0cGFnZUNvbnRlbnQgPSBwYWdlQ29udGVudC5yZXBsYWNlKFxuXHRcdFx0XHQvW1xccyMmJyo6PD5bXFxdX3t8fV0vZ2ltLFxuXHRcdFx0XHQoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCYjJHtzdHJpbmcuY29kZVBvaW50QXQoMCl9O2Bcblx0XHRcdCk7XG5cdFx0XHRwYWdlQ29udGVudCA9IHBhZ2VDb250ZW50LnJlcGxhY2UoXG5cdFx0XHRcdC8oJiM5MTsmIzkxOykoKD86KD8hJiMxMjQ7KSg/ISYjOTM7KS4pKz8pKCYjMTI0Oyg/Oig/ISYjOTM7KS4pKz8mIzkzOyYjOTM7KS9nLFxuXHRcdFx0XHQnJDEteyQyfS0kMydcblx0XHRcdCk7XG5cdFx0XHRwYWdlQ29udGVudCA9IHBhZ2VDb250ZW50LnJlcGxhY2UoLy0mIzEyMzsoLis/KSYjMTI1Oy0vZywgKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+XG5cdFx0XHRcdHN0cmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKCctJiMxMjM7JywgJy17Jylcblx0XHRcdFx0XHQucmVwbGFjZSgnLSYjMTIzOycsICcteycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoJyYjMTI1Oy0nLCAnfS0nKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzEyNDsvZywgJ3wnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzMyOy9nLCAnICcpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjNjE7L2csICc9Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiM2MjsvZywgJz4nKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzU4Oy9nLCAnOicpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm4gcGFnZUNvbnRlbnQ7XG5cdFx0fSlcblx0XHQudGhlbigocGFnZUNvbnRlbnQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0cHJvY2VzcyhwYWdlQ29udGVudCk7XG5cdFx0fSk7XG59O1xuXG5leHBvcnQge3RyYW5zbGF0ZVZhcmlhbnRzfTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYFRyYW5zbGF0ZVZhcmlhbnRzLyR7T1BUSU9OUy52ZXJzaW9ufWApO1xuXG5leHBvcnQge2FwaX07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEscUJBQXNCQyxRQUFBLGlCQUFBOztBQ0NyQixJQUFBQywyQkFBNEI7QUFDNUIsSUFBQUMsWUFBYTtBQUNiLElBQUFDLFVBQVc7O0FDRkwsSUFBTUMsWUFBWTtBQUNsQixJQUFNQyxpQkFBaUI7QUFDdkIsSUFBTUMsWUFBWTtBQUNsQixJQUFNQyxVQUFVOztBQ0Z2QixJQUFBQyxxQkFBa0JDLFFBQUFULFFBQUEsa0JBQUEsR0FBQSxDQUFBOztBQ0RsQixJQUFBVSxvQkFBd0JWLFFBQUEsaUJBQUE7QUFFeEIsSUFBTVcsT0FBQSxHQUFjRCxrQkFBQUUsV0FBQSxxQkFBQUMsT0FBdUNW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UUFBQUEsWUFBQSxVQUFBQSxRQUFTRSxpQkFBaUIsU0FBUyxNQUFZO0FBQzlDRixZQUFReEIsT0FBTztBQUNmL0Usc0JBQWtCQyxVQUFVO0VBQzdCLENBQUM7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfZXh0X2dhZGdldDMiLCAicmVxdWlyZSIsICJ0cmFuc2xhdGVWYXJpYW50c1N1bW1hcnkiLCAiY29udGVudElEIiwgInZlcnNpb24iLCAibm9DaGFuZ2VzIiwgInB1Ymxpc2hDaGFuZ2VzIiwgInN1Ym1pdEFsbCIsICJ3YXJuaW5nIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJfX3RvRVNNIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImFwaSIsICJpbml0TXdBcGkiLCAiY29uY2F0IiwgImxhbmdzIiwgIlNldCIsICJuYW1lT2ZMYW5ncyIsICJ6aCIsICJ0cmFuc2xhdGVWYXJpYW50cyIsICJ3Z1BhZ2VOYW1lIiwgIl9wcm9tcHQiLCAic3VtbWFyeSIsICJyZXBsYWNlIiwgIiR3cmFwcGVyIiwgIiQiLCAiZGVmYXVsdCIsICJjcmVhdGVFbGVtZW50IiwgImlkIiwgInByZXBlbmRUbyIsICIkc3VibWl0QWxsIiwgImNsYXNzTmFtZSIsICJ3aW5kb3ciLCAid2dVTFMiLCAib24iLCAiJGJ1dHRvbnMiLCAiZmluZCIsICJsZW5ndGgiLCAibXciLCAibm90aWZ5IiwgInRhZyIsICJ0eXBlIiwgImNvbmZpcm0iLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAiYnV0dG9uIiwgInZhbHVlIiwgInRyaWdnZXIiLCAiZXJyIiwgImUiLCAiZiIsICJhcHBlbmQiLCAiZGVmYXVsdExhbmdzIiwgInJ1bkxhbmdzIiwgInByb21wdCIsICJqb2luIiwgInNwbGl0IiwgImxhbmdRdWV1ZSIsICJtYXAiLCAibGFuZyIsICJ0cmltIiwgImZpbHRlciIsICJoYXMiLCAicHJvY2VzcyIsICJwYWdlQ29udGVudCIsICJzaGlmdCIsICIkZGlmZlRhYmxlIiwgImJhc2VQYWdlTmFtZSIsICJ0YXJnZXRUaXRsZSIsICJuZXdQYWdlQ29udGVudCIsICJwYXJzZSIsICJ1c2VsYW5nIiwgInRoZW4iLCAiY29udGVudCIsICJpbm5lckhUTUwiLCAidGV4dCIsICJfcGFyYW1zIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJ0aXRsZXMiLCAicHJvcCIsICJydmRpZmZ0b3RleHQiLCAicG9zdCIsICJlcnJvciIsICJkYXRhIiwgIiR0b29sIiwgImhyZWYiLCAidXRpbCIsICJnZXRVcmwiLCAicGFnZSIsICJwYWdlcyIsICJtaXNzaW5nIiwgIiRzdWJtaXQiLCAicmVtb3ZlIiwgImNyZWF0ZSIsICJzdHJpbmciLCAiY29kZVBvaW50QXQiLCAiZGlmZiIsICJyZXZpc2lvbnMiLCAiYm9keSIsICJlZGl0IiwgIm5vY3JlYXRlIiwgInByZXBlbmQiLCAiYWx3YXlzIiwgInBhcmFtcyIsICJjdXJ0aW1lc3RhbXAiLCAicnZwcm9wIiwgImdldCIsICJfZGF0YSRxdWVyeSIsICJEZWZlcnJlZCIsICJyZWplY3QiLCAiaW52YWxpZCIsICJnZXRCb2R5IiwgIiRib2R5IiwgImNvbmZpZyIsICJ0ZXN0IiwgInBvcnRsZXRJZCIsICJlbGVtZW50IiwgImFkZFBvcnRsZXRMaW5rIiwgImFkZEV2ZW50TGlzdGVuZXIiXQp9Cg==

2024年6月2日 (日) 16:37的最新版本

/**
 * SPDX-License-Identifier: CC-BY-SA-4.0
 * _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
 *
 * @base {@link https://zh.wikipedia.org/wiki/User:Xiplus/js/TranslateVariants}
 * @source {@link https://github.com/TopRealm/YsArchives-Gadgets/tree/master/src/TranslateVariants}
 * @license CC-BY-SA-4.0 {@link https://youshou.wiki/wiki/H:CC-BY-SA-4.0}
 */
/**
 * +------------------------------------------------------------+
 * |            === WARNING: GLOBAL GADGET FILE ===             |
 * +------------------------------------------------------------+
 * |       All changes should be made in the repository,        |
 * |                otherwise they will be lost.                |
 * +------------------------------------------------------------+
 * |        Changes to this page may affect many users.         |
 * | Please discuss changes by opening an issue before editing. |
 * +------------------------------------------------------------+
 */
/* <nowiki> */

(() => {

"use strict";

// dist/TranslateVariants/TranslateVariants.js
function _createForOfIteratorHelper(r, e) {
  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (!t) {
    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
      t && (r = t);
      var n = 0, F = function() {
      };
      return { s: F, n: function() {
        return n >= r.length ? { done: true } : { done: false, value: r[n++] };
      }, e: function(r2) {
        throw r2;
      }, f: F };
    }
    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  var o, a = true, u = false;
  return { s: function() {
    t = t.call(r);
  }, n: function() {
    var r2 = t.next();
    return a = r2.done, r2;
  }, e: function(r2) {
    u = true, o = r2;
  }, f: function() {
    try {
      a || null == t.return || t.return();
    } finally {
      if (u) throw o;
    }
  } };
}
function _unsupportedIterableToArray(r, a) {
  if (r) {
    if ("string" == typeof r) return _arrayLikeToArray(r, a);
    var t = {}.toString.call(r).slice(8, -1);
    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
  }
}
function _arrayLikeToArray(r, a) {
  (null == a || a > r.length) && (a = r.length);
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
  return n;
}
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step;
    try {
      for (_iterator.s(); !(_step = _iterator.n()).done; ) {
        let key = _step.value;
        if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
          get: () => from[key],
          enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
        });
      }
    } catch (err) {
      _iterator.e(err);
    } finally {
      _iterator.f();
    }
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
    value: mod,
    enumerable: true
  }) : target,
  mod
));
//! src/TranslateVariants/TranslateVariants.ts
var import_ext_gadget3 = require("ext.gadget.Util");
//! src/TranslateVariants/options.json
var translateVariantsSummary = "自动转换变体自[[$1]]([[MediaWiki:Gadget-TranslateVariants.js|TranslateVariants]])";
var contentID = "TranslateVariants-content";
var version = "2.0";
//! src/TranslateVariants/TranslateVariants.module.less
var noChanges = "TranslateVariants-module__noChanges_Yvm-lW";
var publishChanges = "TranslateVariants-module__publishChanges_Yvm-lW";
var submitAll = "TranslateVariants-module__submitAll_Yvm-lW";
var warning = "TranslateVariants-module__warning_Yvm-lW";
//! src/TranslateVariants/modules/translateVariants.tsx
var import_ext_gadget2 = __toESM(require("ext.gadget.React"), 1);
//! src/TranslateVariants/modules/api.ts
var import_ext_gadget = require("ext.gadget.Util");
var api = (0, import_ext_gadget.initMwApi)("TranslateVariants/".concat(version));
//! src/TranslateVariants/modules/translateVariants.tsx
var langs = /* @__PURE__ */ new Set(["zh", "zh-hans", "zh-cn", "zh-my", "zh-sg", "zh-hant", "zh-hk", "zh-mo", "zh-tw"]);
var nameOfLangs = {
  zh: "原始",
  "zh-hans": "简体",
  "zh-cn": "中国大陆简体",
  "zh-my": "马来西亚简体",
  "zh-sg": "新加坡简体",
  "zh-hant": "繁體",
  "zh-hk": "中國香港繁體",
  "zh-mo": "中國澳門繁體",
  "zh-tw": "中國臺灣繁體"
};
var translateVariants = (wgPageName) => {
  var _prompt;
  const summary = translateVariantsSummary.replace(/\$1/g, wgPageName);
  const $wrapper = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
    id: "TranslateVariants"
  })).prependTo("#bodyContent");
  const $submitAll = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("button", {
    className: ["cdx-button", "cdx-button--action-progressive", "cdx-button--weight-primary"]
  }, window.wgULS("发布所有更改", "發佈所有變更")));
  $submitAll.on("click", () => {
    const $buttons = $wrapper.find(".".concat(publishChanges));
    if (!$buttons.length) {
      void mw.notify(window.wgULS("没有任何可以发布的更改", "沒有任何變更可發佈"), {
        tag: "TranslateVariants",
        type: "error"
      });
      return;
    }
    if (!confirm(window.wgULS("发布$1个更改?", "發佈$1個變更?").replace("$1", "".concat($buttons.length)))) {
      void mw.notify(window.wgULS("已取消发布", "已取消發佈"), {
        tag: "TranslateVariants",
        type: "warn"
      });
      return;
    }
    var _iterator2 = _createForOfIteratorHelper($buttons), _step2;
    try {
      for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
        const button = _step2.value;
        $(button).trigger("click");
      }
    } catch (err) {
      _iterator2.e(err);
    } finally {
      _iterator2.f();
    }
  });
  $wrapper.append($(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
    className: submitAll
  })).append($submitAll), /* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
    className: warning
  }, window.wgULS("提醒:TranslateVariants工具使用IT及MediaWiki转换组进行自动转换,请确认转换结果是否正确!", "提醒:TranslateVariants工具使用IT及MediaWiki轉換組進行自動轉換,請確認轉換結果是否正確!")));
  const defaultLangs = [...langs];
  let runLangs = (_prompt = prompt(window.wgULS("转换以下语言(以逗号隔开):", "轉換以下語言(以逗號隔開):"), defaultLangs.join(","))) === null || _prompt === void 0 ? void 0 : _prompt.split(",");
  if (runLangs === null) {
    runLangs = defaultLangs;
  }
  const langQueue = runLangs.map((lang) => lang.trim()).filter((lang) => langs.has(lang));
  const process = (pageContent) => {
    if (!langQueue.length) {
      return;
    }
    const lang = langQueue.shift();
    const $diffTable = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
      id: "TranslateVariants-diff-".concat(lang)
    }));
    $wrapper.append($diffTable, /* @__PURE__ */ import_ext_gadget2.default.createElement("hr", null));
    const basePageName = wgPageName.replace(/\/zh$/, "");
    const targetTitle = lang === "zh" ? basePageName : "".concat(basePageName, "/").concat(lang);
    let newPageContent = "";
    void api.parse('{{NoteTA|G1=IT|G2=MediaWiki}}<div id="'.concat(contentID, '">').concat(pageContent, "</div>"), {
      uselang: lang
    }).then((content) => {
      newPageContent = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", {
        innerHTML: content
      })).find("#".concat(contentID)).text();
      const _params = {
        action: "query",
        format: "json",
        formatversion: "2",
        titles: targetTitle,
        prop: "revisions",
        rvdifftotext: newPageContent
      };
      return api.post(_params);
    }, (error) => {
      void mw.notify(window.wgULS("解析$1时发生错误:", "解析$1時發生錯誤:").replace("$1", lang) + error, {
        tag: "TranslateVariants",
        type: "error"
      });
      return null;
    }).then((data) => {
      if (data === null) {
        return;
      }
      const $tool = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("div", null, /* @__PURE__ */ import_ext_gadget2.default.createElement("a", {
        href: mw.util.getUrl(targetTitle)
      }, lang, "(", nameOfLangs[lang], ")"), "(", /* @__PURE__ */ import_ext_gadget2.default.createElement("a", {
        href: mw.util.getUrl(targetTitle, {
          action: "edit"
        })
      }, window.wgULS("编", "編")), ")"));
      $diffTable.append($tool);
      const [page] = data["query"].pages;
      if (page.missing) {
        const $submit = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("button", {
          className: [publishChanges, "cdx-button"]
        }, window.wgULS("发布页面", "發佈頁面")));
        $submit.on("click", () => {
          $submit.remove();
          api.create(targetTitle, {
            summary
          }, newPageContent).then(() => {
            void mw.notify(window.wgULS("已编辑 ", "已編輯 ") + targetTitle, {
              tag: "TranslateVariants",
              type: "success"
            });
          }, (error) => {
            void mw.notify(window.wgULS("编辑", "編輯 ") + targetTitle + window.wgULS(" 发生错误:", " 發生錯誤:") + error, {
              tag: "TranslateVariants",
              type: "error"
            });
          });
        });
        $tool.append($submit);
        $diffTable.append(/* @__PURE__ */ import_ext_gadget2.default.createElement("pre", {
          innerHTML: newPageContent.replace(/[&<>]/gim, (string) => "&#".concat(string.codePointAt(0), ";"))
        }));
        return;
      }
      const diff = page.revisions[0].diff.body;
      if (diff === "") {
        $tool.append(/* @__PURE__ */ import_ext_gadget2.default.createElement("span", {
          className: noChanges
        }, window.wgULS("无更改", "無變更")));
      } else {
        const $submit = $(/* @__PURE__ */ import_ext_gadget2.default.createElement("button", {
          className: [publishChanges, "cdx-button"]
        }, window.wgULS("发布更改", "發佈變更")));
        $submit.on("click", () => {
          $submit.remove();
          api.edit(targetTitle, () => ({
            summary,
            text: newPageContent,
            nocreate: false
          })).then(() => {
            void mw.notify(window.wgULS("已编辑", "已編輯 ") + targetTitle, {
              tag: "TranslateVariants",
              type: "success"
            });
          }, (error) => {
            void mw.notify(window.wgULS("编辑$1发生错误:", "編輯$1發生錯誤:").replace("$1", targetTitle) + error, {
              tag: "TranslateVariants",
              type: "error"
            });
          });
        });
        $tool.append($submit);
        $diffTable.append($(/* @__PURE__ */ import_ext_gadget2.default.createElement("table", {
          className: "diff",
          innerHTML: diff
        })).prepend(/* @__PURE__ */ import_ext_gadget2.default.createElement("colgroup", null, /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
          className: "diff-marker"
        }), /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
          className: "diff-content"
        }), /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
          className: "diff-marker"
        }), /* @__PURE__ */ import_ext_gadget2.default.createElement("col", {
          className: "diff-content"
        }))));
      }
    }, (error) => {
      void mw.notify(window.wgULS("获取$1差异时发生错误:", "取得$1差異時發生錯誤:").replace("$1", lang) + error, {
        tag: "TranslateVariants",
        type: "error"
      });
    }).always(() => {
      process(pageContent);
    });
  };
  const params = {
    action: "query",
    format: "json",
    formatversion: "2",
    prop: "revisions",
    titles: wgPageName,
    curtimestamp: true,
    rvprop: ["content", "timestamp"]
  };
  void api.get(params).then((data) => {
    var _data$query;
    if (!((_data$query = data["query"]) !== null && _data$query !== void 0 && _data$query.pages)) {
      return $.Deferred().reject("unknown");
    }
    const [page] = data["query"].pages;
    if (page.invalid) {
      return $.Deferred().reject("invalidtitle");
    }
    if (page.missing) {
      return $.Deferred().reject("nocreate-missing");
    }
    const [{
      content
    }] = page.revisions;
    return content;
  }).then((content) => {
    let pageContent = content;
    pageContent = pageContent.replace(/[\s#&'*:<>[\]_{|}]/gim, (string) => "&#".concat(string.codePointAt(0), ";"));
    pageContent = pageContent.replace(/(&#91;&#91;)((?:(?!&#124;)(?!&#93;).)+?)(&#124;(?:(?!&#93;).)+?&#93;&#93;)/g, "$1-{$2}-$3");
    pageContent = pageContent.replace(/-&#123;(.+?)&#125;-/g, (string) => string.replace("-&#123;", "-{").replace("-&#123;", "-{").replace("&#125;-", "}-").replace(/&#124;/g, "|").replace(/&#32;/g, " ").replace(/&#61;/g, "=").replace(/&#62;/g, ">").replace(/&#58;/g, ":"));
    return pageContent;
  }).then((pageContent) => {
    process(pageContent);
  });
};
//! src/TranslateVariants/TranslateVariants.ts
void (0, import_ext_gadget3.getBody)().then(($body) => {
  const {
    wgPageName
  } = mw.config.get();
  if (!/^MediaWiki:[^/]+(\/zh)?$/.test(wgPageName)) {
    return;
  }
  const portletId = $body.find("#p-cactions").length ? "p-cactions" : "p-tb";
  const element = mw.util.addPortletLink(portletId, "#", window.wgULS("转换变体", "轉換變體"));
  element === null || element === void 0 || element.addEventListener("click", () => {
    element.remove();
    translateVariants(wgPageName);
  });
});

})();

/* </nowiki> */

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLnRzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9vcHRpb25zLmpzb24iLCAic3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzIiwgInNyYy9UcmFuc2xhdGVWYXJpYW50cy9tb2R1bGVzL3RyYW5zbGF0ZVZhcmlhbnRzLnRzeCIsICJzcmMvVHJhbnNsYXRlVmFyaWFudHMvbW9kdWxlcy9hcGkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Z2V0Qm9keX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcbmltcG9ydCB7dHJhbnNsYXRlVmFyaWFudHN9IGZyb20gJy4vbW9kdWxlcy90cmFuc2xhdGVWYXJpYW50cyc7XG5cbnZvaWQgZ2V0Qm9keSgpLnRoZW4oKCRib2R5OiBKUXVlcnk8SFRNTEJvZHlFbGVtZW50Pik6IHZvaWQgPT4ge1xuXHRjb25zdCB7d2dQYWdlTmFtZX0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdGlmICghL15NZWRpYVdpa2k6W14vXSsoXFwvemgpPyQvLnRlc3Qod2dQYWdlTmFtZSkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBwb3J0bGV0SWQ6ICdwLWNhY3Rpb25zJyB8ICdwLXRiJyA9ICRib2R5LmZpbmQoJyNwLWNhY3Rpb25zJykubGVuZ3RoID8gJ3AtY2FjdGlvbnMnIDogJ3AtdGInO1xuXHRjb25zdCBlbGVtZW50OiBIVE1MTElFbGVtZW50IHwgbnVsbCA9IG13LnV0aWwuYWRkUG9ydGxldExpbmsocG9ydGxldElkLCAnIycsIHdpbmRvdy53Z1VMUygn6L2s5o2i5Y+Y5L2TJywgJ+i9ieaPm+iuiumrlCcpKTtcblxuXHRlbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHRlbGVtZW50LnJlbW92ZSgpO1xuXHRcdHRyYW5zbGF0ZVZhcmlhbnRzKHdnUGFnZU5hbWUpO1xuXHR9KTtcbn0pO1xuIiwgIntcblx0XCJ0cmFuc2xhdGVWYXJpYW50c1N1bW1hcnlcIjogXCLoh6rliqjovazmjaLlj5jkvZPoh6pbWyQxXV3vvIhbW01lZGlhV2lraTpHYWRnZXQtVHJhbnNsYXRlVmFyaWFudHMuanN8VHJhbnNsYXRlVmFyaWFudHNdXe+8iVwiLFxuXHRcImNvbnRlbnRJRFwiOiBcIlRyYW5zbGF0ZVZhcmlhbnRzLWNvbnRlbnRcIixcblx0XCJ2ZXJzaW9uXCI6IFwiMi4wXCJcbn1cbiIsICJpbXBvcnQgXCJlc2J1aWxkLWNzcy1tb2R1bGVzLXBsdWdpbi1ucy1jc3M6c3JjL1RyYW5zbGF0ZVZhcmlhbnRzL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzXCI7XG5leHBvcnQgY29uc3Qgbm9DaGFuZ2VzID0gXCJUcmFuc2xhdGVWYXJpYW50cy1tb2R1bGVfX25vQ2hhbmdlc19Zdm0tbFdcIjtcbmV4cG9ydCBjb25zdCBwdWJsaXNoQ2hhbmdlcyA9IFwiVHJhbnNsYXRlVmFyaWFudHMtbW9kdWxlX19wdWJsaXNoQ2hhbmdlc19Zdm0tbFdcIjtcbmV4cG9ydCBjb25zdCBzdWJtaXRBbGwgPSBcIlRyYW5zbGF0ZVZhcmlhbnRzLW1vZHVsZV9fc3VibWl0QWxsX1l2bS1sV1wiO1xuZXhwb3J0IGNvbnN0IHdhcm5pbmcgPSBcIlRyYW5zbGF0ZVZhcmlhbnRzLW1vZHVsZV9fd2FybmluZ19Zdm0tbFdcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIm5vQ2hhbmdlc1wiOiBub0NoYW5nZXMsXG4gIFwicHVibGlzaENoYW5nZXNcIjogcHVibGlzaENoYW5nZXMsXG4gIFwic3VibWl0QWxsXCI6IHN1Ym1pdEFsbCxcbiAgXCJ3YXJuaW5nXCI6IHdhcm5pbmdcbn07XG4gICAgICAiLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtub0NoYW5nZXMsIHB1Ymxpc2hDaGFuZ2VzLCBzdWJtaXRBbGwsIHdhcm5pbmd9IGZyb20gJy4uL1RyYW5zbGF0ZVZhcmlhbnRzLm1vZHVsZS5sZXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdleHQuZ2FkZ2V0LlJlYWN0JztcbmltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5cbnR5cGUgTGFuZ3MgPSAnemgnIHwgJ3poLWhhbnMnIHwgJ3poLWNuJyB8ICd6aC1teScgfCAnemgtc2cnIHwgJ3poLWhhbnQnIHwgJ3poLWhrJyB8ICd6aC1tbycgfCAnemgtdHcnO1xuY29uc3QgbGFuZ3M6IFNldDxMYW5ncz4gPSBuZXcgU2V0KFsnemgnLCAnemgtaGFucycsICd6aC1jbicsICd6aC1teScsICd6aC1zZycsICd6aC1oYW50JywgJ3poLWhrJywgJ3poLW1vJywgJ3poLXR3J10pO1xuY29uc3QgbmFtZU9mTGFuZ3MgPSB7XG5cdHpoOiAn5Y6f5aeLJyxcblx0J3poLWhhbnMnOiAn566A5L2TJyxcblx0J3poLWNuJzogJ+S4reWbveWkp+mZhueugOS9kycsXG5cdCd6aC1teSc6ICfpqazmnaXopb/kuprnroDkvZMnLFxuXHQnemgtc2cnOiAn5paw5Yqg5Z2h566A5L2TJyxcblx0J3poLWhhbnQnOiAn57mB6auUJyxcblx0J3poLWhrJzogJ+S4reWci+mmmea4r+e5gemrlCcsXG5cdCd6aC1tbyc6ICfkuK3lnIvmvrPploDnuYHpq5QnLFxuXHQnemgtdHcnOiAn5Lit5ZyL6Ie654Gj57mB6auUJyxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxMYW5ncywgc3RyaW5nPjtcblxuY29uc3QgdHJhbnNsYXRlVmFyaWFudHMgPSAod2dQYWdlTmFtZTogc3RyaW5nKTogdm9pZCA9PiB7XG5cdGNvbnN0IHN1bW1hcnk6IHN0cmluZyA9IE9QVElPTlMudHJhbnNsYXRlVmFyaWFudHNTdW1tYXJ5LnJlcGxhY2UoL1xcJDEvZywgd2dQYWdlTmFtZSk7XG5cblx0Y29uc3QgJHdyYXBwZXI6IEpRdWVyeSA9ICgkKDxkaXYgaWQ9XCJUcmFuc2xhdGVWYXJpYW50c1wiIC8+KSBhcyBKUXVlcnkpLnByZXBlbmRUbygnI2JvZHlDb250ZW50Jyk7XG5cblx0Y29uc3QgJHN1Ym1pdEFsbDogSlF1ZXJ5ID0gJChcblx0XHQ8YnV0dG9uIGNsYXNzTmFtZT17WydjZHgtYnV0dG9uJywgJ2NkeC1idXR0b24tLWFjdGlvbi1wcm9ncmVzc2l2ZScsICdjZHgtYnV0dG9uLS13ZWlnaHQtcHJpbWFyeSddfT5cblx0XHRcdHt3aW5kb3cud2dVTFMoJ+WPkeW4g+aJgOacieabtOaUuScsICfnmbzkvYjmiYDmnInorormm7QnKX1cblx0XHQ8L2J1dHRvbj5cblx0KSBhcyBKUXVlcnk7XG5cdCRzdWJtaXRBbGwub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdGNvbnN0ICRidXR0b25zOiBKUXVlcnkgPSAkd3JhcHBlci5maW5kKGAuJHtwdWJsaXNoQ2hhbmdlc31gKTtcblx0XHRpZiAoISRidXR0b25zLmxlbmd0aCkge1xuXHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCfmsqHmnInku7vkvZXlj6/ku6Xlj5HluIPnmoTmm7TmlLknLCAn5rKS5pyJ5Lu75L2V6K6K5pu05Y+v55m85L2IJyksIHtcblx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFjb25maXJtKHdpbmRvdy53Z1VMUygn5Y+R5biDJDHkuKrmm7TmlLnvvJ8nLCAn55m85L2IJDHlgIvorormm7TvvJ8nKS5yZXBsYWNlKCckMScsIGAkeyRidXR0b25zLmxlbmd0aH1gKSkpIHtcblx0XHRcdHZvaWQgbXcubm90aWZ5KHdpbmRvdy53Z1VMUygn5bey5Y+W5raI5Y+R5biDJywgJ+W3suWPlua2iOeZvOS9iCcpLCB7dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLCB0eXBlOiAnd2Fybid9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGJ1dHRvbiBvZiAkYnV0dG9ucykge1xuXHRcdFx0JChidXR0b24pLnRyaWdnZXIoJ2NsaWNrJyk7XG5cdFx0fVxuXHR9KTtcblxuXHQkd3JhcHBlci5hcHBlbmQoXG5cdFx0JCg8ZGl2IGNsYXNzTmFtZT17c3VibWl0QWxsfSAvPikuYXBwZW5kKCRzdWJtaXRBbGwpLFxuXHRcdDxkaXYgY2xhc3NOYW1lPXt3YXJuaW5nfT5cblx0XHRcdHt3aW5kb3cud2dVTFMoXG5cdFx0XHRcdCfmj5DphpLvvJpUcmFuc2xhdGVWYXJpYW50c+W3peWFt+S9v+eUqElU5Y+KTWVkaWFXaWtp6L2s5o2i57uE6L+b6KGM6Ieq5Yqo6L2s5o2i77yM6K+356Gu6K6k6L2s5o2i57uT5p6c5piv5ZCm5q2j56Gu77yBJyxcblx0XHRcdFx0J+aPkOmGku+8mlRyYW5zbGF0ZVZhcmlhbnRz5bel5YW35L2/55SoSVTlj4pNZWRpYVdpa2novYnmj5vntYTpgLLooYzoh6rli5XovYnmj5vvvIzoq4vnorroqo3ovYnmj5vntZDmnpzmmK/lkKbmraPnorrvvIEnXG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpO1xuXG5cdGNvbnN0IGRlZmF1bHRMYW5nczogTGFuZ3NbXSA9IFsuLi5sYW5nc107XG5cblx0bGV0IHJ1bkxhbmdzID0gcHJvbXB0KFxuXHRcdHdpbmRvdy53Z1VMUygn6L2s5o2i5Lul5LiL6K+t6KiA77yI5Lul6YCX5Y+36ZqU5byA77yJ77yaJywgJ+i9ieaPm+S7peS4i+iqnuiogO+8iOS7pemAl+iZn+malOmWi++8ie+8micpLFxuXHRcdGRlZmF1bHRMYW5ncy5qb2luKCcsJylcblx0KT8uc3BsaXQoJywnKSBhcyBMYW5nc1tdIHwgbnVsbDtcblx0aWYgKHJ1bkxhbmdzID09PSBudWxsKSB7XG5cdFx0cnVuTGFuZ3MgPSBkZWZhdWx0TGFuZ3M7XG5cdH1cblxuXHRjb25zdCBsYW5nUXVldWU6IExhbmdzW10gPSBydW5MYW5nc1xuXHRcdC5tYXAoKGxhbmc6IExhbmdzKTogTGFuZ3MgPT4gbGFuZy50cmltKCkgYXMgTGFuZ3MpXG5cdFx0LmZpbHRlcigobGFuZzogTGFuZ3MpOiBib29sZWFuID0+IGxhbmdzLmhhcyhsYW5nKSk7XG5cblx0Y29uc3QgcHJvY2VzcyA9IChwYWdlQ29udGVudDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0aWYgKCFsYW5nUXVldWUubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFuZyA9IGxhbmdRdWV1ZS5zaGlmdCgpIGFzIExhbmdzO1xuXG5cdFx0Y29uc3QgJGRpZmZUYWJsZTogSlF1ZXJ5ID0gJCg8ZGl2IGlkPXtgVHJhbnNsYXRlVmFyaWFudHMtZGlmZi0ke2xhbmd9YH0gLz4pIGFzIEpRdWVyeTtcblx0XHQkd3JhcHBlci5hcHBlbmQoJGRpZmZUYWJsZSwgPGhyIC8+KTtcblxuXHRcdGNvbnN0IGJhc2VQYWdlTmFtZTogc3RyaW5nID0gd2dQYWdlTmFtZS5yZXBsYWNlKC9cXC96aCQvLCAnJyk7XG5cdFx0Y29uc3QgdGFyZ2V0VGl0bGU6IHN0cmluZyA9IGxhbmcgPT09ICd6aCcgPyBiYXNlUGFnZU5hbWUgOiBgJHtiYXNlUGFnZU5hbWV9LyR7bGFuZ31gO1xuXG5cdFx0bGV0IG5ld1BhZ2VDb250ZW50OiBzdHJpbmcgPSAnJztcblx0XHR2b2lkIGFwaVxuXHRcdFx0LnBhcnNlKGB7e05vdGVUQXxHMT1JVHxHMj1NZWRpYVdpa2l9fTxkaXYgaWQ9XCIke09QVElPTlMuY29udGVudElEfVwiPiR7cGFnZUNvbnRlbnR9PC9kaXY+YCwge1xuXHRcdFx0XHR1c2VsYW5nOiBsYW5nLFxuXHRcdFx0fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHQoY29udGVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0bmV3UGFnZUNvbnRlbnQgPSAkKDxkaXYgaW5uZXJIVE1MPXtjb250ZW50fSAvPilcblx0XHRcdFx0XHRcdC5maW5kKGAjJHtPUFRJT05TLmNvbnRlbnRJRH1gKVxuXHRcdFx0XHRcdFx0LnRleHQoKTtcblxuXHRcdFx0XHRcdGNvbnN0IF9wYXJhbXM6IEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiAncXVlcnknLFxuXHRcdFx0XHRcdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0XHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdFx0XHR0aXRsZXM6IHRhcmdldFRpdGxlLFxuXHRcdFx0XHRcdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0XHRcdFx0XHRydmRpZmZ0b3RleHQ6IG5ld1BhZ2VDb250ZW50LFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRyZXR1cm4gYXBpLnBvc3QoX3BhcmFtcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdChlcnJvcik6IG51bGwgPT4ge1xuXHRcdFx0XHRcdHZvaWQgbXcubm90aWZ5KFxuXHRcdFx0XHRcdFx0d2luZG93LndnVUxTKCfop6PmnpAkMeaXtuWPkeeUn+mUmeivr++8micsICfop6PmnpAkMeaZgueZvOeUn+mMr+iqpO+8micpLnJlcGxhY2UoJyQxJywgbGFuZykgKyBlcnJvcixcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiAnZXJyb3InLFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGRhdGEgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCAkdG9vbCA9ICQoXG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8YSBocmVmPXttdy51dGlsLmdldFVybCh0YXJnZXRUaXRsZSl9PlxuXHRcdFx0XHRcdFx0XHRcdHtsYW5nfe+8iHtuYW1lT2ZMYW5nc1tsYW5nXX3vvIlcblx0XHRcdFx0XHRcdFx0PC9hPlxuXHRcdFx0XHRcdFx0XHTvvIg8YSBocmVmPXttdy51dGlsLmdldFVybCh0YXJnZXRUaXRsZSwge2FjdGlvbjogJ2VkaXQnfSl9Pnt3aW5kb3cud2dVTFMoJ+e8licsICfnt6gnKX08L2E+77yJXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQpIGFzIEpRdWVyeTtcblxuXHRcdFx0XHRcdCRkaWZmVGFibGUuYXBwZW5kKCR0b29sKTtcblxuXHRcdFx0XHRcdGNvbnN0IFtwYWdlXSA9IGRhdGFbJ3F1ZXJ5J10ucGFnZXM7XG5cdFx0XHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHRcdFx0Y29uc3QgJHN1Ym1pdCA9ICQoXG5cdFx0XHRcdFx0XHRcdDxidXR0b24gY2xhc3NOYW1lPXtbcHVibGlzaENoYW5nZXMsICdjZHgtYnV0dG9uJ119PlxuXHRcdFx0XHRcdFx0XHRcdHt3aW5kb3cud2dVTFMoJ+WPkeW4g+mhtemdoicsICfnmbzkvYjpoIHpnaInKX1cblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHQpIGFzIEpRdWVyeTtcblx0XHRcdFx0XHRcdCRzdWJtaXQub24oJ2NsaWNrJywgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHQkc3VibWl0LnJlbW92ZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGFwaS5jcmVhdGUoXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGl0bGUsXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0c3VtbWFyeSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdG5ld1BhZ2VDb250ZW50XG5cdFx0XHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdFx0XHQoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeSh3aW5kb3cud2dVTFMoJ+W3sue8lui+kSAnLCAn5bey57eo6LyvICcpICsgdGFyZ2V0VGl0bGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnc3VjY2VzcycsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdChlcnJvcik6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn57yW6L6RJywgJ+e3qOi8ryAnKSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0VGl0bGUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygnIOWPkeeUn+mUmeivr++8micsICcg55m855Sf6Yyv6Kqk77yaJykgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdCR0b29sLmFwcGVuZCgkc3VibWl0KTtcblx0XHRcdFx0XHRcdCRkaWZmVGFibGUuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHQ8cHJlXG5cdFx0XHRcdFx0XHRcdFx0aW5uZXJIVE1MPXtuZXdQYWdlQ29udGVudC5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRcdFx0L1smPD5dL2dpbSxcblx0XHRcdFx0XHRcdFx0XHRcdChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PiBgJiMke3N0cmluZy5jb2RlUG9pbnRBdCgwKX07YFxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZGlmZjogc3RyaW5nID0gcGFnZS5yZXZpc2lvbnNbMF0uZGlmZi5ib2R5O1xuXHRcdFx0XHRcdGlmIChkaWZmID09PSAnJykge1xuXHRcdFx0XHRcdFx0JHRvb2wuYXBwZW5kKDxzcGFuIGNsYXNzTmFtZT17bm9DaGFuZ2VzfT57d2luZG93LndnVUxTKCfml6Dmm7TmlLknLCAn54Sh6K6K5pu0Jyl9PC9zcGFuPik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0ICRzdWJtaXQgPSAkKFxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIGNsYXNzTmFtZT17W3B1Ymxpc2hDaGFuZ2VzLCAnY2R4LWJ1dHRvbiddfT5cblx0XHRcdFx0XHRcdFx0XHR7d2luZG93LndnVUxTKCflj5HluIPmm7TmlLknLCAn55m85L2I6K6K5pu0Jyl9XG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0KSBhcyBKUXVlcnk7XG5cdFx0XHRcdFx0XHQkc3VibWl0Lm9uKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0JHN1Ym1pdC5yZW1vdmUoKTtcblxuXHRcdFx0XHRcdFx0XHRhcGkuZWRpdCh0YXJnZXRUaXRsZSwgKCkgPT4gKHtcblx0XHRcdFx0XHRcdFx0XHRzdW1tYXJ5LFxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IG5ld1BhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdG5vY3JlYXRlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0fSkpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdFx0KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkod2luZG93LndnVUxTKCflt7LnvJbovpEnLCAn5bey57eo6LyvICcpICsgdGFyZ2V0VGl0bGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiAnc3VjY2VzcycsXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dm9pZCBtdy5ub3RpZnkoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvd1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC53Z1VMUygn57yW6L6RJDHlj5HnlJ/plJnor6/vvJonLCAn57eo6LyvJDHnmbznlJ/pjK/oqqTvvJonKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCckMScsIHRhcmdldFRpdGxlKSArIGVycm9yLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFnOiAnVHJhbnNsYXRlVmFyaWFudHMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdlcnJvcicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdCR0b29sLmFwcGVuZCgkc3VibWl0KTtcblx0XHRcdFx0XHRcdCRkaWZmVGFibGUuYXBwZW5kKFxuXHRcdFx0XHRcdFx0XHQkKDx0YWJsZSBjbGFzc05hbWU9XCJkaWZmXCIgaW5uZXJIVE1MPXtkaWZmfSAvPikucHJlcGVuZChcblx0XHRcdFx0XHRcdFx0XHQ8Y29sZ3JvdXA+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Y29sIGNsYXNzTmFtZT1cImRpZmYtbWFya2VyXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxjb2wgY2xhc3NOYW1lPVwiZGlmZi1jb250ZW50XCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxjb2wgY2xhc3NOYW1lPVwiZGlmZi1tYXJrZXJcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGNvbCBjbGFzc05hbWU9XCJkaWZmLWNvbnRlbnRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvY29sZ3JvdXA+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQoZXJyb3IpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR2b2lkIG13Lm5vdGlmeShcblx0XHRcdFx0XHRcdHdpbmRvdy53Z1VMUygn6I635Y+WJDHlt67lvILml7blj5HnlJ/plJnor6/vvJonLCAn5Y+W5b6XJDHlt67nlbDmmYLnmbznlJ/pjK/oqqTvvJonKS5yZXBsYWNlKCckMScsIGxhbmcpICsgZXJyb3IsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhZzogJ1RyYW5zbGF0ZVZhcmlhbnRzJyxcblx0XHRcdFx0XHRcdFx0dHlwZTogJ2Vycm9yJyxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuYWx3YXlzKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0cHJvY2VzcyhwYWdlQ29udGVudCk7XG5cdFx0XHR9KTtcblx0fTtcblxuXHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zID0ge1xuXHRcdGFjdGlvbjogJ3F1ZXJ5Jyxcblx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0cHJvcDogJ3JldmlzaW9ucycsXG5cdFx0dGl0bGVzOiB3Z1BhZ2VOYW1lLFxuXHRcdGN1cnRpbWVzdGFtcDogdHJ1ZSxcblx0XHRydnByb3A6IFsnY29udGVudCcsICd0aW1lc3RhbXAnXSxcblx0fTtcblxuXHR2b2lkIGFwaVxuXHRcdC5nZXQocGFyYW1zKVxuXHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRpZiAoIWRhdGFbJ3F1ZXJ5J10/LnBhZ2VzKSB7XG5cdFx0XHRcdHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0KCd1bmtub3duJyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IFtwYWdlXSA9IGRhdGFbJ3F1ZXJ5J10ucGFnZXM7XG5cblx0XHRcdGlmIChwYWdlLmludmFsaWQpIHtcblx0XHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QoJ2ludmFsaWR0aXRsZScpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhZ2UubWlzc2luZykge1xuXHRcdFx0XHRyZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdCgnbm9jcmVhdGUtbWlzc2luZycpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBbe2NvbnRlbnR9XSA9IHBhZ2UucmV2aXNpb25zO1xuXG5cdFx0XHRyZXR1cm4gY29udGVudCBhcyBzdHJpbmc7XG5cdFx0fSlcblx0XHQudGhlbigoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdGxldCBwYWdlQ29udGVudDogc3RyaW5nID0gY29udGVudDtcblxuXHRcdFx0cGFnZUNvbnRlbnQgPSBwYWdlQ29udGVudC5yZXBsYWNlKFxuXHRcdFx0XHQvW1xccyMmJyo6PD5bXFxdX3t8fV0vZ2ltLFxuXHRcdFx0XHQoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCYjJHtzdHJpbmcuY29kZVBvaW50QXQoMCl9O2Bcblx0XHRcdCk7XG5cdFx0XHRwYWdlQ29udGVudCA9IHBhZ2VDb250ZW50LnJlcGxhY2UoXG5cdFx0XHRcdC8oJiM5MTsmIzkxOykoKD86KD8hJiMxMjQ7KSg/ISYjOTM7KS4pKz8pKCYjMTI0Oyg/Oig/ISYjOTM7KS4pKz8mIzkzOyYjOTM7KS9nLFxuXHRcdFx0XHQnJDEteyQyfS0kMydcblx0XHRcdCk7XG5cdFx0XHRwYWdlQ29udGVudCA9IHBhZ2VDb250ZW50LnJlcGxhY2UoLy0mIzEyMzsoLis/KSYjMTI1Oy0vZywgKHN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+XG5cdFx0XHRcdHN0cmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKCctJiMxMjM7JywgJy17Jylcblx0XHRcdFx0XHQucmVwbGFjZSgnLSYjMTIzOycsICcteycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoJyYjMTI1Oy0nLCAnfS0nKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzEyNDsvZywgJ3wnKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzMyOy9nLCAnICcpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjNjE7L2csICc9Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJiM2MjsvZywgJz4nKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mIzU4Oy9nLCAnOicpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm4gcGFnZUNvbnRlbnQ7XG5cdFx0fSlcblx0XHQudGhlbigocGFnZUNvbnRlbnQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0cHJvY2VzcyhwYWdlQ29udGVudCk7XG5cdFx0fSk7XG59O1xuXG5leHBvcnQge3RyYW5zbGF0ZVZhcmlhbnRzfTtcbiIsICJpbXBvcnQgKiBhcyBPUFRJT05TIGZyb20gJy4uL29wdGlvbnMuanNvbic7XG5pbXBvcnQge2luaXRNd0FwaX0gZnJvbSAnZXh0LmdhZGdldC5VdGlsJztcblxuY29uc3QgYXBpOiBtdy5BcGkgPSBpbml0TXdBcGkoYFRyYW5zbGF0ZVZhcmlhbnRzLyR7T1BUSU9OUy52ZXJzaW9ufWApO1xuXG5leHBvcnQge2FwaX07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEscUJBQXNCQyxRQUFBLGlCQUFBOztBQ0NyQixJQUFBQywyQkFBNEI7QUFDNUIsSUFBQUMsWUFBYTtBQUNiLElBQUFDLFVBQVc7O0FDRkwsSUFBTUMsWUFBWTtBQUNsQixJQUFNQyxpQkFBaUI7QUFDdkIsSUFBTUMsWUFBWTtBQUNsQixJQUFNQyxVQUFVOztBQ0Z2QixJQUFBQyxxQkFBa0JDLFFBQUFULFFBQUEsa0JBQUEsR0FBQSxDQUFBOztBQ0RsQixJQUFBVSxvQkFBd0JWLFFBQUEsaUJBQUE7QUFFeEIsSUFBTVcsT0FBQSxHQUFjRCxrQkFBQUUsV0FBQSxxQkFBQUMsT0FBdUNWLE9BQU8sQ0FBRTs7QURHcEUsSUFBTVcsUUFBb0Isb0JBQUlDLElBQUksQ0FBQyxNQUFNLFdBQVcsU0FBUyxTQUFTLFNBQVMsV0FBVyxTQUFTLFNBQVMsT0FBTyxDQUFDO0FBQ3BILElBQU1DLGNBQWM7RUFDbkJDLElBQUk7RUFDSixXQUFXO0VBQ1gsU0FBUztFQUNULFNBQVM7RUFDVCxTQUFTO0VBQ1QsV0FBVztFQUNYLFNBQVM7RUFDVCxTQUFTO0VBQ1QsU0FBUztBQUNWO0FBRUEsSUFBTUMsb0JBQXFCQyxnQkFBNkI7QUFBQSxNQUFBQztBQUN2RCxRQUFNQyxVQUEwQnBCLHlCQUF5QnFCLFFBQVEsUUFBUUgsVUFBVTtBQUVuRixRQUFNSSxXQUFvQkMsRUFBRWhCLG1DQUFBaUIsUUFBQUMsY0FBQyxPQUFBO0lBQUlDLElBQUc7RUFBQSxDQUFvQixDQUFFLEVBQWFDLFVBQVUsY0FBYztBQUUvRixRQUFNQyxhQUFxQkwsRUFDMUJoQixtQ0FBQWlCLFFBQUFDLGNBQUMsVUFBQTtJQUFPSSxXQUFXLENBQUMsY0FBYyxrQ0FBa0MsNEJBQTRCO0VBQUEsR0FDOUZDLE9BQU9DLE1BQU0sVUFBVSxRQUFRLENBQ2pDLENBQ0Q7QUFDQUgsYUFBV0ksR0FBRyxTQUFTLE1BQVk7QUFDbEMsVUFBTUMsV0FBbUJYLFNBQVNZLEtBQUEsSUFBQXRCLE9BQVNSLGNBQWMsQ0FBRTtBQUMzRCxRQUFJLENBQUM2QixTQUFTRSxRQUFRO0FBQ3JCLFdBQUtDLEdBQUdDLE9BQU9QLE9BQU9DLE1BQU0sZUFBZSxXQUFXLEdBQUc7UUFDeERPLEtBQUs7UUFDTEMsTUFBTTtNQUNQLENBQUM7QUFDRDtJQUNEO0FBRUEsUUFBSSxDQUFDQyxRQUFRVixPQUFPQyxNQUFNLFlBQVksVUFBVSxFQUFFVixRQUFRLE1BQUEsR0FBQVQsT0FBU3FCLFNBQVNFLE1BQU0sQ0FBRSxDQUFDLEdBQUc7QUFDdkYsV0FBS0MsR0FBR0MsT0FBT1AsT0FBT0MsTUFBTSxTQUFTLE9BQU8sR0FBRztRQUFDTyxLQUFLO1FBQXFCQyxNQUFNO01BQU0sQ0FBQztBQUN2RjtJQUNEO0FBQUEsUUFBQUUsYUFBQUMsMkJBRXFCVCxRQUFBLEdBQUFVO0FBQUEsUUFBQTtBQUFyQixXQUFBRixXQUFBRyxFQUFBLEdBQUEsRUFBQUQsU0FBQUYsV0FBQUksRUFBQSxHQUFBQyxRQUErQjtBQUFBLGNBQXBCQyxTQUFBSixPQUFBSztBQUNWekIsVUFBRXdCLE1BQU0sRUFBRUUsUUFBUSxPQUFPO01BQzFCO0lBQUEsU0FBQUMsS0FBQTtBQUFBVCxpQkFBQVUsRUFBQUQsR0FBQTtJQUFBLFVBQUE7QUFBQVQsaUJBQUFXLEVBQUE7SUFBQTtFQUNELENBQUM7QUFFRDlCLFdBQVMrQixPQUNSOUIsRUFBRWhCLG1DQUFBaUIsUUFBQUMsY0FBQyxPQUFBO0lBQUlJLFdBQVd4QjtFQUFBLENBQVcsQ0FBRSxFQUFFZ0QsT0FBT3pCLFVBQVUsR0FDbERyQixtQ0FBQWlCLFFBQUFDLGNBQUMsT0FBQTtJQUFJSSxXQUFXdkI7RUFBQSxHQUNkd0IsT0FBT0MsTUFDUCw4REFDQSw0REFDRCxDQUNELENBQ0Q7QUFFQSxRQUFNdUIsZUFBd0IsQ0FBQyxHQUFHekMsS0FBSztBQUV2QyxNQUFJMEMsWUFBQXBDLFVBQVdxQyxPQUNkMUIsT0FBT0MsTUFBTSxrQkFBa0IsZ0JBQWdCLEdBQy9DdUIsYUFBYUcsS0FBSyxHQUFHLENBQ3RCLE9BQUEsUUFBQXRDLFlBQUEsU0FBQSxTQUhlQSxRQUdadUMsTUFBTSxHQUFHO0FBQ1osTUFBSUgsYUFBYSxNQUFNO0FBQ3RCQSxlQUFXRDtFQUNaO0FBRUEsUUFBTUssWUFBcUJKLFNBQ3pCSyxJQUFLQyxVQUF1QkEsS0FBS0MsS0FBSyxDQUFVLEVBQ2hEQyxPQUFRRixVQUF5QmhELE1BQU1tRCxJQUFJSCxJQUFJLENBQUM7QUFFbEQsUUFBTUksVUFBV0MsaUJBQThCO0FBQzlDLFFBQUksQ0FBQ1AsVUFBVXhCLFFBQVE7QUFDdEI7SUFDRDtBQUVBLFVBQU0wQixPQUFPRixVQUFVUSxNQUFNO0FBRTdCLFVBQU1DLGFBQXFCN0MsRUFBRWhCLG1DQUFBaUIsUUFBQUMsY0FBQyxPQUFBO01BQUlDLElBQUEsMEJBQUFkLE9BQThCaUQsSUFBSTtJQUFBLENBQUksQ0FBRTtBQUMxRXZDLGFBQVMrQixPQUFPZSxZQUFZN0QsbUNBQUFpQixRQUFBQyxjQUFDLE1BQUEsSUFBRyxDQUFFO0FBRWxDLFVBQU00QyxlQUF1Qm5ELFdBQVdHLFFBQVEsU0FBUyxFQUFFO0FBQzNELFVBQU1pRCxjQUFzQlQsU0FBUyxPQUFPUSxlQUFBLEdBQUF6RCxPQUFrQnlELGNBQVksR0FBQSxFQUFBekQsT0FBSWlELElBQUk7QUFFbEYsUUFBSVUsaUJBQXlCO0FBQzdCLFNBQUs3RCxJQUNIOEQsTUFBQSx5Q0FBQTVELE9BQXVEWCxXQUFTLElBQUEsRUFBQVcsT0FBS3NELGFBQVcsUUFBQSxHQUFVO01BQzFGTyxTQUFTWjtJQUNWLENBQUMsRUFDQWEsS0FDQ0MsYUFBb0I7QUFDcEJKLHVCQUFpQmhELEVBQUVoQixtQ0FBQWlCLFFBQUFDLGNBQUMsT0FBQTtRQUFJbUQsV0FBV0Q7TUFBQSxDQUFTLENBQUUsRUFDNUN6QyxLQUFBLElBQUF0QixPQUFpQlgsU0FBUyxDQUFFLEVBQzVCNEUsS0FBSztBQUVQLFlBQU1DLFVBQW1DO1FBQ3hDQyxRQUFRO1FBQ1JDLFFBQVE7UUFDUkMsZUFBZTtRQUNmQyxRQUFRWjtRQUNSYSxNQUFNO1FBQ05DLGNBQWNiO01BQ2Y7QUFFQSxhQUFPN0QsSUFBSTJFLEtBQUtQLE9BQU87SUFDeEIsR0FDQ1EsV0FBZ0I7QUFDaEIsV0FBS2xELEdBQUdDLE9BQ1BQLE9BQU9DLE1BQU0sY0FBYyxZQUFZLEVBQUVWLFFBQVEsTUFBTXdDLElBQUksSUFBSXlCLE9BQy9EO1FBQ0NoRCxLQUFLO1FBQ0xDLE1BQU07TUFDUCxDQUNEO0FBRUEsYUFBTztJQUNSLENBQ0QsRUFDQ21DLEtBQ0NhLFVBQVM7QUFDVCxVQUFJQSxTQUFTLE1BQU07QUFDbEI7TUFDRDtBQUVBLFlBQU1DLFFBQVFqRSxFQUNiaEIsbUNBQUFpQixRQUFBQyxjQUFDLE9BQUEsTUFDQWxCLG1DQUFBaUIsUUFBQUMsY0FBQyxLQUFBO1FBQUVnRSxNQUFNckQsR0FBR3NELEtBQUtDLE9BQU9yQixXQUFXO01BQUEsR0FDakNULE1BQUssS0FBRTlDLFlBQVk4QyxJQUFJLEdBQUUsR0FDM0IsR0FBSSxLQUNIdEQsbUNBQUFpQixRQUFBQyxjQUFDLEtBQUE7UUFBRWdFLE1BQU1yRCxHQUFHc0QsS0FBS0MsT0FBT3JCLGFBQWE7VUFBQ1MsUUFBUTtRQUFNLENBQUM7TUFBQSxHQUFJakQsT0FBT0MsTUFBTSxLQUFLLEdBQUcsQ0FBRSxHQUFJLEdBQ3RGLENBQ0Q7QUFFQXFDLGlCQUFXZixPQUFPbUMsS0FBSztBQUV2QixZQUFNLENBQUNJLElBQUksSUFBSUwsS0FBSyxPQUFPLEVBQUVNO0FBQzdCLFVBQUlELEtBQUtFLFNBQVM7QUFDakIsY0FBTUMsVUFBVXhFLEVBQ2ZoQixtQ0FBQWlCLFFBQUFDLGNBQUMsVUFBQTtVQUFPSSxXQUFXLENBQUN6QixnQkFBZ0IsWUFBWTtRQUFBLEdBQzlDMEIsT0FBT0MsTUFBTSxRQUFRLE1BQU0sQ0FDN0IsQ0FDRDtBQUNBZ0UsZ0JBQVEvRCxHQUFHLFNBQVMsTUFBWTtBQUMvQitELGtCQUFRQyxPQUFPO0FBRWZ0RixjQUFJdUYsT0FDSDNCLGFBQ0E7WUFDQ2xEO1VBQ0QsR0FDQW1ELGNBQ0QsRUFBRUcsS0FDRCxNQUFZO0FBQ1gsaUJBQUt0QyxHQUFHQyxPQUFPUCxPQUFPQyxNQUFNLFFBQVEsTUFBTSxJQUFJdUMsYUFBYTtjQUMxRGhDLEtBQUs7Y0FDTEMsTUFBTTtZQUNQLENBQUM7VUFDRixHQUNDK0MsV0FBZ0I7QUFDaEIsaUJBQUtsRCxHQUFHQyxPQUNQUCxPQUFPQyxNQUFNLE1BQU0sS0FBSyxJQUN2QnVDLGNBQ0F4QyxPQUFPQyxNQUFNLFVBQVUsUUFBUSxJQUMvQnVELE9BQ0Q7Y0FDQ2hELEtBQUs7Y0FDTEMsTUFBTTtZQUNQLENBQ0Q7VUFDRCxDQUNEO1FBQ0QsQ0FBQztBQUVEaUQsY0FBTW5DLE9BQU8wQyxPQUFPO0FBQ3BCM0IsbUJBQVdmLE9BQ1Y5QyxtQ0FBQWlCLFFBQUFDLGNBQUMsT0FBQTtVQUNBbUQsV0FBV0wsZUFBZWxELFFBQ3pCLFlBQ0M2RSxZQUFBLEtBQUF0RixPQUFnQ3NGLE9BQU9DLFlBQVksQ0FBQyxHQUFDLEdBQUEsQ0FDdkQ7UUFBQSxDQUNELENBQ0Q7QUFFQTtNQUNEO0FBRUEsWUFBTUMsT0FBZVIsS0FBS1MsVUFBVSxDQUFDLEVBQUVELEtBQUtFO0FBQzVDLFVBQUlGLFNBQVMsSUFBSTtBQUNoQlosY0FBTW5DLE9BQU85QyxtQ0FBQWlCLFFBQUFDLGNBQUMsUUFBQTtVQUFLSSxXQUFXMUI7UUFBQSxHQUFZMkIsT0FBT0MsTUFBTSxPQUFPLEtBQUssQ0FBRSxDQUFPO01BQzdFLE9BQU87QUFDTixjQUFNZ0UsVUFBVXhFLEVBQ2ZoQixtQ0FBQWlCLFFBQUFDLGNBQUMsVUFBQTtVQUFPSSxXQUFXLENBQUN6QixnQkFBZ0IsWUFBWTtRQUFBLEdBQzlDMEIsT0FBT0MsTUFBTSxRQUFRLE1BQU0sQ0FDN0IsQ0FDRDtBQUNBZ0UsZ0JBQVEvRCxHQUFHLFNBQVMsTUFBWTtBQUMvQitELGtCQUFRQyxPQUFPO0FBRWZ0RixjQUFJNkYsS0FBS2pDLGFBQWEsT0FBTztZQUM1QmxEO1lBQ0F5RCxNQUFNTjtZQUNOaUMsVUFBVTtVQUNYLEVBQUUsRUFBRTlCLEtBQ0gsTUFBWTtBQUNYLGlCQUFLdEMsR0FBR0MsT0FBT1AsT0FBT0MsTUFBTSxPQUFPLE1BQU0sSUFBSXVDLGFBQWE7Y0FDekRoQyxLQUFLO2NBQ0xDLE1BQU07WUFDUCxDQUFDO1VBQ0YsR0FDQytDLFdBQVU7QUFDVixpQkFBS2xELEdBQUdDLE9BQ1BQLE9BQ0VDLE1BQU0sYUFBYSxXQUFXLEVBQzlCVixRQUFRLE1BQU1pRCxXQUFXLElBQUlnQixPQUMvQjtjQUNDaEQsS0FBSztjQUNMQyxNQUFNO1lBQ1AsQ0FDRDtVQUNELENBQ0Q7UUFDRCxDQUFDO0FBRURpRCxjQUFNbkMsT0FBTzBDLE9BQU87QUFDcEIzQixtQkFBV2YsT0FDVjlCLEVBQUVoQixtQ0FBQWlCLFFBQUFDLGNBQUMsU0FBQTtVQUFNSSxXQUFVO1VBQU8rQyxXQUFXd0I7UUFBQSxDQUFNLENBQUUsRUFBRUssUUFDOUNsRyxtQ0FBQWlCLFFBQUFDLGNBQUMsWUFBQSxNQUNBbEIsbUNBQUFpQixRQUFBQyxjQUFDLE9BQUE7VUFBSUksV0FBVTtRQUFBLENBQWMsR0FDN0J0QixtQ0FBQWlCLFFBQUFDLGNBQUMsT0FBQTtVQUFJSSxXQUFVO1FBQUEsQ0FBZSxHQUM5QnRCLG1DQUFBaUIsUUFBQUMsY0FBQyxPQUFBO1VBQUlJLFdBQVU7UUFBQSxDQUFjLEdBQzdCdEIsbUNBQUFpQixRQUFBQyxjQUFDLE9BQUE7VUFBSUksV0FBVTtRQUFBLENBQWUsQ0FDL0IsQ0FDRCxDQUNEO01BQ0Q7SUFDRCxHQUNDeUQsV0FBZ0I7QUFDaEIsV0FBS2xELEdBQUdDLE9BQ1BQLE9BQU9DLE1BQU0sZ0JBQWdCLGNBQWMsRUFBRVYsUUFBUSxNQUFNd0MsSUFBSSxJQUFJeUIsT0FDbkU7UUFDQ2hELEtBQUs7UUFDTEMsTUFBTTtNQUNQLENBQ0Q7SUFDRCxDQUNELEVBQ0NtRSxPQUFPLE1BQVk7QUFDbkJ6QyxjQUFRQyxXQUFXO0lBQ3BCLENBQUM7RUFDSDtBQUVBLFFBQU15QyxTQUFrQztJQUN2QzVCLFFBQVE7SUFDUkMsUUFBUTtJQUNSQyxlQUFlO0lBQ2ZFLE1BQU07SUFDTkQsUUFBUWhFO0lBQ1IwRixjQUFjO0lBQ2RDLFFBQVEsQ0FBQyxXQUFXLFdBQVc7RUFDaEM7QUFFQSxPQUFLbkcsSUFDSG9HLElBQUlILE1BQU0sRUFDVmpDLEtBQU1hLFVBQVM7QUFBQSxRQUFBd0I7QUFDZixRQUFJLEdBQUFBLGNBQUN4QixLQUFLLE9BQU8sT0FBQSxRQUFBd0IsZ0JBQUEsVUFBWkEsWUFBZWxCLFFBQU87QUFDMUIsYUFBT3RFLEVBQUV5RixTQUFTLEVBQUVDLE9BQU8sU0FBUztJQUNyQztBQUVBLFVBQU0sQ0FBQ3JCLElBQUksSUFBSUwsS0FBSyxPQUFPLEVBQUVNO0FBRTdCLFFBQUlELEtBQUtzQixTQUFTO0FBQ2pCLGFBQU8zRixFQUFFeUYsU0FBUyxFQUFFQyxPQUFPLGNBQWM7SUFDMUM7QUFDQSxRQUFJckIsS0FBS0UsU0FBUztBQUNqQixhQUFPdkUsRUFBRXlGLFNBQVMsRUFBRUMsT0FBTyxrQkFBa0I7SUFDOUM7QUFFQSxVQUFNLENBQUM7TUFBQ3RDO0lBQU8sQ0FBQyxJQUFJaUIsS0FBS1M7QUFFekIsV0FBTzFCO0VBQ1IsQ0FBQyxFQUNBRCxLQUFNQyxhQUE0QjtBQUNsQyxRQUFJVCxjQUFzQlM7QUFFMUJULGtCQUFjQSxZQUFZN0MsUUFDekIseUJBQ0M2RSxZQUFBLEtBQUF0RixPQUFnQ3NGLE9BQU9DLFlBQVksQ0FBQyxHQUFDLEdBQUEsQ0FDdkQ7QUFDQWpDLGtCQUFjQSxZQUFZN0MsUUFDekIsK0VBQ0EsWUFDRDtBQUNBNkMsa0JBQWNBLFlBQVk3QyxRQUFRLHdCQUF5QjZFLFlBQzFEQSxPQUNFN0UsUUFBUSxXQUFXLElBQUksRUFDdkJBLFFBQVEsV0FBVyxJQUFJLEVBQ3ZCQSxRQUFRLFdBQVcsSUFBSSxFQUN2QkEsUUFBUSxXQUFXLEdBQUcsRUFDdEJBLFFBQVEsVUFBVSxHQUFHLEVBQ3JCQSxRQUFRLFVBQVUsR0FBRyxFQUNyQkEsUUFBUSxVQUFVLEdBQUcsRUFDckJBLFFBQVEsVUFBVSxHQUFHLENBQ3hCO0FBRUEsV0FBTzZDO0VBQ1IsQ0FBQyxFQUNBUSxLQUFNUixpQkFBOEI7QUFDcENELFlBQVFDLFdBQVc7RUFDcEIsQ0FBQztBQUNIOztBSHBUQSxNQUFBLEdBQUtwRSxtQkFBQXFILFNBQVEsRUFBRXpDLEtBQU0wQyxXQUF5QztBQUM3RCxRQUFNO0lBQUNsRztFQUFVLElBQUlrQixHQUFHaUYsT0FBT1AsSUFBSTtBQUNuQyxNQUFJLENBQUMsMkJBQTJCUSxLQUFLcEcsVUFBVSxHQUFHO0FBQ2pEO0VBQ0Q7QUFFQSxRQUFNcUcsWUFBbUNILE1BQU1sRixLQUFLLGFBQWEsRUFBRUMsU0FBUyxlQUFlO0FBQzNGLFFBQU1xRixVQUFnQ3BGLEdBQUdzRCxLQUFLK0IsZUFBZUYsV0FBVyxLQUFLekYsT0FBT0MsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUV6R3lGLGNBQUEsUUFBQUEsWUFBQSxVQUFBQSxRQUFTRSxpQkFBaUIsU0FBUyxNQUFZO0FBQzlDRixZQUFReEIsT0FBTztBQUNmL0Usc0JBQWtCQyxVQUFVO0VBQzdCLENBQUM7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfZXh0X2dhZGdldDMiLCAicmVxdWlyZSIsICJ0cmFuc2xhdGVWYXJpYW50c1N1bW1hcnkiLCAiY29udGVudElEIiwgInZlcnNpb24iLCAibm9DaGFuZ2VzIiwgInB1Ymxpc2hDaGFuZ2VzIiwgInN1Ym1pdEFsbCIsICJ3YXJuaW5nIiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJfX3RvRVNNIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImFwaSIsICJpbml0TXdBcGkiLCAiY29uY2F0IiwgImxhbmdzIiwgIlNldCIsICJuYW1lT2ZMYW5ncyIsICJ6aCIsICJ0cmFuc2xhdGVWYXJpYW50cyIsICJ3Z1BhZ2VOYW1lIiwgIl9wcm9tcHQiLCAic3VtbWFyeSIsICJyZXBsYWNlIiwgIiR3cmFwcGVyIiwgIiQiLCAiZGVmYXVsdCIsICJjcmVhdGVFbGVtZW50IiwgImlkIiwgInByZXBlbmRUbyIsICIkc3VibWl0QWxsIiwgImNsYXNzTmFtZSIsICJ3aW5kb3ciLCAid2dVTFMiLCAib24iLCAiJGJ1dHRvbnMiLCAiZmluZCIsICJsZW5ndGgiLCAibXciLCAibm90aWZ5IiwgInRhZyIsICJ0eXBlIiwgImNvbmZpcm0iLCAiX2l0ZXJhdG9yMiIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcDIiLCAicyIsICJuIiwgImRvbmUiLCAiYnV0dG9uIiwgInZhbHVlIiwgInRyaWdnZXIiLCAiZXJyIiwgImUiLCAiZiIsICJhcHBlbmQiLCAiZGVmYXVsdExhbmdzIiwgInJ1bkxhbmdzIiwgInByb21wdCIsICJqb2luIiwgInNwbGl0IiwgImxhbmdRdWV1ZSIsICJtYXAiLCAibGFuZyIsICJ0cmltIiwgImZpbHRlciIsICJoYXMiLCAicHJvY2VzcyIsICJwYWdlQ29udGVudCIsICJzaGlmdCIsICIkZGlmZlRhYmxlIiwgImJhc2VQYWdlTmFtZSIsICJ0YXJnZXRUaXRsZSIsICJuZXdQYWdlQ29udGVudCIsICJwYXJzZSIsICJ1c2VsYW5nIiwgInRoZW4iLCAiY29udGVudCIsICJpbm5lckhUTUwiLCAidGV4dCIsICJfcGFyYW1zIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJ0aXRsZXMiLCAicHJvcCIsICJydmRpZmZ0b3RleHQiLCAicG9zdCIsICJlcnJvciIsICJkYXRhIiwgIiR0b29sIiwgImhyZWYiLCAidXRpbCIsICJnZXRVcmwiLCAicGFnZSIsICJwYWdlcyIsICJtaXNzaW5nIiwgIiRzdWJtaXQiLCAicmVtb3ZlIiwgImNyZWF0ZSIsICJzdHJpbmciLCAiY29kZVBvaW50QXQiLCAiZGlmZiIsICJyZXZpc2lvbnMiLCAiYm9keSIsICJlZGl0IiwgIm5vY3JlYXRlIiwgInByZXBlbmQiLCAiYWx3YXlzIiwgInBhcmFtcyIsICJjdXJ0aW1lc3RhbXAiLCAicnZwcm9wIiwgImdldCIsICJfZGF0YSRxdWVyeSIsICJEZWZlcnJlZCIsICJyZWplY3QiLCAiaW52YWxpZCIsICJnZXRCb2R5IiwgIiRib2R5IiwgImNvbmZpZyIsICJ0ZXN0IiwgInBvcnRsZXRJZCIsICJlbGVtZW50IiwgImFkZFBvcnRsZXRMaW5rIiwgImFkZEV2ZW50TGlzdGVuZXIiXQp9Cg==