@fairfox/polly 0.87.0 → 0.88.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gallery/gallery.css +146 -43
- package/dist/gallery/gallery.js +13 -10
- package/dist/src/polly-ui/Button.d.ts +6 -2
- package/dist/src/polly-ui/Tabs.d.ts +3 -1
- package/dist/src/polly-ui/index.css +120 -38
- package/dist/src/polly-ui/index.js +15 -12
- package/dist/src/polly-ui/index.js.map +4 -4
- package/dist/src/polly-ui/styles.css +120 -38
- package/dist/src/polly-ui/theme.css +42 -4
- package/package.json +1 -1
package/dist/gallery/gallery.js
CHANGED
|
@@ -2163,7 +2163,9 @@ var Button_module_default = {
|
|
|
2163
2163
|
btnLarge: "btnLarge_c4HKfA",
|
|
2164
2164
|
btnCircle: "btnCircle_c4HKfA",
|
|
2165
2165
|
btnFullWidth: "btnFullWidth_c4HKfA",
|
|
2166
|
-
btnBounded: "btnBounded_c4HKfA"
|
|
2166
|
+
btnBounded: "btnBounded_c4HKfA",
|
|
2167
|
+
icon: "icon_c4HKfA",
|
|
2168
|
+
label: "label_c4HKfA"
|
|
2167
2169
|
};
|
|
2168
2170
|
|
|
2169
2171
|
// src/polly-ui/Button.tsx
|
|
@@ -2226,18 +2228,18 @@ function Button(props) {
|
|
|
2226
2228
|
if (className)
|
|
2227
2229
|
parts.push(className);
|
|
2228
2230
|
const buttonClass = parts.filter(Boolean).join(" ");
|
|
2229
|
-
const content =
|
|
2230
|
-
inline: true,
|
|
2231
|
-
columns: "auto auto",
|
|
2232
|
-
gap: "0.5em",
|
|
2233
|
-
alignItems: "center",
|
|
2231
|
+
const content = /* @__PURE__ */ u4(S, {
|
|
2234
2232
|
children: [
|
|
2235
|
-
icon,
|
|
2233
|
+
icon !== undefined && /* @__PURE__ */ u4("span", {
|
|
2234
|
+
class: Button_module_default["icon"],
|
|
2235
|
+
children: icon
|
|
2236
|
+
}, undefined, false, undefined, this),
|
|
2236
2237
|
label !== undefined && /* @__PURE__ */ u4("span", {
|
|
2238
|
+
class: Button_module_default["label"],
|
|
2237
2239
|
children: label
|
|
2238
2240
|
}, undefined, false, undefined, this)
|
|
2239
2241
|
]
|
|
2240
|
-
}, undefined, true, undefined, this)
|
|
2242
|
+
}, undefined, true, undefined, this);
|
|
2241
2243
|
const dataAction = props["data-action"];
|
|
2242
2244
|
const ariaLabel = props["aria-label"];
|
|
2243
2245
|
const resolvedTitle = title ?? (typeof label === "string" && label.length > 0 ? label : typeof ariaLabel === "string" ? ariaLabel : undefined);
|
|
@@ -3627,6 +3629,7 @@ function Tabs(props) {
|
|
|
3627
3629
|
columns: `repeat(${tabs.length}, auto)`,
|
|
3628
3630
|
gap: "0",
|
|
3629
3631
|
alignItems: "end",
|
|
3632
|
+
justifyContent: "start",
|
|
3630
3633
|
children: tabs.map((tab) => {
|
|
3631
3634
|
const isActive = activeTab === tab.id;
|
|
3632
3635
|
const tabClass = isActive ? `${Tabs_module_default["tab"]} ${Tabs_module_default["active"]}` : Tabs_module_default["tab"];
|
|
@@ -5327,5 +5330,5 @@ installEventDelegation(async (dispatch) => {
|
|
|
5327
5330
|
var root = document.getElementById("app") ?? document.body;
|
|
5328
5331
|
R(/* @__PURE__ */ u4(GalleryApp, {}, undefined, false, undefined, this), root);
|
|
5329
5332
|
|
|
5330
|
-
//# debugId=
|
|
5331
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9BY3Rpb25TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9CYWRnZS50c3giLCAic3JjL3BvbGx5LXVpL0J1dHRvbi50c3giLCAic3JjL3BvbGx5LXVpL1N1cmZhY2UudHN4IiwgInNyYy9wb2xseS11aS9DYXJkLnRzeCIsICJzcmMvcG9sbHktdWkvQ2hlY2tib3gudHN4IiwgInNyYy9wb2xseS11aS9DbHVzdGVyLnRzeCIsICJzcmMvcG9sbHktdWkvQ29kZS50c3giLCAic3JjL3BvbGx5LXVpL0NvbGxhcHNpYmxlLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuMS9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2ZvY3VzLXRyYXAudHMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL3Njcm9sbC1sb2NrLnRzIiwgInNyYy9wb2xseS11aS9PdmVybGF5Um9vdC50c3giLCAic3JjL3BvbGx5LXVpL01vZGFsLnRzeCIsICJzcmMvcG9sbHktdWkvQ29uZmlybURpYWxvZy50c3giLCAic3JjL3BvbGx5LXVpL0ZpbGVJbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL0h0bWwudHN4IiwgInNyYy9wb2xseS11aS9MaW5rLnRzeCIsICJzcmMvcG9sbHktdWkvT3V0cHV0LnRzeCIsICJzcmMvcG9sbHktdWkvU2VsZWN0LnRzeCIsICJzcmMvcG9sbHktdWkvU2tlbGV0b24udHN4IiwgInNyYy9wb2xseS11aS9UYWJzLnRzeCIsICJzcmMvcG9sbHktdWkvVGV4dC50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2lucHV0LWJhc2UudHMiLCAic3JjL3BvbGx5LXVpL1RleHRJbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL1RvYXN0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9nZ2xlLnRzeCIsICJzcmMvc2hhcmVkL2xpYi9zdGF0ZS50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9zdG9yZXMudHMiLCAidG9vbHMvZ2FsbGVyeS9zcmMvYWN0aW9ucy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9zcGVjaW1lbnMudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2dhbGxlcnktYXBwLnRzeCIsICJ0b29scy9nYWxsZXJ5L3NyYy9jbGllbnQudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInZhciBuLGwsdSx0LGkscixvLGUsZixjLHMsYSxoLHAsdix5LGQ9e30sdz1bXSxfPS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksZz1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIG0obixsKXtmb3IodmFyIHUgaW4gbCluW3VdPWxbdV07cmV0dXJuIG59ZnVuY3Rpb24gYihuKXtuJiZuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX1mdW5jdGlvbiBrKGwsdSx0KXt2YXIgaSxyLG8sZT17fTtmb3IobyBpbiB1KVwia2V5XCI9PW8/aT11W29dOlwicmVmXCI9PW8/cj11W29dOmVbb109dVtvXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihlLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGwmJm51bGwhPWwuZGVmYXVsdFByb3BzKWZvcihvIGluIGwuZGVmYXVsdFByb3BzKXZvaWQgMD09PWVbb10mJihlW29dPWwuZGVmYXVsdFByb3BzW29dKTtyZXR1cm4geChsLGUsaSxyLG51bGwpfWZ1bmN0aW9uIHgobix0LGkscixvKXt2YXIgZT17dHlwZTpuLHByb3BzOnQsa2V5OmkscmVmOnIsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Om51bGw9PW8/Kyt1Om8sX19pOi0xLF9fdTowfTtyZXR1cm4gbnVsbD09byYmbnVsbCE9bC52bm9kZSYmbC52bm9kZShlKSxlfWZ1bmN0aW9uIE0oKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBTKG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uIEMobixsKXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PWx9ZnVuY3Rpb24gJChuLGwpe2lmKG51bGw9PWwpcmV0dXJuIG4uX18/JChuLl9fLG4uX19pKzEpOm51bGw7Zm9yKHZhciB1O2w8bi5fX2subGVuZ3RoO2wrKylpZihudWxsIT0odT1uLl9fa1tsXSkmJm51bGwhPXUuX19lKXJldHVybiB1Ll9fZTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/JChuKTpudWxsfWZ1bmN0aW9uIEkobil7aWYobi5fX1AmJm4uX19kKXt2YXIgdT1uLl9fdix0PXUuX19lLGk9W10scj1bXSxvPW0oe30sdSk7by5fX3Y9dS5fX3YrMSxsLnZub2RlJiZsLnZub2RlKG8pLHEobi5fX1Asbyx1LG4uX19uLG4uX19QLm5hbWVzcGFjZVVSSSwzMiZ1Ll9fdT9bdF06bnVsbCxpLG51bGw9PXQ/JCh1KTp0LCEhKDMyJnUuX191KSxyKSxvLl9fdj11Ll9fdixvLl9fLl9fa1tvLl9faV09byxEKGksbyxyKSx1Ll9fZT11Ll9fPW51bGwsby5fX2UhPXQmJlAobyl9fWZ1bmN0aW9uIFAobil7aWYobnVsbCE9KG49bi5fXykmJm51bGwhPW4uX19jKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPW51bGwsbi5fX2suc29tZShmdW5jdGlvbihsKXtpZihudWxsIT1sJiZudWxsIT1sLl9fZSlyZXR1cm4gbi5fX2U9bi5fX2MuYmFzZT1sLl9fZX0pLFAobil9ZnVuY3Rpb24gQShuKXsoIW4uX19kJiYobi5fX2Q9ITApJiZpLnB1c2gobikmJiFILl9fcisrfHxyIT1sLmRlYm91bmNlUmVuZGVyaW5nKSYmKChyPWwuZGVib3VuY2VSZW5kZXJpbmcpfHxvKShIKX1mdW5jdGlvbiBIKCl7dHJ5e2Zvcih2YXIgbixsPTE7aS5sZW5ndGg7KWkubGVuZ3RoPmwmJmkuc29ydChlKSxuPWkuc2hpZnQoKSxsPWkubGVuZ3RoLEkobil9ZmluYWxseXtpLmxlbmd0aD1ILl9fcj0wfX1mdW5jdGlvbiBMKG4sbCx1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSxfLGcsbT10JiZ0Ll9fa3x8dyxiPWwubGVuZ3RoO2ZvcihmPVQodSxsLG0sZixiKSxhPTA7YTxiO2ErKyludWxsIT0ocD11Ll9fa1thXSkmJihoPS0xIT1wLl9faSYmbVtwLl9faV18fGQscC5fX2k9YSxfPXEobixwLGgsaSxyLG8sZSxmLGMscyksdj1wLl9fZSxwLnJlZiYmaC5yZWYhPXAucmVmJiYoaC5yZWYmJkooaC5yZWYsbnVsbCxwKSxzLnB1c2gocC5yZWYscC5fX2N8fHYscCkpLG51bGw9PXkmJm51bGwhPXYmJih5PXYpLChnPSEhKDQmcC5fX3UpKXx8aC5fX2s9PT1wLl9faz8oZj1qKHAsZixuLGcpLGcmJmguX19lJiYoaC5fX2U9bnVsbCkpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHAudHlwZSYmdm9pZCAwIT09Xz9mPV86diYmKGY9di5uZXh0U2libGluZykscC5fX3UmPS03KTtyZXR1cm4gdS5fX2U9eSxmfWZ1bmN0aW9uIFQobixsLHUsdCxpKXt2YXIgcixvLGUsZixjLHM9dS5sZW5ndGgsYT1zLGg9MDtmb3Iobi5fX2s9bmV3IEFycmF5KGkpLHI9MDtyPGk7cisrKW51bGwhPShvPWxbcl0pJiZcImJvb2xlYW5cIiE9dHlwZW9mIG8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8/KFwic3RyaW5nXCI9PXR5cGVvZiBvfHxcIm51bWJlclwiPT10eXBlb2Ygb3x8XCJiaWdpbnRcIj09dHlwZW9mIG98fG8uY29uc3RydWN0b3I9PVN0cmluZz9vPW4uX19rW3JdPXgobnVsbCxvLG51bGwsbnVsbCxudWxsKTpnKG8pP289bi5fX2tbcl09eChTLHtjaGlsZHJlbjpvfSxudWxsLG51bGwsbnVsbCk6dm9pZCAwPT09by5jb25zdHJ1Y3RvciYmby5fX2I+MD9vPW4uX19rW3JdPXgoby50eXBlLG8ucHJvcHMsby5rZXksby5yZWY/by5yZWY6bnVsbCxvLl9fdik6bi5fX2tbcl09byxmPXIraCxvLl9fPW4sby5fX2I9bi5fX2IrMSxlPW51bGwsLTEhPShjPW8uX19pPU8obyx1LGYsYSkpJiYoYS0tLChlPXVbY10pJiYoZS5fX3V8PTIpKSxudWxsPT1lfHxudWxsPT1lLl9fdj8oLTE9PWMmJihpPnM/aC0tOmk8cyYmaCsrKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvLnR5cGUmJihvLl9fdXw9NCkpOmMhPWYmJihjPT1mLTE/aC0tOmM9PWYrMT9oKys6KGM+Zj9oLS06aCsrLG8uX191fD00KSkpOm4uX19rW3JdPW51bGw7aWYoYSlmb3Iocj0wO3I8cztyKyspbnVsbCE9KGU9dVtyXSkmJjA9PSgyJmUuX191KSYmKGUuX19lPT10JiYodD0kKGUpKSxLKGUsZSkpO3JldHVybiB0fWZ1bmN0aW9uIGoobixsLHUsdCl7dmFyIGkscjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUpe2ZvcihpPW4uX19rLHI9MDtpJiZyPGkubGVuZ3RoO3IrKylpW3JdJiYoaVtyXS5fXz1uLGw9aihpW3JdLGwsdSx0KSk7cmV0dXJuIGx9bi5fX2UhPWwmJih0JiYobCYmbi50eXBlJiYhbC5wYXJlbnROb2RlJiYobD0kKG4pKSx1Lmluc2VydEJlZm9yZShuLl9fZSxsfHxudWxsKSksbD1uLl9fZSk7ZG97bD1sJiZsLm5leHRTaWJsaW5nfXdoaWxlKG51bGwhPWwmJjg9PWwubm9kZVR5cGUpO3JldHVybiBsfWZ1bmN0aW9uIEYobixsKXtyZXR1cm4gbD1sfHxbXSxudWxsPT1ufHxcImJvb2xlYW5cIj09dHlwZW9mIG58fChnKG4pP24uc29tZShmdW5jdGlvbihuKXtGKG4sbCl9KTpsLnB1c2gobikpLGx9ZnVuY3Rpb24gTyhuLGwsdSx0KXt2YXIgaSxyLG8sZT1uLmtleSxmPW4udHlwZSxjPWxbdV0scz1udWxsIT1jJiYwPT0oMiZjLl9fdSk7aWYobnVsbD09PWMmJm51bGw9PWV8fHMmJmU9PWMua2V5JiZmPT1jLnR5cGUpcmV0dXJuIHU7aWYodD4ocz8xOjApKWZvcihpPXUtMSxyPXUrMTtpPj0wfHxyPGwubGVuZ3RoOylpZihudWxsIT0oYz1sW289aT49MD9pLS06cisrXSkmJjA9PSgyJmMuX191KSYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiB6KG4sbCx1KXtcIi1cIj09bFswXT9uLnNldFByb3BlcnR5KGwsbnVsbD09dT9cIlwiOnUpOm5bbF09bnVsbD09dT9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiB1fHxfLnRlc3QobCk/dTp1K1wicHhcIn1mdW5jdGlvbiBOKG4sbCx1LHQsaSl7dmFyIHIsbztuOmlmKFwic3R5bGVcIj09bClpZihcInN0cmluZ1wiPT10eXBlb2YgdSluLnN0eWxlLmNzc1RleHQ9dTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYobi5zdHlsZS5jc3NUZXh0PXQ9XCJcIiksdClmb3IobCBpbiB0KXUmJmwgaW4gdXx8eihuLnN0eWxlLGwsXCJcIik7aWYodSlmb3IobCBpbiB1KXQmJnVbbF09PXRbbF18fHoobi5zdHlsZSxsLHVbbF0pfWVsc2UgaWYoXCJvXCI9PWxbMF0mJlwiblwiPT1sWzFdKXI9bCE9KGw9bC5yZXBsYWNlKGEsXCIkMVwiKSksbz1sLnRvTG93ZXJDYXNlKCksbD1vIGluIG58fFwib25Gb2N1c091dFwiPT1sfHxcIm9uRm9jdXNJblwiPT1sP28uc2xpY2UoMik6bC5zbGljZSgyKSxuLmx8fChuLmw9e30pLG4ubFtsK3JdPXUsdT90P3Vbc109dFtzXToodVtzXT1oLG4uYWRkRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpKTpuLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxyP3Y6cCxyKTtlbHNle2lmKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09aSlsPWwucmVwbGFjZSgveGxpbmsoSHw6aCkvLFwiaFwiKS5yZXBsYWNlKC9zTmFtZSQvLFwic1wiKTtlbHNlIGlmKFwid2lkdGhcIiE9bCYmXCJoZWlnaHRcIiE9bCYmXCJocmVmXCIhPWwmJlwibGlzdFwiIT1sJiZcImZvcm1cIiE9bCYmXCJ0YWJJbmRleFwiIT1sJiZcImRvd25sb2FkXCIhPWwmJlwicm93U3BhblwiIT1sJiZcImNvbFNwYW5cIiE9bCYmXCJyb2xlXCIhPWwmJlwicG9wb3ZlclwiIT1sJiZsIGluIG4pdHJ5e25bbF09bnVsbD09dT9cIlwiOnU7YnJlYWsgbn1jYXRjaChuKXt9XCJmdW5jdGlvblwiPT10eXBlb2YgdXx8KG51bGw9PXV8fCExPT09dSYmXCItXCIhPWxbNF0/bi5yZW1vdmVBdHRyaWJ1dGUobCk6bi5zZXRBdHRyaWJ1dGUobCxcInBvcG92ZXJcIj09bCYmMT09dT9cIlwiOnUpKX19ZnVuY3Rpb24gVihuKXtyZXR1cm4gZnVuY3Rpb24odSl7aWYodGhpcy5sKXt2YXIgdD10aGlzLmxbdS50eXBlK25dO2lmKG51bGw9PXVbY10pdVtjXT1oKys7ZWxzZSBpZih1W2NdPHRbc10pcmV0dXJuO3JldHVybiB0KGwuZXZlbnQ/bC5ldmVudCh1KTp1KX19fWZ1bmN0aW9uIHEobix1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSxkLF8sayx4LE0sJCxJLFAsQSxILFQ9dS50eXBlO2lmKHZvaWQgMCE9PXUuY29uc3RydWN0b3IpcmV0dXJuIG51bGw7MTI4JnQuX191JiYoYz0hISgzMiZ0Ll9fdSksbz1bZj11Ll9fZT10Ll9fZV0pLChhPWwuX19iKSYmYSh1KTtuOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFQpdHJ5e2lmKGs9dS5wcm9wcyx4PVQucHJvdG90eXBlJiZULnByb3RvdHlwZS5yZW5kZXIsTT0oYT1ULmNvbnRleHRUeXBlKSYmaVthLl9fY10sJD1hP00/TS5wcm9wcy52YWx1ZTphLl9fOmksdC5fX2M/Xz0oaD11Ll9fYz10Ll9fYykuX189aC5fX0U6KHg/dS5fX2M9aD1uZXcgVChrLCQpOih1Ll9fYz1oPW5ldyBDKGssJCksaC5jb25zdHJ1Y3Rvcj1ULGgucmVuZGVyPVEpLE0mJk0uc3ViKGgpLGguc3RhdGV8fChoLnN0YXRlPXt9KSxoLl9fbj1pLHA9aC5fX2Q9ITAsaC5fX2g9W10saC5fc2I9W10pLHgmJm51bGw9PWguX19zJiYoaC5fX3M9aC5zdGF0ZSkseCYmbnVsbCE9VC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJihoLl9fcz09aC5zdGF0ZSYmKGguX19zPW0oe30saC5fX3MpKSxtKGguX19zLFQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGssaC5fX3MpKSksdj1oLnByb3BzLHk9aC5zdGF0ZSxoLl9fdj11LHApeCYmbnVsbD09VC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJm51bGwhPWguY29tcG9uZW50V2lsbE1vdW50JiZoLmNvbXBvbmVudFdpbGxNb3VudCgpLHgmJm51bGwhPWguY29tcG9uZW50RGlkTW91bnQmJmguX19oLnB1c2goaC5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZih4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmayE9PXYmJm51bGwhPWguY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmaC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGssJCksdS5fX3Y9PXQuX192fHwhaC5fX2UmJm51bGwhPWguc2hvdWxkQ29tcG9uZW50VXBkYXRlJiYhMT09PWguc2hvdWxkQ29tcG9uZW50VXBkYXRlKGssaC5fX3MsJCkpe3UuX192IT10Ll9fdiYmKGgucHJvcHM9ayxoLnN0YXRlPWguX19zLGguX19kPSExKSx1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayx1Ll9fay5zb21lKGZ1bmN0aW9uKG4pe24mJihuLl9fPXUpfSksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXSxoLl9faC5sZW5ndGgmJmUucHVzaChoKTticmVhayBufW51bGwhPWguY29tcG9uZW50V2lsbFVwZGF0ZSYmaC5jb21wb25lbnRXaWxsVXBkYXRlKGssaC5fX3MsJCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRVcGRhdGUmJmguX19oLnB1c2goZnVuY3Rpb24oKXtoLmNvbXBvbmVudERpZFVwZGF0ZSh2LHksZCl9KX1pZihoLmNvbnRleHQ9JCxoLnByb3BzPWssaC5fX1A9bixoLl9fZT0hMSxJPWwuX19yLFA9MCx4KWguc3RhdGU9aC5fX3MsaC5fX2Q9ITEsSSYmSSh1KSxhPWgucmVuZGVyKGgucHJvcHMsaC5zdGF0ZSxoLmNvbnRleHQpLHcucHVzaC5hcHBseShoLl9faCxoLl9zYiksaC5fc2I9W107ZWxzZSBkb3toLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksaC5zdGF0ZT1oLl9fc313aGlsZShoLl9fZCYmKytQPDI1KTtoLnN0YXRlPWguX19zLG51bGwhPWguZ2V0Q2hpbGRDb250ZXh0JiYoaT1tKG0oe30saSksaC5nZXRDaGlsZENvbnRleHQoKSkpLHgmJiFwJiZudWxsIT1oLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoZD1oLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHYseSkpLEE9bnVsbCE9YSYmYS50eXBlPT09UyYmbnVsbD09YS5rZXk/RShhLnByb3BzLmNoaWxkcmVuKTphLGY9TChuLGcoQSk/QTpbQV0sdSx0LGkscixvLGUsZixjLHMpLGguYmFzZT11Ll9fZSx1Ll9fdSY9LTE2MSxoLl9faC5sZW5ndGgmJmUucHVzaChoKSxfJiYoaC5fX0U9aC5fXz1udWxsKX1jYXRjaChuKXtpZih1Ll9fdj1udWxsLGN8fG51bGwhPW8paWYobi50aGVuKXtmb3IodS5fX3V8PWM/MTYwOjEyODtmJiY4PT1mLm5vZGVUeXBlJiZmLm5leHRTaWJsaW5nOylmPWYubmV4dFNpYmxpbmc7b1tvLmluZGV4T2YoZildPW51bGwsdS5fX2U9Zn1lbHNle2ZvcihIPW8ubGVuZ3RoO0gtLTspYihvW0hdKTtCKHUpfWVsc2UgdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssbi50aGVufHxCKHUpO2wuX19lKG4sdSx0KX1lbHNlIG51bGw9PW8mJnUuX192PT10Ll9fdj8odS5fX2s9dC5fX2ssdS5fX2U9dC5fX2UpOmY9dS5fX2U9Ryh0Ll9fZSx1LHQsaSxyLG8sZSxjLHMpO3JldHVybihhPWwuZGlmZmVkKSYmYSh1KSwxMjgmdS5fX3U/dm9pZCAwOmZ9ZnVuY3Rpb24gQihuKXtuJiYobi5fX2MmJihuLl9fYy5fX2U9ITApLG4uX19rJiZuLl9fay5zb21lKEIpKX1mdW5jdGlvbiBEKG4sdSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylKKHRbaV0sdFsrK2ldLHRbKytpXSk7bC5fX2MmJmwuX19jKHUsbiksbi5zb21lKGZ1bmN0aW9uKHUpe3RyeXtuPXUuX19oLHUuX19oPVtdLG4uc29tZShmdW5jdGlvbihuKXtuLmNhbGwodSl9KX1jYXRjaChuKXtsLl9fZShuLHUuX192KX19KX1mdW5jdGlvbiBFKG4pe3JldHVyblwib2JqZWN0XCIhPXR5cGVvZiBufHxudWxsPT1ufHxuLl9fYj4wP246ZyhuKT9uLm1hcChFKTptKHt9LG4pfWZ1bmN0aW9uIEcodSx0LGkscixvLGUsZixjLHMpe3ZhciBhLGgscCx2LHksdyxfLG09aS5wcm9wc3x8ZCxrPXQucHJvcHMseD10LnR5cGU7aWYoXCJzdmdcIj09eD9vPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjpcIm1hdGhcIj09eD9vPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiOm98fChvPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSxudWxsIT1lKWZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoKHk9ZVthXSkmJlwic2V0QXR0cmlidXRlXCJpbiB5PT0hIXgmJih4P3kubG9jYWxOYW1lPT14OjM9PXkubm9kZVR5cGUpKXt1PXksZVthXT1udWxsO2JyZWFrfWlmKG51bGw9PXUpe2lmKG51bGw9PXgpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspO3U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8seCxrLmlzJiZrKSxjJiYobC5fX20mJmwuX19tKHQsZSksYz0hMSksZT1udWxsfWlmKG51bGw9PXgpbT09PWt8fGMmJnUuZGF0YT09a3x8KHUuZGF0YT1rKTtlbHNle2lmKGU9ZSYmbi5jYWxsKHUuY2hpbGROb2RlcyksIWMmJm51bGwhPWUpZm9yKG09e30sYT0wO2E8dS5hdHRyaWJ1dGVzLmxlbmd0aDthKyspbVsoeT11LmF0dHJpYnV0ZXNbYV0pLm5hbWVdPXkudmFsdWU7Zm9yKGEgaW4gbSl5PW1bYV0sXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP3A9eTpcImNoaWxkcmVuXCI9PWF8fGEgaW4ga3x8XCJ2YWx1ZVwiPT1hJiZcImRlZmF1bHRWYWx1ZVwiaW4ga3x8XCJjaGVja2VkXCI9PWEmJlwiZGVmYXVsdENoZWNrZWRcImluIGt8fE4odSxhLG51bGwseSxvKTtmb3IoYSBpbiBrKXk9a1thXSxcImNoaWxkcmVuXCI9PWE/dj15OlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09YT9oPXk6XCJ2YWx1ZVwiPT1hP3c9eTpcImNoZWNrZWRcIj09YT9fPXk6YyYmXCJmdW5jdGlvblwiIT10eXBlb2YgeXx8bVthXT09PXl8fE4odSxhLHksbVthXSxvKTtpZihoKWN8fHAmJihoLl9faHRtbD09cC5fX2h0bWx8fGguX19odG1sPT11LmlubmVySFRNTCl8fCh1LmlubmVySFRNTD1oLl9faHRtbCksdC5fX2s9W107ZWxzZSBpZihwJiYodS5pbm5lckhUTUw9XCJcIiksTChcInRlbXBsYXRlXCI9PXQudHlwZT91LmNvbnRlbnQ6dSxnKHYpP3Y6W3ZdLHQsaSxyLFwiZm9yZWlnbk9iamVjdFwiPT14P1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiOm8sZSxmLGU/ZVswXTppLl9fayYmJChpLDApLGMscyksbnVsbCE9ZSlmb3IoYT1lLmxlbmd0aDthLS07KWIoZVthXSk7Y3x8KGE9XCJ2YWx1ZVwiLFwicHJvZ3Jlc3NcIj09eCYmbnVsbD09dz91LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpOm51bGwhPXcmJih3IT09dVthXXx8XCJwcm9ncmVzc1wiPT14JiYhd3x8XCJvcHRpb25cIj09eCYmdyE9bVthXSkmJk4odSxhLHcsbVthXSxvKSxhPVwiY2hlY2tlZFwiLG51bGwhPV8mJl8hPXVbYV0mJk4odSxhLF8sbVthXSxvKSl9cmV0dXJuIHV9ZnVuY3Rpb24gSihuLHUsdCl7dHJ5e2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4uX191O2kmJm4uX191KCksaSYmbnVsbD09dXx8KG4uX191PW4odSkpfWVsc2Ugbi5jdXJyZW50PXV9Y2F0Y2gobil7bC5fX2Uobix0KX19ZnVuY3Rpb24gSyhuLHUsdCl7dmFyIGkscjtpZihsLnVubW91bnQmJmwudW5tb3VudChuKSwoaT1uLnJlZikmJihpLmN1cnJlbnQmJmkuY3VycmVudCE9bi5fX2V8fEooaSxudWxsLHUpKSxudWxsIT0oaT1uLl9fYykpe2lmKGkuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e2kuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChuKXtsLl9fZShuLHUpfWkuYmFzZT1pLl9fUD1udWxsfWlmKGk9bi5fX2spZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdJiZLKGlbcl0sdSx0fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLnR5cGUpO3R8fGIobi5fX2UpLG4uX19jPW4uX189bi5fX2U9dm9pZCAwfWZ1bmN0aW9uIFEobixsLHUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKG4sdSl9ZnVuY3Rpb24gUih1LHQsaSl7dmFyIHIsbyxlLGY7dD09ZG9jdW1lbnQmJih0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksbC5fXyYmbC5fXyh1LHQpLG89KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgaSk/bnVsbDppJiZpLl9fa3x8dC5fX2ssZT1bXSxmPVtdLHEodCx1PSghciYmaXx8dCkuX19rPWsoUyxudWxsLFt1XSksb3x8ZCxkLHQubmFtZXNwYWNlVVJJLCFyJiZpP1tpXTpvP251bGw6dC5maXJzdENoaWxkP24uY2FsbCh0LmNoaWxkTm9kZXMpOm51bGwsZSwhciYmaT9pOm8/by5fX2U6dC5maXJzdENoaWxkLHIsZiksRChlLHUsZil9ZnVuY3Rpb24gVShuLGwpe1IobixsLFUpfWZ1bmN0aW9uIFcobCx1LHQpe3ZhciBpLHIsbyxlLGY9bSh7fSxsLnByb3BzKTtmb3IobyBpbiBsLnR5cGUmJmwudHlwZS5kZWZhdWx0UHJvcHMmJihlPWwudHlwZS5kZWZhdWx0UHJvcHMpLHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZltvXT12b2lkIDA9PT11W29dJiZudWxsIT1lP2Vbb106dVtvXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoZi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/bi5jYWxsKGFyZ3VtZW50cywyKTp0KSx4KGwudHlwZSxmLGl8fGwua2V5LHJ8fGwucmVmLG51bGwpfWZ1bmN0aW9uIFgobil7ZnVuY3Rpb24gbChuKXt2YXIgdSx0O3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KHU9bmV3IFNldCwodD17fSlbbC5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3U9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5wcm9wcy52YWx1ZSE9bi52YWx1ZSYmdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX19lPSEwLEEobil9KX0sdGhpcy5zdWI9ZnVuY3Rpb24obil7dS5hZGQobik7dmFyIGw9bi5jb21wb25lbnRXaWxsVW5tb3VudDtuLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dSYmdS5kZWxldGUobiksbCYmbC5jYWxsKG4pfX0pLG4uY2hpbGRyZW59cmV0dXJuIGwuX19jPVwiX19jQ1wiK3krKyxsLl9fPW4sbC5Qcm92aWRlcj1sLl9fbD0obC5Db25zdW1lcj1mdW5jdGlvbihuLGwpe3JldHVybiBuLmNoaWxkcmVuKGwpfSkuY29udGV4dFR5cGU9bCxsfW49dy5zbGljZSxsPXtfX2U6ZnVuY3Rpb24obixsLHUsdCl7Zm9yKHZhciBpLHIsbztsPWwuX187KWlmKChpPWwuX19jKSYmIWkuX18pdHJ5e2lmKChyPWkuY29uc3RydWN0b3IpJiZudWxsIT1yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciYmKGkuc2V0U3RhdGUoci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IobikpLG89aS5fX2QpLG51bGwhPWkuY29tcG9uZW50RGlkQ2F0Y2gmJihpLmNvbXBvbmVudERpZENhdGNoKG4sdHx8e30pLG89aS5fX2QpLG8pcmV0dXJuIGkuX19FPWl9Y2F0Y2gobCl7bj1sfXRocm93IG59fSx1PTAsdD1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmdm9pZCAwPT09bi5jb25zdHJ1Y3Rvcn0sQy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24obixsKXt2YXIgdTt1PW51bGwhPXRoaXMuX19zJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1tKHt9LHRoaXMuc3RhdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPW4obSh7fSx1KSx0aGlzLnByb3BzKSksbiYmbSh1LG4pLG51bGwhPW4mJnRoaXMuX192JiYobCYmdGhpcy5fc2IucHVzaChsKSxBKHRoaXMpKX0sQy5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxuJiZ0aGlzLl9faC5wdXNoKG4pLEEodGhpcykpfSxDLnByb3RvdHlwZS5yZW5kZXI9UyxpPVtdLG89XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsZT1mdW5jdGlvbihuLGwpe3JldHVybiBuLl9fdi5fX2ItbC5fX3YuX19ifSxILl9fcj0wLGY9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxjPVwiX19kXCIrZixzPVwiX19hXCIrZixhPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLGg9MCxwPVYoITEpLHY9VighMCkseT0wO2V4cG9ydHtDIGFzIENvbXBvbmVudCxTIGFzIEZyYWdtZW50LFcgYXMgY2xvbmVFbGVtZW50LFggYXMgY3JlYXRlQ29udGV4dCxrIGFzIGNyZWF0ZUVsZW1lbnQsTSBhcyBjcmVhdGVSZWYsayBhcyBoLFUgYXMgaHlkcmF0ZSx0IGFzIGlzVmFsaWRFbGVtZW50LGwgYXMgb3B0aW9ucyxSIGFzIHJlbmRlcixGIGFzIHRvQ2hpbGRBcnJheX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cInByZWFjdFwiO3ZhciB0LHIsdSxpLG89MCxmPVtdLGM9bixlPWMuX19iLGE9Yy5fX3Isdj1jLmRpZmZlZCxsPWMuX19jLG09Yy51bm1vdW50LHM9Yy5fXztmdW5jdGlvbiBwKG4sdCl7Yy5fX2gmJmMuX19oKHIsbixvfHx0KSxvPTA7dmFyIHU9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIG4+PXUuX18ubGVuZ3RoJiZ1Ll9fLnB1c2goe30pLHUuX19bbl19ZnVuY3Rpb24gZChuKXtyZXR1cm4gbz0xLGgoRCxuKX1mdW5jdGlvbiBoKG4sdSxpKXt2YXIgbz1wKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6RCh2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIuX19mKSl7dmFyIGY9ZnVuY3Rpb24obix0LHIpe2lmKCFvLl9fYy5fX0gpcmV0dXJuITA7dmFyIHU9by5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5fX2N9KTtpZih1LmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiFuLl9fTn0pKXJldHVybiFjfHxjLmNhbGwodGhpcyxuLHQscik7dmFyIGk9by5fX2MucHJvcHMhPT1uO3JldHVybiB1LnNvbWUoZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSxjJiZjLmNhbGwodGhpcyxuLHQscil8fGl9O3IuX19mPSEwO3ZhciBjPXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlLGU9ci5jb21wb25lbnRXaWxsVXBkYXRlO3IuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihuLHQscil7aWYodGhpcy5fX2Upe3ZhciB1PWM7Yz12b2lkIDAsZihuLHQsciksYz11fWUmJmUuY2FsbCh0aGlzLG4sdCxyKX0sci5zaG91bGRDb21wb25lbnRVcGRhdGU9Zn1yZXR1cm4gby5fX058fG8uX199ZnVuY3Rpb24geShuLHUpe3ZhciBpPXAodCsrLDMpOyFjLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLnU9dSxyLl9fSC5fX2gucHVzaChpKSl9ZnVuY3Rpb24gXyhuLHUpe3ZhciBpPXAodCsrLDQpOyFjLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLnU9dSxyLl9faC5wdXNoKGkpKX1mdW5jdGlvbiBBKG4pe3JldHVybiBvPTUsVChmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om59fSxbXSl9ZnVuY3Rpb24gRihuLHQscil7bz02LF8oZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgcj1uKHQoKSk7cmV0dXJuIGZ1bmN0aW9uKCl7bihudWxsKSxyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZyKCl9fWlmKG4pcmV0dXJuIG4uY3VycmVudD10KCksZnVuY3Rpb24oKXtyZXR1cm4gbi5jdXJyZW50PW51bGx9fSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIFQobixyKXt2YXIgdT1wKHQrKyw3KTtyZXR1cm4gQyh1Ll9fSCxyKSYmKHUuX189bigpLHUuX19IPXIsdS5fX2g9biksdS5fX31mdW5jdGlvbiBxKG4sdCl7cmV0dXJuIG89OCxUKGZ1bmN0aW9uKCl7cmV0dXJuIG59LHQpfWZ1bmN0aW9uIHgobil7dmFyIHU9ci5jb250ZXh0W24uX19jXSxpPXAodCsrLDkpO3JldHVybiBpLmM9bix1PyhudWxsPT1pLl9fJiYoaS5fXz0hMCx1LnN1YihyKSksdS5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiBQKG4sdCl7Yy51c2VEZWJ1Z1ZhbHVlJiZjLnVzZURlYnVnVmFsdWUodD90KG4pOm4pfWZ1bmN0aW9uIGIobil7dmFyIHU9cCh0KyssMTApLGk9ZCgpO3JldHVybiB1Ll9fPW4sci5jb21wb25lbnREaWRDYXRjaHx8KHIuY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24obix0KXt1Ll9fJiZ1Ll9fKG4sdCksaVsxXShuKX0pLFtpWzBdLGZ1bmN0aW9uKCl7aVsxXSh2b2lkIDApfV19ZnVuY3Rpb24gZygpe3ZhciBuPXAodCsrLDExKTtpZighbi5fXyl7Zm9yKHZhciB1PXIuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187dmFyIGk9dS5fX218fCh1Ll9fbT1bMCwwXSk7bi5fXz1cIlBcIitpWzBdK1wiLVwiK2lbMV0rK31yZXR1cm4gbi5fX31mdW5jdGlvbiBqKCl7Zm9yKHZhciBuO249Zi5zaGlmdCgpOyl7dmFyIHQ9bi5fX0g7aWYobi5fX1AmJnQpdHJ5e3QuX19oLnNvbWUoeiksdC5fX2guc29tZShCKSx0Ll9faD1bXX1jYXRjaChyKXt0Ll9faD1bXSxjLl9fZShyLG4uX192KX19fWMuX19iPWZ1bmN0aW9uKG4pe3I9bnVsbCxlJiZlKG4pfSxjLl9fPWZ1bmN0aW9uKG4sdCl7biYmdC5fX2smJnQuX19rLl9fbSYmKG4uX19tPXQuX19rLl9fbSkscyYmcyhuLHQpfSxjLl9fcj1mdW5jdGlvbihuKXthJiZhKG4pLHQ9MDt2YXIgaT0ocj1uLl9fYykuX19IO2kmJih1PT09cj8oaS5fX2g9W10sci5fX2g9W10saS5fXy5zb21lKGZ1bmN0aW9uKG4pe24uX19OJiYobi5fXz1uLl9fTiksbi51PW4uX19OPXZvaWQgMH0pKTooaS5fX2guc29tZSh6KSxpLl9faC5zb21lKEIpLGkuX19oPVtdLHQ9MCkpLHU9cn0sYy5kaWZmZWQ9ZnVuY3Rpb24obil7diYmdihuKTt2YXIgdD1uLl9fYzt0JiZ0Ll9fSCYmKHQuX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKHQpJiZpPT09Yy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fHcpKGopKSx0Ll9fSC5fXy5zb21lKGZ1bmN0aW9uKG4pe24udSYmKG4uX19IPW4udSksbi51PXZvaWQgMH0pKSx1PXI9bnVsbH0sYy5fX2M9ZnVuY3Rpb24obix0KXt0LnNvbWUoZnVuY3Rpb24obil7dHJ5e24uX19oLnNvbWUoeiksbi5fX2g9bi5fX2guZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFuLl9ffHxCKG4pfSl9Y2F0Y2gocil7dC5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pfSksdD1bXSxjLl9fZShyLG4uX192KX19KSxsJiZsKG4sdCl9LGMudW5tb3VudD1mdW5jdGlvbihuKXttJiZtKG4pO3ZhciB0LHI9bi5fX2M7ciYmci5fX0gmJihyLl9fSC5fXy5zb21lKGZ1bmN0aW9uKG4pe3RyeXt6KG4pfWNhdGNoKG4pe3Q9bn19KSxyLl9fSD12b2lkIDAsdCYmYy5fX2UodCxyLl9fdikpfTt2YXIgaz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gdyhuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGsmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobil9LHU9c2V0VGltZW91dChyLDM1KTtrJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIHoobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gQihuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24gQyhuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBEKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e3EgYXMgdXNlQ2FsbGJhY2sseCBhcyB1c2VDb250ZXh0LFAgYXMgdXNlRGVidWdWYWx1ZSx5IGFzIHVzZUVmZmVjdCxiIGFzIHVzZUVycm9yQm91bmRhcnksZyBhcyB1c2VJZCxGIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUsXyBhcyB1c2VMYXlvdXRFZmZlY3QsVCBhcyB1c2VNZW1vLGggYXMgdXNlUmVkdWNlcixBIGFzIHVzZVJlZixkIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAidmFyIGk9U3ltYm9sLmZvcihcInByZWFjdC1zaWduYWxzXCIpO2Z1bmN0aW9uIHQoKXtpZighKHM+MSkpe3ZhciBpLHQ9ITE7IWZ1bmN0aW9uKCl7dmFyIGk9YztjPXZvaWQgMDt3aGlsZSh2b2lkIDAhPT1pKXtpZihpLlMudj09PWkudilpLlMuaT1pLmk7aT1pLm99fSgpO3doaWxlKHZvaWQgMCE9PWgpe3ZhciBuPWg7aD12b2lkIDA7disrO3doaWxlKHZvaWQgMCE9PW4pe3ZhciByPW4udTtuLnU9dm9pZCAwO24uZiY9LTM7aWYoISg4Jm4uZikmJncobikpdHJ5e24uYygpfWNhdGNoKG4pe2lmKCF0KXtpPW47dD0hMH19bj1yfX12PTA7cy0tO2lmKHQpdGhyb3cgaX1lbHNlIHMtLX1mdW5jdGlvbiBuKGkpe2lmKHM+MClyZXR1cm4gaSgpO2U9Kyt1O3MrKzt0cnl7cmV0dXJuIGkoKX1maW5hbGx5e3QoKX19dmFyIHI9dm9pZCAwO2Z1bmN0aW9uIG8oaSl7dmFyIHQ9cjtyPXZvaWQgMDt0cnl7cmV0dXJuIGkoKX1maW5hbGx5e3I9dH19dmFyIGYsaD12b2lkIDAscz0wLHY9MCx1PTAsZT0wLGM9dm9pZCAwLGQ9MDtmdW5jdGlvbiBhKGkpe2lmKHZvaWQgMCE9PXIpe3ZhciB0PWkubjtpZih2b2lkIDA9PT10fHx0LnQhPT1yKXt0PXtpOjAsUzppLHA6ci5zLG46dm9pZCAwLHQ6cixlOnZvaWQgMCx4OnZvaWQgMCxyOnR9O2lmKHZvaWQgMCE9PXIucylyLnMubj10O3Iucz10O2kubj10O2lmKDMyJnIuZilpLlModCk7cmV0dXJuIHR9ZWxzZSBpZigtMT09PXQuaSl7dC5pPTA7aWYodm9pZCAwIT09dC5uKXt0Lm4ucD10LnA7aWYodm9pZCAwIT09dC5wKXQucC5uPXQubjt0LnA9ci5zO3Qubj12b2lkIDA7ci5zLm49dDtyLnM9dH1yZXR1cm4gdH19fWZ1bmN0aW9uIGwoaSx0KXt0aGlzLnY9aTt0aGlzLmk9MDt0aGlzLm49dm9pZCAwO3RoaXMudD12b2lkIDA7dGhpcy5sPTA7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1sLnByb3RvdHlwZS5icmFuZD1pO2wucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXt2YXIgdD10aGlzLG49dGhpcy50O2lmKG4hPT1pJiZ2b2lkIDA9PT1pLmUpe2kueD1uO3RoaXMudD1pO2lmKHZvaWQgMCE9PW4pbi5lPWk7ZWxzZSBvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5XKXx8aS5jYWxsKHQpfSl9fTtsLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy50KXt2YXIgbj1pLmUscj1pLng7aWYodm9pZCAwIT09bil7bi54PXI7aS5lPXZvaWQgMH1pZih2b2lkIDAhPT1yKXtyLmU9bjtpLng9dm9pZCAwfWlmKGk9PT10aGlzLnQpe3RoaXMudD1yO2lmKHZvaWQgMD09PXIpbyhmdW5jdGlvbigpe3ZhciBpO251bGw9PShpPXQuWil8fGkuY2FsbCh0KX0pfX19O2wucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihpKXt2YXIgdD10aGlzO3JldHVybiBqKGZ1bmN0aW9uKCl7dmFyIG49dC52YWx1ZSxvPXI7cj12b2lkIDA7dHJ5e2kobil9ZmluYWxseXtyPW99fSx7bmFtZTpcInN1YlwifSl9O2wucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07bC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZStcIlwifTtsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07bC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gaS52YWx1ZX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgaT1hKHRoaXMpO2lmKHZvaWQgMCE9PWkpaS5pPXRoaXMuaTtyZXR1cm4gdGhpcy52fSxzZXQ6ZnVuY3Rpb24oaSl7aWYoaSE9PXRoaXMudil7aWYodj4xMDApdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7IWZ1bmN0aW9uKGkpe2lmKDAhPT1zJiYwPT09dilpZihpLmwhPT1lKXtpLmw9ZTtjPXtTOmksdjppLnYsaTppLmksbzpjfX19KHRoaXMpO3RoaXMudj1pO3RoaXMuaSsrO2QrKztzKys7dHJ5e2Zvcih2YXIgbj10aGlzLnQ7dm9pZCAwIT09bjtuPW4ueCluLnQuTigpfWZpbmFsbHl7dCgpfX19fSk7ZnVuY3Rpb24geShpLHQpe3JldHVybiBuZXcgbChpLHQpfWZ1bmN0aW9uIHcoaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKWlmKHQuUy5pIT09dC5pfHwhdC5TLmgoKXx8dC5TLmkhPT10LmkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gXyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4pe3ZhciBuPXQuUy5uO2lmKHZvaWQgMCE9PW4pdC5yPW47dC5TLm49dDt0Lmk9LTE7aWYodm9pZCAwPT09dC5uKXtpLnM9dDticmVha319fWZ1bmN0aW9uIGIoaSl7dmFyIHQ9aS5zLG49dm9pZCAwO3doaWxlKHZvaWQgMCE9PXQpe3ZhciByPXQucDtpZigtMT09PXQuaSl7dC5TLlUodCk7aWYodm9pZCAwIT09cilyLm49dC5uO2lmKHZvaWQgMCE9PXQubil0Lm4ucD1yfWVsc2Ugbj10O3QuUy5uPXQucjtpZih2b2lkIDAhPT10LnIpdC5yPXZvaWQgMDt0PXJ9aS5zPW59ZnVuY3Rpb24gcChpLHQpe2wuY2FsbCh0aGlzLHZvaWQgMCk7dGhpcy54PWk7dGhpcy5zPXZvaWQgMDt0aGlzLmc9ZC0xO3RoaXMuZj00O3RoaXMuVz1udWxsPT10P3ZvaWQgMDp0LndhdGNoZWQ7dGhpcy5aPW51bGw9PXQ/dm9pZCAwOnQudW53YXRjaGVkO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWV9cC5wcm90b3R5cGU9bmV3IGw7cC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3RoaXMuZiY9LTM7aWYoMSZ0aGlzLmYpcmV0dXJuITE7aWYoMzI9PSgzNiZ0aGlzLmYpKXJldHVybiEwO3RoaXMuZiY9LTU7aWYodGhpcy5nPT09ZClyZXR1cm4hMDt0aGlzLmc9ZDt0aGlzLmZ8PTE7aWYodGhpcy5pPjAmJiF3KHRoaXMpKXt0aGlzLmYmPS0yO3JldHVybiEwfXZhciBpPXI7dHJ5e18odGhpcyk7cj10aGlzO3ZhciB0PXRoaXMueCgpO2lmKDE2JnRoaXMuZnx8dGhpcy52IT09dHx8MD09PXRoaXMuaSl7dGhpcy52PXQ7dGhpcy5mJj0tMTc7dGhpcy5pKyt9fWNhdGNoKGkpe3RoaXMudj1pO3RoaXMuZnw9MTY7dGhpcy5pKyt9cj1pO2IodGhpcyk7dGhpcy5mJj0tMjtyZXR1cm4hMH07cC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZnw9MzY7Zm9yKHZhciB0PXRoaXMuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5TKHQpfWwucHJvdG90eXBlLlMuY2FsbCh0aGlzLGkpfTtwLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMCE9PXRoaXMudCl7bC5wcm90b3R5cGUuVS5jYWxsKHRoaXMsaSk7aWYodm9pZCAwPT09dGhpcy50KXt0aGlzLmYmPS0zMztmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlUodCl9fX07cC5wcm90b3R5cGUuTj1mdW5jdGlvbigpe2lmKCEoMiZ0aGlzLmYpKXt0aGlzLmZ8PTY7Zm9yKHZhciBpPXRoaXMudDt2b2lkIDAhPT1pO2k9aS54KWkudC5OKCl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtpZigxJnRoaXMuZil0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTt2YXIgaT1hKHRoaXMpO3RoaXMuaCgpO2lmKHZvaWQgMCE9PWkpaS5pPXRoaXMuaTtpZigxNiZ0aGlzLmYpdGhyb3cgdGhpcy52O3JldHVybiB0aGlzLnZ9fSk7ZnVuY3Rpb24gZyhpLHQpe3JldHVybiBuZXcgcChpLHQpfWZ1bmN0aW9uIFMoaSl7dmFyIG49aS5tO2kubT12b2lkIDA7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7cysrO3ZhciBvPXI7cj12b2lkIDA7dHJ5e24oKX1jYXRjaCh0KXtpLmYmPS0yO2kuZnw9ODttKGkpO3Rocm93IHR9ZmluYWxseXtyPW87dCgpfX19ZnVuY3Rpb24gbShpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlUodCk7aS54PXZvaWQgMDtpLnM9dm9pZCAwO1MoaSl9ZnVuY3Rpb24geChpKXtpZihyIT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoXCJPdXQtb2Ytb3JkZXIgZWZmZWN0XCIpO2IodGhpcyk7cj1pO3RoaXMuZiY9LTI7aWYoOCZ0aGlzLmYpbSh0aGlzKTt0KCl9ZnVuY3Rpb24gRShpLHQpe3RoaXMueD1pO3RoaXMubT12b2lkIDA7dGhpcy5zPXZvaWQgMDt0aGlzLnU9dm9pZCAwO3RoaXMuZj0zMjt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lO2lmKGYpZi5wdXNoKHRoaXMpfUUucHJvdG90eXBlLmM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLlMoKTt0cnl7aWYoOCZ0aGlzLmYpcmV0dXJuO2lmKHZvaWQgMD09PXRoaXMueClyZXR1cm47dmFyIHQ9dGhpcy54KCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl0aGlzLm09dH1maW5hbGx5e2koKX19O0UucHJvdG90eXBlLlM9ZnVuY3Rpb24oKXtpZigxJnRoaXMuZil0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTt0aGlzLmZ8PTE7dGhpcy5mJj0tOTtTKHRoaXMpO18odGhpcyk7cysrO3ZhciBpPXI7cj10aGlzO3JldHVybiB4LmJpbmQodGhpcyxpKX07RS5wcm90b3R5cGUuTj1mdW5jdGlvbigpe2lmKCEoMiZ0aGlzLmYpKXt0aGlzLmZ8PTI7dGhpcy51PWg7aD10aGlzfX07RS5wcm90b3R5cGUuZD1mdW5jdGlvbigpe3RoaXMuZnw9ODtpZighKDEmdGhpcy5mKSltKHRoaXMpfTtFLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5kKCl9O2Z1bmN0aW9uIGooaSx0KXt2YXIgbj1uZXcgRShpLHQpO3RyeXtuLmMoKX1jYXRjaChpKXtuLmQoKTt0aHJvdyBpfXZhciByPW4uZC5iaW5kKG4pO3JbU3ltYm9sLmRpc3Bvc2VdPXI7cmV0dXJuIHJ9ZnVuY3Rpb24gQyhpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj10aGlzO3JldHVybiBuKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseShyLFtdLnNsaWNlLmNhbGwodCkpfSl9KX19ZnVuY3Rpb24gTygpe3ZhciBpPWY7Zj1bXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1mO2lmKGYmJmkpaT1pLmNvbmNhdChmKTtmPWk7cmV0dXJuIHR9fXZhciBrPWZ1bmN0aW9uKGkpe2Zvcih2YXIgdCBpbiBpKXt2YXIgbj1pW3RdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4paVt0XT1DKG4pO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uJiYhKFwiYnJhbmRcImluIG4pKWsobil9fTtmdW5jdGlvbiBUKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0LG4scj1PKCk7dHJ5e249aS5hcHBseSh2b2lkIDAsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1jYXRjaChpKXtmPXZvaWQgMDt0aHJvdyBpfWZpbmFsbHl7dD1yKCl9ayhuKTtuW1N5bWJvbC5kaXNwb3NlXT1DKGZ1bmN0aW9uKCl7aWYodClmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldLmRpc3Bvc2UoKTt0PXZvaWQgMH0pO3JldHVybiBufX1leHBvcnR7cCBhcyBDb21wdXRlZCxFIGFzIEVmZmVjdCxsIGFzIFNpZ25hbCxDIGFzIGFjdGlvbixuIGFzIGJhdGNoLGcgYXMgY29tcHV0ZWQsVCBhcyBjcmVhdGVNb2RlbCxqIGFzIGVmZmVjdCx5IGFzIHNpZ25hbCxvIGFzIHVudHJhY2tlZH07Ly8jIHNvdXJjZU1hcHBpbmdVUkw9c2lnbmFscy1jb3JlLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBpLG9wdGlvbnMgYXMgbixpc1ZhbGlkRWxlbWVudCBhcyByLEZyYWdtZW50IGFzIHR9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZU1lbW8gYXMgbyx1c2VSZWYgYXMgZSx1c2VFZmZlY3QgYXMgZn1mcm9tXCJwcmVhY3QvaG9va3NcIjtpbXBvcnR7ZWZmZWN0IGFzIHUsU2lnbmFsIGFzIGEsY29tcHV0ZWQgYXMgYyxzaWduYWwgYXMgdixiYXRjaCBhcyBzfWZyb21cIkBwcmVhY3Qvc2lnbmFscy1jb3JlXCI7ZXhwb3J0e1NpZ25hbCxhY3Rpb24sYmF0Y2gsY29tcHV0ZWQsY3JlYXRlTW9kZWwsZWZmZWN0LHNpZ25hbCx1bnRyYWNrZWR9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjt2YXIgbCxkLGgscD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYhIXdpbmRvdy5fX1BSRUFDVF9TSUdOQUxTX0RFVlRPT0xTX18sbT1bXSxfPVtdO3UoZnVuY3Rpb24oKXtsPXRoaXMuTn0pKCk7ZnVuY3Rpb24gZyhpLHIpe25baV09ci5iaW5kKG51bGwsbltpXXx8ZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBiKGkpe2lmKGgpe3ZhciBuPWg7aD12b2lkIDA7bigpfWg9aSYmaS5TKCl9ZnVuY3Rpb24geShpKXt2YXIgbj10aGlzLHQ9aS5kYXRhLGU9dXNlU2lnbmFsKHQpO2UudmFsdWU9dDt2YXIgZj1vKGZ1bmN0aW9uKCl7dmFyIGk9bix0PW4uX192O3doaWxlKHQ9dC5fXylpZih0Ll9fYyl7dC5fX2MuX18kZnw9NDticmVha312YXIgbz1jKGZ1bmN0aW9uKCl7dmFyIGk9ZS52YWx1ZS52YWx1ZTtyZXR1cm4gMD09PWk/MDohMD09PWk/XCJcIjppfHxcIlwifSksZj1jKGZ1bmN0aW9uKCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoby52YWx1ZSkmJiFyKG8udmFsdWUpfSksYT11KGZ1bmN0aW9uKCl7dGhpcy5OPUY7aWYoZi52YWx1ZSl7dmFyIG49by52YWx1ZTtpZihpLl9fdiYmaS5fX3YuX19lJiYzPT09aS5fX3YuX19lLm5vZGVUeXBlKWkuX192Ll9fZS5kYXRhPW59fSksdj1uLl9fJHUuZDtuLl9fJHUuZD1mdW5jdGlvbigpe2EoKTt2LmNhbGwodGhpcyl9O3JldHVybltmLG9dfSxbXSksYT1mWzBdLHY9ZlsxXTtyZXR1cm4gYS52YWx1ZT92LnBlZWsoKTp2LnZhbHVlfXkuZGlzcGxheU5hbWU9XCJSZWFjdGl2ZVRleHROb2RlXCI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25maWd1cmFibGU6ITAsdmFsdWU6dm9pZCAwfSx0eXBlOntjb25maWd1cmFibGU6ITAsdmFsdWU6eX0scHJvcHM6e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybntkYXRhOntnZXQgdmFsdWUoKXtyZXR1cm4gaS52YWx1ZX19fX19LF9fYjp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjF9fSk7ZyhcIl9fYlwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHIsdD1uLnByb3BzO2Zvcih2YXIgbyBpbiB0KWlmKFwiY2hpbGRyZW5cIiE9PW8pe3ZhciBlPXRbb107aWYoZSBpbnN0YW5jZW9mIGEpe2lmKCFyKW4uX19ucD1yPXt9O3Jbb109ZTt0W29dPWUucGVlaygpfX19aShuKX0pO2coXCJfX3JcIixmdW5jdGlvbihpLG4pe2kobik7aWYobi50eXBlIT09dCl7YigpO3ZhciByLG89bi5fX2M7aWYobyl7by5fXyRmJj0tMjtpZih2b2lkIDA9PT0ocj1vLl9fJHUpKW8uX18kdT1yPWZ1bmN0aW9uKGksbil7dmFyIHI7dShmdW5jdGlvbigpe3I9dGhpc30se25hbWU6bn0pO3IuYz1pO3JldHVybiByfShmdW5jdGlvbigpe3ZhciBpO2lmKHApbnVsbD09KGk9ci55KXx8aS5jYWxsKHIpO28uX18kZnw9MTtvLnNldFN0YXRlKHt9KX0sXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlP24udHlwZS5kaXNwbGF5TmFtZXx8bi50eXBlLm5hbWU6XCJcIil9ZD1vO2Iocil9fSk7ZyhcIl9fZVwiLGZ1bmN0aW9uKGksbixyLHQpe2IoKTtkPXZvaWQgMDtpKG4scix0KX0pO2coXCJkaWZmZWRcIixmdW5jdGlvbihpLG4pe2IoKTtkPXZvaWQgMDt2YXIgcjtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiYocj1uLl9fZSkpe3ZhciB0PW4uX19ucCxvPW4ucHJvcHM7aWYodCl7dmFyIGU9ci5VO2lmKGUpZm9yKHZhciBmIGluIGUpe3ZhciB1PWVbZl07aWYodm9pZCAwIT09dSYmIShmIGluIHQpKXt1LmQoKTtlW2ZdPXZvaWQgMH19ZWxzZXtlPXt9O3IuVT1lfWZvcih2YXIgYSBpbiB0KXt2YXIgYz1lW2FdLHY9dFthXTtpZih2b2lkIDA9PT1jKXtjPXcocixhLHYpO2VbYV09Y31lbHNlIGMubyh2LG8pfWZvcih2YXIgcyBpbiB0KW9bc109dFtzXX19aShuKX0pO2Z1bmN0aW9uIHcoaSxuLHIsdCl7dmFyIG89biBpbiBpJiZ2b2lkIDA9PT1pLm93bmVyU1ZHRWxlbWVudCxlPXYociksZj1yLnBlZWsoKTtyZXR1cm57bzpmdW5jdGlvbihpLG4pe2UudmFsdWU9aTtmPWkucGVlaygpfSxkOnUoZnVuY3Rpb24oKXt0aGlzLk49Rjt2YXIgcj1lLnZhbHVlLnZhbHVlO2lmKGYhPT1yKXtmPXZvaWQgMDtpZihvKWlbbl09cjtlbHNlIGlmKG51bGwhPXImJighMSE9PXJ8fFwiLVwiPT09bls0XSkpaS5zZXRBdHRyaWJ1dGUobixyKTtlbHNlIGkucmVtb3ZlQXR0cmlidXRlKG4pfWVsc2UgZj12b2lkIDB9KX19ZyhcInVubW91bnRcIixmdW5jdGlvbihpLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByPW4uX19lO2lmKHIpe3ZhciB0PXIuVTtpZih0KXtyLlU9dm9pZCAwO2Zvcih2YXIgbyBpbiB0KXt2YXIgZT10W29dO2lmKGUpZS5kKCl9fX1uLl9fbnA9dm9pZCAwfWVsc2V7dmFyIGY9bi5fX2M7aWYoZil7dmFyIHU9Zi5fXyR1O2lmKHUpe2YuX18kdT12b2lkIDA7dS5kKCl9fX1pKG4pfSk7ZyhcIl9faFwiLGZ1bmN0aW9uKGksbixyLHQpe2lmKHQ8M3x8OT09PXQpbi5fXyRmfD0yO2kobixyLHQpfSk7aS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKGksbil7aWYodGhpcy5fX1IpcmV0dXJuITA7dmFyIHI9dGhpcy5fXyR1LHQ9ciYmdm9pZCAwIT09ci5zO2Zvcih2YXIgbyBpbiBuKXJldHVybiEwO2lmKHRoaXMuX19mfHxcImJvb2xlYW5cIj09dHlwZW9mIHRoaXMudSYmITA9PT10aGlzLnUpe3ZhciBlPTImdGhpcy5fXyRmO2lmKCEodHx8ZXx8NCZ0aGlzLl9fJGYpKXJldHVybiEwO2lmKDEmdGhpcy5fXyRmKXJldHVybiEwfWVsc2V7aWYoISh0fHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMyZ0aGlzLl9fJGYpcmV0dXJuITB9Zm9yKHZhciBmIGluIGkpaWYoXCJfX3NvdXJjZVwiIT09ZiYmaVtmXSE9PXRoaXMucHJvcHNbZl0pcmV0dXJuITA7Zm9yKHZhciB1IGluIHRoaXMucHJvcHMpaWYoISh1IGluIGkpKXJldHVybiEwO3JldHVybiExfTtmdW5jdGlvbiB1c2VTaWduYWwoaSxuKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB2KGksbil9LFtdKX1mdW5jdGlvbiB1c2VDb21wdXRlZChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZC5fXyRmfD00O3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIGMoZnVuY3Rpb24oKXtyZXR1cm4gci5jdXJyZW50KCl9LG4pfSxbXSl9dmFyIGs9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9zZXRUaW1lb3V0OmZ1bmN0aW9uKGkpe3ZhciBuPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpO2NhbmNlbEFuaW1hdGlvbkZyYW1lKHQpO2koKX0scj1zZXRUaW1lb3V0KG4sMzUpLHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxxPWZ1bmN0aW9uKGkpe3F1ZXVlTWljcm90YXNrKGZ1bmN0aW9uKCl7cXVldWVNaWNyb3Rhc2soaSl9KX07ZnVuY3Rpb24gQSgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPW0uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBUKCl7aWYoMT09PW0ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGspKEEpfWZ1bmN0aW9uIHgoKXtzKGZ1bmN0aW9uKCl7dmFyIGk7d2hpbGUoaT1fLnNoaWZ0KCkpbC5jYWxsKGkpfSl9ZnVuY3Rpb24gRigpe2lmKDE9PT1fLnB1c2godGhpcykpKG4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxxKSh4KX1mdW5jdGlvbiB1c2VTaWduYWxFZmZlY3QoaSxuKXt2YXIgcj1lKGkpO3IuY3VycmVudD1pO2YoZnVuY3Rpb24oKXtyZXR1cm4gdShmdW5jdGlvbigpe3RoaXMuTj1UO3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX1mdW5jdGlvbiBNKGkpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSxbXSk7ZihmdW5jdGlvbigpe3JldHVybiBuW1N5bWJvbC5kaXNwb3NlXX0sW25dKTtyZXR1cm4gbn1leHBvcnR7dXNlQ29tcHV0ZWQsTSBhcyB1c2VNb2RlbCx1c2VTaWduYWwsdXNlU2lnbmFsRWZmZWN0fTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBHbG9iYWwgZXJyb3Igc3VyZmFjZSBmb3IgYWN0aW9uIGhhbmRsZXJzLlxuICpcbiAqIEFjdGlvbnMgdGhhdCBmYWlsIHNldCB0aGUgZXJyb3JTdGF0ZSBzaWduYWwgdmlhIGBzdWJtaXRFcnJvcmA7IGEgYDxUb2FzdD5gXG4gKiBjb21wb25lbnQgY29uc3VtZXMgdGhhdCBzaWduYWwgYW5kIHJlbmRlcnMgYSBkaXNtaXNzYWJsZSBtZXNzYWdlLiBIYW5kbGVyc1xuICogdGhhdCBjYXRjaCBleHBlY3RlZCBmYWlsdXJlcyAodmFsaWRhdGlvbiwgcXVvdGEpIG1heSBjYWxsIGBzZXRFcnJvcmAgZGlyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvclNldmVyaXR5ID0gXCJlcnJvclwiIHwgXCJ3YXJuaW5nXCIgfCBcImluZm9cIjtcblxuZXhwb3J0IHR5cGUgRXJyb3JFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXZlcml0eTogRXJyb3JTZXZlcml0eTtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclN0YXRlID0gc2lnbmFsPEVycm9yRW50cnlbXT4oW10pO1xuXG5sZXQgbmV4dElkID0gMDtcbmZ1bmN0aW9uIGFsbG9jSWQoKTogc3RyaW5nIHtcbiAgbmV4dElkICs9IDE7XG4gIHJldHVybiBgcG9sbHktZXJyLSR7bmV4dElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBvcHRzOiB7IHNldmVyaXR5PzogRXJyb3JTZXZlcml0eTsgYWN0aW9uPzogc3RyaW5nIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cnk6IEVycm9yRW50cnkgPSB7XG4gICAgaWQ6IGFsbG9jSWQoKSxcbiAgICBtZXNzYWdlLFxuICAgIHNldmVyaXR5OiBvcHRzLnNldmVyaXR5ID8/IFwiZXJyb3JcIixcbiAgICBhY3Rpb246IG9wdHMuYWN0aW9uLFxuICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfTtcbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IFsuLi5lcnJvclN0YXRlLnZhbHVlLCBlbnRyeV07XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvclN0YXRlLnZhbHVlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIGVycm9yU3RhdGUudmFsdWUgPSBlcnJvclN0YXRlLnZhbHVlLmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gaWQpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGFuIGFjdGlvbidzIGNhdGNoIGJsb2NrLlxuICogTG9ncyB0aGUgYWN0aW9uIG5hbWUgKyBlcnJvciBhbmQgc3VyZmFjZXMgYSB1c2VyLXZpc2libGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Ym1pdEVycm9yKGFjdGlvbjogc3RyaW5nLCBlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICByZXR1cm4gc2V0RXJyb3IobWVzc2FnZSwgeyBhY3Rpb24sIHNldmVyaXR5OiBcImVycm9yXCIgfSk7XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheSByZWdpc3RyeS5cbiAqXG4gKiBUcmFja3MgdGhlIHN0YWNrIG9mIG9wZW4gb3ZlcmxheXMgKG1vZGFscywgcG9wb3ZlcnMsIGNvbmZpcm0gZGlhbG9ncykgc29cbiAqIEVzY2FwZSBjYW4gY2xvc2UgdGhlIHRvcG1vc3QgYW5kIGBkYXRhLW92ZXJsYXktaWRgLWJhc2VkIERPTSBzY2FucyBoYXZlXG4gKiBhIG1pcnJvciBpbiBtZW1vcnkuIEVhY2ggZW50cnkgc3RvcmVzIGFuIGlkIHBsdXMgYW4gb3B0aW9uYWwgY2xvc2VcbiAqIGNhbGxiYWNrOyBgY2xvc2VUb3BPdmVybGF5YCBpbnZva2VzIHRoZSBjYWxsYmFjayBhbmQgcG9wcyB0aGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBPdmVybGF5RW50cnkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3Qgc3RhY2sgPSBzaWduYWw8T3ZlcmxheUVudHJ5W10+KFtdKTtcblxuLyoqIEN1cnJlbnQgb3ZlcmxheSBzdGFjayBhcyBhIHJlYWQtb25seSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybGF5U3RhY2soKTogcmVhZG9ubHkgT3ZlcmxheUVudHJ5W10ge1xuICByZXR1cm4gc3RhY2sudmFsdWU7XG59XG5cbi8qKiBJcyBhbnkgb3ZlcmxheSBjdXJyZW50bHkgb3Blbj8gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPcGVuT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YWNrLnZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbi8qKiBUaGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICByZXR1cm4gc1tzLmxlbmd0aCAtIDFdO1xufVxuXG4vKiogUHVzaCBhbiBvdmVybGF5IG9udG8gdGhlIHN0YWNrLiBSZXR1cm5zIHRoZSBwb3BwZWQgZW50cnkgd2hlbiBjbG9zZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaE92ZXJsYXkoZW50cnk6IE92ZXJsYXlFbnRyeSk6IHZvaWQge1xuICBzdGFjay52YWx1ZSA9IFsuLi5zdGFjay52YWx1ZSwgZW50cnldO1xufVxuXG4vKiogUG9wIGEgc3BlY2lmaWMgb3ZlcmxheSBieSBpZCAob3IgdGhlIHRvcCBpZiBubyBpZCBnaXZlbikuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wT3ZlcmxheShpZD86IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzdGFjay52YWx1ZTtcbiAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHRvcCA9IHNbcy5sZW5ndGggLSAxXTtcbiAgICBzdGFjay52YWx1ZSA9IHMuc2xpY2UoMCwgLTEpO1xuICAgIHJldHVybiB0b3A7XG4gIH1cbiAgY29uc3QgaWR4ID0gcy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVudHJ5ID0gc1tpZHhdO1xuICBzdGFjay52YWx1ZSA9IFsuLi5zLnNsaWNlKDAsIGlkeCksIC4uLnMuc2xpY2UoaWR4ICsgMSldO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBDbG9zZSB0aGUgdG9wIG92ZXJsYXkgYnkgY2FsbGluZyBpdHMgb25DbG9zZSBhbmQgcG9wcGluZyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9wID0gdG9wT3ZlcmxheSgpO1xuICBpZiAoIXRvcCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdG9wLm9uQ2xvc2U/LigpO1xuICByZXR1cm4gcG9wT3ZlcmxheSh0b3AuaWQpO1xufVxuXG4vKiogUmVzZXQgdGhlIHN0YWNrLiBJbnRlbmRlZCBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRPdmVybGF5U3RhY2soKTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gW107XG59XG4iLAogICAgIi8qKlxuICogRXZlbnQgZGVsZWdhdGlvbiBjb3JlLlxuICpcbiAqIE9uZSBkb2N1bWVudCBsaXN0ZW5lciBkaXNwYXRjaGVzIGBkYXRhLWFjdGlvbmAgZXZlbnRzIHRvIHR5cGVkIGhhbmRsZXJzLlxuICogV2Fsa3MgdXAgdGhlIERPTSB3aXRoIGBjbG9zZXN0KCdbZGF0YS1hY3Rpb25dJylgLCBwYXJzZXMgYGRhdGEtYWN0aW9uLSpgXG4gKiBhdHRyaWJ1dGVzIGludG8gYSBjYW1lbENhc2Ugb2JqZWN0LCBhbmQgaGFuZHMgdGhlIGRpc3BhdGNoIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogRm9ybXMgYXJlIHNraXBwZWQgb24gY2xpY2sg4oCUIGEgYDxmb3JtIGRhdGEtYWN0aW9uPVwiLi4uXCI+YCByZXNwb25kcyB0b1xuICogc3VibWl0IG9ubHksIHNvIGNsaWNrcyBvbiBmb3JtIGNoaWxkcmVuIGRvbid0IGJ1YmJsZSBpbnRvIGl0cyBhY3Rpb24uXG4gKiBFc2NhcGUgY2xvc2VzIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgY2FsbGluZyB0aGUgb3ZlcmxheSByZWdpc3RyeS5cbiAqIEVudGVyL1NwYWNlIG9uIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyB3aXRoIGBkYXRhLWFjdGlvbmAgZmlyZSB0aGVcbiAqIGFjdGlvbiAoU3BhY2UgaXMgcHJldmVudGVkIHRvIHN0b3AgcGFnZSBzY3JvbGwpLiBDbGljayBvdXRzaWRlIGFueVxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFsc28gcG9wcyB0aGUgdG9wIG92ZXJsYXkuXG4gKi9cblxuaW1wb3J0IHsgY2xvc2VUb3BPdmVybGF5IGFzIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheS50c1wiO1xuXG4vKiogRWxlbWVudHMgdGhhdCBuYXRpdmVseSBmaXJlIGNsaWNrIG9uIEVudGVyL1NwYWNlLiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX1RBR1MgPSBuZXcgU2V0KFtcIkJVVFRPTlwiLCBcIkFcIiwgXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdKTtcblxuLyoqIEV2ZW50IHR5cGVzIHRoYXQgbWF5IHRyaWdnZXIgYSBkYXRhLWFjdGlvbiBkaXNwYXRjaC4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcImNsaWNrXCIsIFwic3VibWl0XCIsIFwiY2hhbmdlXCIsIFwiaW5wdXRcIl0pO1xuXG4vKiogUGFyc2VkIGFjdGlvbiBkaXNwYXRjaCDigJQgd2hhdCB0aGUgcnVudGltZSByZXNvbHZlcyBiZWZvcmUgaW52b2tpbmcgYSBoYW5kbGVyLiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uRGlzcGF0Y2ggPSB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgZXZlbnQ6IEV2ZW50O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQYXJzZSBgZGF0YS1hY3Rpb24tKmAgYXR0cmlidXRlcyBpbnRvIGNhbWVsQ2FzZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogYGRhdGEtYWN0aW9uLXRleHQtc2V0LWlkPVwiNDJcImAgYmVjb21lcyBgeyB0ZXh0U2V0SWQ6IFwiNDJcIiB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWN0aW9uRGF0YShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgYXR0ciBvZiBBcnJheS5mcm9tKGVsZW1lbnQuYXR0cmlidXRlcykpIHtcbiAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0dHIubmFtZVxuICAgICAgICAucmVwbGFjZShcImRhdGEtYWN0aW9uLVwiLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvLShbYS16XSkvZywgKF9tOiBzdHJpbmcsIGxldHRlcjogc3RyaW5nKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICBkYXRhW2tleV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBDbG9zZSB0aGUgdG9wbW9zdCBvdmVybGF5IGJ5IGRpc3BhdGNoaW5nIGBvdmVybGF5OmNsb3NlYCBvbiBpdHMgZWxlbWVudC5cbiAqIE92ZXJsYXlzIG1hcmsgdGhlbXNlbHZlcyB3aXRoIGBkYXRhLW92ZXJsYXktaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VUb3BPdmVybGF5KCk6IHZvaWQge1xuICBjb25zdCBvdmVybGF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgXCJbZGF0YS1vdmVybGF5LWlkXTpwb3BvdmVyLW9wZW4sIGRpYWxvZ1tkYXRhLW92ZXJsYXktaWRdW29wZW5dXCJcbiAgKTtcbiAgaWYgKG92ZXJsYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCB0b3BPdmVybGF5ID0gb3ZlcmxheXNbb3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gIGlmICghdG9wT3ZlcmxheSkgcmV0dXJuO1xuICB0b3BPdmVybGF5LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwib3ZlcmxheTpjbG9zZVwiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7IGlkOiB0b3BPdmVybGF5LmdldEF0dHJpYnV0ZShcImRhdGEtb3ZlcmxheS1pZFwiKSB9LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIERPTSBldmVudCB0byBhbiBBY3Rpb25EaXNwYXRjaCwgb3IgbnVsbCBpZiBubyBkYXRhLWFjdGlvbiBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFjdGlvbihldmVudDogRXZlbnQpOiBBY3Rpb25EaXNwYXRjaCB8IG51bGwge1xuICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtYWN0aW9uXVwiKTtcbiAgaWYgKCEoYWN0aW9uRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG51bGw7XG4gIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgYWN0aW9uRWxlbWVudC50YWdOYW1lID09PSBcIkZPUk1cIikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hY3Rpb25cIik7XG4gIGlmICghYWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBhY3Rpb24sXG4gICAgZWxlbWVudDogYWN0aW9uRWxlbWVudCxcbiAgICBldmVudCxcbiAgICBkYXRhOiBwYXJzZUFjdGlvbkRhdGEoYWN0aW9uRWxlbWVudCksXG4gIH07XG59XG5cbi8qKlxuICogSW5zdGFsbCBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgZm9yIHRoZSBkZWxlZ2F0aW9uIHN5c3RlbS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBldmVyeSBsaXN0ZW5lciBpdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uKFxuICBvbkRpc3BhdGNoOiAoZGlzcGF0Y2g6IEFjdGlvbkRpc3BhdGNoKSA9PiB2b2lkLFxuICBvcHRpb25zOiB7IG9uRXNjYXBlPzogKCkgPT4gdm9pZDsgb25PdXRzaWRlT3ZlcmxheUNsaWNrPzogKCkgPT4gdm9pZCB9ID0ge31cbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBoYW5kbGVBY3Rpb25FdmVudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHJlc29sdmVBY3Rpb24oZXZlbnQpO1xuICAgIGlmIChkaXNwYXRjaCkgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uRXNjYXBlKSB7XG4gICAgICAgIG9wdGlvbnMub25Fc2NhcGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5KCk7XG4gICAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5ID09PSBcIiBcIikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgIGlmIChJTlRFUkFDVElWRV9UQUdTLmhhcyh0YXJnZXQudGFnTmFtZSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgY29uc3QgY2xpY2tlZE92ZXJsYXkgPSBldmVudC50YXJnZXQuY2xvc2VzdChcIltkYXRhLW92ZXJsYXktaWRdXCIpO1xuICAgIGlmIChjbGlja2VkT3ZlcmxheSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdChcImJ1dHRvbltwb3BvdmVydGFyZ2V0XVwiKSkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaykge1xuICAgICAgb3B0aW9ucy5vbk91dHNpZGVPdmVybGF5Q2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlQWN0aW9uRXZlbnQpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGhhbmRsZU1vdXNlRG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gICAgfVxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGb3JtIHByaW1pdGl2ZS5cbiAqXG4gKiBgY3JlYXRlRm9ybWAgcmV0dXJucyBhIHR5cGVkIGZvcm0gc3RvcmU6IHBlci1maWVsZCBzaWduYWxzLCBhbiBhZ2dyZWdhdGVkXG4gKiB2YWx1ZXMgc2lnbmFsLCBvcGVuL2Nsb3NlL3N1Ym1pdCBtZXRob2RzLCBhbmQgdGhyZWUgYXV0by1yZWdpc3RlcmVkIGFjdGlvblxuICogaGFuZGxlcnMgKGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGApIHRoYXQgY2FsbGVycyBzcHJlYWRcbiAqIGludG8gdGhlaXIgZ2xvYmFsIGFjdGlvbiByZWdpc3RyeS5cbiAqXG4gKiBMaWZlY3ljbGU6XG4gKiAgIG9wZW4gIOKGkiByZXNldHMgZmllbGRzIHRvIGluaXRpYWxWYWx1ZXMsIGFwcGxpZXMgb25PcGVuIG92ZXJyaWRlcyxcbiAqICAgICAgICAgICBzZXRzIGlzT3BlbiA9IHRydWUsIHJlY29yZHMgZGF0YS1hY3Rpb24tKiBkYXRhIGluIG9wZW5QYXJhbXNcbiAqICAgdHlwaW5nIOKGkiB1bmNvbnRyb2xsZWQgaW5wdXRzIGtlZXAgdGhlaXIgb3duIHN0YXRlOyBjb250cm9sbGVkIGlucHV0c1xuICogICAgICAgICAgIHdyaXRlIGZpZWxkcy5YLnZhbHVlIGRpcmVjdGx5XG4gKiAgIHN1Ym1pdCDihpIgcmVhZHMgRm9ybURhdGEgZnJvbSB0aGUgZm9ybSBlbGVtZW50LCBtZXJnZXMgaW50byBmaWVsZHMsXG4gKiAgICAgICAgICAgcnVucyBvcHRpb25hbCB2YWxpZGF0ZSwgY2FsbHMgdXNlciBvblN1Ym1pdCB3aXRoIGZpbmFsIHZhbHVlcyxcbiAqICAgICAgICAgICBjbG9zZXMgb24gc3VjY2Vzcywgc2V0cyBlcnJvclN0YXRlIG9uIGZhaWx1cmVcbiAqICAgY2xvc2UgIOKGkiByZXNldHMgYW5kIHNldHMgaXNPcGVuID0gZmFsc2VcbiAqICAgZ3VhcmQgIOKGkiBhdXRvbm9tb3VzIGVmZmVjdDsgaWYgZ3VhcmQoKSByZXR1cm5zIGZhbHNlIHdoaWxlIG9wZW4sIGNsb3NlKClcbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCB0eXBlIFJlYWRvbmx5U2lnbmFsLCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgc3VibWl0RXJyb3IgfSBmcm9tIFwiLi9lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LnRzXCI7XG5cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgSFRNTEZvcm1FbGVtZW50IHtcbiAgaWYgKCF0YXJnZXQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50O1xuICB9XG4gIGNvbnN0IHQgPSB0YXJnZXQgYXMgdW5rbm93biBhcyB7IHRhZ05hbWU/OiB1bmtub3duIH07XG4gIHJldHVybiB0eXBlb2YgdC50YWdOYW1lID09PSBcInN0cmluZ1wiICYmIHQudGFnTmFtZSA9PT0gXCJGT1JNXCI7XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPiA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4gPSB7XG4gIHZhbHVlczogVFZhbHVlcztcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbmZpZzxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIC8qKiBVc2VkIGFzIGFjdGlvbiBuYW1lc3BhY2U6IGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGAuICovXG4gIG5hbWU6IHN0cmluZztcbiAgaW5pdGlhbFZhbHVlczogVFZhbHVlcztcbiAgb25TdWJtaXQ6IChjdHg6IEZvcm1TdWJtaXRDb250ZXh0PFRWYWx1ZXMsIFRTdG9yZXM+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEludm9rZWQgb24gb3BlbjsgcmV0dXJuIHBhcnRpYWwgb3ZlcnJpZGVzIHRvIHByZS1wb3B1bGF0ZSBmaWVsZHMuICovXG4gIG9uT3Blbj86IChjdHg6IEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPikgPT4gUGFydGlhbDxUVmFsdWVzPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiDihpIgZm9ybSBhdXRvLWNsb3NlcyAoZW50aXR5LWRlbGV0aW9uIGd1YXJkKS4gKi9cbiAgZ3VhcmQ/OiAoY3R4OiB7IHN0b3JlczogVFN0b3JlcyB9KSA9PiBib29sZWFuO1xuICAvKiogU3luY2hyb25vdXMgdmFsaWRhdGlvbi4gUmV0dXJuaW5nIGtleXMgYmxvY2tzIHN1Ym1pdC4gKi9cbiAgdmFsaWRhdGU/OiAodmFsdWVzOiBUVmFsdWVzKSA9PiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+PiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3RvcmU8VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+ID0ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzT3BlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZhbHVlczogUmVhZG9ubHlTaWduYWw8VFZhbHVlcz47XG4gIHJlYWRvbmx5IGZpZWxkczogeyBbSyBpbiBrZXlvZiBUVmFsdWVzXTogU2lnbmFsPFRWYWx1ZXNbS10+IH07XG4gIHJlYWRvbmx5IGVycm9yczogUmVhZG9ubHlTaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+O1xuICByZWFkb25seSBpc1N1Ym1pdHRpbmc6IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBvcGVuUGFyYW1zOiBSZWFkb25seVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgb3BlbihvdmVycmlkZT86IFBhcnRpYWw8VFZhbHVlcz4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICBjbG9zZSgpOiB2b2lkO1xuICBzdWJtaXQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBMYXRlLWJpbmRzIHN0b3JlczsgcmVxdWlyZWQgYmVmb3JlIGd1YXJkL29uT3Blbi9vblN1Ym1pdCBjYW4gYWNjZXNzIHN0b3Jlcy4gKi9cbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xuICAvKiogQWN0aW9uIGhhbmRsZXIgZW50cmllcy4gU3ByZWFkIGludG8gdGhlIHVzZXIncyBBY3Rpb25SZWdpc3RyeS4gKi9cbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4oXG4gIGNvbmZpZzogRm9ybUNvbmZpZzxUVmFsdWVzLCBUU3RvcmVzPlxuKTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+IHtcbiAgY29uc3QgZmllbGRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLmluaXRpYWxWYWx1ZXMpIGFzIHVua25vd24gYXMgKGtleW9mIFRWYWx1ZXMpW107XG5cbiAgY29uc3QgZmllbGRzID0ge30gYXMgdW5rbm93biBhcyB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgZmllbGRzW2tleV0gPSBzaWduYWwoY29uZmlnLmluaXRpYWxWYWx1ZXNba2V5XSk7XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlZDxUVmFsdWVzPigoKSA9PiB7XG4gICAgY29uc3QgdiA9IHt9IGFzIHVua25vd24gYXMgVFZhbHVlcztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgIHZba2V5XSA9IGZpZWxkc1trZXldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSk7XG5cbiAgY29uc3QgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+Pih7fSk7XG4gIGNvbnN0IG9wZW5QYXJhbXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGxldCBnZXRTdG9yZXNSZWY6ICgoKSA9PiBUU3RvcmVzKSB8IG51bGwgPSBudWxsO1xuICBsZXQgZGlzcG9zZUd1YXJkRWZmZWN0OiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXNPclRocm93KCk6IFRTdG9yZXMge1xuICAgIGlmICghZ2V0U3RvcmVzUmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGb3JtIFwiJHtjb25maWcubmFtZX1cIiB1c2VkIGJlZm9yZSBiaW5kU3RvcmVzKCkuIENhbGwgZm9ybS5iaW5kU3RvcmVzKCgpID0+IHlvdXJTdG9yZXMpIGF0IGFwcCBpbml0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZXNSZWYoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VG9Jbml0aWFsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgZmllbGRzW2tleV0udmFsdWUgPSBjb25maWcuaW5pdGlhbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBvcGVuIGFwcGxpZXMgdHdvIGxheWVycyBvZiBvdmVycmlkZXMgcGx1cyBvcHRpb25hbCBvbk9wZW4g4oCUIGJyYW5jaHkgYnkgZGVzaWduLlxuICBmdW5jdGlvbiBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pOiB2b2lkIHtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSBwYXJhbXM7XG4gICAgaWYgKGNvbmZpZy5vbk9wZW4gJiYgZ2V0U3RvcmVzUmVmKSB7XG4gICAgICBjb25zdCBvbk9wZW5PdmVycmlkZSA9IGNvbmZpZy5vbk9wZW4oeyBkYXRhOiBwYXJhbXMsIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpIH0pID8/IHt9O1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob25PcGVuT3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkIHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzdWJtaXQgZnVubmVscyBGb3JtRGF0YSwgdmFsaWRhdGUsIG9uU3VibWl0LCBlcnJvclN0YXRlLCBhbmQgY2xvc2Ug4oCUIG9uZS1wYXRoLXBlci1zdGFnZSBieSBkZXNpZ24uXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudCAmJiBpc0Zvcm1FbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKGV2ZW50LnRhcmdldCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZmQuZ2V0KGtleSBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gICAgICAgIGlmIChyYXcgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IFN0cmluZyhyYXcpIGFzIHVua25vd24gYXMgVFZhbHVlc1t0eXBlb2Yga2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVzLnZhbHVlO1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBjb25maWcudmFsaWRhdGU/LihjdXJyZW50KTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9ycyAmJiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlcnJvcnMudmFsdWUgPSB2YWxpZGF0aW9uRXJyb3JzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgICBpc1N1Ym1pdHRpbmcudmFsdWUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25maWcub25TdWJtaXQoe1xuICAgICAgICB2YWx1ZXM6IGN1cnJlbnQsXG4gICAgICAgIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpLFxuICAgICAgfSk7XG4gICAgICBjbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3VibWl0RXJyb3IoYCR7Y29uZmlnLm5hbWV9OnN1Ym1pdGAsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRTdG9yZXMoZ2V0U3RvcmVzOiAoKSA9PiBUU3RvcmVzKTogdm9pZCB7XG4gICAgZ2V0U3RvcmVzUmVmID0gZ2V0U3RvcmVzO1xuICAgIGRpc3Bvc2VHdWFyZEVmZmVjdD8uKCk7XG4gICAgY29uc3QgZ3VhcmRGbiA9IGNvbmZpZy5ndWFyZDtcbiAgICBpZiAoZ3VhcmRGbikge1xuICAgICAgZGlzcG9zZUd1YXJkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKCFndWFyZEZuKHsgc3RvcmVzOiBnZXRTdG9yZXMoKSB9KSkgY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFjdGlvbnM6IEFjdGlvblJlZ2lzdHJ5PFRTdG9yZXM+ID0ge1xuICAgIFtgJHtjb25maWcubmFtZX06b3BlbmBdOiAoeyBkYXRhIH0pID0+IHtcbiAgICAgIG9wZW4odW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06Y2xvc2VgXTogKCkgPT4ge1xuICAgICAgY2xvc2UoKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06c3VibWl0YF06IGFzeW5jICh7IGV2ZW50IH0pID0+IHtcbiAgICAgIGF3YWl0IHN1Ym1pdChldmVudCk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgIGlzT3BlbixcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRzLFxuICAgIGVycm9ycyxcbiAgICBpc1N1Ym1pdHRpbmcsXG4gICAgb3BlblBhcmFtcyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIHN1Ym1pdCxcbiAgICBiaW5kU3RvcmVzLFxuICAgIGFjdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQ29tcG9zZSBtYW55IGZvcm1zIGludG8gYSBzaW5nbGUgc2V0OiBtZXJnZWQgYWN0aW9ucywgY2xvc2VBbGwsIG9wZW5Gb3JtIHNpZ25hbC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVNldDxUU3RvcmVzPiA9IHtcbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG4gIG9wZW5Gb3JtOiBSZWFkb25seVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgY2xvc2VBbGwoKTogdm9pZDtcbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TZXQ8VFN0b3Jlcz4oXG4gIGZvcm1zOiByZWFkb25seSBGb3JtU3RvcmU8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz5bXVxuKTogRm9ybVNldDxUU3RvcmVzPiB7XG4gIGNvbnN0IG1lcmdlZDogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7fTtcbiAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihtZXJnZWQsIGZvcm0uYWN0aW9ucyk7XG4gIH1cblxuICBjb25zdCBvcGVuRm9ybSA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICAgIGlmIChmb3JtLmlzT3Blbi52YWx1ZSkgcmV0dXJuIGZvcm0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aW9uczogbWVyZ2VkLFxuICAgIG9wZW5Gb3JtLFxuICAgIGNsb3NlQWxsKCkge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmNsb3NlKCk7XG4gICAgfSxcbiAgICBiaW5kU3RvcmVzKGdldFN0b3Jlcykge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmJpbmRTdG9yZXMoZ2V0U3RvcmVzKTtcbiAgICB9LFxuICB9O1xufVxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyByLEZyYWdtZW50IGFzIGV9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciB0PS9bXCImPF0vO2Z1bmN0aW9uIG4ocil7aWYoMD09PXIubGVuZ3RofHwhMT09PXQudGVzdChyKSlyZXR1cm4gcjtmb3IodmFyIGU9MCxuPTAsbz1cIlwiLGY9XCJcIjtuPHIubGVuZ3RoO24rKyl7c3dpdGNoKHIuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDpmPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpmPVwiJmFtcDtcIjticmVhaztjYXNlIDYwOmY9XCImbHQ7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1uIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksbys9ZixlPW4rMX1yZXR1cm4gbiE9PWUmJihvKz1yLnNsaWNlKGUsbikpLG99dmFyIG89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxmPTAsaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHUoZSx0LG4sbyxpLHUpe3R8fCh0PXt9KTt2YXIgYSxjLHA9dDtpZihcInJlZlwiaW4gcClmb3IoYyBpbiBwPXt9LHQpXCJyZWZcIj09Yz9hPXRbY106cFtjXT10W2NdO3ZhciBsPXt0eXBlOmUscHJvcHM6cCxrZXk6bixyZWY6YSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1mLF9faTotMSxfX3U6MCxfX3NvdXJjZTppLF9fc2VsZjp1fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoYT1lLmRlZmF1bHRQcm9wcykpZm9yKGMgaW4gYSl2b2lkIDA9PT1wW2NdJiYocFtjXT1hW2NdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShsKSxsfWZ1bmN0aW9uIGEocil7dmFyIHQ9dShlLHt0cGw6cixleHByczpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX0pO3JldHVybiB0LmtleT10Ll9fdix0fXZhciBjPXt9LHA9L1tBLVpdL2c7ZnVuY3Rpb24gbChlLHQpe2lmKHIuYXR0cil7dmFyIGY9ci5hdHRyKGUsdCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpcmV0dXJuIGZ9aWYodD1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnZhbHVlT2Y/ci52YWx1ZU9mKCk6cn0odCksXCJyZWZcIj09PWV8fFwia2V5XCI9PT1lKXJldHVyblwiXCI7aWYoXCJzdHlsZVwiPT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBpPVwiXCI7Zm9yKHZhciB1IGluIHQpe3ZhciBhPXRbdV07aWYobnVsbCE9YSYmXCJcIiE9PWEpe3ZhciBsPVwiLVwiPT11WzBdP3U6Y1t1XXx8KGNbdV09dS5yZXBsYWNlKHAsXCItJCZcIikudG9Mb3dlckNhc2UoKSkscz1cIjtcIjtcIm51bWJlclwiIT10eXBlb2YgYXx8bC5zdGFydHNXaXRoKFwiLS1cIil8fG8udGVzdChsKXx8KHM9XCJweDtcIiksaT1pK2wrXCI6XCIrYStzfX1yZXR1cm4gZSsnPVwiJytuKGkpKydcIid9cmV0dXJuIG51bGw9PXR8fCExPT09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdHx8XCJvYmplY3RcIj09dHlwZW9mIHQ/XCJcIjohMD09PXQ/ZTplKyc9XCInK24oXCJcIit0KSsnXCInfWZ1bmN0aW9uIHMocil7aWYobnVsbD09cnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiBudWxsO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXtpZih2b2lkIDA9PT1yLmNvbnN0cnVjdG9yKXJldHVybiByO2lmKGkocikpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV09cyhyW2VdKTtyZXR1cm4gcn19cmV0dXJuIG4oXCJcIityKX1leHBvcnR7dSBhcyBqc3gsbCBhcyBqc3hBdHRyLHUgYXMganN4REVWLHMgYXMganN4RXNjYXBlLGEgYXMganN4VGVtcGxhdGUsdSBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIFN0b3JlIGJhc2UgKyBQcmVhY3QgY29udGV4dC5cbiAqXG4gKiBgY3JlYXRlU3RvcmVgIGlzIGEgdGhpbiBjb252ZW50aW9uLWVuZm9yY2VyOiBhIHR5cGVkIGJhZyBvZiBzaWduYWxzXG4gKiBwbHVzIG1ldGhvZHMuIEFwcHMgdXNlIGl0IHRvIGRlZmluZSBkb21haW4gc3RvcmVzIHdob3NlIG9ubHkgcHVibGljXG4gKiBtdXRhdGlvbiBzdXJmYWNlIGlzIG5hbWVkIG1ldGhvZHMgKGFjdGlvbnMgY2FsbCB0aGVtOyBjb21wb25lbnRzIHJlYWRcbiAqIHNpZ25hbHMgYW5kIGRpc3BhdGNoIGFjdGlvbnMpLiBObyBjbGV2ZXJuZXNzIOKAlCBhIG5hbWVkIHBhdHRlcm4gbW9yZVxuICogdGhhbiBhIGxpYnJhcnkuXG4gKlxuICogYFN0b3JlUHJvdmlkZXJgICsgYHVzZVN0b3Jlc2Agd2lyZSB0aGUgc3RvcmVzIGJhZyBpbnRvIFByZWFjdCBjb250ZXh0XG4gKiBzbyBjb21wb25lbnRzIGFuZCB0aGUgZGVsZWdhdGlvbiBydW50aW1lIGNhbiByZWFjaCBpdCB2aWEgYSBzaW5nbGUgaG9vay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgaGVscGVyOyBleGlzdHMgc28gZG9tYWluIHN0b3JlcyBoYXZlIGEgY2Fub25pY2FsIGNyZWF0aW9uXG4gKiBjYWxsIGV2ZW4gdGhvdWdoIHRoZSBiYWcgaXRzZWxmIGlzIGEgcGxhaW4gb2JqZWN0LiBDZW50cmFsaXNpbmcgaGVyZVxuICogbGV0cyB1cyBoYW5nIGFkZGl0aW9uYWwgYmVoYXZpb3VyIG9mZiB0aGUgY2FsbCBzaXRlIGxhdGVyIChkZWJ1Z1xuICogaW5zdHJ1bWVudGF0aW9uLCBkZXZ0b29scykgd2l0aG91dCBhIG1pZ3JhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KGluaXQ6IFQpOiBUIHtcbiAgcmV0dXJuIGluaXQ7XG59XG5cbmNvbnN0IFN0b3JlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8dW5rbm93bj4obnVsbCk7XG5cbmV4cG9ydCB0eXBlIFN0b3JlUHJvdmlkZXJQcm9wczxUU3RvcmVzPiA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3RvcmVQcm92aWRlcjxUU3RvcmVzPih7IGNoaWxkcmVuLCBzdG9yZXMgfTogU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+KSB7XG4gIHJldHVybiA8U3RvcmVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdG9yZXN9PntjaGlsZHJlbn08L1N0b3JlQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yZXM8VFN0b3Jlcz4oKTogVFN0b3JlcyB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoU3RvcmVDb250ZXh0KSBhcyB1bmtub3duIGFzIFRTdG9yZXMgfCBudWxsO1xuICBpZiAoY3R4ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlU3RvcmVzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBTdG9yZVByb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uRm9ybSDigJQgd3JhcHMgYSBuYXRpdmUgPGZvcm0+IHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuLlxuICpcbiAqIFJlbmRlcnMgPGZvcm0gZGF0YS1hY3Rpb249XCJ7Zm9ybS5uYW1lfTpzdWJtaXRcIj4gc28gdGhlIGluc3RhbGxlZFxuICogZXZlbnQgZGVsZWdhdGlvbiBjYXRjaGVzIHRoZSBzdWJtaXQgZXZlbnQgYW5kIGRpc3BhdGNoZXMgdG8gdGhlXG4gKiBmb3JtJ3MgYXV0by1yZWdpc3RlcmVkIDpzdWJtaXQgaGFuZGxlci4gYGFyaWEtYnVzeWAgbWlycm9ycyB0aGVcbiAqIGBpc1N1Ym1pdHRpbmdgIHNpZ25hbCBzbyBjb25zdW1lciBzdHlsaW5nIGNhbiByZXNwb25kIHdpdGhvdXQgZXh0cmFcbiAqIHdpcmluZy4gVGhlIGZvcm0gZWxlbWVudCBhbHNvIGV4cG9zZXMgYGRhdGEtcG9sbHktYWN0aW9uLWZvcm1gIGZvclxuICogc3RhYmxlIHNlbGVjdG9yIGhvb2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgRm9ybVN0b3JlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZm9ybS50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uRm9ybS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIGZvcm06IEZvcm1TdG9yZTxUVmFsdWVzLCBUU3RvcmVzPjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25Gb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgcHJvcHM6IEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzLCBUU3RvcmVzPlxuKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGZvcm0sIGNoaWxkcmVuLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgY29tYmluZWQgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiZm9ybVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJmb3JtXCJdO1xuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17Y29tYmluZWR9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1mb3JtPXtmb3JtLm5hbWV9XG4gICAgICBkYXRhLWFjdGlvbj17YCR7Zm9ybS5uYW1lfTpzdWJtaXRgfVxuICAgICAgYXJpYS1idXN5PXtmb3JtLmlzU3VibWl0dGluZy52YWx1ZX1cbiAgICAgIGFyaWEtbGFiZWw9e3Byb3BzW1wiYXJpYS1sYWJlbFwiXX1cbiAgICAgIGFyaWEtbGFiZWxsZWRieT17cHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl19XG4gICAgICBub1ZhbGlkYXRlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZm9ybT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGaXJlIGEgbmFtZWQgYWN0aW9uIHRocm91Z2ggdGhlIGdsb2JhbCBldmVudC1kZWxlZ2F0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBBY3Rpb24qIHByaW1pdGl2ZXMgKDxBY3Rpb25JbnB1dD4sIDxBY3Rpb25TZWxlY3Q+KSBjb21taXQgYnlcbiAqIGNsaWNraW5nIGEgZGV0YWNoZWQgYDxidXR0b24gZGF0YS1hY3Rpb249XCLigKZcIj5gIGNhcnJ5aW5nIGRhdGEtYWN0aW9uLSpcbiAqIGF0dHJpYnV0ZXM7IHRoZSBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXIgcm91dGVzIGl0IGludG8gdGhlXG4gKiBjb25zdW1lcidzIGFjdGlvbiByZWdpc3RyeSB3aXRoIG5vIGV4dHJhIHdpcmluZy4gQ2VudHJhbGlzZWQgaGVyZSBzb1xuICogZXZlcnkgQWN0aW9uKiBwcmltaXRpdmUgZGlzcGF0Y2hlcyBpZGVudGljYWxseS5cbiAqXG4gKiBLZXlzIGluIGBkYXRhYCBhcmUgY2FtZWxDYXNlIGFuZCBjb252ZXJ0ZWQgdG8gZGFzaC1jYXNlIGF0dHJpYnV0ZVxuICogbmFtZXMg4oCUIGBhY3Rpb25EYXRhPXt7IHRhc2tJZCB9fWAgYmVjb21lcyBgZGF0YS1hY3Rpb24tdGFzay1pZGAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGNvbnN0IGhpZGRlbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGhpZGRlbi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiLCBhY3Rpb24pO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhc2hLZXkgPSBrZXkucmVwbGFjZSgvW0EtWl0vZywgKG0pID0+IGAtJHttLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgaGlkZGVuLnNldEF0dHJpYnV0ZShgZGF0YS1hY3Rpb24tJHtkYXNoS2V5fWAsIHZhbHVlKTtcbiAgfVxuICBoaWRkZW4uc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gIGhpZGRlbi5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gIGhpZGRlbi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIGhpZGRlbi50YWJJbmRleCA9IC0xO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlbik7XG4gIHRyeSB7XG4gICAgaGlkZGVuLmNsaWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaGlkZGVuLnJlbW92ZSgpO1xuICB9XG59XG4iLAogICAgIi8qKlxuICogcG9sbHkjMTI1OiBkYXRhLSogLyBhcmlhLSogYXR0cmlidXRlIHBhc3N0aHJvdWdoIGZvciBVSSBwcmltaXRpdmVzLlxuICpcbiAqIFByaW1pdGl2ZXMgYWNjZXB0IGEgZml4ZWQgcHJvcCBzZXQuIFdpdGhvdXQgcGFzc3Rocm91Z2gsIGEgY29uc3VtZXJcbiAqIHRoYXQgbmVlZHMgYSBgZGF0YS0qYCB0ZXN0IGhvb2sgb3IgYW4gYGFyaWEtKmAgYXR0cmlidXRlIG9uIHRoZVxuICogcHJpbWl0aXZlJ3Mgb3duIGVsZW1lbnQgaGFzIHRvIHdyYXAgaXQgaW4gYW4gZXh0cmEgRE9NIG5vZGUg4oCUIGEgc21lbGwuXG4gKlxuICoge0BsaW5rIFBhc3N0aHJvdWdoQXR0cnN9IHdpZGVucyBhIHByaW1pdGl2ZSdzIHByb3BzIHRvIGFjY2VwdCBhbnlcbiAqIGBkYXRhLSpgIC8gYGFyaWEtKmAga2V5OyB7QGxpbmsgY29sbGVjdFBhc3N0aHJvdWdofSBnYXRoZXJzIHRoZW0gZm9yXG4gKiBzcHJlYWRpbmcgb250byB0aGUgcmVuZGVyZWQgcm9vdCBlbGVtZW50LiBTcHJlYWQgdGhlIHJlc3VsdCAqYmVmb3JlKlxuICogdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHNvIGEgY29uc3VtZXIga2V5IGNhbiBuZXZlciBvdmVycmlkZVxuICogb25lIHRoZSBwcmltaXRpdmUgc2V0cyBpdHNlbGYgKGBkYXRhLXBvbGx5LSpgLCBldGMuKS5cbiAqL1xuXG4vKiogSW5kZXggc2lnbmF0dXJlcyBsZXR0aW5nIGEgcHJpbWl0aXZlJ3MgcHJvcHMgYWNjZXB0IGFyYml0cmFyeVxuICogIGBkYXRhLSpgIGFuZCBgYXJpYS0qYCBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBzdGFuZGFyZCBgdGl0bGVgXG4gKiAgYXR0cmlidXRlIOKAlCBhIG5hdGl2ZSB0b29sdGlwIGlzIGEgRE9NIGhvb2ssIG5vdCBzdHlsaW5nLCBzbyBpdFxuICogIHJpZGVzIHRoZSBzYW1lIHBhc3N0aHJvdWdoIHBhdGggKHBvbGx5IzEzNSkuICovXG5leHBvcnQgdHlwZSBQYXNzdGhyb3VnaEF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKiogTmF0aXZlIHRvb2x0aXAgdGV4dCwgZm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuLyoqIEtleXMsIGJleW9uZCB0aGUgYGRhdGEtKmAgLyBgYXJpYS0qYCBwcmVmaXhlcywgdGhhdCBwYXNzIHRocm91Z2guICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChcImRhdGEtXCIpIHx8IGtleS5zdGFydHNXaXRoKFwiYXJpYS1cIikgfHwga2V5ID09PSBcInRpdGxlXCI7XG59XG5cbi8qKlxuICogQ29sbGVjdCBgZGF0YS0qYCAvIGBhcmlhLSpgIC8gYHRpdGxlYCBhdHRyaWJ1dGVzIGZyb20gYSBwcm9wcyBvYmplY3RcbiAqIHNvIHRoZXkgY2FuIGJlIHNwcmVhZCBvbnRvIGEgcHJpbWl0aXZlJ3Mgcm9vdCBlbGVtZW50LiBgdW5kZWZpbmVkYFxuICogdmFsdWVzIGFuZCBub24tYXR0cmlidXRlIHZhbHVlIHR5cGVzIChmdW5jdGlvbnMsIG9iamVjdHMpIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhc3N0aHJvdWdoKFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoIWlzUGFzc3Rocm91Z2hLZXkoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uSW5wdXQg4oCUIGR1YWwtbW9kZSB2aWV3L2VkaXQgaW5wdXQgd2l0aCBhY3Rpb24gZGlzcGF0Y2ggb24gY29tbWl0LlxuICpcbiAqIFZpZXcgbW9kZSByZW5kZXJzIHRoZSBjdXJyZW50IHZhbHVlIGFzIHRleHQgKG9wdGlvbmFsbHkgdGhyb3VnaCBhXG4gKiBjYWxsZXItc3VwcGxpZWQgYHJlbmRlclZpZXdgIGZvciBtYXJrZG93biwgcmljaCBmb3JtYXR0aW5nLCBldGMuKS5cbiAqIENsaWNrLCBFbnRlciwgb3IgU3BhY2UgZW50ZXJzIGVkaXQgbW9kZS4gRWRpdCBtb2RlIGlzIGEgbmF0aXZlIGlucHV0XG4gKiBvciB0ZXh0YXJlYTsgY29tbWl0IGZpcmVzIHRoZSBjb25maWd1cmVkIGFjdGlvbiB3aXRoIGBkYXRhLWFjdGlvbi12YWx1ZWBcbiAqIGFuZCBgZGF0YS1hY3Rpb24tZmllbGRgIHNldCBmcm9tIEZvcm1EYXRhLXNoYXBlIHNlbWFudGljcywgc28gdGhlXG4gKiBleGlzdGluZyBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXMgaXQgd2l0aCBubyBleHRyYSB3aXJpbmcuXG4gKlxuICogYHNhdmVPbmAgcGlja3MgdGhlIGNvbW1pdCB0cmlnZ2VyOlxuICogICBcImJsdXJcIiAgICAgICBjb21taXQgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXNcbiAqICAgXCJlbnRlclwiICAgICAgY29tbWl0IG9uIEVudGVyIChzaW5nbGUtbGluZSkgb3IgQ21kL0N0cmwrRW50ZXIgKG11bHRpLWxpbmUpXG4gKiAgIFwiY21kLWVudGVyXCIgIGNvbW1pdCBvbmx5IG9uIENtZC9DdHJsK0VudGVyXG4gKiAgIFwiZXhwbGljaXRcIiAgIG5ldmVyIGF1dG8tY29tbWl0IOKAlCBjYWxsZXIgd2lyZXMgYSBzYXZlIGJ1dHRvbiB3aXRoIGRhdGEtYWN0aW9uXG4gKiAgIFwiaW5wdXRcIiAgICAgIGNvbW1pdCBvbiBldmVyeSBrZXlzdHJva2Ug4oCUIGZvciBmaWx0ZXItYXMteW91LXR5cGUgZmllbGRzO1xuICogICAgICAgICAgICAgICAgdGhlIGZpZWxkIHN0YXlzIGluIGVkaXQgbW9kZSByYXRoZXIgdGhhbiB0b2dnbGluZyB0byB2aWV3XG4gKlxuICogYGlucHV0VHlwZWAgc2V0cyB0aGUgbmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IOKAlFxuICogXCJ0ZXh0XCIgKGRlZmF1bHQpLCBcImRhdGVcIiwgXCJ0aW1lXCIsIFwibnVtYmVyXCIsIGFuZCBmcmllbmRzIOKAlCBzbyBhIGRhdGVcbiAqIG9yIG51bWVyaWMgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtIGxpa2UgYW55IG90aGVyLlxuICpcbiAqIExheW91dC1zaGlmdC1mcmVlOiB2aWV3IGFuZCBlZGl0IG1vZGVzIHNoYXJlIHBhZGRpbmcsIGJvcmRlciB3aWR0aCxcbiAqIGZvbnQsIGFuZCBsaW5lLWhlaWdodCBzbyB0aGUgdG9nZ2xlIGNhdXNlcyBubyByZWZsb3cuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uSW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRTYXZlT24gPSBcImJsdXJcIiB8IFwiZW50ZXJcIiB8IFwiY21kLWVudGVyXCIgfCBcImV4cGxpY2l0XCIgfCBcImlucHV0XCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFZhcmlhbnQgPSBcInNpbmdsZVwiIHwgXCJtdWx0aVwiO1xuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZGF0ZVwiXG4gIHwgXCJkYXRldGltZS1sb2NhbFwiXG4gIHwgXCJ0aW1lXCJcbiAgfCBcIm1vbnRoXCJcbiAgfCBcIndlZWtcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBDdXJyZW50IHZhbHVlIHRvIHJlbmRlciBpbiB2aWV3IG1vZGUgYW5kIHNlZWQgdGhlIGVkaXQgYnVmZmVyLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gY29tbWl0LiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08bmV3IHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb21taXQgdHJpZ2dlci4gRGVmYXVsdDogXCJibHVyXCIuICovXG4gIHNhdmVPbj86IEFjdGlvbklucHV0U2F2ZU9uO1xuICB2YXJpYW50PzogQWN0aW9uSW5wdXRWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogQWN0aW9uSW5wdXRUeXBlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXh0cmEgZGF0YS1hY3Rpb24tKiBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgYXQgY29tbWl0IChlLmcuIGVudGl0eSBpZCkuICovXG4gIGFjdGlvbkRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogQ3VzdG9tIHZpZXcgcmVuZGVyZXIg4oCUIHJlY2VpdmVzIHZhbHVlLCByZXR1cm5zIFZOb2RlLiAqL1xuICByZW5kZXJWaWV3PzogKHZhbHVlOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICAvKiogTGFiZWwgYW5ub3VuY2VkIGJ5IHNjcmVlbiByZWFkZXJzIGZvciB0aGUgZWRpdCBhZmZvcmRhbmNlLiAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiB0d28gcmVuZGVyIGJyYW5jaGVzIHRpbWVzIHR3byB2YXJpYW50cyB0aW1lcyBmaXZlIHNhdmVPbiB0cmlnZ2VyczsgYnJhbmNoaW5nIGlzIGluaGVyZW50IHRvIHRoZSBwcmltaXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uSW5wdXQocHJvcHM6IEFjdGlvbklucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIGNvbnN0IHNhdmVPbiA9IHByb3BzLnNhdmVPbiA/PyBcImJsdXJcIjtcbiAgLy8gXCJpbnB1dFwiIG1vZGUgaXMgYSBwZXJtYW5lbnRseS1lZGl0YWJsZSBmaWx0ZXIgZmllbGQg4oCUIGl0IG5ldmVyIGhhcyBhXG4gIC8vIHZpZXcgbW9kZSB0byB0b2dnbGUgYmFjayB0bywgc28gaXQgc3RhcnRzIGluIGVkaXQuXG4gIGNvbnN0IGxpdmUgPSBzYXZlT24gPT09IFwiaW5wdXRcIjtcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8XCJ2aWV3XCIgfCBcImVkaXRcIj4obGl2ZSA/IFwiZWRpdFwiIDogXCJ2aWV3XCIpO1xuICBjb25zdCBbZHJhZnQsIHNldERyYWZ0XSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSBcInZpZXdcIikgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICB9LCBbcHJvcHMudmFsdWUsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIG9uIG1vdW50IGZvciBhIGxpdmUgZmlsdGVyIGZpZWxkOyBvbmx5IHB1bGwgZm9jdXNcbiAgICAvLyB3aGVuIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHRvZ2dsZWQgYSB2aWV3IGZpZWxkIGludG8gZWRpdCBtb2RlLlxuICAgIGlmIChtb2RlID09PSBcImVkaXRcIiAmJiAhbGl2ZSAmJiBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnNlbGVjdD8uKCk7XG4gICAgfVxuICB9LCBbbW9kZSwgbGl2ZV0pO1xuXG4gIGNvbnN0IGVudGVyRWRpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gICAgc2V0TW9kZShcImVkaXRcIik7XG4gIH0sIFtwcm9wcy5kaXNhYmxlZCwgcHJvcHMudmFsdWVdKTtcblxuICBjb25zdCBjb21taXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV4dCAhPT0gcHJvcHMudmFsdWUpIHtcbiAgICAgICAgZGlzcGF0Y2hBY3Rpb24ocHJvcHMuYWN0aW9uLCB7IC4uLihwcm9wcy5hY3Rpb25EYXRhID8/IHt9KSwgdmFsdWU6IG5leHQgfSk7XG4gICAgICB9XG4gICAgICAvLyBBIGxpdmUgZmlsdGVyIGZpZWxkIHN0YXlzIGVkaXRhYmxlOyBldmVyeSBvdGhlciB0cmlnZ2VyIHJldHVybnNcbiAgICAgIC8vIHRvIHZpZXcgbW9kZSBvbmNlIHRoZSB2YWx1ZSBpcyBjb21taXR0ZWQuXG4gICAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICAgIH0sXG4gICAgW3Byb3BzLmFjdGlvbiwgcHJvcHMuYWN0aW9uRGF0YSwgcHJvcHMudmFsdWUsIGxpdmVdXG4gICk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICB9LCBbcHJvcHMudmFsdWUsIGxpdmVdKTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eToga2V5Ym9hcmQgaGFuZGxlciBlbmNvZGVzIHRoZSBzYXZlT24gw5cgdmFyaWFudCBtYXRyaXguXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgY29uc3QgY21kID0gZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5O1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwic2luZ2xlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29tbWl0KGRyYWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwibXVsdGlcIiAmJiBjbWQpIHx8IHNhdmVPbiA9PT0gXCJjbWQtZW50ZXJcIikge1xuICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJyb290XCJdfSAke3Byb3BzLmNsYXNzTmFtZX1gIDogY2xhc3Nlc1tcInJvb3RcIl07XG5cbiAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmb3J3YXJkZWQgb250byB3aGljaGV2ZXIgZWxlbWVudCBpcyB0aGUgcm9vdFxuICAvLyBmb3IgdGhlIGN1cnJlbnQgbW9kZTsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbiBvbiBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAobW9kZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICBjb25zdCByZW5kZXJlZCA9IHByb3BzLnJlbmRlclZpZXcgPyBwcm9wcy5yZW5kZXJWaWV3KHByb3BzLnZhbHVlKSA6IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBwcm9wcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogPGJ1dHRvbj4gd291bGQgc3dhbGxvdyB0ZXh0IHNlbGVjdGlvbiBhbmQgYWRkIGRlZmF1bHQgc3R5bGluZzsgZGl2IHdpdGggcm9sZT1idXR0b24gaXMgdGhlIGlubGluZS1lZGl0IGlkaW9tLlxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGNsYXNzPXtgJHtjbGFzc05hbWV9ICR7Y2xhc3Nlc1tcInZpZXdcIl19YH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgICAgICBkYXRhLXZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgIHRhYkluZGV4PXtwcm9wcy5kaXNhYmxlZCA/IC0xIDogMH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3Byb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIn1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17cHJvcHMuZGlzYWJsZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17ZW50ZXJFZGl0fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgfHwgZS5rZXkgPT09IFwiIFwiKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbnRlckVkaXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc0VtcHR5ICYmIHByb3BzLnBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl19Pntwcm9wcy5wbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb25zdCBjb21tb24gPSB7XG4gICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgY2xhc3M6IGAke2NsYXNzZXNbXCJlZGl0XCJdfSAke2NsYXNzZXNbXCJyb290XCJdfWAsXG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFwiOiB0cnVlLFxuICAgIFwiZGF0YS1zdGF0ZVwiOiBcImVkaXRpbmdcIixcbiAgICBcImRhdGEtdmFyaWFudFwiOiB2YXJpYW50LFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogZHJhZnQsXG4gICAgb25JbnB1dDogKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIHNldERyYWZ0KG5leHQpO1xuICAgICAgaWYgKGxpdmUpIGNvbW1pdChuZXh0KTtcbiAgICB9LFxuICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJibHVyXCIpIGNvbW1pdChkcmFmdCk7XG4gICAgICBlbHNlIGlmICghbGl2ZSkgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBvbktleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gIH07XG5cbiAgaWYgKHZhcmlhbnQgPT09IFwibXVsdGlcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICAgIH19XG4gICAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudCA9IGVsO1xuICAgICAgfX1cbiAgICAgIHR5cGU9e3Byb3BzLmlucHV0VHlwZSA/PyBcInRleHRcIn1cbiAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIExheW91dCDigJQgdGhlIG9uZSBwcmltaXRpdmUgdGhhdCBvd25zIGxheW91dGluZyBjb25jZXJucy5cbiAqXG4gKiBFdmVyeSBvdGhlciBjb21wb25lbnQgaW4gQGZhaXJmb3gvcG9sbHkvdWkgKGFuZCBldmVyeSBjb25zdW1lciBhcHBcbiAqIHRoYXQgcnVucyBgcG9sbHkgcXVhbGl0eSBjc3MtbGF5b3V0YCkgcm91dGVzIGZsZXgvZ3JpZCBkZWNpc2lvbnNcbiAqIHRocm91Z2ggdGhpcyBjb21wb25lbnQuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gdGhlXG4gKiBzdHlsZXNoZWV0IGNhbiByZWFkIHRoZW0gdW5pZm9ybWx5IGFuZCBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlXG4gKiBhbnkgb2YgdGhlbSBpbiBtZWRpYSBxdWVyaWVzIHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG5cbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogc2l4dGVlbiBvcHRpb25hbCBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nczsgZmxhdCBhbmQgbGluZWFyLlxuZXhwb3J0IGZ1bmN0aW9uIExheW91dChwcm9wczogTGF5b3V0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwiZGl2XCIsXG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRlbnRzLFxuICAgIHN1YmdyaWQsXG4gICAgZ2FwLFxuICAgIHBhZGRpbmcsXG4gICAgaGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhJbmxpbmVTaXplLFxuICAgIGp1c3RpZnlJdGVtcyxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGp1c3RpZnlDb250ZW50LFxuICAgIGFsaWduQ29udGVudCxcbiAgICBqdXN0aWZ5U2VsZixcbiAgICBhbGlnblNlbGYsXG4gICAgYXV0b0Zsb3csXG4gICAgYXV0b1Jvd3MsXG4gICAgYXV0b0NvbHVtbnMsXG4gICAgc3RhY2tPbk1vYmlsZSxcbiAgICBpbmxpbmUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIHJvbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmIChjb250ZW50cykge1xuICAgIHN0eWxlW1wiZGlzcGxheVwiXSA9IFwiY29udGVudHNcIjtcbiAgfSBlbHNlIGlmIChzdWJncmlkKSB7XG4gICAgc3R5bGVbXCItLWwtY29sXCJdID0gXCIxIC8gLTFcIjtcbiAgICBzdHlsZVtcIi0tbC1jb2xzXCJdID0gXCJzdWJncmlkXCI7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICB9IGVsc2Uge1xuICAgIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tbC1wXCJdID0gcGFkZGluZztcbiAgICBpZiAoaGVpZ2h0KSBzdHlsZVtcIi0tbC1oXCJdID0gaGVpZ2h0O1xuICAgIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1sLW1oXCJdID0gbWluSGVpZ2h0O1xuICAgIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tbC1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICAgIGlmIChyb3dzKSBzdHlsZVtcIi0tbC1yb3dzXCJdID0gcm93cztcbiAgICBpZiAoY29sdW1ucykgc3R5bGVbXCItLWwtY29sc1wiXSA9IGNvbHVtbnM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICAgIGlmIChqdXN0aWZ5SXRlbXMpIHN0eWxlW1wiLS1sLWppXCJdID0ganVzdGlmeUl0ZW1zO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGp1c3RpZnlDb250ZW50KSBzdHlsZVtcIi0tbC1qY1wiXSA9IGp1c3RpZnlDb250ZW50O1xuICAgIGlmIChhbGlnbkNvbnRlbnQpIHN0eWxlW1wiLS1sLWFjXCJdID0gYWxpZ25Db250ZW50O1xuICAgIGlmIChhdXRvRmxvdykgc3R5bGVbXCItLWwtZmxvd1wiXSA9IGF1dG9GbG93O1xuICAgIGlmIChhdXRvUm93cykgc3R5bGVbXCItLWwtYXJvd3NcIl0gPSBhdXRvUm93cztcbiAgICBpZiAoYXV0b0NvbHVtbnMpIHN0eWxlW1wiLS1sLWFjb2xzXCJdID0gYXV0b0NvbHVtbnM7XG4gIH1cbiAgaWYgKGp1c3RpZnlTZWxmKSBzdHlsZVtcIi0tbC1qc1wiXSA9IGp1c3RpZnlTZWxmO1xuICBpZiAoYWxpZ25TZWxmKSBzdHlsZVtcIi0tbC1hc1wiXSA9IGFsaWduU2VsZjtcblxuICBjb25zdCBiYXNlUGFydHMgPSBbY2xhc3Nlc1tcImxheW91dFwiXV07XG4gIGlmIChpbmxpbmUpIGJhc2VQYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoc3RhY2tPbk1vYmlsZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcInN0YWNrT25Nb2JpbGVcIl0pO1xuICBjb25zdCBiYXNlQ2xhc3MgPSBiYXNlUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCBjb21iaW5lZCA9IGNvbnRlbnRzID8gY2xhc3NOYW1lIDogY2xhc3NOYW1lID8gYCR7YmFzZUNsYXNzfSAke2NsYXNzTmFtZX1gIDogYmFzZUNsYXNzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzc05hbWU6IGNvbWJpbmVkLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJ0cmlnZ2VyTGFiZWxcIl19PntkaXNwbGF5VGV4dH08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9e1xuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJ0cmlnZ2VyTGFiZWxcIl19PntkaXNwbGF5VGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLiBJY29uICtcbiAqIGxhYmVsIGFyZSBhcnJhbmdlZCB3aXRoIGEgbmVzdGVkIGlubGluZSA8TGF5b3V0Pi5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIFwiZGF0YS1hY3Rpb25cIj86IHN0cmluZztcbiAgLyoqIEFkZGl0aW9uYWwgYWN0aW9uLXBheWxvYWQgYXR0cmlidXRlcyB0aGUgZXZlbnQgZGVsZWdhdG9yIHBhcnNlc1xuICAgKiBpbnRvIGBjdHguZGF0YWAuIGBkYXRhLWFjdGlvbi10aWQ9XCJ0LTE3XCJgIGJlY29tZXMgYHsgdGlkOiBcInQtMTdcIiB9YCxcbiAgICogYGRhdGEtYWN0aW9uLWl0ZW0taWQ9XCLigKZcImAgYmVjb21lcyBgeyBpdGVtSWQ6IFwi4oCmXCIgfWAsIGFuZCBzbyBvbi5cbiAgICogVHlwZWQgYXMgYW4gaW5kZXggc2lnbmF0dXJlIHNvIGV2ZXJ5IGBkYXRhLWFjdGlvbi0qYCBrZXkgdGhlXG4gICAqIGNvbnN1bWVyIGNhcmVzIGFib3V0IHR5cGUtY2hlY2tzIHdpdGhvdXQgYSBCdXR0b24tc2lkZSBlbnVtZXJhdGlvbi4gKi9cbiAgW2FjdGlvbkRhdGFBdHRyOiBgZGF0YS1hY3Rpb24tJHtzdHJpbmd9YF06IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ29udGVudC9hY2Nlc3NpYmlsaXR5IGRpbWVuc2lvbi4gQSB2aXNpYmxlIHRleHQgYGxhYmVsYCBpcyB0aGVcbiAqIGFjY2Vzc2libGUgbmFtZSwgc28gaXQgbWFrZXMgYGFyaWEtbGFiZWxgIG9wdGlvbmFsLiBBbiBpY29uLW9ubHlcbiAqIGJ1dHRvbiBoYXMgbm8gdGV4dCB0byBuYW1lIGl0LCBzbyBgYXJpYS1sYWJlbGAgaXMgUkVRVUlSRUQg4oCUIHlvdVxuICogY2Fubm90IGNvbnN0cnVjdCBhbiB1bm5hbWVkIGljb24gYnV0dG9uLiAoQnV0dG9uJ3MgaG92ZXIgdGl0bGUgdGhlblxuICogZmFsbHMgYmFjayB0byB0aGF0IGFyaWEtbGFiZWwsIHNvIHRoZSBzYW1lIHByb3AgZ2l2ZXMgYm90aCB0aGVcbiAqIGFjY2Vzc2libGUgbmFtZSBhbmQgdGhlIHRvb2x0aXAuKVxuICovXG50eXBlIExhYmVsbGVkQ29udGVudCA9IHtcbiAgbGFiZWw6IENvbXBvbmVudENoaWxkcmVuO1xuICBpY29uPzogVk5vZGU7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcbnR5cGUgSWNvbk9ubHlDb250ZW50ID0ge1xuICBpY29uOiBWTm9kZTtcbiAgbGFiZWw/OiBuZXZlcjtcbiAgXCJhcmlhLWxhYmVsXCI6IHN0cmluZztcbn07XG50eXBlIEJ1dHRvbkNvbnRlbnQgPSBMYWJlbGxlZENvbnRlbnQgfCBJY29uT25seUNvbnRlbnQ7XG5cbnR5cGUgQnV0dG9uRWxlbWVudCA9IHtcbiAgaHJlZj86IG5ldmVyO1xuICB0YXJnZXQ/OiBuZXZlcjtcbiAgcmVsPzogbmV2ZXI7XG4gIGRvd25sb2FkPzogbmV2ZXI7XG4gIHR5cGU/OiBcImJ1dHRvblwiIHwgXCJzdWJtaXRcIiB8IFwicmVzZXRcIjtcbn07XG5cbnR5cGUgTGlua0VsZW1lbnQgPSB7XG4gIGhyZWY6IHN0cmluZztcbiAgdGFyZ2V0Pzogc3RyaW5nO1xuICByZWw/OiBzdHJpbmc7XG4gIC8qKiBGb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIDxhPiBzbyBhIEJ1dHRvbi1hcy1saW5rIGNhbiBvZmZlciBhIGZpbGVcbiAgICogZG93bmxvYWQuIEFuIGVtcHR5IHN0cmluZyB1c2VzIHRoZSByZXNvdXJjZSdzIG93biBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBuZXZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblByb3BzID0gQmFzZUJ1dHRvblByb3BzICYgQnV0dG9uQ29udGVudCAmIChCdXR0b25FbGVtZW50IHwgTGlua0VsZW1lbnQpO1xuXG5mdW5jdGlvbiB0aWVyQ2xhc3ModGllcjogQnV0dG9uVGllcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0aWVyID09PSBcInByaW1hcnlcIikgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyUHJpbWFyeVwiXTtcbiAgaWYgKHRpZXIgPT09IFwidGVydGlhcnlcIikgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyVGVydGlhcnlcIl07XG4gIHJldHVybiBjbGFzc2VzW1widGllclNlY29uZGFyeVwiXTtcbn1cblxuZnVuY3Rpb24gY29sb3JDbGFzcyhjb2xvcjogQnV0dG9uQ29sb3IpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY29sb3IgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9ySW5mb1wiXTtcbiAgaWYgKGNvbG9yID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvclN1Y2Nlc3NcIl07XG4gIGlmIChjb2xvciA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JXYXJuaW5nXCJdO1xuICBpZiAoY29sb3IgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JEYW5nZXJcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNpemVDbGFzcyhzaXplOiBCdXR0b25TaXplKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNpemUgPT09IFwic21hbGxcIikgcmV0dXJuIGNsYXNzZXNbXCJidG5TbWFsbFwiXTtcbiAgaWYgKHNpemUgPT09IFwibGFyZ2VcIikgcmV0dXJuIGNsYXNzZXNbXCJidG5MYXJnZVwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IGZsYXQgcHJvcC10by1jbGFzcyBjb21wb3NpdGlvbiBwbHVzIG9uZSBhbmNob3IvYnV0dG9uIGJyYW5jaDsgc3BsaXR0aW5nIHdvdWxkIGp1c3QgaGlkZSB0aGUgbWFwcGluZy5cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b24ocHJvcHM6IEJ1dHRvblByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdGllciA9IFwic2Vjb25kYXJ5XCIsXG4gICAgY29sb3IgPSBcImRlZmF1bHRcIixcbiAgICBzaXplID0gXCJub3JtYWxcIixcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGNpcmNsZSA9IGZhbHNlLFxuICAgIGJvdW5kZWQgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSBpY29uID8gKFxuICAgIDxMYXlvdXQgaW5saW5lIGNvbHVtbnM9XCJhdXRvIGF1dG9cIiBnYXA9XCIwLjVlbVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgIHtpY29ufVxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC9MYXlvdXQ+XG4gICkgOiAoXG4gICAgbGFiZWxcbiAgKTtcblxuICBjb25zdCBkYXRhQWN0aW9uID0gcHJvcHNbXCJkYXRhLWFjdGlvblwiXTtcbiAgY29uc3QgYXJpYUxhYmVsID0gcHJvcHNbXCJhcmlhLWxhYmVsXCJdO1xuICAvLyBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCB0aXRsZSB3aW5zLCBlbHNlIHRoZVxuICAvLyB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGFjY2Vzc2libGUgbmFtZSDigJQgc28gYW4gaWNvbi1vbmx5IGJ1dHRvblxuICAvLyAod2hpY2ggY2FycmllcyBhbiBhcmlhLWxhYmVsKSBzdGlsbCBnZXRzIG9uZS4gUGFzcyB0aXRsZT1cIlwiIHRvIG9wdCBvdXQuXG4gIGNvbnN0IHJlc29sdmVkVGl0bGUgPVxuICAgIHRpdGxlID8/XG4gICAgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIiAmJiBsYWJlbC5sZW5ndGggPiAwXG4gICAgICA/IGxhYmVsXG4gICAgICA6IHR5cGVvZiBhcmlhTGFiZWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBhcmlhTGFiZWxcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuICAvLyBDb2xsZWN0IGV2ZXJ5IGBkYXRhLWFjdGlvbi0qYCBleHRyYSB0aGUgY29uc3VtZXIgcGFzc2VkIHNvIHRoZVxuICAvLyBldmVudCBkZWxlZ2F0b3IgY2FuIHJlYWQgdGhlbSBvZmYgdGhlIHJlbmRlcmVkIGVsZW1lbnQuIFdpdGhvdXRcbiAgLy8gdGhpcywgYW55dGhpbmcgYmV5b25kIGBkYXRhLWFjdGlvbmAgaXMgc2lsZW50bHkgZHJvcHBlZCBhbmRcbiAgLy8gaGFuZGxlcnMgZmlyZSB3aXRoIGFuIGVtcHR5IGBjdHguZGF0YWAuXG4gIGNvbnN0IGFjdGlvbkRhdGFBdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGFjdGlvbkRhdGFBdHRyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKFwiaHJlZlwiIGluIHByb3BzICYmIHByb3BzLmhyZWYpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICAgIHRpdGxlPXtyZXNvbHZlZFRpdGxlfVxuICAgICAgICBocmVmPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhyZWZ9XG4gICAgICAgIHRhcmdldD17XCJ0YXJnZXRcIiBpbiBwcm9wcyA/IHByb3BzLnRhcmdldCA6IHVuZGVmaW5lZH1cbiAgICAgICAgcmVsPXtcInJlbFwiIGluIHByb3BzID8gcHJvcHMucmVsIDogdW5kZWZpbmVkfVxuICAgICAgICBkb3dubG9hZD17XCJkb3dubG9hZFwiIGluIHByb3BzID8gcHJvcHMuZG93bmxvYWQgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1idXR0b249e3RpZXJ9XG4gICAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvYT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRUeXBlOiBcImJ1dHRvblwiIHwgXCJzdWJtaXRcIiB8IFwicmVzZXRcIiA9XG4gICAgXCJ0eXBlXCIgaW4gcHJvcHMgJiYgcHJvcHMudHlwZSA/IHByb3BzLnR5cGUgOiBcImJ1dHRvblwiO1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e2J1dHRvbkNsYXNzfVxuICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICB0eXBlPXtyZXNvbHZlZFR5cGV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgey4uLmFjdGlvbkRhdGFBdHRyc31cbiAgICA+XG4gICAgICB7Y29udGVudH1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdXJmYWNlIOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgdmlzdWFsLXN1cmZhY2UgY29uY2VybnMuXG4gKlxuICogV2hlcmUgTGF5b3V0IGdvdmVybnMgc3BhdGlhbCBjb25jZXJucyAoZ3JpZCwgZmxleCwgZ2FwLCBhbGlnbm1lbnQpLFxuICogU3VyZmFjZSBnb3Zlcm5zIHRoZSBjaHJvbWUgdGhhdCBzaXRzIG9uIHRvcCBvZiBsYXlvdXQ6IHBhZGRpbmcsXG4gKiBiYWNrZ3JvdW5kLCBib3JkZXIsIHJhZGl1cywgc2hhZG93LCBhbmQgdGhlIG5hcnJvdyBwb3NpdGlvbmluZyBpZGlvbXNcbiAqIChzdGlja3kgc3RyaXBzLCBmaXhlZCBmbG9hdGluZyBwYW5lcykgdGhhdCBjb25zdW1lcnMgcmVhY2ggZm9yIGlubGluZVxuICogc3R5bGVzIHRvIGV4cHJlc3MuIEV2ZXJ5IHByb3AgbWFwcyB0byBhIGAtLXBvbGx5LSpgIHRva2VuIHRocm91Z2ggYVxuICogbG9jYWwgYC0tcy0qYCBjdXN0b20gcHJvcGVydHksIHNvIGNvbnN1bWVycyBjYW4gcmV0aGVtZSBhbiBpbmRpdmlkdWFsXG4gKiBTdXJmYWNlIGJ5IG92ZXJyaWRpbmcgdGhlIHBvbGx5IHRva2VuIGluIGBzdHlsZWAgd2l0aG91dCB0b3VjaGluZyB0aGVcbiAqIHByaW1pdGl2ZSdzIENTUy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1N1cmZhY2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTdXJmYWNlVmFyaWFudCA9XG4gIHwgXCJwbGFpblwiXG4gIHwgXCJyYWlzZWRcIlxuICB8IFwic3Vua2VuXCJcbiAgfCBcImJ1YmJsZVwiXG4gIHwgXCJjaGlwXCJcbiAgfCBcImNhbGxvdXRcIlxuICB8IFwiZmxvYXRpbmdcIlxuICB8IFwic3RpY2t5LWJhclwiO1xuXG50eXBlIEJhY2tncm91bmQgPSBcInJhaXNlZFwiIHwgXCJzdW5rZW5cIiB8IFwidHJhbnNwYXJlbnRcIiB8IChzdHJpbmcgJiB7fSk7XG50eXBlIFJhZGl1cyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJmdWxsXCI7XG50eXBlIEJvcmRlciA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcInN0cm9uZ1wiO1xudHlwZSBCb3JkZXJXaWR0aCA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcIm1lZGl1bVwiIHwgXCJ0aGlja1wiO1xudHlwZSBCb3JkZXJTaWRlcyA9XG4gIHwgXCJhbGxcIlxuICB8IFwiYmxvY2stc3RhcnRcIlxuICB8IFwiYmxvY2stZW5kXCJcbiAgfCBcImlubGluZS1zdGFydFwiXG4gIHwgXCJpbmxpbmUtZW5kXCJcbiAgfCBcImJsb2NrXCJcbiAgfCBcImlubGluZVwiO1xudHlwZSBTaGFkb3cgPSBcIm5vbmVcIiB8IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbnR5cGUgUG9zaXRpb24gPSBcInN0YXRpY1wiIHwgXCJyZWxhdGl2ZVwiIHwgXCJhYnNvbHV0ZVwiIHwgXCJzdGlja3lcIiB8IFwiZml4ZWRcIjtcbnR5cGUgQm9yZGVyU3R5bGUgPSBcInNvbGlkXCIgfCBcImRhc2hlZFwiO1xudHlwZSBPdmVyZmxvdyA9IFwidmlzaWJsZVwiIHwgXCJoaWRkZW5cIiB8IFwiYXV0b1wiIHwgXCJzY3JvbGxcIjtcbnR5cGUgU2NoZW1lID0gXCJkYXJrXCIgfCBcImxpZ2h0XCI7XG5cbi8qKlxuICogQXJiaXRyYXJ5IGBkYXRhLSpgLCBgYXJpYS0qYCwgYW5kIGB0aXRsZWAgYXR0cmlidXRlcyBmb3J3YXJkZWQgdG8gdGhlXG4gKiByZW5kZXJlZCBlbGVtZW50IHNvIGNvbnN1bWVycyAoTW9kYWwsIFRvYXN0LCBDYXJkLCBldGMuKSBjYW4gY29tcG9zZVxuICogU3VyZmFjZSB3aXRob3V0IGxvc2luZyBET00gaG9va3MsIEFSSUEgc2VtYW50aWNzLCBvciBhIG5hdGl2ZSB0b29sdGlwLlxuICovXG5leHBvcnQgdHlwZSBTdXJmYWNlRGF0YUF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VQcm9wcyA9IFN1cmZhY2VEYXRhQXR0cnMgJiB7XG4gIGNoaWxkcmVuPzogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgYXJ0aWNsZSwgYXNpZGUsIGhlYWRlciwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBOYW1lZCBwcmVzZXQgdGhhdCByZXNvbHZlcyB0byBhIGRlZmF1bHQgYnVuZGxlIG9mIHRoZSBwcm9wcyBiZWxvdy4gRXhwbGljaXQgcHJvcHMgb3ZlcnJpZGUuICovXG4gIHZhcmlhbnQ/OiBTdXJmYWNlVmFyaWFudDtcblxuICAvKiogQW55IENTUyBsZW5ndGgsIHR5cGljYWxseSBgdmFyKC0tcG9sbHktc3BhY2UtKilgLiAqL1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lZCB2YWx1ZXMgbWFwIHRvIGB2YXIoLS1wb2xseS1zdXJmYWNlLSopYDsgcmF3IHN0cmluZ3MgcGFzcyB0aHJvdWdoIGZvciBvbmUtb2ZmIGNvbG91cnMuICovXG4gIGJhY2tncm91bmQ/OiBCYWNrZ3JvdW5kO1xuXG4gIHJhZGl1cz86IFJhZGl1cztcbiAgYm9yZGVyPzogQm9yZGVyO1xuICBib3JkZXJXaWR0aD86IEJvcmRlcldpZHRoO1xuICBib3JkZXJTaWRlcz86IEJvcmRlclNpZGVzO1xuICAvKiogQm9yZGVyIGxpbmUgc3R5bGUuIERlZmF1bHQ6IGAnc29saWQnYC4gKi9cbiAgYm9yZGVyU3R5bGU/OiBCb3JkZXJTdHlsZTtcbiAgLyoqIEFueSBDU1MgY29sb3VyLCBvdmVycmlkaW5nIHRoZSB0b2tlbiB0aGUgYGJvcmRlcmAgcHJvcCB3b3VsZCBwaWNrLlxuICAgKiBGb3Igb25lLW9mZiByaW5ncyAoYSBjdXRvdXQgcmluZywgYSBmb2N1cyBoYWxvKSB0aGF0IG5vIHNlbWFudGljXG4gICAqIGJvcmRlciB0b2tlbiBleHByZXNzZXMuIEltcGxpZXMgYSBib3JkZXIgd2lkdGggd2hlbiBub25lIGlzIHNldC4gKi9cbiAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIHNoYWRvdz86IFNoYWRvdztcblxuICAvKipcbiAgICogUmV0aW50IHRoZSB0b2tlbiBzdWJ0cmVlIHNvIGRlc2NlbmRhbnQgYFRleHRgL2BCdXR0b25gIHJlYWQgdGhlXG4gICAqIHJpZ2h0IGNvbnRyYXN0IG9uIGEgZGFyayAob3IgZm9yY2VkLWxpZ2h0KSBTdXJmYWNlIOKAlCBlcnJvclxuICAgKiBiYW5uZXJzLCBjYW1lcmEgb3ZlcmxheXMsIGNoYXQgYnViYmxlcy4gU2V0cyBgZGF0YS1wb2xseS10aGVtZWAsXG4gICAqIHNvIGV2ZXJ5IGAtLXBvbGx5LSpgIGNvbG91ciB0b2tlbiBmbGlwcyBmb3IgdGhlIHN1YnRyZWU7IG5vIGlubGluZVxuICAgKiBgLS1wb2xseS10ZXh0YCBvdmVycmlkZSBuZWVkZWQgKHBvbGx5IzEzNSkuXG4gICAqL1xuICBzY2hlbWU/OiBTY2hlbWU7XG5cbiAgLyoqIGAnbm9uZSdgIG1ha2VzIGEgZGVjb3JhdGl2ZSBTdXJmYWNlIChhIHNjYW4tZnJhbWUgb3ZlcmxheSkgaWdub3JlXG4gICAqIHRoZSBwb2ludGVyIHNvIGNsaWNrcyBmYWxsIHRocm91Z2ggdG8gd2hhdCBpcyBiZWhpbmQgaXQuICovXG4gIHBvaW50ZXJFdmVudHM/OiBcIm5vbmVcIiB8IFwiYXV0b1wiO1xuXG4gIC8qKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2sg4oCUIFN1cmZhY2UgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGhlaWdodD86IHN0cmluZztcbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBibG9jayBzaXplIOKAlCBhIFN1cmZhY2UgdGhhdCBzaHJpbmtzIHRvIGNvbnRlbnQgYnV0IGlzIGNhcHBlZC4gKi9cbiAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xuICBtYXhJbmxpbmVTaXplPzogc3RyaW5nO1xuXG4gIC8qKiBPdmVyZmxvdyBiZWhhdmlvdXIuIGAnYXV0bydgIG1ha2VzIGEgaGVpZ2h0LWNhcHBlZCBTdXJmYWNlIHNjcm9sbC4gKi9cbiAgb3ZlcmZsb3c/OiBPdmVyZmxvdztcblxuICBwb3NpdGlvbj86IFBvc2l0aW9uO1xuICAvKiogQW55IENTUyBpbnNldCB2YWx1ZSAoYCcwJ2AsIGAnYXV0byBhdXRvIDFyZW0gMXJlbSdgLCBgJzFyZW0nYCwg4oCmKS4gKi9cbiAgaW5zZXQ/OiBzdHJpbmc7XG4gIC8qKiBDU1MgdHJhbnNmb3JtIOKAlCBlLmcuIGAndHJhbnNsYXRlWCgtNTAlKSdgIHRvIGNlbnRyZSBhIGZpeGVkIGJhbm5lclxuICAgKiBwYWlyZWQgd2l0aCBgaW5zZXQ6ICfigKYgYXV0byDigKYgNTAlJ2AuIFRoZSBzYW5jdGlvbmVkIHRyYW5zZm9ybSBlc2NhcGUuICovXG4gIHRyYW5zZm9ybT86IHN0cmluZztcbiAgekluZGV4PzogbnVtYmVyO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci1pbnN0YW5jZSBvdmVycmlkZXMuIFRoZSBzdXBwb3J0ZWQgcmV0aW50IHBhdGggaXMgdG8gc2V0IHBvbGx5IHRva2Vuc1xuICAgKiBoZXJlLCBlLmcuIGBzdHlsZT17eyBcIi0tcG9sbHktc3VyZmFjZS1yYWlzZWRcIjogXCIjZmVmM2M3XCIgfX1gLiBTdXJmYWNlXG4gICAqIG1lcmdlcyB0aGlzIGludG8gaXRzIG93biBjb21wdXRlZCBzdHlsZS5cbiAgICovXG4gIHN0eWxlPzogSlNYLkNTU1Byb3BlcnRpZXM7XG5cbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xufTtcblxudHlwZSBWYXJpYW50RGVmYXVsdHMgPSBQYXJ0aWFsPFxuICBQaWNrPFxuICAgIFN1cmZhY2VQcm9wcyxcbiAgICB8IFwicGFkZGluZ1wiXG4gICAgfCBcImJhY2tncm91bmRcIlxuICAgIHwgXCJyYWRpdXNcIlxuICAgIHwgXCJib3JkZXJcIlxuICAgIHwgXCJib3JkZXJXaWR0aFwiXG4gICAgfCBcImJvcmRlclNpZGVzXCJcbiAgICB8IFwic2hhZG93XCJcbiAgICB8IFwiaW5saW5lXCJcbiAgICB8IFwid2lkdGhcIlxuICAgIHwgXCJoZWlnaHRcIlxuICAgIHwgXCJtaW5IZWlnaHRcIlxuICAgIHwgXCJtYXhJbmxpbmVTaXplXCJcbiAgICB8IFwicG9zaXRpb25cIlxuICAgIHwgXCJpbnNldFwiXG4gICAgfCBcInpJbmRleFwiXG4gID5cbj47XG5cbmNvbnN0IHZhcmlhbnREZWZhdWx0czogUmVjb3JkPFN1cmZhY2VWYXJpYW50LCBWYXJpYW50RGVmYXVsdHM+ID0ge1xuICBwbGFpbjoge30sXG4gIHJhaXNlZDoge1xuICAgIGJhY2tncm91bmQ6IFwicmFpc2VkXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgc2hhZG93OiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbiAgc3Vua2VuOiB7XG4gICAgYmFja2dyb3VuZDogXCJzdW5rZW5cIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBidWJibGU6IHtcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBjaGlwOiB7XG4gICAgaW5saW5lOiB0cnVlLFxuICAgIHJhZGl1czogXCJmdWxsXCIsXG4gICAgcGFkZGluZzogXCJ2YXIoLS1wb2xseS1zcGFjZS14cykgdmFyKC0tcG9sbHktc3BhY2Utc20pXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbiAgY2FsbG91dDoge1xuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgcmFkaXVzOiBcInNtXCIsXG4gICAgcGFkZGluZzogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSkgdmFyKC0tcG9sbHktc3BhY2UtbWQpXCIsXG4gIH0sXG4gIGZsb2F0aW5nOiB7XG4gICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICByYWRpdXM6IFwibGdcIixcbiAgICBzaGFkb3c6IFwibGdcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIGJhY2tncm91bmQ6IFwicmFpc2VkXCIsXG4gICAgekluZGV4OiA5OTk5LFxuICB9LFxuICBcInN0aWNreS1iYXJcIjoge1xuICAgIHBvc2l0aW9uOiBcInN0aWNreVwiLFxuICAgIGluc2V0OiBcIjAgMCBhdXRvIDBcIixcbiAgICBib3JkZXJTaWRlczogXCJibG9jay1lbmRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxufTtcblxuZnVuY3Rpb24gYmdWYWx1ZShiOiBCYWNrZ3JvdW5kKTogc3RyaW5nIHtcbiAgaWYgKGIgPT09IFwicmFpc2VkXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2UtcmFpc2VkKVwiO1xuICBpZiAoYiA9PT0gXCJzdW5rZW5cIikgcmV0dXJuIFwidmFyKC0tcG9sbHktc3VyZmFjZS1zdW5rZW4pXCI7XG4gIGlmIChiID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIHJldHVybiBiO1xufVxuXG5mdW5jdGlvbiByYWRpdXNWYWx1ZShyOiBSYWRpdXMpOiBzdHJpbmcge1xuICBpZiAociA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1yYWRpdXMtJHtyfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJDb2xvclZhbHVlKGI6IEJvcmRlcik6IHN0cmluZyB7XG4gIGlmIChiID09PSBcIm5vbmVcIikgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgaWYgKGIgPT09IFwic3Ryb25nXCIpIHJldHVybiBcInZhcigtLXBvbGx5LWJvcmRlci1zdHJvbmcpXCI7XG4gIHJldHVybiBcInZhcigtLXBvbGx5LWJvcmRlcilcIjtcbn1cblxuZnVuY3Rpb24gYm9yZGVyV2lkdGhWYWx1ZSh3OiBCb3JkZXJXaWR0aCk6IHN0cmluZyB7XG4gIGlmICh3ID09PSBcIm5vbmVcIikgcmV0dXJuIFwiMFwiO1xuICByZXR1cm4gYHZhcigtLXBvbGx5LWJvcmRlci13aWR0aC0ke3d9KWA7XG59XG5cbmZ1bmN0aW9uIHNoYWRvd1ZhbHVlKHM6IFNoYWRvdyk6IHN0cmluZyB7XG4gIGlmIChzID09PSBcIm5vbmVcIikgcmV0dXJuIFwibm9uZVwiO1xuICByZXR1cm4gYHZhcigtLXBvbGx5LXNoYWRvdy0ke3N9KWA7XG59XG5cbmZ1bmN0aW9uIGJvcmRlclNpZGVzQ2xhc3Moc2lkZXM6IEJvcmRlclNpZGVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNpZGVzID09PSBcImFsbFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoc2lkZXMgPT09IFwiYmxvY2stc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1zdGFydFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLWVuZFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImlubGluZS1zdGFydFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWlubGluZS1zdGFydFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImlubGluZS1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtZW5kXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiYmxvY2tcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9ja1wiXTtcbiAgaWYgKHNpZGVzID09PSBcImlubGluZVwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWlubGluZVwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHByb3AtdG8tY3VzdG9tLXByb3BlcnR5IG1hcHBpbmc7IGZsYXQgYW5kIGxpbmVhciwgbWlycm9ycyBMYXlvdXQudHN4LlxuZXhwb3J0IGZ1bmN0aW9uIFN1cmZhY2UocHJvcHM6IFN1cmZhY2VQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJwbGFpblwiIH0gPSBwcm9wcztcbiAgY29uc3QgdiA9IHZhcmlhbnREZWZhdWx0c1t2YXJpYW50XTtcblxuICBjb25zdCBhcyA9IHByb3BzLmFzID8/IFwiZGl2XCI7XG4gIGNvbnN0IHBhZGRpbmcgPSBwcm9wcy5wYWRkaW5nID8/IHYucGFkZGluZztcbiAgY29uc3QgYmFja2dyb3VuZCA9IHByb3BzLmJhY2tncm91bmQgPz8gdi5iYWNrZ3JvdW5kO1xuICBjb25zdCByYWRpdXMgPSBwcm9wcy5yYWRpdXMgPz8gdi5yYWRpdXM7XG4gIGNvbnN0IGJvcmRlciA9IHByb3BzLmJvcmRlciA/PyB2LmJvcmRlcjtcbiAgY29uc3QgYm9yZGVyU2lkZXMgPSBwcm9wcy5ib3JkZXJTaWRlcyA/PyB2LmJvcmRlclNpZGVzID8/IFwiYWxsXCI7XG4gIGNvbnN0IHNoYWRvdyA9IHByb3BzLnNoYWRvdyA/PyB2LnNoYWRvdztcbiAgY29uc3QgaW5saW5lID0gcHJvcHMuaW5saW5lID8/IHYuaW5saW5lO1xuICBjb25zdCB3aWR0aCA9IHByb3BzLndpZHRoID8/IHYud2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IHByb3BzLmhlaWdodCA/PyB2LmhlaWdodDtcbiAgY29uc3QgbWluSGVpZ2h0ID0gcHJvcHMubWluSGVpZ2h0ID8/IHYubWluSGVpZ2h0O1xuICBjb25zdCBtYXhJbmxpbmVTaXplID0gcHJvcHMubWF4SW5saW5lU2l6ZSA/PyB2Lm1heElubGluZVNpemU7XG4gIGNvbnN0IHBvc2l0aW9uID0gcHJvcHMucG9zaXRpb24gPz8gdi5wb3NpdGlvbjtcbiAgY29uc3QgaW5zZXQgPSBwcm9wcy5pbnNldCA/PyB2Lmluc2V0O1xuICBjb25zdCB6SW5kZXggPSBwcm9wcy56SW5kZXggPz8gdi56SW5kZXg7XG4gIC8vIHBvbGx5IzEyNi8jMTM1OiBubyB2YXJpYW50IHNldHMgdGhlc2UsIHNvIHRoZXkgcmVzb2x2ZSBzdHJhaWdodCBmcm9tIHByb3BzLlxuICBjb25zdCB7IG1heEhlaWdodCwgb3ZlcmZsb3csIGJvcmRlclN0eWxlLCB0cmFuc2Zvcm0sIGJvcmRlckNvbG9yLCBzY2hlbWUsIHBvaW50ZXJFdmVudHMgfSA9IHByb3BzO1xuXG4gIC8vIEEgYm9yZGVyZWQgc3VyZmFjZSBuZWVkcyBhIHdpZHRoLiBJZiB0aGUgY29uc3VtZXIgYXNrZWQgZm9yIGEgYm9yZGVyIOKAlFxuICAvLyBieSBuYW1lIG9yIGJ5IHJhdyBjb2xvdXIg4oCUIGJ1dCBkaWRuJ3QgcGljayBhIHdpZHRoLCBpbmZlciAnZGVmYXVsdCdcbiAgLy8gc28gdGhlIGJvcmRlciByZW5kZXJzLlxuICBjb25zdCB3YW50c0JvcmRlciA9IChib3JkZXIgIT09IHVuZGVmaW5lZCAmJiBib3JkZXIgIT09IFwibm9uZVwiKSB8fCBib3JkZXJDb2xvciAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBib3JkZXJXaWR0aCA9IHByb3BzLmJvcmRlcldpZHRoID8/IHYuYm9yZGVyV2lkdGggPz8gKHdhbnRzQm9yZGVyID8gXCJkZWZhdWx0XCIgOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tcy1wXCJdID0gcGFkZGluZztcbiAgaWYgKGJhY2tncm91bmQpIHN0eWxlW1wiLS1zLWJnXCJdID0gYmdWYWx1ZShiYWNrZ3JvdW5kKTtcbiAgaWYgKHJhZGl1cykgc3R5bGVbXCItLXMtcmFkaXVzXCJdID0gcmFkaXVzVmFsdWUocmFkaXVzKTtcbiAgaWYgKGJvcmRlcikgc3R5bGVbXCItLXMtYm9yZGVyLWNvbG9yXCJdID0gYm9yZGVyQ29sb3JWYWx1ZShib3JkZXIpO1xuICAvLyBBIHJhdyBib3JkZXJDb2xvciB3aW5zIG92ZXIgd2hhdGV2ZXIgdG9rZW4gYGJvcmRlcmAgcmVzb2x2ZWQgdG8uXG4gIGlmIChib3JkZXJDb2xvcikgc3R5bGVbXCItLXMtYm9yZGVyLWNvbG9yXCJdID0gYm9yZGVyQ29sb3I7XG4gIGlmIChib3JkZXJXaWR0aCkgc3R5bGVbXCItLXMtYm9yZGVyLXdpZHRoXCJdID0gYm9yZGVyV2lkdGhWYWx1ZShib3JkZXJXaWR0aCk7XG4gIGlmIChzaGFkb3cpIHN0eWxlW1wiLS1zLXNoYWRvd1wiXSA9IHNoYWRvd1ZhbHVlKHNoYWRvdyk7XG4gIGlmIChib3JkZXJTdHlsZSkgc3R5bGVbXCItLXMtYm9yZGVyLXN0eWxlXCJdID0gYm9yZGVyU3R5bGU7XG4gIGlmIChwb2ludGVyRXZlbnRzKSBzdHlsZVtcIi0tcy1wZVwiXSA9IHBvaW50ZXJFdmVudHM7XG4gIGlmICh3aWR0aCkgc3R5bGVbXCItLXMtd1wiXSA9IHdpZHRoO1xuICBpZiAoaGVpZ2h0KSBzdHlsZVtcIi0tcy1oXCJdID0gaGVpZ2h0O1xuICBpZiAobWluSGVpZ2h0KSBzdHlsZVtcIi0tcy1taFwiXSA9IG1pbkhlaWdodDtcbiAgaWYgKG1heEhlaWdodCkgc3R5bGVbXCItLXMtbWF4aFwiXSA9IG1heEhlaWdodDtcbiAgaWYgKG1heElubGluZVNpemUpIHN0eWxlW1wiLS1zLW1pc1wiXSA9IG1heElubGluZVNpemU7XG4gIGlmIChvdmVyZmxvdykgc3R5bGVbXCItLXMtb3ZlcmZsb3dcIl0gPSBvdmVyZmxvdztcbiAgaWYgKHBvc2l0aW9uKSBzdHlsZVtcIi0tcy1wb3NpdGlvblwiXSA9IHBvc2l0aW9uO1xuICBpZiAoaW5zZXQpIHN0eWxlW1wiLS1zLWluc2V0XCJdID0gaW5zZXQ7XG4gIGlmICh0cmFuc2Zvcm0pIHN0eWxlW1wiLS1zLXRyYW5zZm9ybVwiXSA9IHRyYW5zZm9ybTtcbiAgaWYgKHpJbmRleCAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIi0tcy16XCJdID0gU3RyaW5nKHpJbmRleCk7XG5cbiAgaWYgKHByb3BzLnN0eWxlKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgcHJvcHMuc3R5bGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW2NsYXNzZXNbXCJzdXJmYWNlXCJdXTtcbiAgaWYgKGlubGluZSkgcGFydHMucHVzaChjbGFzc2VzW1wiaW5saW5lXCJdKTtcbiAgcGFydHMucHVzaChib3JkZXJTaWRlc0NsYXNzKGJvcmRlclNpZGVzKSk7XG4gIGlmIChwcm9wcy5jbGFzc05hbWUpIHBhcnRzLnB1c2gocHJvcHMuY2xhc3NOYW1lKTtcbiAgY29uc3QgY2xhc3NOYW1lID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIGNvbnN0IHBhc3N0aHJvdWdoOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBjb25zdCBpc0RhdGEgPSBrZXkuc3RhcnRzV2l0aChcImRhdGEtXCIpO1xuICAgIGNvbnN0IGlzQXJpYSA9IGtleS5zdGFydHNXaXRoKFwiYXJpYS1cIik7XG4gICAgaWYgKCFpc0RhdGEgJiYgIWlzQXJpYSAmJiBrZXkgIT09IFwidGl0bGVcIikgY29udGludWU7XG4gICAgaWYgKGtleSA9PT0gXCJkYXRhLXBvbGx5LXN1cmZhY2VcIikgY29udGludWU7XG4gICAgaWYgKGtleSA9PT0gXCJhcmlhLWxhYmVsXCIgfHwga2V5ID09PSBcImFyaWEtbGFiZWxsZWRieVwiIHx8IGtleSA9PT0gXCJhcmlhLWRlc2NyaWJlZGJ5XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gKHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHBhc3N0aHJvdWdoW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICBpZDogcHJvcHMuaWQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uQ2xpY2s6IHByb3BzLm9uQ2xpY2ssXG4gICAgICBvbktleURvd246IHByb3BzLm9uS2V5RG93bixcbiAgICAgIHJvbGU6IHByb3BzLnJvbGUsXG4gICAgICB0YWJJbmRleDogcHJvcHMudGFiSW5kZXgsXG4gICAgICBcImFyaWEtbGFiZWxcIjogcHJvcHNbXCJhcmlhLWxhYmVsXCJdLFxuICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogcHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl0sXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogcHJvcHNbXCJhcmlhLWRlc2NyaWJlZGJ5XCJdLFxuICAgICAgXCJkYXRhLXBvbGx5LXN1cmZhY2VcIjogdmFyaWFudCxcbiAgICAgIFwiZGF0YS1wb2xseS10aGVtZVwiOiBzY2hlbWUsXG4gICAgICAuLi5wYXNzdGhyb3VnaCxcbiAgICB9LFxuICAgIHByb3BzLmNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ2FyZCDigJQgY29tcG91bmQgcHJpbWl0aXZlIHRoYXQgY29tcG9zZXMgU3VyZmFjZSBmb3IgZWFjaCBuYW1lZCBzbG90LlxuICpcbiAqIENhcmQgaXMgdGhlIGZpcnN0IGNvbXBvdW5kIHRoYXQgaXMgcHVyZWx5IGEgcmUtc2tpbiBvZiBTdXJmYWNlIOKAlCBub1xuICogYmVoYXZpb3VyYWwgbGF5ZXIuIEhlYWRlciwgQm9keSwgYW5kIEZvb3RlciBhcmUgZWFjaCBTdXJmYWNlcyB3aXRoXG4gKiBzZW5zaWJsZSBkZWZhdWx0czsgUm9vdCBpcyBhIHJhaXNlZCBTdXJmYWNlIHRoYXQgd3JhcHMgdGhlbS4gRXZlcnlcbiAqIHNsb3QgYWNjZXB0cyB0aGUgZnVsbCBTdXJmYWNlUHJvcHMsIHNvIGNvbnN1bWVycyByZXRpbnQsIG92ZXJyaWRlLCBvclxuICogcmVhY2ggZm9yIHJhdyBwYWRkaW5nIHdpdGhvdXQgcmVhY2hpbmcgcGFzdCB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgU3VyZmFjZSwgdHlwZSBTdXJmYWNlUHJvcHMgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDYXJkUHJvcHMgPSBTdXJmYWNlUHJvcHM7XG5leHBvcnQgdHlwZSBDYXJkU2xvdFByb3BzID0gU3VyZmFjZVByb3BzO1xuXG5mdW5jdGlvbiBSb290KHByb3BzOiBDYXJkUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicmFpc2VkXCIsIHJhZGl1cyA9IFwibWRcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgdmFyaWFudD17dmFyaWFudH0gcmFkaXVzPXtyYWRpdXN9IGRhdGEtcG9sbHktY2FyZCB7Li4ucmVzdH0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5mdW5jdGlvbiBIZWFkZXIocHJvcHM6IENhcmRTbG90UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1tZCkgdmFyKC0tcG9sbHktc3BhY2UtbGcpXCIsXG4gICAgYm9yZGVyID0gXCJkZWZhdWx0XCIsXG4gICAgYm9yZGVyU2lkZXMgPSBcImJsb2NrLWVuZFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtaGVhZGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSBwYWRkaW5nPXtwYWRkaW5nfSBkYXRhLXBvbGx5LWNhcmQtYm9keSB7Li4ucmVzdH0+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIocHJvcHM6IENhcmRTbG90UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1tZCkgdmFyKC0tcG9sbHktc3BhY2UtbGcpXCIsXG4gICAgYm9yZGVyID0gXCJkZWZhdWx0XCIsXG4gICAgYm9yZGVyU2lkZXMgPSBcImJsb2NrLXN0YXJ0XCIsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHBhZGRpbmc9e3BhZGRpbmd9XG4gICAgICBib3JkZXI9e2JvcmRlcn1cbiAgICAgIGJvcmRlclNpZGVzPXtib3JkZXJTaWRlc31cbiAgICAgIGRhdGEtcG9sbHktY2FyZC1mb290ZXJcbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBDYXJkID0geyBSb290LCBIZWFkZXIsIEJvZHksIEZvb3RlciB9O1xuIiwKICAgICIvKipcbiAqIENoZWNrYm94IOKAlCBuYXRpdmUgY2hlY2tib3ggd3JhcHBlZCBpbiBhIGxhYmVsLlxuICpcbiAqIFBhc3MgYSBwbGFpbiBib29sZWFuIGZvciBjb250cm9sbGVkIHVzZSAoY2FsbGVyIGxpc3RlbnMgZWxzZXdoZXJlKSxcbiAqIG9yIGEgU2lnbmFsPGJvb2xlYW4+IHRvIGhhdmUgdGhlIHByaW1pdGl2ZSBiaW5kIGl0cyBvd24gY2hhbmdlXG4gKiBsaXN0ZW5lciBhbmQgbXV0YXRlIHRoZSBzaWduYWwgZGlyZWN0bHkuIFRoZSBsYWJlbCB3cmFwcyB0aGUgaW5wdXRcbiAqIHNvIGNsaWNrcyBhbnl3aGVyZSBpbiB0aGUgdGFyZ2V0IGFyZWEgdG9nZ2xlIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGNoZWNrZWQ/OiBib29sZWFuIHwgU2lnbmFsPGJvb2xlYW4+O1xuICBkZWZhdWx0Q2hlY2tlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBpc1NpZ25hbCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFNpZ25hbDxib29sZWFuPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgXCJ2YWx1ZVwiIGluIHZhbHVlICYmIFwicGVla1wiIGluIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tib3gocHJvcHM6IENoZWNrYm94UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hlY2tlZCwgZGVmYXVsdENoZWNrZWQsIG5hbWUsIGRpc2FibGVkID0gZmFsc2UsIGxhYmVsLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBpZiAoaXNTaWduYWwoY2hlY2tlZCkpIHtcbiAgICAgIGNoZWNrZWQudmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tlZFZhbHVlID0gaXNTaWduYWwoY2hlY2tlZCkgPyBjaGVja2VkLnZhbHVlIDogY2hlY2tlZDtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2hlY2tib3hcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWNoZWNrYm94PlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZFZhbHVlfVxuICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENsdXN0ZXIg4oCUIHdyYXBwaW5nIHJvdyBvZiB2YXJpYWJsZS13aWR0aCBpdGVtcy5cbiAqXG4gKiBUaGUgZmxleC13cmFwIGNvdW50ZXJwYXJ0IHRvIDxMYXlvdXQ+LiBXaGVyZSBMYXlvdXQgb3ducyBDU1MgZ3JpZFxuICogdHJhY2tzLCBDbHVzdGVyIG93bnMgYSByb3cgb2YgaXRlbXMgdGhhdCBkaWZmZXIgaW4gd2lkdGggYW5kIG11c3RcbiAqIHJlZmxvdyBhcyBzcGFjZSBydW5zIG91dCDigJQgZmlsdGVyIGNoaXBzLCB0YWcgYW5kIGJhZGdlIGxpc3RzLCBncm91cHNcbiAqIG9mIHNtYWxsIGJ1dHRvbnMuIEl0ZW1zIGtlZXAgZXZlbiBzcGFjaW5nIG9uIGJvdGggYXhlcyB2aWEgYGdhcGA7IHRoZVxuICogcm93IHdyYXBzIGF1dG9tYXRpY2FsbHkgYXQgbmFycm93IHdpZHRocy4gTGlrZSBMYXlvdXQsIHByb3BzIG1hcCB0b1xuICogQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzIHNvIGNvbnN1bWVycyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZW0gaW4gYVxuICogbWVkaWEgcXVlcnkgd2l0aG91dCB0b3VjaGluZyBzcGVjaWZpY2l0eS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzZWNvbmQgKGFuZCBmaW5hbCkgbGF5b3V0IHByaW1pdGl2ZTogYSBjb25zdW1lciBuZXZlclxuICogd3JpdGVzIGBkaXNwbGF5OiBmbGV4YCBvciBgZGlzcGxheTogZ3JpZGAgdGhlbXNlbHZlcyDigJQgZ3JpZCBnb2VzXG4gKiB0aHJvdWdoIDxMYXlvdXQ+LCBhIHdyYXBwaW5nIGNsdXN0ZXIgZ29lcyB0aHJvdWdoIDxDbHVzdGVyPi5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NsdXN0ZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBDbHVzdGVyUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgbmF2LCB1bCwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBTcGFjZSBiZXR3ZWVuIGl0ZW1zLCBib3RoIGF4ZXMuIFR5cGljYWxseSBhIGAtLXBvbGx5LXNwYWNlLSpgIHRva2VuLiAqL1xuICBnYXA/OiBzdHJpbmc7XG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIE1haW4tYXhpcyBkaXN0cmlidXRpb24g4oCUIG1hcHMgdG8ganVzdGlmeS1jb250ZW50LiBEZWZhdWx0OiBzdGFydC4gKi9cbiAganVzdGlmeT86IHN0cmluZztcbiAgLyoqIENyb3NzLWF4aXMgYWxpZ25tZW50IHdpdGhpbiBhIHdyYXBwZWQgcm93IOKAlCBtYXBzIHRvIGFsaWduLWl0ZW1zLiBEZWZhdWx0OiBjZW50ZXIuICovXG4gIGFsaWduPzogc3RyaW5nO1xuXG4gIC8qKiBSZW5kZXIgYXMgaW5saW5lLWZsZXggc28gdGhlIGNsdXN0ZXIgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbHVzdGVyKHByb3BzOiBDbHVzdGVyUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGFzID0gXCJkaXZcIiwgZ2FwLCBwYWRkaW5nLCBqdXN0aWZ5LCBhbGlnbiwgaW5saW5lLCBjbGFzc05hbWUsIGlkLCByb2xlIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAoZ2FwKSBzdHlsZVtcIi0tYy1nYXBcIl0gPSBnYXA7XG4gIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tYy1wXCJdID0gcGFkZGluZztcbiAgaWYgKGp1c3RpZnkpIHN0eWxlW1wiLS1jLWpjXCJdID0ganVzdGlmeTtcbiAgaWYgKGFsaWduKSBzdHlsZVtcIi0tYy1haVwiXSA9IGFsaWduO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjbHVzdGVyXCJdXTtcbiAgaWYgKGlubGluZSkgcGFydHMucHVzaChjbGFzc2VzW1wiaW5saW5lXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd24gYXR0cmlidXRlcyB3aW4uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzczogcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLFxuICAgICAgc3R5bGUsXG4gICAgICByb2xlLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgICAgXCJkYXRhLXBvbGx5LWNsdXN0ZXJcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ29kZSDigJQgaW5saW5lIG1vbm9zcGFjZSBjb2RlIHNwYW4uXG4gKlxuICogUmVuZGVycyBhIGA8Y29kZT5gIHdpdGggdGhlIGAtLXBvbGx5LWZvbnQtbW9ub2Agc3RhY2ssIGEgZmFpbnQgc3Vua2VuXG4gKiB0aW50LCBhbmQgc251ZyBwYWRkaW5nIHNvIGEgY29uc3VtZXIgbmV2ZXIgaGFuZC1yb2xscyBhIGAubW9ub2AgY2xhc3NcbiAqIGZvciBpbmxpbmUgY29kZSwgaWRlbnRpZmllcnMsIG9yIGtleWJvYXJkIGhpbnRzLiBGb3IgbXVsdGktbGluZSBjb2RlXG4gKiBibG9ja3MsIHBhc3MgYGJsb2NrYCwgd2hpY2ggc3dpdGNoZXMgdG8gYSBwcmUtd3JhcHBlZCA8cHJlPjxjb2RlPi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Db2RlLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ29kZVByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogUmVuZGVyIGFzIGEgYmxvY2sgKDxwcmU+PGNvZGU+KSBpbnN0ZWFkIG9mIGFuIGlubGluZSBzcGFuLiAqL1xuICBibG9jaz86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ29kZShwcm9wczogQ29kZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBibG9jaywgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBzcHJlYWQgZmlyc3Q7IHRoZSBleHBsaWNpdCBhdHRyaWJ1dGVzIGFmdGVyXG4gIC8vIHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICBjb25zdCBwYXNzdGhyb3VnaCA9IGNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyk7XG5cbiAgaWYgKGJsb2NrKSB7XG4gICAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImJsb2NrXCJdXTtcbiAgICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxwcmVcbiAgICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1jb2RlPVwiYmxvY2tcIlxuICAgICAgPlxuICAgICAgICA8Y29kZT57Y2hpbGRyZW59PC9jb2RlPlxuICAgICAgPC9wcmU+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjb2RlXCJdXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxjb2RlXG4gICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1jb2RlPVwiaW5saW5lXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9jb2RlPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvbGxhcHNpYmxlIOKAlCBuYXRpdmUgPGRldGFpbHM+LzxzdW1tYXJ5PiB3cmFwcGVyLlxuICpcbiAqIFVzZXMgdGhlIGJyb3dzZXIncyBidWlsdC1pbiBkaXNjbG9zdXJlIHNlbWFudGljcyBzbyBrZXlib2FyZCBhbmRcbiAqIHNjcmVlbi1yZWFkZXIgYmVoYXZpb3VyIGNvbWUgZnJlZS4gQSA6OmJlZm9yZSBhcnJvdyByb3RhdGVzIG9uIG9wZW4uXG4gKiBDb2xvcnMsIHNwYWNpbmcsIGFuZCBtb3Rpb24gY29tZSBmcm9tIHRva2VuczsgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXG4gKiB6ZXJvZXMgdGhlIHJvdGF0aW9uIHZpYSB0aGUgbW90aW9uIHRva2VuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvbGxhcHNpYmxlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQ29sbGFwc2libGVQcm9wcyA9IHtcbiAgLyoqIERpc2Nsb3N1cmUgaGVhZGVyLiBBIHN0cmluZyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBvciBhbnkgbm9kZSDigJRcbiAgICogZS5nLiBhIG11dGVkLCBzbWFsbCA8VGV4dD4g4oCUIHdoZW4gdGhlIGhlYWRlciBuZWVkcyBzdHlsaW5nLiAqL1xuICBzdW1tYXJ5OiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogSW5wdXQgdHlwZXMgd2hvc2UgU3BhY2UvRW50ZXIgaXMgYW4gYWN0aXZhdGlvbiwgbm90IHRleHQgZW50cnkg4oCUIHRoZXNlXG4gKiBrZWVwIHRoZWlyIG93biBrZXlib2FyZCBiZWhhdmlvdXIgYW5kIG11c3Qgbm90IGJlIGd1YXJkZWQuICovXG5jb25zdCBOT05fVEVYVF9JTlBVVF9UWVBFUyA9IG5ldyBTZXQoW1xuICBcImNoZWNrYm94XCIsXG4gIFwicmFkaW9cIixcbiAgXCJidXR0b25cIixcbiAgXCJzdWJtaXRcIixcbiAgXCJyZXNldFwiLFxuICBcImZpbGVcIixcbiAgXCJpbWFnZVwiLFxuICBcInJhbmdlXCIsXG4gIFwiY29sb3JcIixcbl0pO1xuXG4vKiogSXMgdGhlIGV2ZW50IHRhcmdldCBhIGZpZWxkIHdoZXJlIFNwYWNlL0VudGVyIGluc2VydHMvZWRpdHMgdGV4dD8gKi9cbmZ1bmN0aW9uIGlzVGV4dEVudHJ5VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHJldHVybiB0cnVlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgIHJldHVybiAhTk9OX1RFWFRfSU5QVVRfVFlQRVMuaGFzKHRhcmdldC50eXBlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hyb21pdW0gdG9nZ2xlcyBhIDxkZXRhaWxzPiBvbiB0aGUgU3BhY2UvRW50ZXIgKmtleXVwKiBvZiBpdHMgPHN1bW1hcnk+LFxuICogZXZlbiB3aGVuIGZvY3VzIHNpdHMgaW4gYSBuZXN0ZWQgdGV4dCBmaWVsZCDigJQgc28gZXZlcnkgc3BhY2UgdHlwZWQgaW4gYW5cbiAqIGVkaXRhYmxlIGhlYWRlciB3b3VsZCBjb2xsYXBzZSB0aGUgZGlzY2xvc3VyZS4gc3RvcFByb3BhZ2F0aW9uIGNhbid0IHN0b3BcbiAqIGl0ICh0aGUgdG9nZ2xlIGlzIHRoZSBzdW1tYXJ5J3Mgb3duIGFjdGl2YXRpb24gYmVoYXZpb3VyLCBub3QgYSBidWJibGluZ1xuICogbGlzdGVuZXIpIGFuZCBwcmV2ZW50RGVmYXVsdCBvbiAqa2V5ZG93biogd291bGQgc3dhbGxvdyB0aGUgY2hhcmFjdGVyLiBUaGVcbiAqIGNoYXJhY3RlciBpcyBhbHJlYWR5IGluc2VydGVkIGJ5IHRoZSB0aW1lIGtleXVwIGZpcmVzLCBzbyBjYW5jZWxsaW5nIHRoZVxuICoga2V5dXAgZGVmYXVsdCBmb3IgdGV4dC1lbnRyeSBmaWVsZHMga2lsbHMgdGhlIHRvZ2dsZSB3aGlsZSBsZWF2aW5nIHR5cGluZ1xuICogdW50b3VjaGVkLiBCdXR0b25zL2NoZWNrYm94L3JhZGlvIGZhbGwgdGhyb3VnaCBhbmQga2VlcCB0aGVpciBvd25cbiAqIGFjdGl2YXRpb247IHRoZSBzdW1tYXJ5IGl0c2VsZiAobm8gbmVzdGVkIGZpZWxkKSBrZWVwcyBub3JtYWwga2V5Ym9hcmRcbiAqIGRpc2Nsb3N1cmUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVN1bW1hcnlLZXlVcChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgaWYgKGV2ZW50LmtleSAhPT0gXCIgXCIgJiYgZXZlbnQua2V5ICE9PSBcIkVudGVyXCIpIHJldHVybjtcbiAgaWYgKCFpc1RleHRFbnRyeVRhcmdldChldmVudC50YXJnZXQpKSByZXR1cm47XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xsYXBzaWJsZShwcm9wczogQ29sbGFwc2libGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBjaGlsZHJlbiwgZGVmYXVsdE9wZW4gPSBmYWxzZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjb2xsYXBzaWJsZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8ZGV0YWlsc1xuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgb3Blbj17ZGVmYXVsdE9wZW59XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvbGxhcHNpYmxlXG4gICAgPlxuICAgICAgey8qIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9TdGF0aWNFbGVtZW50SW50ZXJhY3Rpb25zOiA8c3VtbWFyeT4gaXMgYSBuYXRpdmUgaW50ZXJhY3RpdmUgZGlzY2xvc3VyZSBjb250cm9sOyB0aGlzIGtleXVwIGd1YXJkIGNhbmNlbHMgaXRzIHRvZ2dsZSB3aGVuIGEgbmVzdGVkIGVkaXRhYmxlIGZpZWxkIGlzIHRoZSB0YXJnZXQuICovfVxuICAgICAgPHN1bW1hcnkgY2xhc3M9e2NsYXNzZXNbXCJzdW1tYXJ5XCJdfSBvbktleVVwPXtoYW5kbGVTdW1tYXJ5S2V5VXB9PlxuICAgICAgICB7c3VtbWFyeX1cbiAgICAgIDwvc3VtbWFyeT5cbiAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJjb250ZW50XCJdfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICApO1xufVxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxGcmFnbWVudCBhcyBTdHJpY3RNb2RlLGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlTGF5b3V0RWZmZWN0IGFzIHMsdXNlRWZmZWN0IGFzIGgsdXNlQ2FsbGJhY2sgYXMgdix1c2VDb250ZXh0IGFzIGQsdXNlRGVidWdWYWx1ZSBhcyBtLHVzZUlkIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyB5LHVzZU1lbW8gYXMgXyx1c2VSZWR1Y2VyIGFzIGIsdXNlUmVmIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gRShuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDKG4sdCl7dmFyIGU9dCgpLHI9YSh7dDp7X186ZSx1OnR9fSksdT1yWzBdLnQsbz1yWzFdO3JldHVybiBzKGZ1bmN0aW9uKCl7dS5fXz1lLHUudT10LFIodSkmJm8oe3Q6dX0pfSxbbixlLHRdKSxoKGZ1bmN0aW9uKCl7cmV0dXJuIFIodSkmJm8oe3Q6dX0pLG4oZnVuY3Rpb24oKXtSKHUpJiZvKHt0OnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gUihuKXt0cnl7cmV0dXJuISgodD1uLl9fKT09PShlPW4udSgpKSYmKDAhPT10fHwxL3Q9PTEvZSl8fHQhPXQmJmUhPWUpfWNhdGNoKG4pe3JldHVybiEwfXZhciB0LGV9ZnVuY3Rpb24geChuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLHhdfXZhciBJPXM7ZnVuY3Rpb24gTShuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBOKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZjtyZXR1cm4gdCE9bi5yZWYmJnQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8dCE9bi5yZWY6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1Ll9fZj11LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUudHlwZT1uLHV9KE0ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxNLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEY9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxMPXttYXA6Rixmb3JFYWNoOkYsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LE89ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO08obix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18mJm4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmKHQuX196PSEwKSx0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYzMiZuLl9fdSYmKG4udHlwZT1udWxsKSxVJiZVKG4pfSwoUC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLm8mJihyLm89W10pLHIuby5wdXNoKGUpO3ZhciB1PWooci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fHIuX196fHwobz0hMCxlLl9fUj1udWxsLHU/dShjKTpjKCkpfTtlLl9fUj1pO3ZhciBsPWUuX19QO2UuX19QPW51bGw7dmFyIGM9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1XKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLm8ucG9wKCk7KXQuX19QPWwsdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sUC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1WKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBIPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLmwuZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLmwuc2l6ZSkpZm9yKGU9bi5pO2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi5pPWU9ZVsyXX19O2Z1bmN0aW9uIFoobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBZKG4pe3ZhciBlPXRoaXMscj1uLmg7aWYoZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLnYpLGUudj1udWxsLGUuaD1udWxsfSxlLmgmJmUuaCE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSwhZS52KXtmb3IodmFyIHU9ZS5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXztlLmg9cixlLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sX19rOntfX206dS5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpyLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmguaW5zZXJ0QmVmb3JlKG4sdCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaC5yZW1vdmVDaGlsZChuKX19fW8odChaLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUudil9ZnVuY3Rpb24gJChuLGUpe3ZhciByPXQoWSx7X192Om4saDplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KEIucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPWoodC5fX3YpLHI9dC5sLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLEgodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxCLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMubC5zZXQodFtlXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gbi5jaGlsZHJlbn0sQi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbih0LGUpe0gobixlLHQpfSl9O3ZhciBxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxHPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSz0vW0EtWjAtOV0vZyxRPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxYPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIG5uKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIHRuKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBlbj1lLmV2ZW50O2UuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuJiYobj1lbihuKSksbi5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxuLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LG4ubmF0aXZlRXZlbnQ9bn07dmFyIHJuLHVuPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxvbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PWUuaW5kZXhPZihcIi1cIik7Zm9yKHZhciBpIGluIHQpe3ZhciBsPXRbaV07aWYoIShcInZhbHVlXCI9PT1pJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09bHx8USYmXCJjaGlsZHJlblwiPT09aSYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09aXx8XCJjbGFzc05hbWVcIj09PWkpKXt2YXIgYz1pLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PWkmJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/aT1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09aSYmITA9PT1sP2w9XCJcIjpcInRyYW5zbGF0ZVwiPT09YyYmXCJub1wiPT09bD9sPSExOlwib1wiPT09Y1swXSYmXCJuXCI9PT1jWzFdP1wib25kb3VibGVjbGlja1wiPT09Yz9pPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWN8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fFgodC50eXBlKT9cIm9uZm9jdXNcIj09PWM/aT1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1jP2k9XCJvbmZvY3Vzb3V0XCI6Si50ZXN0KGkpJiYoaT1jKTpjPWk9XCJvbmlucHV0XCI6byYmRy50ZXN0KGkpP2k9aS5yZXBsYWNlKEssXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09bCYmKGw9dm9pZCAwKSxcIm9uaW5wdXRcIj09PWMmJnVbaT1jXSYmKGk9XCJvbmlucHV0Q2FwdHVyZVwiKSx1W2ldPWx9fVwic2VsZWN0XCI9PWUmJih1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLG51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHVuKSk6dC5jbGFzc05hbWUmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxvbiYmb24obil9O3ZhciBsbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXtsbiYmbG4obikscm49bi5fX2N9O3ZhciBjbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtjbiYmY24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxybj1udWxsfTt2YXIgZm49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBybi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSxhbj1cIjE4LjMuMVwiO2Z1bmN0aW9uIHNuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBobihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiBkbihuKXtyZXR1cm4hIW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lJiYwPT1uLmRpc3BsYXlOYW1lLmluZGV4T2YoXCJNZW1vKFwiKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gaG4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBwbihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBfbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxibj1mdW5jdGlvbihuLHQpe3ZhciByPWUuZGVib3VuY2VSZW5kZXJpbmc7ZS5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihuKXtyZXR1cm4gbigpfTt2YXIgdT1uKHQpO3JldHVybiBlLmRlYm91bmNlUmVuZGVyaW5nPXIsdX0sU249aG4sZ249e3VzZVN0YXRlOmEsdXNlSWQ6cCx1c2VSZWR1Y2VyOmIsdXNlRWZmZWN0OmgsdXNlTGF5b3V0RWZmZWN0OnMsdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlVHJhbnNpdGlvbjprLHVzZURlZmVycmVkVmFsdWU6dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHN0YXJ0VHJhbnNpdGlvbjp4LHVzZVJlZjpTLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VNZW1vOl8sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHZlcnNpb246XCIxOC4zLjFcIixDaGlsZHJlbjpMLHJlbmRlcjpubixoeWRyYXRlOnRuLHVubW91bnRDb21wb25lbnRBdE5vZGU6cG4sY3JlYXRlUG9ydGFsOiQsY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OnNuLGNsb25lRWxlbWVudDptbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmhuLGlzRWxlbWVudDpTbixpc0ZyYWdtZW50OnZuLGlzTWVtbzpkbixmaW5kRE9NTm9kZTp5bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50Ok0sbWVtbzpOLGZvcndhcmRSZWY6RCxmbHVzaFN5bmM6Ym4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6X24sU3RyaWN0TW9kZTp1LFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmZufTtleHBvcnR7TCBhcyBDaGlsZHJlbixNIGFzIFB1cmVDb21wb25lbnQsUCBhcyBTdXNwZW5zZSxCIGFzIFN1c3BlbnNlTGlzdCxmbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtbiBhcyBjbG9uZUVsZW1lbnQsc24gYXMgY3JlYXRlRmFjdG9yeSwkIGFzIGNyZWF0ZVBvcnRhbCxnbiBhcyBkZWZhdWx0LHluIGFzIGZpbmRET01Ob2RlLGJuIGFzIGZsdXNoU3luYyxEIGFzIGZvcndhcmRSZWYsdG4gYXMgaHlkcmF0ZSxTbiBhcyBpc0VsZW1lbnQsdm4gYXMgaXNGcmFnbWVudCxkbiBhcyBpc01lbW8saG4gYXMgaXNWYWxpZEVsZW1lbnQseiBhcyBsYXp5LE4gYXMgbWVtbyxubiBhcyByZW5kZXIseCBhcyBzdGFydFRyYW5zaXRpb24scG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxfbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyx3IGFzIHVzZURlZmVycmVkVmFsdWUsSSBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQyBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxrIGFzIHVzZVRyYW5zaXRpb24sYW4gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEZvY3VzIHRyYXAuXG4gKlxuICogS2VlcHMgVGFiIC8gU2hpZnQrVGFiIGluc2lkZSBhIHJvb3QgZWxlbWVudC4gUmV0dXJucyBhIGNsZWFudXAgdGhhdFxuICogcmVzdG9yZXMgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgYWN0aXZlIGJlZm9yZSB0aGUgdHJhcCBtb3VudGVkLlxuICogU2ltcGxlIGFuZCBzeW5jaHJvbm91cyDigJQgYXNzdW1lcyBhIHNpbmdsZSBhY3RpdmUgdHJhcCBwZXIgT3ZlcmxheVJvb3RcbiAqIGFuZCBsZXRzIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGluIGBAZmFpcmZveC9wb2xseS9hY3Rpb25zYCBlbmZvcmNlIHRoYXRcbiAqIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAqL1xuXG5jb25zdCBGT0NVU0FCTEVfU0VMRUNUT1IgPSBbXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1oaWRkZW5dKVwiLFxuICBcInNlbGVjdDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJvYmplY3RcIixcbiAgXCJlbWJlZFwiLFxuICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXCJbY29udGVudGVkaXRhYmxlXVwiLFxuXS5qb2luKFwiLFwiKTtcblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlKHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEZPQ1VTQUJMRV9TRUxFQ1RPUikpO1xuICByZXR1cm4gbm9kZXMuZmlsdGVyKFxuICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpICYmIGVsLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEZvY3VzVHJhcChyb290OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZSA9IChcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbFxuICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvLyBNb3ZlIGZvY3VzIGludG8gdGhlIHJvb3QgaWYgaXQncyBub3QgYWxyZWFkeS5cbiAgY29uc3QgZm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZVswXSA/PyByb290O1xuICBpZiAoIXJvb3QuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICBmaXJzdC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiVGFiXCIpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZmlyc3RJdGVtIHx8ICFsYXN0SXRlbSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBpZiAoYWN0aXZlID09PSBmaXJzdEl0ZW0gfHwgIXJvb3QuY29udGFpbnMoYWN0aXZlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0SXRlbS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09PSBsYXN0SXRlbSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZpcnN0SXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgaWYgKHByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgcHJldmlvdXNBY3RpdmUuZm9jdXMoKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogU2Nyb2xsIGxvY2suXG4gKlxuICogUmVmZXJlbmNlLWNvdW50ZWQuIE11bHRpcGxlIG92ZXJsYXlzIGNhbiByZXF1ZXN0IGEgbG9jazsgdGhlIGJvZHlcbiAqIHN0YXlzIGxvY2tlZCB1bnRpbCBldmVyeSByZXF1ZXN0IHJlbGVhc2VzLiBBIHNjcm9sbGJhci1ndXR0ZXIgdG9rZW5cbiAqIGlzIHdyaXR0ZW4gYXQgYWNxdWlyZSB0aW1lIHNvIGNvbnRlbnQgYmVoaW5kIHRoZSBvdmVybGF5IGRvZXNuJ3RcbiAqIHJlZmxvdyB3aGVuIHRoZSBiYXIgZGlzYXBwZWFycy5cbiAqL1xuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNjcm9sbExvY2soKTogKCkgPT4gdm9pZCB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgZ3V0dGVyID0gd2luZG93LmlubmVyV2lkdGggLSBodG1sLmNsaWVudFdpZHRoO1xuICAgIGh0bWwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIiwgYCR7Z3V0dGVyfXB4YCk7XG4gICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIiwgXCJ0cnVlXCIpO1xuICB9XG4gIGNvdW50ICs9IDE7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICBjb3VudCAtPSAxO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIik7XG4gICAgICBodG1sLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5Um9vdCDigJQgcG9ydGFsIHRhcmdldCBmb3Igc3RhY2tlZCBvdmVybGF5cy5cbiAqXG4gKiBBcHBzIHJlbmRlciA8T3ZlcmxheVJvb3QgLz4gb25jZSwgdHlwaWNhbGx5IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZVxuICogYXBwIHJvb3QuIE1vZGFsLCBDb25maXJtRGlhbG9nLCBhbmQgVG9hc3QgcG9ydGFsIGludG8gdGhpcyBlbGVtZW50O1xuICogdGhlIHNjcm9sbCBsb2NrIHRvZ2dsZXMgYmFzZWQgb24gdGhlIG92ZXJsYXkgcmVnaXN0cnkgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBoYXNPcGVuT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGFjcXVpcmVTY3JvbGxMb2NrIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL092ZXJsYXlSb290Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXlSb290KCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGhhc09wZW5PdmVybGF5KCkpIHtcbiAgICAgICAgaWYgKCFyZWxlYXNlKSByZWxlYXNlID0gYWNxdWlyZVNjcm9sbExvY2soKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIHJlbGVhc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICByZWxlYXNlPy4oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzPXtjbGFzc2VzW1wicm9vdFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LW92ZXJsYXktcm9vdCAvPjtcbn1cblxuLyoqIEdldCB0aGUgbW91bnQgbm9kZSBmb3IgcG9ydGFsZWQgb3ZlcmxheXMuIFJldHVybnMgbnVsbCBiZWZvcmUgbW91bnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmxheVJvb3ROb2RlKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIltkYXRhLXBvbGx5LW92ZXJsYXktcm9vdF1cIik7XG59XG4iLAogICAgIi8qKlxuICogTW9kYWwg4oCUIGNvbXBvdW5kIGRpYWxvZyB3aXRoIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLFxuICogYW5kIG92ZXJsYXktc3RhY2sgaW50ZWdyYXRpb24uXG4gKlxuICogUm9vdCB0YWtlcyBhIGB3aGVuYCBzaWduYWwgKG9yIGJvb2xlYW4pLiBXaGVuIHRydXRoeSB0aGUgY29udGVudCBtb3VudHNcbiAqIGludG8gdGhlIE92ZXJsYXlSb290IHBvcnRhbCwgZm9jdXMgbW92ZXMgaW5zaWRlLCBUYWIgaXMgdHJhcHBlZCwgRXNjYXBlXG4gKiBmaXJlcyBgZGF0YS1hY3Rpb249XCJtb2RhbDpjbG9zZVwiYCAob3IgdGhlIG92ZXJsYXkgcmVnaXN0cnkncyBvbkNsb3NlXG4gKiBjYWxsYmFjayksIGFuZCB0aGUgYm9keSBzY3JvbGwgbG9ja3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkb25seVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUNvbnRleHQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlSWQsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBwb3BPdmVybGF5LCBwdXNoT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGluc3RhbGxGb2N1c1RyYXAgfSBmcm9tIFwiLi9pbnRlcm5hbC9mb2N1cy10cmFwLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG50eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGVJZDogc3RyaW5nO1xuICBkZXNjSWQ6IHN0cmluZztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBDdHggPSBjcmVhdGVDb250ZXh0PE1vZGFsQ29udGV4dCB8IG51bGw+KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VNb2RhbCgpOiBNb2RhbENvbnRleHQge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEN0eCk7XG4gIGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJNb2RhbCBzdWItY29tcG9uZW50cyBtdXN0IHJlbmRlciBpbnNpZGUgPE1vZGFsLlJvb3Q+XCIpO1xuICByZXR1cm4gY3R4O1xufVxuXG50eXBlIFJvb3RQcm9wcyA9IHtcbiAgd2hlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj4gfCBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBzb3VyY2U6IFwidGl0bGVcIiB1c2VzIHRoZSA8TW9kYWwuVGl0bGU+IGlkLCBvciBwYXNzIGFuIGV4cGxpY2l0IGxhYmVsLiAqL1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFJvb3QoeyB3aGVuLCBvbkNsb3NlLCBjaGlsZHJlbiwgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB9OiBSb290UHJvcHMpIHtcbiAgY29uc3QgaWQgPSB1c2VJZCgpO1xuICBjb25zdCB0aXRsZUlkID0gYCR7aWR9LXRpdGxlYDtcbiAgY29uc3QgZGVzY0lkID0gYCR7aWR9LWRlc2NgO1xuICBjb25zdCBtb3VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHR5cGVvZiB3aGVuID09PSBcImJvb2xlYW5cIiA/IHdoZW4gOiB3aGVuLnZhbHVlO1xuXG4gIC8vIENvbnN1bWVycyBhbG1vc3QgYWx3YXlzIHBhc3MgYW4gaW5saW5lIGNsb3N1cmUgZm9yIGBvbkNsb3NlYCwgc28gdGhlIHByb3BcbiAgLy8gaGFzIGEgbmV3IGlkZW50aXR5IG9uIGV2ZXJ5IHJlbmRlci4gS2VlcGluZyBpdCBpbiB0aGUgb3ZlcmxheSBlZmZlY3Qnc1xuICAvLyBkZXBlbmRlbmN5IGFycmF5IG1hZGUgdGhhdCBlZmZlY3QgdGVhciBkb3duIGFuZCByZS1pbnN0YWxsIHBlciByZW5kZXI6XG4gIC8vIGVhY2ggcnVuIHdyb3RlIHRoZSBgc3RhY2tgIHNpZ25hbCB0d2ljZSBhbmQgbW92ZWQgZm9jdXMgdHdpY2UsIGFuZCB0aGVcbiAgLy8gc2lnbmFsIHdyaXRlIHJlLXJlbmRlcmVkIHRoZSBzdWJzY3JpYmVyIHRoYXQgcHJvZHVjZWQgdGhlIG5leHQgY2xvc3VyZS5cbiAgLy8gVGhlIHJlc3VsdCB3YXMgYW4gdW5ib3VuZGVkIHJlbmRlciBsb29wIHRoYXQgcGlubmVkIHRoZSBtYWluIHRocmVhZFxuICAvLyAocG9sbHkjMTc3KS4gVGhlIGVmZmVjdCBub3cgcmVhZHMgdGhlIGxhdGVzdCBjYWxsYmFjayB0aHJvdWdoIGEgcmVmLCBzb1xuICAvLyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHRoZSB2YWx1ZXMgdGhhdCBnZW51aW5lbHkgcmUtb3BlbiB0aGUgb3ZlcmxheS5cbiAgY29uc3Qgb25DbG9zZVJlZiA9IHVzZVJlZihvbkNsb3NlKTtcbiAgb25DbG9zZVJlZi5jdXJyZW50ID0gb25DbG9zZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW2lzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHsgaWQsIG9uQ2xvc2U6ICgpID0+IG9uQ2xvc2VSZWYuY3VycmVudD8uKCkgfTtcbiAgICBwdXNoT3ZlcmxheShlbnRyeSk7XG4gICAgY29uc3QgZWwgPSBtb3VudFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsZWFudXAgPSBlbFxuICAgICAgPyBpbnN0YWxsRm9jdXNUcmFwKGVsKVxuICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgLyogbm8gcmVmIHlldCAqL1xuICAgICAgICB9O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBwb3BPdmVybGF5KGlkKTtcbiAgICB9O1xuICB9LCBbaXNPcGVuLCBwb3J0YWxOb2RlLCBpZF0pO1xuXG4gIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlPy4oKTtcbiAgfTtcblxuICBjb25zdCBjdHg6IE1vZGFsQ29udGV4dCA9IHsgaWQsIHRpdGxlSWQsIGRlc2NJZCwgY2xvc2UgfTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxDdHguUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17bW91bnRSZWZ9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY29udGFpbmVyXCJdfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktbW9kYWwtY29udGVudFxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e2lkfVxuICAgICAgICBkYXRhLXN0YXRlPVwib3BlblwiXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17YXJpYUxhYmVsID8gdW5kZWZpbmVkIDogdGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXtkZXNjSWR9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvQ3R4LlByb3ZpZGVyPlxuICApO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIEJhY2tkcm9wKCkge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJiYWNrZHJvcFwiXX0gZGF0YS1wb2xseS1tb2RhbC1iYWNrZHJvcCBvbkNsaWNrPXtjbG9zZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgKTtcbn1cblxudHlwZSBDb250ZW50UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IEpTWC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gQ29udGVudCh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIHN0eWxlIH06IENvbnRlbnRQcm9wcykge1xuICBjb25zdCBjbHMgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wic3VyZmFjZVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJzdXJmYWNlXCJdO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHJhZGl1cz1cImxnXCJcbiAgICAgIHNoYWRvdz1cImxnXCJcbiAgICAgIHBvc2l0aW9uPVwicmVsYXRpdmVcIlxuICAgICAgY2xhc3NOYW1lPXtjbHN9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLXN1cmZhY2VcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5mdW5jdGlvbiBIZWFkZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGhlYWRlciBjbGFzcz17Y2xhc3Nlc1tcImhlYWRlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1oZWFkZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9oZWFkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRpdGxlKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IHRpdGxlSWQgfSA9IHVzZU1vZGFsKCk7XG4gIHJldHVybiAoXG4gICAgPGgyIGlkPXt0aXRsZUlkfSBjbGFzcz17Y2xhc3Nlc1tcInRpdGxlXCJdfSBkYXRhLXBvbGx5LW1vZGFsLXRpdGxlPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaDI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJvZHkoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIGNvbnN0IHsgZGVzY0lkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9e2Rlc2NJZH0gY2xhc3M9e2NsYXNzZXNbXCJib2R5XCJdfSBkYXRhLXBvbGx5LW1vZGFsLWJvZHk+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvb3Rlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Zm9vdGVyIGNsYXNzPXtjbGFzc2VzW1wiZm9vdGVyXCJdfSBkYXRhLXBvbGx5LW1vZGFsLWZvb3Rlcj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Zvb3Rlcj5cbiAgKTtcbn1cblxudHlwZSBDbG9zZVByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBGaXJlIGEgcmVnaXN0ZXJlZCBkYXRhLWFjdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG9uQ2xvc2UgY2FsbGJhY2suICovXG4gIGFjdGlvbj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIENsb3NlKHsgY2hpbGRyZW4sIGFjdGlvbiB9OiBDbG9zZVByb3BzKSB7XG4gIGNvbnN0IHsgY2xvc2UgfSA9IHVzZU1vZGFsKCk7XG4gIGlmIChhY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtcG9sbHktbW9kYWwtY2xvc2VcbiAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgIGRhdGEtcG9sbHktbW9kYWwtY2xvc2VcbiAgICAgIG9uQ2xpY2s9e2Nsb3NlfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IE1vZGFsID0ge1xuICBSb290LFxuICBCYWNrZHJvcCxcbiAgQ29udGVudCxcbiAgSGVhZGVyLFxuICBUaXRsZSxcbiAgQm9keSxcbiAgRm9vdGVyLFxuICBDbG9zZSxcbn07XG4iLAogICAgIi8qKlxuICogQ29uZmlybURpYWxvZyDigJQgUHJvbWlzZS1yZXR1cm5pbmcgY29uZmlybWF0aW9uIHByaW1pdGl2ZS5cbiAqXG4gKiBgY29uZmlybSh7IHRpdGxlLCBib2R5LCBkYW5nZXIgfSlgIHJldHVybnMgUHJvbWlzZTxib29sZWFuPi4gT3BlbnMgdGhlXG4gKiByZW5kZXJlZCBgPENvbmZpcm1EaWFsb2cuSG9zdCAvPmAgbW9kYWwgKHdoaWNoIG11c3QgYmUgbW91bnRlZCBvbmNlIGF0XG4gKiB0aGUgYXBwIHJvb3QpLiBVc2VyIHBpY2tpbmcgY29uZmlybSBvciBjYW5jZWwgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBFc2NhcGUsIGJhY2tkcm9wIGNsaWNrLCBhbmQgZXhwbGljaXQgYC5kaXNtaXNzKClgIHJlc29sdmUgZmFsc2UuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Db25maXJtRGlhbG9nLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vTW9kYWwudHN4XCI7XG5cbnR5cGUgQ29uZmlybVJlcXVlc3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG4gIGNvbmZpcm1MYWJlbD86IHN0cmluZztcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG4gIHJlc29sdmU6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IHBlbmRpbmcgPSBzaWduYWw8Q29uZmlybVJlcXVlc3QgfCBudWxsPihudWxsKTtcbmNvbnN0IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IHR5cGUgQ29uZmlybU9wdGlvbnMgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG4gIGNvbmZpcm1MYWJlbD86IHN0cmluZztcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlybShvcHRpb25zOiBDb25maXJtT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICBuZXh0SWQgKz0gMTtcbiAgICBwZW5kaW5nLnZhbHVlID0ge1xuICAgICAgaWQ6IG5leHRJZCxcbiAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgZGFuZ2VyOiBvcHRpb25zLmRhbmdlcixcbiAgICAgIGNvbmZpcm1MYWJlbDogb3B0aW9ucy5jb25maXJtTGFiZWwsXG4gICAgICBjYW5jZWxMYWJlbDogb3B0aW9ucy5jYW5jZWxMYWJlbCxcbiAgICAgIHJlc29sdmUsXG4gICAgfTtcbiAgICBpc09wZW4udmFsdWUgPSB0cnVlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2UocmVzdWx0OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIHBlbmRpbmcudmFsdWUgPSBudWxsO1xuICBjdXJyZW50LnJlc29sdmUocmVzdWx0KTtcbn1cblxuLyoqIFJlbmRlcnMgdGhlIGFjdGl2ZSBjb25maXJtIGRpYWxvZy4gTW91bnQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdC4gKi9cbmZ1bmN0aW9uIEhvc3QoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgY3VycmVudCA9IHBlbmRpbmcudmFsdWU7XG4gIGlmICghY3VycmVudCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsLlJvb3Qgd2hlbj17aXNPcGVufSBvbkNsb3NlPXsoKSA9PiBjbG9zZShmYWxzZSl9PlxuICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICA8TW9kYWwuVGl0bGU+e2N1cnJlbnQudGl0bGV9PC9Nb2RhbC5UaXRsZT5cbiAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgIHtjdXJyZW50LmJvZHkgPyA8TW9kYWwuQm9keT57Y3VycmVudC5ib2R5fTwvTW9kYWwuQm9keT4gOiBudWxsfVxuICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfSBkYXRhLXBvbGx5LWNvbmZpcm0tYWN0aW9ucz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2FuY2VsXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWNhbmNlbFxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZShmYWxzZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjdXJyZW50LmNhbmNlbExhYmVsID8/IFwiQ2FuY2VsXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXtjdXJyZW50LmRhbmdlciA/IGNsYXNzZXNbXCJjb25maXJtRGFuZ2VyXCJdIDogY2xhc3Nlc1tcImNvbmZpcm1cIl19XG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWNvbmZpcm0tb2tcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UodHJ1ZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjdXJyZW50LmNvbmZpcm1MYWJlbCA/PyBcIk9LXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Nb2RhbC5Gb290ZXI+XG4gICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgPC9Nb2RhbC5Sb290PlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ29uZmlybURpYWxvZyA9IHsgSG9zdCwgY29uZmlybSB9O1xuIiwKICAgICIvKipcbiAqIEZpbGVJbnB1dCDigJQgYSBzdHlsZWQgdHJpZ2dlciBmb3IgdGhlIG5hdGl2ZSBmaWxlIHBpY2tlci5cbiAqXG4gKiBBIGZpbGUgaXMgYSBiaW5hcnkgb2JqZWN0OiBpdCBjYW5ub3QgcmlkZSBhIGBkYXRhLWFjdGlvbmAgYXR0cmlidXRlXG4gKiB0aGUgd2F5IGEgc3RyaW5nIHZhbHVlIGRvZXMsIHNvIEZpbGVJbnB1dCBpcyB0aGUgb25lIGlucHV0IHByaW1pdGl2ZVxuICogdGhhdCB0YWtlcyBhIGNhbGxiYWNrLiBgb25GaWxlc2AgZmlyZXMgd2l0aCB0aGUgY2hvc2VuIEZpbGVMaXN0LiBUaGVcbiAqIG5hdGl2ZSA8aW5wdXQgdHlwZT1cImZpbGVcIj4gc3RheXMgaW4gdGhlIERPTSDigJQgdmlzdWFsbHkgaGlkZGVuIGluc2lkZVxuICogdGhlIDxsYWJlbD4g4oCUIHNvIHRoZSB3aG9sZSBjb250cm9sIG9wZW5zIHRoZSBwaWNrZXIgYW5kIHJlbWFpbnNcbiAqIGtleWJvYXJkLWFjY2Vzc2libGUgKHBvbGx5IzEzNSkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRQcm9wcyA9IHtcbiAgLyoqIEZpcmVkIHdpdGggdGhlIGNob3NlbiBmaWxlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gIG9uRmlsZXM6IChmaWxlczogRmlsZUxpc3QpID0+IHZvaWQ7XG4gIC8qKiBWaXNpYmxlIHRyaWdnZXIgdGV4dC4gRGVmYXVsdDogJ0Nob29zZSBmaWxlJy4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBgYWNjZXB0YCBmaWx0ZXIgZm9yd2FyZGVkIHRvIHRoZSBuYXRpdmUgaW5wdXQgKGUuZy4gJ2ltYWdlLyonKS4gKi9cbiAgYWNjZXB0Pzogc3RyaW5nO1xuICAvKiogQWxsb3cgc2VsZWN0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZS4gKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gRmlsZUlucHV0KHByb3BzOiBGaWxlSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBvbkZpbGVzLCBsYWJlbCA9IFwiQ2hvb3NlIGZpbGVcIiwgYWNjZXB0LCBtdWx0aXBsZSwgZGlzYWJsZWQsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuY3VycmVudFRhcmdldDtcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgb25GaWxlcyhmaWxlcyk7XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImZpbGVJbnB1dFwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgaWQ9e2lkfSBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktZmlsZS1pbnB1dD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibmF0aXZlXCJdfVxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAgPHNwYW4+e2xhYmVsfTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEh0bWwg4oCUIHJlbmRlciB0cnVzdGVkLCBhbHJlYWR5LXNhbml0aXNlZCByYXcgbWFya3VwLlxuICpcbiAqIFRoZSBkZWxpYmVyYXRlIGVzY2FwZSBoYXRjaCBmb3IgdGhlIHJhcmUgdGhpbmcgcG9sbHktdWkgY2Fubm90XG4gKiBleHByZXNzOiBhIGxvY2FsbHkgZ2VuZXJhdGVkLCBhbHJlYWR5LXNhZmUgU1ZHIChhIFFSIGNvZGUpLCBhXG4gKiBwcmUtcmVuZGVyZWQgZGlhZ3JhbS4gVGhlIGNhbGxlciBvd25zIHNhZmV0eSDigJQgYGh0bWxgIGdvZXMgc3RyYWlnaHRcbiAqIGludG8gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCwgc28gaXQgTVVTVCBiZSB0cnVzdGVkIG9yIHNhbml0aXNlZFxuICogZmlyc3QuIEZvciB1bnRydXN0ZWQgbWFya2Rvd24gdXNlIGByZW5kZXJNYXJrZG93bmAsIHdoaWNoIHNhbml0aXNlcztcbiAqIGZvciBhbnl0aGluZyBhIHByaW1pdGl2ZSBhbHJlYWR5IGNvdmVycywgdXNlIHRoZSBwcmltaXRpdmUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEh0bWxQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBUcnVzdGVkLCBhbHJlYWR5LXNhbml0aXNlZCBIVE1MLiBUaGUgY2FsbGVyIG93bnMgaXRzIHNhZmV0eS4gKi9cbiAgaHRtbDogc3RyaW5nO1xuICAvKiogUG9seW1vcnBoaWMgd3JhcHBlciBlbGVtZW50IChkaXYsIHNwYW4sIGZpZ3VyZSwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEh0bWwocHJvcHM6IEh0bWxQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBodG1sLCBhcyA9IFwiZGl2XCIsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KGFzLCB7XG4gICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICBpZCxcbiAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1odG1sXCI6IHRydWUsXG4gICAgLy8gbm9zZW1ncmVwOiB0eXBlc2NyaXB0LnJlYWN0LnNlY3VyaXR5LmF1ZGl0LnJlYWN0LWRhbmdlcm91c2x5c2V0aW5uZXJodG1sLnJlYWN0LWRhbmdlcm91c2x5c2V0aW5uZXJodG1sIOKAlCB0aGlzIHByaW1pdGl2ZSBJUyB0aGUgZG9jdW1lbnRlZCB0cnVzdGVkLW1hcmt1cCBlc2NhcGUgaGF0Y2g7IHRoZSBjYWxsZXIgb3ducyBzYW5pdGlzYXRpb24gKHNlZSBtb2R1bGUgZG9jcykuXG4gICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBodG1sIH0sXG4gIH0pO1xufVxuIiwKICAgICIvKipcbiAqIExpbmsg4oCUIHRva2VuLXN0eWxlZCBuYXZpZ2F0aW9uYWwgYW5jaG9yLlxuICpcbiAqIFRoZSBwcmltaXRpdmUgZm9yIHBsYWluIGh5cGVybGlua3M6IGh1YiBhcHAtZ3JpZCBjYXJkcywgYSBmaWxlXG4gKiBkb3dubG9hZCwgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlLiA8QnV0dG9uIGhyZWY+IGlzIGZvciBsaW5rLXNoYXBlZFxuICogQlVUVE9OUyDigJQgYSBjYWxsIHRvIGFjdGlvbiB3ZWFyaW5nIGJ1dHRvbiBjaHJvbWU7IDxMaW5rPiBpcyBmb3JcbiAqIGlubGluZSwgdGV4dHVhbCBsaW5rcyB0aGF0IHJlYWQgYXMgbGlua3MuIGBleHRlcm5hbGAgb3BlbnMgYSBuZXcgdGFiXG4gKiB3aXRoIGByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJgOyBgZG93bmxvYWRgIG9mZmVycyB0aGUgdGFyZ2V0IGFzIGFcbiAqIGZpbGUgKGFuIGVtcHR5IHN0cmluZyBrZWVwcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0xpbmsubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMaW5rUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGhyZWY6IHN0cmluZztcbiAgLyoqIE9wZW4gaW4gYSBuZXcgdGFiIHdpdGggcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiLiAqL1xuICBleHRlcm5hbD86IGJvb2xlYW47XG4gIC8qKiBPZmZlciB0aGUgaHJlZiBhcyBhIGRvd25sb2FkOyBhbiBlbXB0eSBzdHJpbmcga2VlcHMgaXRzIGZpbGVuYW1lLiAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgLyoqIERyb3AgdGhlIHVuZGVybGluZSB1bnRpbCBob3ZlciDigJQgZm9yIGxpbmsgZ3JpZHMgYW5kIGNhcmQgbGlua3MuICovXG4gIHN1YnRsZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gTGluayhwcm9wczogTGlua1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBocmVmLCBleHRlcm5hbCwgZG93bmxvYWQsIHN1YnRsZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImxpbmtcIl1dO1xuICBpZiAoc3VidGxlKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdWJ0bGVcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgaHJlZj17aHJlZn1cbiAgICAgIHRhcmdldD17ZXh0ZXJuYWwgPyBcIl9ibGFua1wiIDogdW5kZWZpbmVkfVxuICAgICAgcmVsPXtleHRlcm5hbCA/IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiIDogdW5kZWZpbmVkfVxuICAgICAgZG93bmxvYWQ9e2Rvd25sb2FkfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1saW5rXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdXRwdXQg4oCUIHJlYWQtb25seSwgbXVsdGktbGluZSBkaWFnbm9zdGljIHRleHQuXG4gKlxuICogRm9yIHByb2dyYW0gb3V0cHV0IGEgY29uc3VtZXIgbXVzdCBTSE9XIGJ1dCBub3QgZWRpdDogYSBtZXNoLXN0YXRlXG4gKiBzbmFwc2hvdCwgYSBwZXItcGVlciBzeW5jIHRhYmxlLCBhIHJlY292ZXJ5IGJsb2IuIDxUZXh0SW5wdXQ+IGFuZFxuICogPEFjdGlvbklucHV0PiBhcmUgc2luZ2xlLWxpbmUgYW5kIGVkaXRhYmxlOyA8Q29kZT4gaXMgZm9yIGNvZGVcbiAqIHNhbXBsZXMgYW5kIG5ldmVyIHdyYXBzLiA8T3V0cHV0PiByZW5kZXJzIGEgbW9ub3NwYWNlIDxwcmU+IHRoYXRcbiAqIHdyYXBzIGxvbmcgbGluZXMgYnkgZGVmYXVsdCDigJQgYSBkaWFnbm9zdGljIGR1bXAgc2hvdWxkIHN0YXkgb25cbiAqIHNjcmVlbiDigJQgd2l0aCBgc2Nyb2xsYCB0byBzd2l0Y2ggdG8gYSBob3Jpem9udGFsIHNjcm9sbGJhciBpbnN0ZWFkLlxuICpcbiAqIEl0IGNhcnJpZXMgdGhlIHBvbGx5IzEyNSBwYXNzdGhyb3VnaCBzdXJmYWNlLCBzbyBhIGBkYXRhLWFjdGlvbmBcbiAqIGZvciBhIHRhcC10by1zZWxlY3QtYWxsIGdlc3R1cmUgcmlkZXMgc3RyYWlnaHQgb250byB0aGUgPHByZT5cbiAqIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL091dHB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE91dHB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogU2Nyb2xsIGxvbmcgdW5icmVha2FibGUgbGluZXMgaG9yaXpvbnRhbGx5IGluc3RlYWQgb2Ygd3JhcHBpbmcuICovXG4gIHNjcm9sbD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBibG9jayBmb2N1c2FibGUg4oCUIHBhaXIgd2l0aCBhIGBkYXRhLWFjdGlvbmAgdGFwIGdlc3R1cmUuICovXG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIE91dHB1dChwcm9wczogT3V0cHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHNjcm9sbCwgdGFiSW5kZXgsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJvdXRwdXRcIl1dO1xuICBpZiAoc2Nyb2xsKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzY3JvbGxcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8cHJlXG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LW91dHB1dFxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3ByZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTZWxlY3Qg4oCUIGRyb3Bkb3duIG9mIG9wdGlvbnMgd2l0aCBzaW5nbGUtIG9yIG11bHRpLXNlbGVjdCBzZW1hbnRpY3MuXG4gKlxuICogQ29tcG9zZXMgRHJvcGRvd24gZm9yIHRoZSBtZW51IGFuZCBhIG5hdGl2ZSBjaGVja2JveCBpbiBlYWNoIG9wdGlvblxuICogcm93IGZvciBtdWx0aS1zZWxlY3QuIFRoZSBgc2VsZWN0ZWRgIHN0YXRlIGlzIGEgU2lnbmFsPFNldDxUPj47XG4gKiBzaW5nbGUtc2VsZWN0IHJlcGxhY2VzIHRoZSBzZXQsIG11bHRpLXNlbGVjdCB0b2dnbGVzIG1lbWJlcnNoaXAuXG4gKiBNdWx0aS1zZWxlY3QgbW9kZSBhbHNvIHNob3dzIFNlbGVjdCBBbGwgLyBDbGVhciBhY3Rpb24gYnV0dG9ucyBhdFxuICogdGhlIHRvcCBvZiB0aGUgbWVudS4gU2luZ2xlLXNlbGVjdCBtb2RlIGNhbiBvcHQgaW50byBgY2xlYXJhYmxlYCxcbiAqIHdoaWNoIHByZXBlbmRzIGEgcGxhY2Vob2xkZXItbGFiZWxsZWQgb3B0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAqIHNlbGVjdGlvbiB0byBlbXB0eSDigJQgZm9yIFwiQW55IOKAplwiIGZpbHRlciBzZW1hbnRpY3MuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBTaWduYWwsIHVzZUNvbXB1dGVkLCB1c2VTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSBcIi4vRHJvcGRvd24udHN4XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RPcHRpb248VCA9IHN0cmluZz4gPSB7IHZhbHVlOiBUOyBsYWJlbDogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFByb3BzPFQgPSBzdHJpbmc+ID0ge1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb248VD5bXTtcbiAgc2VsZWN0ZWQ6IFNpZ25hbDxTZXQ8VD4+O1xuICBsYWJlbD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNpbmdsZS1zZWxlY3Qgb25seTogcHJlcGVuZCBhbiBvcHRpb24gbGFiZWxsZWQgd2l0aCB0aGUgcGxhY2Vob2xkZXJcbiAgICogdGhhdCByZXR1cm5zIHRoZSBzZWxlY3Rpb24gdG8gZW1wdHkuIFdpdGhvdXQgaXQsIHBpY2tpbmcgYW4gb3B0aW9uXG4gICAqIGlzIGEgdHJhcCDigJQgbm90aGluZyBpbiB0aGUgbGlzdCBsZWFkcyBiYWNrIHRvIFwiYW55XCIuIFVzZSBpdCBmb3JcbiAgICogb3B0aW9uYWwgZmlsdGVycyAoXCJBbnkgc3RhZ2VcIiksIG5vdCByZXF1aXJlZCBmb3JtIGZpZWxkc1xuICAgKiAoXCJTZWxlY3QgYSB0ZWFtXCIpLiBJZ25vcmVkIGluIG11bHRpLXNlbGVjdCwgd2hpY2ggaGFzIENsZWFyLlxuICAgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogQXBwbHkgYSBjb21mb3J0YWJsZSBtaW5pbXVtIHdpZHRoIHRvIHRoZSB0cmlnZ2VyLiBEZWZhdWx0OiBzaXplcyB0byBjb250ZW50LiAqL1xuICB3aWRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmNvbnN0IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQgPSAyO1xuXG5mdW5jdGlvbiBmb3JtYXRTZWxlY3RlZDxUPihcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W10sXG4gIHNlbGVjdGVkOiBTZXQ8VD4sXG4gIG11bHRpU2VsZWN0OiBib29sZWFuXG4pOiBzdHJpbmcge1xuICBpZiAoc2VsZWN0ZWQuc2l6ZSA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChtdWx0aVNlbGVjdCAmJiBzZWxlY3RlZC5zaXplID4gTVVMVElfU0VMRUNUX0xBQkVMX1RIUkVTSE9MRCkge1xuICAgIHJldHVybiBgJHtzZWxlY3RlZC5zaXplfSBzZWxlY3RlZGA7XG4gIH1cbiAgY29uc3QgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgaWYgKHNlbGVjdGVkLmhhcyhvcHQudmFsdWUpKSBsYWJlbHMucHVzaChvcHQubGFiZWwpO1xuICB9XG4gIHJldHVybiBsYWJlbHMuam9pbihcIiwgXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0PFQgPSBzdHJpbmc+KHByb3BzOiBTZWxlY3RQcm9wczxUPik6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIG9wdGlvbnMsXG4gICAgc2VsZWN0ZWQsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdFxcdTIwMjZcIixcbiAgICBtdWx0aVNlbGVjdCA9IGZhbHNlLFxuICAgIGNsZWFyYWJsZSA9IGZhbHNlLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgd2lkZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHVzZVNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VDb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGZvcm1hdFNlbGVjdGVkKG9wdGlvbnMsIHNlbGVjdGVkLnZhbHVlLCBtdWx0aVNlbGVjdCk7XG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gMCA/IHRleHQgOiBwbGFjZWhvbGRlcjtcbiAgfSk7XG5cbiAgY29uc3QgaXNFbXB0eSA9IHVzZUNvbXB1dGVkKCgpID0+IHNlbGVjdGVkLnZhbHVlLnNpemUgPT09IDApO1xuXG4gIGNvbnN0IGhhbmRsZU9wdGlvbkNsaWNrID0gKHZhbHVlOiBUKTogdm9pZCA9PiB7XG4gICAgaWYgKG11bHRpU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChzZWxlY3RlZC52YWx1ZSk7XG4gICAgICBpZiAobmV4dC5oYXModmFsdWUpKSBuZXh0LmRlbGV0ZSh2YWx1ZSk7XG4gICAgICBlbHNlIG5leHQuYWRkKHZhbHVlKTtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KFt2YWx1ZV0pO1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbCA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQob3B0aW9ucy5tYXAoKG8pID0+IG8udmFsdWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgfTtcblxuICAvLyBUaGUgY2xlYXIgb3B0aW9uIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBzZWxlY3Rpb246IHBpY2sgaXQsIG1lbnUgY2xvc2VzLlxuICBjb25zdCBoYW5kbGVDbGVhck9wdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCB0cmlnZ2VyUGFydHMgPSBbY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIl07XG4gIGlmIChpc0VtcHR5LnZhbHVlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl0gPz8gXCJcIik7XG4gIGlmICh3aWRlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1widHJpZ2dlcldpZGVcIl0gPz8gXCJcIik7XG4gIGNvbnN0IHRyaWdnZXJDbGFzcyA9IHRyaWdnZXJQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IHRyaWdnZXJDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInRyaWdnZXJMYWJlbFwiXX0+e2Rpc3BsYXlUZXh0LnZhbHVlfTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgPC8+XG4gICk7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1zZWxlY3Q+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgdHJpZ2dlcj17dHJpZ2dlckNvbnRlbnR9XG4gICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgdHJpZ2dlckRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dC52YWx1ZX1cbiAgICAgICAgbXVsdGlTZWxlY3Q9e211bHRpU2VsZWN0fVxuICAgICAgPlxuICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfT5cbiAgICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbH0+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZUNsZWFyfT5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7IW11bHRpU2VsZWN0ICYmIGNsZWFyYWJsZSAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzRW1wdHkudmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgIGNsYXNzPXtcbiAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZVxuICAgICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1zZWxlY3QtY2xlYXJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyT3B0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLnZhbHVlLmhhcyhvcHQudmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG9wdENsYXNzID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgIGNsYXNzPXtvcHRDbGFzc31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3B0aW9uQ2xpY2sob3B0LnZhbHVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm9wdGlvbkNoZWNrXCJdfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0Ryb3Bkb3duPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNrZWxldG9uIOKAlCBzaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy5cbiAqXG4gKiBUaHJlZSB2YXJpYW50czogdGV4dCAoZnVsbC13aWR0aCwgMWVtIHRhbGwpLCByZWN0IChmdWxsLXdpZHRoLCAxMDBweFxuICogdGFsbCksIGNpcmNsZSAoNDB4NDApLiBBIENTUyBncmFkaWVudCBhbmltYXRlcyBsZWZ0LXRvLXJpZ2h0IG92ZXJcbiAqIDEuNXMuIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCB6ZXJvZXMgdGhlIGFuaW1hdGlvbiB2aWEgdGhlIHRva2VuXG4gKiBzeXN0ZW0uIENvbnN1bWVycyBzaXplIHZpYSB3aWR0aC9oZWlnaHQgcHJvcHMgKHB4IG51bWJlcnMgb3IgQ1NTXG4gKiBzdHJpbmdzKTsgZGVmYXVsdCBzaXppbmcgY29tZXMgZnJvbSB0aGUgdmFyaWFudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NrZWxldG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25WYXJpYW50ID0gXCJ0ZXh0XCIgfCBcInJlY3RcIiB8IFwiY2lyY2xlXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uUHJvcHMgPSB7XG4gIHZhcmlhbnQ/OiBTa2VsZXRvblZhcmlhbnQ7XG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVTaXplKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogU2tlbGV0b25WYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiY2lyY2xlXCIpIHJldHVybiBjbGFzc2VzW1wiY2lyY2xlXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJyZWN0XCIpIHJldHVybiBjbGFzc2VzW1wicmVjdFwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0ZXh0XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2tlbGV0b24ocHJvcHM6IFNrZWxldG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwidGV4dFwiLCB3aWR0aCwgaGVpZ2h0LCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHcgPSByZXNvbHZlU2l6ZSh3aWR0aCk7XG4gIGNvbnN0IGggPSByZXNvbHZlU2l6ZShoZWlnaHQpO1xuICBpZiAodyAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIndpZHRoXCJdID0gdztcbiAgaWYgKGggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJoZWlnaHRcIl0gPSBoO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiYXNlID0gY2xhc3Nlc1tcInNrZWxldG9uXCJdO1xuICBpZiAoYmFzZSkgcGFydHMucHVzaChiYXNlKTtcbiAgY29uc3QgdkNsYXNzID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodkNsYXNzKSBwYXJ0cy5wdXNoKHZDbGFzcyk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXNrZWxldG9uPXt2YXJpYW50fVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRhYnMg4oCUIGhvcml6b250YWwgbmF2IHdpdGggYWN0aXZlLXRhYiBhY2NlbnQuXG4gKlxuICogRWFjaCBidXR0b24gY2FycmllcyBgZGF0YS1hY3Rpb25gICh0aGUgY29uc3VtZXItcHJvdmlkZWQgYWN0aW9uIG5hbWUpXG4gKiBhbmQgYGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9YCBzbyB0aGUgZXZlbnQgZGVsZWdhdG9yIHJlc29sdmVzIHRoZVxuICogYWN0aXZhdGVkIHRhYi4gVGhlIGFjdGl2ZSB0YWIgZ2V0cyBgYXJpYS1jdXJyZW50PVwicGFnZVwiYCBhbmQgYVxuICogYm90dG9tLWJvcmRlciBhY2NlbnQuIFRoZSBuYXYgc2Nyb2xscyBob3Jpem9udGFsbHkgd2l0aCBhIGhpZGRlblxuICogc2Nyb2xsYmFyIGZvciBvdmVyZmxvdy4gSW50ZXJuYWwgYXJyYW5nZW1lbnQgdXNlcyA8TGF5b3V0Pi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RhYnMubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUYWIgPSB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGRpc2FibGVkPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBUYWJzUHJvcHMgPSB7XG4gIHRhYnM6IFRhYltdO1xuICBhY3RpdmVUYWI6IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUYWJzKHByb3BzOiBUYWJzUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdGFicywgYWN0aXZlVGFiLCBhY3Rpb24sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widGFic1wiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxuYXZcbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBhcmlhLWxhYmVsPXtwcm9wc1tcImFyaWEtbGFiZWxcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRhYnNcbiAgICA+XG4gICAgICA8TGF5b3V0IGNvbHVtbnM9e2ByZXBlYXQoJHt0YWJzLmxlbmd0aH0sIGF1dG8pYH0gZ2FwPVwiMFwiIGFsaWduSXRlbXM9XCJlbmRcIj5cbiAgICAgICAge3RhYnMubWFwKCh0YWIpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVRhYiA9PT0gdGFiLmlkO1xuICAgICAgICAgIGNvbnN0IHRhYkNsYXNzID0gaXNBY3RpdmUgPyBgJHtjbGFzc2VzW1widGFiXCJdfSAke2NsYXNzZXNbXCJhY3RpdmVcIl19YCA6IGNsYXNzZXNbXCJ0YWJcIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17dGFiQ2xhc3N9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0YWIuZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGFyaWEtY3VycmVudD17aXNBY3RpdmUgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9uYXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGV4dCDigJQgdHlwb2dyYXBoaWMgcHJpbWl0aXZlIGZvciBzZWNvbmRhcnksIHNpemVkLCBhbmQgc3RhdHVzIGNvcHkuXG4gKlxuICogUmVuZGVycyBzdWJ0aXRsZXMsIGNhcHRpb25zLCBmaWVsZCBsYWJlbHMsIGVtcHR5LXN0YXRlIGNvcHksIGFuZFxuICogZXJyb3Ivd2FybmluZyBtZXNzYWdlcyB3aXRob3V0IHRoZSBjb25zdW1lciByZWFjaGluZyBmb3IgYSBgc3R5bGVgXG4gKiBhdHRyaWJ1dGUgb3IgYSBoYW5kLXJvbGxlZCBjbGFzcy4gYHRvbmVgIG1hcHMgdG8gdGhlIHNlbWFudGljXG4gKiBgLS1wb2xseS10ZXh0LSpgIGFuZCBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWxpZXM7IGBzaXplYCxcbiAqIGB3ZWlnaHRgLCBgaXRhbGljYCwgYW5kIGBsZWFkaW5nYCBjb3ZlciB0aGUgcmVtYWluaW5nIHR5cG9ncmFwaGljXG4gKiBheGVzLiBgYXNgIGtlZXBzIHRoZSBlbGVtZW50IHBvbHltb3JwaGljIHNvIHRoZSBzYW1lIHByaW1pdGl2ZSBiYWNrcyBhXG4gKiA8c3Bhbj4sIDxwPiwgPGxhYmVsPiwgb3IgPGZpZ2NhcHRpb24+LiBBIG5vLXByb3AgPFRleHQ+IGlzIGFuIG9yZGluYXJ5XG4gKiA8c3Bhbj4gYXQgYm9keSBzaXplIGFuZCBkZWZhdWx0IGNvbG91ci5cbiAqXG4gKiBwb2xseSMxMjU6IGFyYml0cmFyeSBgZGF0YS0qYCAvIGBhcmlhLSpgIGF0dHJpYnV0ZXMgYXJlIGZvcndhcmRlZCB0b1xuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQsIHNvIGEgVGV4dCB0aGF0IGFsc28gbmVlZHMgYSB0ZXN0IGhvb2sgb3IgYW5cbiAqIGExMXkgYXR0cmlidXRlIHN0YXlzIGEgc2luZ2xlIGVsZW1lbnQuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UZXh0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFRvbmUgPSBcImRlZmF1bHRcIiB8IFwibXV0ZWRcIiB8IFwiZGFuZ2VyXCIgfCBcIndhcm5pbmdcIiB8IFwic3VjY2Vzc1wiO1xuZXhwb3J0IHR5cGUgVGV4dFNpemUgPSBcInhzXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcInhsXCI7XG5leHBvcnQgdHlwZSBUZXh0V2VpZ2h0ID0gXCJub3JtYWxcIiB8IFwibWVkaXVtXCIgfCBcImJvbGRcIjtcbmV4cG9ydCB0eXBlIFRleHRMZWFkaW5nID0gXCJ0aWdodFwiIHwgXCJiYXNlXCIgfCBcImxvb3NlXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoc3BhbiwgcCwgbGFiZWwsIGZpZ2NhcHRpb24sIOKApikuIERlZmF1bHRzIHRvICdzcGFuJy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIENvbG91ciByb2xlLiAnbXV0ZWQnIGRlLWVtcGhhc2lzZXM7ICdkYW5nZXInLyd3YXJuaW5nJy8nc3VjY2VzcydcbiAgICogcmVuZGVyIHN0YXR1cyBjb3B5IGZyb20gdGhlIGAtLXBvbGx5LXN0YXR1cy0qYCB0b2tlbnMuIERlZmF1bHQ6ICdkZWZhdWx0Jy4gKi9cbiAgdG9uZT86IFRleHRUb25lO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCBzaXplLiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgc2l6ZT86IFRleHRTaXplO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCB3ZWlnaHQuIERlZmF1bHQ6IGluaGVyaXQgZnJvbSBjb250ZXh0LiAqL1xuICB3ZWlnaHQ/OiBUZXh0V2VpZ2h0O1xuXG4gIC8qKiBJdGFsaWMgZW1waGFzaXMg4oCUIGZvciBoaW50cyBhbmQgYXNpZGVzIOKAlCB3aXRob3V0IGFuIGlubGluZSBzdHlsZS4gKi9cbiAgaXRhbGljPzogYm9vbGVhbjtcblxuICAvKiogTGluZS10aHJvdWdoIOKAlCBmb3IgY29tcGxldGVkIHRvZG8gaXRlbXMgYW5kIHN1cGVyc2VkZWQgY29weS4gKi9cbiAgc3RyaWtldGhyb3VnaD86IGJvb2xlYW47XG5cbiAgLyoqIFRva2VuLWJhY2tlZCBsaW5lIGhlaWdodC4gJ2xvb3NlJyBzdWl0cyBtdWx0aS1saW5lIGJvZHkgY29weS4gKi9cbiAgbGVhZGluZz86IFRleHRMZWFkaW5nO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGb3J3YXJkZWQgc28gPFRleHQgYXM9XCJsYWJlbFwiPiBjYW4gcG9pbnQgYXQgYSBjb250cm9sLiAqL1xuICBodG1sRm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRleHQocHJvcHM6IFRleHRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJzcGFuXCIsXG4gICAgdG9uZSA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUsXG4gICAgd2VpZ2h0LFxuICAgIGl0YWxpYyxcbiAgICBzdHJpa2V0aHJvdWdoLFxuICAgIGxlYWRpbmcsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRleHRcIl1dO1xuICBpZiAodG9uZSAhPT0gXCJkZWZhdWx0XCIpIHBhcnRzLnB1c2goY2xhc3Nlc1t0b25lXSk7XG4gIGlmIChzaXplKSBwYXJ0cy5wdXNoKGNsYXNzZXNbc2l6ZV0pO1xuICBpZiAod2VpZ2h0KSBwYXJ0cy5wdXNoKGNsYXNzZXNbd2VpZ2h0XSk7XG4gIGlmIChpdGFsaWMpIHBhcnRzLnB1c2goY2xhc3Nlc1tcIml0YWxpY1wiXSk7XG4gIGlmIChzdHJpa2V0aHJvdWdoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdHJpa2V0aHJvdWdoXCJdKTtcbiAgaWYgKGxlYWRpbmcpIHBhcnRzLnB1c2goY2xhc3Nlc1tsZWFkaW5nXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXNcbiAgICAgIC8vIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIGZvcjogcHJvcHMuaHRtbEZvcixcbiAgICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgICAgXCJkYXRhLXBvbGx5LXRleHRcIjogdG9uZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2hhcmVkIGlucHV0IGExMXkgd2lyaW5nLlxuICpcbiAqIFJldHVybnMgYSBjb21tb24gc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBUZXh0SW5wdXQsIEFjdGlvbklucHV0LCBhbmRcbiAqIGFueSBjb25zdW1lci1idWlsdCBpbnB1dCBjYW4gc3BsYXQgb250byBpdHMgbmF0aXZlIGVsZW1lbnQuIEtlZXBzXG4gKiBhcmlhLSogYW5kIGRhdGEtcG9sbHktKiBuYW1lcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFtaWx5LlxuICovXG5cbmV4cG9ydCB0eXBlIElucHV0QTExeVByb3BzID0ge1xuICBuYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZElucHV0QTExeShwcm9wczogSW5wdXRBMTF5UHJvcHMpIHtcbiAgY29uc3QgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1pbnB1dFwiOiB0cnVlLFxuICAgIFwiYXJpYS1pbnZhbGlkXCI6IHByb3BzLmludmFsaWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtcmVxdWlyZWRcIjogcHJvcHMucmVxdWlyZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogcHJvcHMuZGVzY3JpYmVkQnksXG4gICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH07XG4gIGlmIChwcm9wcy5pbnZhbGlkKSBhdHRyc1tcImRhdGEtc3RhdGVcIl0gPSBcImludmFsaWRcIjtcbiAgcmV0dXJuIGF0dHJzO1xufVxuIiwKICAgICIvKipcbiAqIFRleHRJbnB1dCDigJQgcGFzc2l2ZSwgc2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dCB3cmFwcGVyLlxuICpcbiAqIERlc2lnbmVkIHRvIGxpdmUgaW5zaWRlIDxBY3Rpb25Gb3JtPi4gUGFzcyBhIHBsYWluIHN0cmluZyBmb3JcbiAqIHVuY29udHJvbGxlZCBtb2RlIChGb3JtRGF0YS1vbi1zdWJtaXQgcGlja3MgdXAgdGhlIHZhbHVlKSBvciBhXG4gKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCBtb2RlLiBFaXRoZXIgd2F5LCBhMTF5IGF0dHJpYnV0ZXMgYXJlXG4gKiB3aXJlZCBieSB0aGUgc2hhcmVkIGlucHV0LWJhc2UsIHRoZSBzdGFibGUgYFtkYXRhLXBvbGx5LWlucHV0XWAgaG9va1xuICogaXMgYXBwbGllZCBmb3Igc3R5bGluZywgYW5kIGBpbnZhbGlkYCBmbGlwcyBgYXJpYS1pbnZhbGlkYCBhbmRcbiAqIGBkYXRhLXN0YXRlPVwiaW52YWxpZFwiYCBmb3IgY29uc3VtZXIgc2VsZWN0b3JzLlxuICpcbiAqIGBpbnB1dFR5cGVgIHNldHMgdGhlIG5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlIOKAlCBcInRleHRcIiAoZGVmYXVsdCksXG4gKiBcImVtYWlsXCIsIFwibnVtYmVyXCIsIFwiZGF0ZVwiLCBhbmQgZnJpZW5kcyDigJQgc28gdGhlIGJyb3dzZXIgc3VwcGxpZXMgdGhlXG4gKiByaWdodCBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbi4gYG1pbmAvYG1heGAvYHN0ZXBgIGFwcGx5IHRvIHRoZVxuICogc2luZ2xlLWxpbmUgdmFyaWFudCAoZS5nLiBudW1lcmljIG9yIGRhdGUgYm91bmRzKSBhbmQga2VlcCBmaWx0ZXJcbiAqIGZpZWxkcyBmcm9tIGJlaW5nIHVudmFsaWRhdGVkIGZyZWUgdGV4dC5cbiAqXG4gKiBgZXJyb3JgLCB3aGVuIHN1cHBsaWVkLCByZW5kZXJzIGEgbWVzc2FnZSBiZW5lYXRoIHRoZSBmaWVsZCwgd3JhcHMgdGhlXG4gKiBjb250cm9sIGluIGEgbGFiZWxsZWQgZ3JvdXAsIGFuZCBhdXRvLXdpcmVzIGBhcmlhLWRlc2NyaWJlZGJ5YCBwbHVzIHRoZVxuICogaW52YWxpZCBzdGF0ZSDigJQgbm8gbWFudWFsIGlkIGp1Z2dsaW5nLiBXaXRob3V0IGBlcnJvcmAgdGhlIHByaW1pdGl2ZVxuICogc3RheXMgYSBiYXJlIG5hdGl2ZSBlbGVtZW50LCBleGFjdGx5IGFzIGJlZm9yZSwgc28gY29uc3VtZXJzIHRoYXQgb3duXG4gKiB0aGVpciBvd24gc3Vycm91bmRpbmcgc3RydWN0dXJlIGFyZSB1bmFmZmVjdGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGJ1aWxkSW5wdXRBMTF5IH0gZnJvbSBcIi4vaW50ZXJuYWwvaW5wdXQtYmFzZS50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBWYXJpYW50ID0gXCJzaW5nbGVcIiB8IFwibXVsdGlcIjtcblxuLyoqIE5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlcyBwb2xseSdzIGZpbHRlci9mb3JtIGZpZWxkcyB1c2UuICovXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiXG4gIHwgXCJzZWFyY2hcIlxuICB8IFwicGFzc3dvcmRcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICB8IFwidGltZVwiXG4gIHwgXCJtb250aFwiXG4gIHwgXCJ3ZWVrXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCwgc3RyaW5nIGZvciB1bmNvbnRyb2xsZWQgZGVmYXVsdC4gKi9cbiAgdmFsdWU/OiBTaWduYWw8c3RyaW5nPiB8IHN0cmluZztcbiAgdmFyaWFudD86IFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICAvKiogTG93ZXIgYm91bmQgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IChudW1iZXIvZGF0ZSB0eXBlcykuICovXG4gIG1pbj86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIFVwcGVyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtYXg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBTdGVwIGdyYW51bGFyaXR5IGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBzdGVwPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBhIGhpbnQgYmV5b25kIHRoZSBwbGFjZWhvbGRlci9sYWJlbC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGludmFsaWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVmFsaWRhdGlvbiBtZXNzYWdlIHJlbmRlcmVkIGJlbmVhdGggdGhlIGZpZWxkLiBXaGVuIHByZXNlbnQgdGhlXG4gICAqIHByaW1pdGl2ZSB3cmFwcyB0aGUgY29udHJvbCwgbGlua3MgdGhlIG1lc3NhZ2UgdmlhIGFyaWEtZGVzY3JpYmVkYnksXG4gICAqIGFuZCBtYXJrcyB0aGUgZmllbGQgaW52YWxpZC4gT21pdCBpdCB0byBrZWVwIGEgYmFyZSBuYXRpdmUgZWxlbWVudC5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpZD86IHN0cmluZztcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHJvd3M/OiBudW1iZXI7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsPFQ+KHY6IFNpZ25hbDxUPiB8IFQgfCB1bmRlZmluZWQpOiB2IGlzIFNpZ25hbDxUPiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2ICYmIFwicGVla1wiIGluICh2IGFzIHVua25vd24gYXMgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRleHRJbnB1dChwcm9wczogVGV4dElucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIC8vIEFsd2F5cyBjYWxsZWQgc28gaG9vayBvcmRlciBpcyBzdGFibGU7IG9ubHkgdXNlZCB3aGVuIGBlcnJvcmAgaXMgc2V0LlxuICBjb25zdCBlcnJvcklkID0gdXNlSWQoKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBwcm9wcy5lcnJvciAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmVycm9yICE9PSBcIlwiO1xuXG4gIGNvbnN0IGRlc2NyaWJlZEJ5ID1cbiAgICBbcHJvcHMuZGVzY3JpYmVkQnksIGhhc0Vycm9yID8gZXJyb3JJZCA6IHVuZGVmaW5lZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpIHx8IHVuZGVmaW5lZDtcblxuICBjb25zdCBhMTF5ID0gYnVpbGRJbnB1dEExMXkoe1xuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAvLyBBbiBlcnJvciBtZXNzYWdlIGltcGxpZXMgdGhlIGZpZWxkIGlzIGludmFsaWQuXG4gICAgaW52YWxpZDogcHJvcHMuaW52YWxpZCB8fCBoYXNFcnJvcixcbiAgICBkZXNjcmliZWRCeSxcbiAgICBwbGFjZWhvbGRlcjogcHJvcHMucGxhY2Vob2xkZXIsXG4gICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5OiBwcm9wcy5yZWFkT25seSxcbiAgfSk7XG5cbiAgY29uc3QgY29udHJvbGxlZCA9IGlzU2lnbmFsKHByb3BzLnZhbHVlKTtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSBjb250cm9sbGVkID8gKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb250cm9sbGVkXG4gICAgPyB1bmRlZmluZWRcbiAgICA6ICgocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IFwiXCIpO1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJpbnB1dFwiXX0gJHtwcm9wcy5jbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJpbnB1dFwiXTtcblxuICBjb25zdCBvbklucHV0ID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChjb250cm9sbGVkKSB7XG4gICAgICAocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBTaWduYWw8c3RyaW5nPikudmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnRyb2wgPVxuICAgIHZhcmlhbnQgPT09IFwibXVsdGlcIiA/IChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cIm11bHRpXCJcbiAgICAgICAgcm93cz17cHJvcHMucm93c31cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKSA6IChcbiAgICAgIDxpbnB1dFxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgICAgICB0eXBlPXtwcm9wcy5pbnB1dFR5cGUgPz8gXCJ0ZXh0XCJ9XG4gICAgICAgIGNsYXNzPXtjbGFzc05hbWV9XG4gICAgICAgIHRpdGxlPXtwcm9wcy50aXRsZX1cbiAgICAgICAgZGF0YS1wb2xseS1pbnB1dC12YXJpYW50PVwic2luZ2xlXCJcbiAgICAgICAgbWluPXtwcm9wcy5taW59XG4gICAgICAgIG1heD17cHJvcHMubWF4fVxuICAgICAgICBzdGVwPXtwcm9wcy5zdGVwfVxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vQXV0b2ZvY3VzOiBvcHQtaW4gcHJvcCDigJQgY2FsbGVyIHJlcXVlc3RzIGF1dG9mb2N1cyBleHBsaWNpdGx5IChlLmcuIGZvcm0gb3BlbnMgdG8gdGhpcyBmaWVsZCkuXG4gICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxuICAgICAgICB2YWx1ZT17c3RyaW5nVmFsdWV9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICBvbklucHV0PXtvbklucHV0fVxuICAgICAgLz5cbiAgICApO1xuXG4gIGlmICghaGFzRXJyb3IpIHJldHVybiBjb250cm9sO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzcz17Y2xhc3Nlc1tcImZpZWxkXCJdfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktZmllbGQ+XG4gICAgICB7Y29udHJvbH1cbiAgICAgIDxzcGFuIGlkPXtlcnJvcklkfSByb2xlPVwiYWxlcnRcIiBjbGFzcz17Y2xhc3Nlc1tcImVycm9yXCJdfT5cbiAgICAgICAge3Byb3BzLmVycm9yfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRvYXN0IOKAlCBjb25zdW1lci1mYWNpbmcgc3VyZmFjZSBmb3IgdGhlIGdsb2JhbCBlcnJvclN0YXRlLlxuICpcbiAqIFJlbmRlcnMgZXZlcnkgZW50cnkgb2YgdGhlIGBlcnJvclN0YXRlYCBzaWduYWwgaW50byBhIHZpZXdwb3J0IG1vdW50ZWRcbiAqIGluc2lkZSBPdmVybGF5Um9vdC4gYGFyaWEtbGl2ZWAgaXMgcG9saXRlIGZvciBpbmZvL3dhcm5pbmcgYW5kXG4gKiBhc3NlcnRpdmUgZm9yIGVycm9yIHNldmVyaXR5LiBFYWNoIGl0ZW0gYXV0by1kaXNtaXNzZXMgYWZ0ZXJcbiAqIGBhdXRvRGlzbWlzc01zYCB1bmxlc3MgdGhlIHVzZXIgaG92ZXJzIHRoZSB2aWV3cG9ydC4gQ2xpY2tpbmcgYVxuICogdG9hc3Qgb3IgaXRzIGNsb3NlIGJ1dHRvbiByZW1vdmVzIHRoYXQgc2luZ2xlIGVudHJ5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBjbGVhckVycm9yLCB0eXBlIEVycm9yRW50cnksIGVycm9yU3RhdGUgfSBmcm9tIFwiLi4vYWN0aW9ucy9lcnJvci50c1wiO1xuaW1wb3J0IHsgZ2V0T3ZlcmxheVJvb3ROb2RlIH0gZnJvbSBcIi4vT3ZlcmxheVJvb3QudHN4XCI7XG5pbXBvcnQgeyBTdXJmYWNlIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVG9hc3RWaWV3cG9ydFByb3BzID0ge1xuICBhdXRvRGlzbWlzc01zPzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBWaWV3cG9ydChwcm9wczogVG9hc3RWaWV3cG9ydFByb3BzKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgYXV0b0Rpc21pc3NNcyA9IHByb3BzLmF1dG9EaXNtaXNzTXMgPz8gNTAwMDtcbiAgY29uc3QgW3BvcnRhbE5vZGUsIHNldFBvcnRhbE5vZGVdID0gdXNlU3RhdGU8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3BhdXNlZCwgc2V0UGF1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZW50cmllcyA9IGVycm9yU3RhdGUudmFsdWU7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBhdXNlZCB8fCBlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGhlYWQgPSBlbnRyaWVzWzBdO1xuICAgIGlmICghaGVhZCkgcmV0dXJuO1xuICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJFcnJvcihoZWFkLmlkKTtcbiAgICB9LCBhdXRvRGlzbWlzc01zKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XG4gIH0sIFtwYXVzZWQsIGVudHJpZXMsIGF1dG9EaXNtaXNzTXNdKTtcblxuICBpZiAoIXBvcnRhbE5vZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IHZpZXdwb3J0IHBhdXNlcyBhdXRvLWRpc21pc3Mgb24gaG92ZXI7IGl0IGlzIGEgY29udGFpbmVyLCBub3QgYW4gaW50ZXJhY3RpdmUgY29udHJvbCBpdHNlbGYuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9e2Ake2NsYXNzZXNbXCJ2aWV3cG9ydFwiXX0gJHtwcm9wcy5jbGFzc05hbWUgPz8gXCJcIn1gLnRyaW0oKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3Qtdmlld3BvcnRcbiAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0UGF1c2VkKHRydWUpfVxuICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRQYXVzZWQoZmFsc2UpfVxuICAgID5cbiAgICAgIHtlbnRyaWVzLm1hcCgoZW50cnkpID0+IChcbiAgICAgICAgPFRvYXN0SXRlbSBrZXk9e2VudHJ5LmlkfSBlbnRyeT17ZW50cnl9IC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjb250ZW50LCBwb3J0YWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gVG9hc3RJdGVtKHsgZW50cnkgfTogeyBlbnRyeTogRXJyb3JFbnRyeSB9KTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBsaXZlbmVzcyA9IGVudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFzc2VydGl2ZVwiIDogXCJwb2xpdGVcIjtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJpdGVtXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2FzdC1pdGVtXG4gICAgICBkYXRhLXNldmVyaXR5PXtlbnRyeS5zZXZlcml0eX1cbiAgICAgIHJvbGU9e2VudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFsZXJ0XCIgOiBcInN0YXR1c1wifVxuICAgICAgYXJpYS1saXZlPXtsaXZlbmVzc31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcIm1lc3NhZ2VcIl19PntlbnRyeS5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LXRvYXN0LWNsb3NlXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGNsZWFyRXJyb3IoZW50cnkuaWQpfVxuICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiXG4gICAgICA+XG4gICAgICAgIMOXXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBUb2FzdCA9IHsgVmlld3BvcnQgfTtcbiIsCiAgICAiLyoqXG4gKiBUb2dnbGUg4oCUIHN3aXRjaC1yb2xlIGNoZWNrYm94LlxuICpcbiAqIEEgdmlzdWFsbHktaGlkZGVuIDxpbnB1dCByb2xlPVwic3dpdGNoXCI+IHBhaXJlZCB3aXRoIGEgc3R5bGVkIHRyYWNrXG4gKiBhbmQgdGh1bWIgaW5zaWRlIGEgPGxhYmVsPi4gUGFzc2l2ZTogdGhlIGNhbGxlciBkcml2ZXMgYGNoZWNrZWRgIGFuZFxuICogaGFuZGxlcyBzdGF0ZSBjaGFuZ2VzIHZpYSB0aGUgYWN0aW9uIHJlZ2lzdHJ5ICh3cmFwIHRoZSBUb2dnbGUgaW4gYVxuICogPGxhYmVsIGRhdGEtYWN0aW9uPVwiLi4uXCI+IG9yIGJpbmQgYSBwYXJlbnQgZm9ybSdzIHN1Ym1pdCkuIGExMXlcbiAqIGF0dHJpYnV0ZXMgY29tZSBmcm9tIHRoZSBuYXRpdmUgaW5wdXQ7IHRoZSBsYWJlbCB3cmFwcyBzbyBjbGlja3NcbiAqIGFueXdoZXJlIGluIHRoZSBjb250cm9sIHRvZ2dsZSB0aGUgaW5wdXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ub2dnbGUubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2dnbGVQcm9wcyA9IHtcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVG9nZ2xlKHByb3BzOiBUb2dnbGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGVja2VkID0gZmFsc2UsIGRpc2FibGVkID0gZmFsc2UsIGxhYmVsLCBuYW1lLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRvZ2dsZVwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGNsYXNzPXtwYXJ0cy5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LXRvZ2dsZT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIHJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBhcmlhLWNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0cmFja1wiXX0gJHtjbGFzc2VzW1widHJhY2tDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widHJhY2tcIl19PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPXtjaGVja2VkID8gYCR7Y2xhc3Nlc1tcInRodW1iXCJdfSAke2NsYXNzZXNbXCJ0aHVtYkNoZWNrZWRcIl19YCA6IGNsYXNzZXNbXCJ0aHVtYlwiXX1cbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG4iLAogICAgIi8vIFN0YXRlIHByaW1pdGl2ZXMgd2l0aCBvcHRpb25hbCBzeW5jIGFuZCBwZXJzaXN0ZW5jZVxuXG5pbXBvcnQgeyBlZmZlY3QsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VCdXMgfSBmcm9tIFwiLi9tZXNzYWdlLWJ1c1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmFnZUFkYXB0ZXIsIHR5cGUgU3RvcmFnZUFkYXB0ZXIgfSBmcm9tIFwiLi9zdG9yYWdlLWFkYXB0ZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVN5bmNBZGFwdGVyLCB0eXBlIFN5bmNBZGFwdGVyIH0gZnJvbSBcIi4vc3luYy1hZGFwdGVyXCI7XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBwcm9taXNlIGZvciBoeWRyYXRpb24gY29udHJvbFxuICovXG50eXBlIFNpZ25hbFdpdGhMb2FkZWQ8VD4gPSBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xuXG4vKipcbiAqIFNpZ25hbCBleHRlbmRlZCB3aXRoIC5sb2FkZWQgYW5kIC52ZXJpZnkgcHJvcGVydGllcyBmb3IgdmVyaWZpY2F0aW9uIHRyYWNraW5nXG4gKi9cbnR5cGUgU2lnbmFsV2l0aFZlcmlmeTxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+OyB2ZXJpZnk6IFQgfTtcblxudHlwZSBTdGF0ZUVudHJ5PFQ+ID0ge1xuICBzaWduYWw6IFNpZ25hbDxUPjtcbiAgY2xvY2s6IG51bWJlcjsgLy8gTGFtcG9ydCBjbG9jayBmb3IgY2F1c2FsIG9yZGVyaW5nXG4gIGxvYWRlZDogUHJvbWlzZTx2b2lkPjtcbiAgdXBkYXRpbmc6IGJvb2xlYW47XG59O1xuXG50eXBlIFN0YXRlT3B0aW9uczxUID0gdW5rbm93bj4gPSB7XG4gIC8vIExlZ2FjeSBNZXNzYWdlQnVzIHN1cHBvcnQgKGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wKVxuICBidXM/OiBNZXNzYWdlQnVzO1xuXG4gIC8vIE5ldyBhZGFwdGVyIHN5c3RlbSAocmVjb21tZW5kZWQpXG4gIHN0b3JhZ2U/OiBTdG9yYWdlQWRhcHRlcjsgLy8gQ3VzdG9tIHN0b3JhZ2UgYWRhcHRlclxuICBzeW5jPzogU3luY0FkYXB0ZXI7IC8vIEN1c3RvbSBzeW5jIGFkYXB0ZXJcblxuICAvLyBCZWhhdmlvciBvcHRpb25zXG4gIGRlYm91bmNlTXM/OiBudW1iZXI7IC8vIERlYm91bmNlIHN0b3JhZ2Ugd3JpdGVzXG4gIHZhbGlkYXRvcj86ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVDsgLy8gUnVudGltZSB0eXBlIHZhbGlkYXRpb25cbiAgdmVyaWZ5PzogYm9vbGVhbjsgLy8gRW5hYmxlIHZlcmlmaWNhdGlvbiB0cmFja2luZyAoY3JlYXRlcyBwbGFpbiBvYmplY3QgbWlycm9yKVxufTtcblxuY29uc3Qgc3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTdGF0ZUVudHJ5PHVua25vd24+PigpO1xuXG4vKipcbiAqIFNoYXJlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgQU5EIHBlcnNpc3RlZCB0byBzdG9yYWdlXG4gKlxuICogVXNlcyBMYW1wb3J0IGNsb2NrIGZvciBjb25mbGljdCByZXNvbHV0aW9uLiBTdGF0ZSBpcyBhdXRvbWF0aWNhbGx5OlxuICogLSBMb2FkZWQgZnJvbSBjaHJvbWUuc3RvcmFnZSBvbiBpbml0aWFsaXphdGlvblxuICogLSBTeW5jZWQgdG8gb3RoZXIgY29udGV4dHMgdmlhIGJyb2FkY2FzdCBtZXNzYWdlc1xuICogLSBQZXJzaXN0ZWQgdG8gY2hyb21lLnN0b3JhZ2Ugb24gZXZlcnkgY2hhbmdlXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzICh1c2UgY29udGVudCBzY3JpcHQgc3RhdGUgaW5zdGVhZClcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RhdGUgKGUuZy4sIFwiYXBwLXNldHRpbmdzXCIpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZSBpZiBub3RoaW5nIGlzIGluIHN0b3JhZ2VcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnVzLCBkZWJvdW5jZU1zKVxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHRoYXQgc3RheXMgaW4gc3luYyBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmluZSBvbmNlLCB1c2UgZXZlcnl3aGVyZVxuICogY29uc3Qgc2V0dGluZ3MgPSAkc2hhcmVkU3RhdGUoXCJzZXR0aW5nc1wiLCB7IHRoZW1lOiBcImRhcmtcIiB9KVxuICpcbiAqIC8vIENoYW5nZXMgYXV0b21hdGljYWxseSBzeW5jXG4gKiBzZXR0aW5ncy52YWx1ZSA9IHsgdGhlbWU6IFwibGlnaHRcIiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzaGFyZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+OyB2ZXJpZnk/OiBUIH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogdHJ1ZSxcbiAgICBlbmFibGVQZXJzaXN0OiB0cnVlLFxuICB9KTtcblxuICAvLyBFeHBvc2UgbG9hZGVkIHByb21pc2UgZm9yIGF3YWl0aW5nIGh5ZHJhdGlvblxuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIGlmIChlbnRyeSkge1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoTG9hZGVkPFQ+KS5sb2FkZWQgPSBlbnRyeS5sb2FkZWQ7XG4gIH1cblxuICByZXR1cm4gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcbn1cblxuLyoqXG4gKiBTeW5jZWQgc3RhdGU6IHN5bmNlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIGJ1dCBOT1QgcGVyc2lzdGVkXG4gKlxuICogU3RhdGUgaXMgYnJvYWRjYXN0IHRvIGFsbCBjb250ZXh0cyBpbiByZWFsLXRpbWUgYnV0IHJlc2V0cyBvbiBleHRlbnNpb24gcmVsb2FkLlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0c1xuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHN5bmNlZCBhY3Jvc3MgY29udGV4dHMgKGJ1dCBub3QgcGVyc2lzdGVkKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBUZW1wb3Jhcnkgc2hhcmVkIHN0YXRlXG4gKiBjb25zdCBhY3RpdmVUYWJJZCA9ICRzeW5jZWRTdGF0ZShcImFjdGl2ZS10YWJcIiwgbnVsbClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHN5bmNlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IGZhbHNlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0ZWQgc3RhdGU6IHBlcnNpc3RlZCB0byBzdG9yYWdlIGJ1dCBOT1Qgc3luY2VkIGFjcm9zcyBjb250ZXh0c1xuICpcbiAqIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBjb3B5IG9mIHRoZSBzdGF0ZSwgcGVyc2lzdGVkIGluZGVwZW5kZW50bHkuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyICh1c2UgcHJlZml4IGxpa2UgXCJwb3B1cDpzdGF0ZVwiIHRvIGF2b2lkIGNvbGxpc2lvbnMpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgcGVyc2lzdGVkIHRvIHN0b3JhZ2UgKGJ1dCBub3Qgc3luY2VkKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gcGVyc2lzdGVkIHN0YXRlXG4gKiBjb25zdCBwb3B1cFN0YXRlID0gJHBlcnNpc3RlZFN0YXRlKFwicG9wdXA6bGFzdC1wYW5lbFwiLCBcImhvbWVcIilcbiAqIGNvbnN0IGRldnRvb2xzU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJkZXZ0b29sczpleHBhbmRlZFwiLCB0cnVlKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkcGVyc2lzdGVkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9IHtcbiAgY29uc3Qgc2lnID0gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IGZhbHNlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIExvY2FsIHN0YXRlOiBub3Qgc3luY2VkLCBub3QgcGVyc2lzdGVkIChsaWtlIHJlZ3VsYXIgUHJlYWN0IHNpZ25hbClcbiAqXG4gKiBTaW1wbGUgcmVhY3RpdmUgc3RhdGUgdGhhdCBsaXZlcyBvbmx5IGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gKiBSZXNldHMgb24gcmVsb2FkIG9yIGNvbnRleHQgcmVzdGFydC5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGFsbCBjb250ZXh0cyAoaW5jbHVkaW5nIHBhZ2Ugc2NyaXB0cylcbiAqXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIChsb2NhbCBvbmx5KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBMb2NhbCBVSSBzdGF0ZVxuICogY29uc3QgaXNMb2FkaW5nID0gJHN0YXRlKGZhbHNlKVxuICogY29uc3QgZXJyb3IgPSAkc3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHN0YXRlPFQ+KGluaXRpYWxWYWx1ZTogVCk6IFNpZ25hbDxUPiB7XG4gIHJldHVybiBzaWduYWwoaW5pdGlhbFZhbHVlKTtcbn1cblxuLyoqIFNlcnZlci1zaWRlIGF1dGhvcml0YXRpdmUgc3RhdGUsIGtleWVkIGZvciBzdGFibGUgaWRlbnRpdHkgYWNyb3NzIHRoZVxuICogIHByb2Nlc3MuIFVubGlrZSB0aGUgYnJvd3NlciBwcmltaXRpdmVzIGl0IGRvZXMgTk9UIHN5bmMgYWNyb3NzIGNvbnRleHRzIG9yXG4gKiAgcGVyc2lzdCB0byBjaHJvbWUuc3RvcmFnZSDigJQgdGhlIHNlcnZlciBob2xkcyB0aGUgY2Fub25pY2FsIHJlcGxpY2EgYW5kIGlzXG4gKiAgdGhlIGFsd2F5cy1vbiBwZWVyOyBjb25uZWN0ZWQgY2xpZW50cyByZWNlaXZlIGRlcml2ZWQgdXBkYXRlcyB0aHJvdWdoIHRoZVxuICogIEVseXNpYSBgcG9sbHkoKWAgcGx1Z2luJ3MgZWZmZWN0L2Jyb2FkY2FzdCBsYXllciByYXRoZXIgdGhhbiB0aHJvdWdoIHRoaXNcbiAqICBzaWduYWwgZGlyZWN0bHkuIFVzZWQgaW5zaWRlIGBwb2xseSh7IHN0YXRlOiB7IHNlcnZlcjogeyAuLi4gfSB9IH0pYCBhbmRcbiAqICByZWFkIG9uIHRoZSByZXF1ZXN0IGNvbnRleHQgYXMgYHBvbGx5U3RhdGUuc2VydmVyLjxrZXk+LnZhbHVlYC4gKi9cbmNvbnN0IHNlcnZlclN0YXRlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgU2lnbmFsPHVua25vd24+PigpO1xuXG4vKipcbiAqIFJlYWN0aXZlIHNlcnZlci1vbmx5IHN0YXRlLiBUaGUgZmlyc3QgY2FsbCBmb3IgYSBga2V5YCBjcmVhdGVzIHRoZSBzaWduYWw7XG4gKiBsYXRlciBjYWxscyB3aXRoIHRoZSBzYW1lIGBrZXlgIHJldHVybiB0aGF0IHNhbWUgc2lnbmFsLCBzbyBhIG1vZHVsZSB0aGF0XG4gKiBkZWNsYXJlcyBpdHMgc2VydmVyIHN0YXRlIG9uY2UgZ2V0cyBhIHN0YWJsZSByZWZlcmVuY2UgZXZlcnl3aGVyZSBpdCBpc1xuICogcmVhZC5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgc2VydmVyIHN0YXRlIChlLmcuIFwiZGJcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBWYWx1ZSBoZWxkIHVudGlsIHRoZSBzZXJ2ZXIgbXV0YXRlcyBpdFxuICogQHJldHVybnMgQSByZWFjdGl2ZSBzaWduYWwgaG9sZGluZyB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgJHNlcnZlclN0YXRlIH0gZnJvbSBcIkBmYWlyZm94L3BvbGx5XCI7XG4gKlxuICogY29uc3QgZGIgPSB7IHRvZG9zOiBzaWduYWwoW10pLCBuZXh0SWQ6IDEgfTtcbiAqIHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IGRiOiAkc2VydmVyU3RhdGUoXCJkYlwiLCBkYikgfSB9IH0pO1xuICogLy8gaW4gYSBoYW5kbGVyOiBjdHgucG9sbHlTdGF0ZS5zZXJ2ZXIuZGIudmFsdWUudG9kb3MudmFsdWUgPSBbLi4uXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc2VydmVyU3RhdGU8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCk6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gc2VydmVyU3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgLy8gVGhlIHJlZ2lzdHJ5IGVyYXNlcyBUIChpdCBzdG9yZXMgU2lnbmFsPHVua25vd24+KTsgdGhlIGtleSBpcyB0aGVcbiAgLy8gY2FsbGVyJ3MgY29udHJhY3QgdGhhdCB0aGUgc3RvcmVkIHNpZ25hbCBjYXJyaWVzIHRoZWlyIFQuXG4gIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbFZhbHVlKTtcbiAgc2VydmVyU3RhdGVSZWdpc3RyeS5zZXQoa2V5LCBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8dW5rbm93bj4pO1xuICByZXR1cm4gc2lnO1xufVxuXG50eXBlIEludGVybmFsU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IFN0YXRlT3B0aW9uczxUPiAmIHtcbiAgZW5hYmxlU3luYzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBlbmFibGUgc3luYyAoYXZvaWQgY29sbGlzaW9uIHdpdGggc3luYz86IFN5bmNBZGFwdGVyKVxuICBlbmFibGVQZXJzaXN0OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBwZXJzaXN0ZW5jZVxufTtcblxuLy8gRGVlcCBlcXVhbGl0eSBjaGVjayB0byBwcmV2ZW50IHJlZHVuZGFudCB1cGRhdGVzXG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXNBKSB7XG4gICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgIWRlZXBFcXVhbChcbiAgICAgICAgKGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSxcbiAgICAgICAgKGIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlc29sdmUgc3RvcmFnZSBhbmQgc3luYyBhZGFwdGVycyB3aXRoIHRocmVlLXRpZXIgcHJpb3JpdHk6XG4gKiAxLiBFeHBsaWNpdCBhZGFwdGVycyBmcm9tIG9wdGlvbnMgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gKiAyLiBNZXNzYWdlQnVzIGFkYXB0ZXJzIChsZWdhY3ksIGRlcHJlY2F0ZWQpXG4gKiAzLiBBdXRvLWRldGVjdGVkIGFkYXB0ZXJzIChkZWZhdWx0IGJlaGF2aW9yKVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWRhcHRlcnMob3B0aW9uczogSW50ZXJuYWxTdGF0ZU9wdGlvbnMpOiB7XG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyIHwgbnVsbDtcbiAgc3luYzogU3luY0FkYXB0ZXIgfCBudWxsO1xufSB7XG4gIC8vIFByaW9yaXR5IDE6IEV4cGxpY2l0IGFkYXB0ZXJzIChwYXJ0aWFsIG9yIGZ1bGwpXG4gIGlmIChvcHRpb25zLnN0b3JhZ2UgfHwgb3B0aW9ucy5zeW5jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JhZ2U6IG9wdGlvbnMuc3RvcmFnZSB8fCAob3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwpLFxuICAgICAgc3luYzogb3B0aW9ucy5zeW5jIHx8IChvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaW9yaXR5IDI6IE1lc3NhZ2VCdXMgKGxlZ2FjeSBzdXBwb3J0KVxuICAvLyBNZXNzYWdlQnVzIGRvZXNuJ3QgcHJvdmlkZSBzeW5jIGFkYXB0ZXIsIG9ubHkgQ2hyb21lIHN0b3JhZ2VcbiAgaWYgKG9wdGlvbnMuYnVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JhZ2U6IG9wdGlvbnMuYnVzLmFkYXB0ZXJzLnN0b3JhZ2UsXG4gICAgICBzeW5jOiBvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMzogQXV0by1kZXRlY3QgYmFzZWQgb24gZW5hYmxlU3luYyBhbmQgZW5hYmxlUGVyc2lzdCBmbGFnc1xuICByZXR1cm4ge1xuICAgIHN0b3JhZ2U6IG9wdGlvbnMuZW5hYmxlUGVyc2lzdCA/IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyKCkgOiBudWxsLFxuICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBULCBvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9uczxUPik6IFNpZ25hbDxUPiB7XG4gIC8vIFJldHVybiBleGlzdGluZyBzaWduYWwgaWYgYWxyZWFkeSByZWdpc3RlcmVkXG4gIGlmIChzdGF0ZVJlZ2lzdHJ5LmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk/LnNpZ25hbCBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbiAgfVxuXG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuXG4gIC8vIENyZWF0ZSB2ZXJpZmljYXRpb24gbWlycm9yIGlmIHJlcXVlc3RlZFxuICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAvLyBDcmVhdGUgcGxhaW4gb2JqZWN0IG1pcnJvciBmb3IgdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgbWlycm9yID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbml0aWFsVmFsdWUpKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhWZXJpZnk8VD4pLnZlcmlmeSA9IG1pcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5OiBTdGF0ZUVudHJ5PFQ+ID0ge1xuICAgIHNpZ25hbDogc2lnLFxuICAgIGNsb2NrOiAwLFxuICAgIGxvYWRlZDogUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgdXBkYXRpbmc6IGZhbHNlLFxuICB9O1xuXG4gIC8vIFJlc29sdmUgYWRhcHRlcnMgKGV4cGxpY2l0LCBNZXNzYWdlQnVzLCBvciBhdXRvLWRldGVjdClcbiAgY29uc3QgYWRhcHRlcnMgPSByZXNvbHZlQWRhcHRlcnMob3B0aW9ucyk7XG5cbiAgLy8gTG9hZCBmcm9tIHN0b3JhZ2UgaWYgcGVyc2lzdCBpcyBlbmFibGVkXG4gIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgIGVudHJ5LmxvYWRlZCA9IGxvYWRGcm9tU3RvcmFnZShrZXksIHNpZywgZW50cnksIGFkYXB0ZXJzLnN0b3JhZ2UsIG9wdGlvbnMudmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGFmdGVyIGluaXRpYWwgbG9hZFxuICBlbnRyeS5sb2FkZWQudGhlbigoKSA9PiB7XG4gICAgbGV0IGRlYm91bmNlVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHByZXZpb3VzVmFsdWUgPSBzaWcudmFsdWU7XG4gICAgbGV0IGlzRmlyc3RSdW4gPSB0cnVlO1xuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IFN5bmMgZWZmZWN0IHJlcXVpcmVzIGNvb3JkaW5hdGlvbiBvZiBtdWx0aXBsZSBzdGF0ZSBjaGFuZ2Ugc2NlbmFyaW9zXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIFJlYWQgdGhlIHNpZ25hbCBGSVJTVCwgYmVmb3JlIGFueSBlYXJseSByZXR1cm4gY2FuIGhhcHBlbi5cbiAgICAgIC8vXG4gICAgICAvLyBQcmVhY3QgcmUtY29sbGVjdHMgYW4gZWZmZWN0J3MgZGVwZW5kZW5jaWVzIG9uIGV2ZXJ5IHJ1biwgc28gYSBydW4gdGhhdFxuICAgICAgLy8gcmV0dXJucyB3aXRob3V0IHRvdWNoaW5nIGBzaWcudmFsdWVgIHVuc3Vic2NyaWJlcyB0aGUgZWZmZWN0IGZvciBnb29kLlxuICAgICAgLy8gVGhlIHJ1biBhbiBpbmNvbWluZyBzeW5jIG1lc3NhZ2UgdHJpZ2dlcnMgaXMgZXhhY3RseSBzdWNoIGEgcnVuLlxuICAgICAgY29uc3QgdmFsdWUgPSBzaWcudmFsdWU7XG5cbiAgICAgIC8vIFNraXAgZmlyc3QgcnVuIChlZmZlY3QgZmlyZXMgaW1tZWRpYXRlbHkgb24gcmVnaXN0cmF0aW9uKVxuICAgICAgaWYgKGlzRmlyc3RSdW4pIHtcbiAgICAgICAgaXNGaXJzdFJ1biA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFuIGluY29taW5nIG1lc3NhZ2UgaXMgYmVpbmcgYXBwbGllZC4gQWRvcHQgaXQgYXMgdGhlIGJhc2VsaW5lIOKAlCB0aGlzXG4gICAgICAvLyBjb250ZXh0IG5vdyBob2xkcyBpdCwgc28gdGhlIG5leHQgbG9jYWwgY2hhbmdlIGlzIGEgY2hhbmdlIGFnYWluc3QgaXQg4oCUXG4gICAgICAvLyBhbmQgZG8gbm90IGJyb2FkY2FzdCwgd2hpY2ggd291bGQgZWNobyBpdCBiYWNrIHRvIHRoZSBzZW5kZXIuXG4gICAgICBpZiAoZW50cnkudXBkYXRpbmcpIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgaWYgdmFsdWUgaGFzbid0IGNoYW5nZWQgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICBpZiAoZGVlcEVxdWFsKHZhbHVlLCBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgLy8gVXBkYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgZW5hYmxlZFxuICAgICAgaWYgKG9wdGlvbnMudmVyaWZ5KSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVNpZ25hbCA9IHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhWZXJpZnk8VD47XG4gICAgICAgIGlmICh2ZXJpZnlTaWduYWwudmVyaWZ5KSB7XG4gICAgICAgICAgLy8gbm9zZW1ncmVwOiBqYXZhc2NyaXB0Lmxhbmcuc2VjdXJpdHkuaW5zZWN1cmUtb2JqZWN0LWFzc2lnbi5pbnNlY3VyZS1vYmplY3QtYXNzaWduIOKAlCBpbnRlcm5hbCBtaXJyb3I7IHZhbHVlIGlzIGEgZGVlcCBKU09OIGNsb25lLCBub3QgYXJiaXRyYXJ5IGV4dGVybmFsIGlucHV0LlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odmVyaWZ5U2lnbmFsLnZlcmlmeSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJbmNyZW1lbnQgY2xvY2sgbW9ub3RvbmljYWxseVxuICAgICAgZW50cnkuY2xvY2srKztcblxuICAgICAgY29uc3QgZG9VcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgIC8vIFBlcnNpc3QgdG8gc3RvcmFnZVxuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVQZXJzaXN0ICYmIGFkYXB0ZXJzLnN0b3JhZ2UpIHtcbiAgICAgICAgICBwZXJzaXN0VG9TdG9yYWdlKGtleSwgdmFsdWUsIGVudHJ5LmNsb2NrLCBhZGFwdGVycy5zdG9yYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJyb2FkY2FzdCB0byBvdGhlciBjb250ZXh0c1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVTeW5jICYmIGFkYXB0ZXJzLnN5bmMpIHtcbiAgICAgICAgICBicm9hZGNhc3RVcGRhdGUoa2V5LCB2YWx1ZSwgZW50cnkuY2xvY2ssIGFkYXB0ZXJzLnN5bmMpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBEZWJvdW5jZSBpZiBzcGVjaWZpZWRcbiAgICAgIGlmIChvcHRpb25zLmRlYm91bmNlTXMpIHtcbiAgICAgICAgaWYgKGRlYm91bmNlVGltZXIpIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVyKTtcbiAgICAgICAgZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoZG9VcGRhdGUsIG9wdGlvbnMuZGVib3VuY2VNcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1VwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBMaXN0ZW4gZm9yIHVwZGF0ZXMgZnJvbSBvdGhlciBjb250ZXh0cyAob25seSBpZiBzeW5jIGVuYWJsZWQpXG4gIGlmIChvcHRpb25zLmVuYWJsZVN5bmMgJiYgYWRhcHRlcnMuc3luYykge1xuICAgIC8vIENvbm5lY3QgaWYgbmVlZGVkIChzb21lIGFkYXB0ZXJzIHJlcXVpcmUgZXhwbGljaXQgY29ubmVjdGlvbilcbiAgICBpZiAoYWRhcHRlcnMuc3luYy5jb25uZWN0KSB7XG4gICAgICBhZGFwdGVycy5zeW5jLmNvbm5lY3QoKTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBzeW5jIG1lc3NhZ2UgbGlzdGVuZXJcbiAgICBhZGFwdGVycy5zeW5jLm9uTWVzc2FnZTxUPigobWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2Uua2V5ICE9PSBrZXkpIHJldHVybjtcblxuICAgICAgY29uc3Qgb2xkQ2xvY2sgPSBlbnRyeS5jbG9jaztcblxuICAgICAgLy8gTGFtcG9ydCBjbG9jayBydWxlOiBBbHdheXMgdXBkYXRlIHRvIG1heChsb2NhbCwgcmVjZWl2ZWQpXG4gICAgICAvLyBUaGlzIG1haW50YWlucyBjYXVzYWwgb3JkZXJpbmcgZXZlbiB3aGVuIHJlamVjdGluZyB1cGRhdGVzXG4gICAgICBlbnRyeS5jbG9jayA9IE1hdGgubWF4KGVudHJ5LmNsb2NrLCBtZXNzYWdlLmNsb2NrKTtcblxuICAgICAgLy8gT25seSBhY2NlcHQgdmFsdWUgdXBkYXRlcyBpZiByZWNlaXZlZCBjbG9jayBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gb2xkIGxvY2FsIGNsb2NrXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgd2Ugb25seSBhcHBseSBjYXVzYWxseSBuZXdlciB1cGRhdGVzXG4gICAgICBpZiAobWVzc2FnZS5jbG9jayA+IG9sZENsb2NrKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIGluY29taW5nIHZhbHVlIGlmIHZhbGlkYXRvciBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy52YWxpZGF0b3IgJiYgIW9wdGlvbnMudmFsaWRhdG9yKG1lc3NhZ2UudmFsdWUpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtQb2xseV0gU3RhdGUgXCIke2tleX1cIjogUmVjZWl2ZWQgaW52YWxpZCB2YWx1ZSBmcm9tIHN5bmMgKGNsb2NrOiAke21lc3NhZ2UuY2xvY2t9KWAsXG4gICAgICAgICAgICBtZXNzYWdlLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTa2lwIHJlZHVuZGFudCB1cGRhdGVzIChkZWVwIGVxdWFsaXR5IGNoZWNrKVxuICAgICAgICBpZiAoZGVlcEVxdWFsKGVudHJ5LnNpZ25hbC52YWx1ZSwgbWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhcHBseVVwZGF0ZShlbnRyeSwgbWVzc2FnZS52YWx1ZSBhcyB1bmtub3duIGFzIFQsIG1lc3NhZ2UuY2xvY2spO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGVSZWdpc3RyeS5zZXQoa2V5LCBlbnRyeSBhcyB1bmtub3duIGFzIFN0YXRlRW50cnk8dW5rbm93bj4pO1xuICByZXR1cm4gc2lnO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCYWNrZmlsbCBrZXlzIGFkZGVkIHRvIHRoZSBzdGF0ZSBzaGFwZSBzaW5jZSBhIHZhbHVlIHdhcyBwZXJzaXN0ZWQuXG4gKlxuICogU3RvcmVkIHBsYWluIG9iamVjdHMgYXJlIHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIGN1cnJlbnQgZGVmYXVsdHMgc28gdGhhdCBhXG4gKiBmaWVsZCBhZGRlZCBpbiBhIGxhdGVyIHJlbGVhc2UgcmVoeWRyYXRlcyB0byBpdHMgZGVmYXVsdCByYXRoZXIgdGhhblxuICogYHVuZGVmaW5lZGAuIFByaW1pdGl2ZXMgYW5kIGFycmF5cyBhcmUgcmVwbGFjZWQgd2hvbGVzYWxlIOKAlCBtZXJnaW5nIHRob3NlXG4gKiB3b3VsZCBjb3JydXB0IHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZVdpdGhEZWZhdWx0czxUPihkZWZhdWx0czogVCwgc3RvcmVkOiB1bmtub3duKTogVCB7XG4gIC8vIFBlcnNpc3RlZCB2YWx1ZXMgYXJlIHRydXN0ZWQgdG8gYmUgdGhlIFQgdGhpcyBrZXkgd2FzIHJlZ2lzdGVyZWQgd2l0aDtcbiAgLy8gc2NoZW1hIGRyaWZ0IGlzIGhhbmRsZWQgYnkgdGhlIG1lcmdlLCBub3QgYnkgcnVudGltZSB2YWxpZGF0aW9uLlxuICBpZiAoaXNQbGFpbk9iamVjdChkZWZhdWx0cykgJiYgaXNQbGFpbk9iamVjdChzdG9yZWQpKSB7XG4gICAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLnN0b3JlZCB9IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICByZXR1cm4gc3RvcmVkIGFzIHVua25vd24gYXMgVDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEZyb21TdG9yYWdlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgc2lnOiBTaWduYWw8VD4sXG4gIGVudHJ5OiBTdGF0ZUVudHJ5PFQ+LFxuICBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlcixcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLmdldChba2V5LCBgJHtrZXl9OmNsb2NrYF0pO1xuXG4gICAgaWYgKHJlc3VsdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNpZyBzdGlsbCBob2xkcyB0aGUgaW5pdGlhbCB2YWx1ZSBoZXJlLCBzbyBpdCBpcyB0aGUgZGVmYXVsdCBiYXNlXG4gICAgICAvLyBmb3IgYmFja2ZpbGxpbmcga2V5cyB0aGUgcGVyc2lzdGVkIGJsb2IgcHJlZGF0ZXMuXG4gICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHJlY29uY2lsZVdpdGhEZWZhdWx0cyhzaWcucGVlaygpLCByZXN1bHRba2V5XSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHN0b3JlZCB2YWx1ZSBpZiB2YWxpZGF0b3IgcHJvdmlkZWRcbiAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvcihzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICBzaWcudmFsdWUgPSBzdG9yZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBTdG9yZWQgdmFsdWUgZmFpbGVkIHZhbGlkYXRpb24sIHVzaW5nIGluaXRpYWwgdmFsdWVgLFxuICAgICAgICAgICAgc3RvcmVkVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWcudmFsdWUgPSBzdG9yZWRWYWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50cnkuY2xvY2sgPSByZXN1bHRbYCR7a2V5fTpjbG9ja2BdIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGxvYWQgc3RhdGUgZnJvbSBzdG9yYWdlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyc2lzdFRvU3RvcmFnZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3RvcmFnZS5zZXQoe1xuICAgICAgW2tleV06IHZhbHVlLFxuICAgICAgW2Ake2tleX06Y2xvY2tgXTogY2xvY2ssXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBwZXJzaXN0IHN0YXRlIHRvIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBicm9hZGNhc3RVcGRhdGU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjbG9jazogbnVtYmVyLCBzeW5jOiBTeW5jQWRhcHRlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHN5bmMuYnJvYWRjYXN0KHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgY2xvY2ssXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBicm9hZGNhc3Qgc3RhdGUgdXBkYXRlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlVcGRhdGU8VD4oZW50cnk6IFN0YXRlRW50cnk8VD4sIHZhbHVlOiBULCBjbG9jazogbnVtYmVyKTogdm9pZCB7XG4gIGVudHJ5LnVwZGF0aW5nID0gdHJ1ZTtcbiAgZW50cnkuc2lnbmFsLnZhbHVlID0gdmFsdWU7XG4gIGVudHJ5LmNsb2NrID0gY2xvY2s7XG4gIGVudHJ5LnVwZGF0aW5nID0gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHN0YXRlIGJ5IGtleSAodXNlZnVsIGZvciByZXRyaWV2aW5nIHN0YXRlIHdpdGhvdXQgcmUtY3JlYXRpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZUJ5S2V5PFQ+KGtleTogc3RyaW5nKTogU2lnbmFsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICByZXR1cm4gZW50cnk/LnNpZ25hbCBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDbGVhciBzdGF0ZSByZWdpc3RyeSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTdGF0ZVJlZ2lzdHJ5KCk6IHZvaWQge1xuICBzdGF0ZVJlZ2lzdHJ5LmNsZWFyKCk7XG59XG4iLAogICAgIi8qKlxuICogU3RhdGUgb3duZWQgYnkgdGhlIGNvbXBvbmVudCBnYWxsZXJ5LlxuICpcbiAqIFRoZSBnYWxsZXJ5IGlzIGEgc3RhbmRhbG9uZSBkZXYgc3VyZmFjZSB3aXRoIG5vIHNlcnZlciBzdGF0ZSwgc28gdGhlc2VcbiAqIHNpZ25hbHMgc3RheSBtb2R1bGUtbG9jYWwg4oCUIHRoZXkgbmV2ZXIgam9pbiBhIHN5bmNlZCBzdG9yZSBidW5kbGUuIEFjdGlvblxuICogaGFuZGxlcnMgKGFjdGlvbnMudHMpIHJlYWNoIHRoZW0gYnkgaW1wb3J0LCB0aGUgd2F5IGVhbCdzIHNob3djYXNlIGRvZXMuXG4gKiBgcmVzZXRHYWxsZXJ5U3RvcmVzKClgIGV4aXN0cyBzbyB0aGUgYnJvd3Nlci92aXN1YWwgdGVzdCBjYW4gaXNvbGF0ZSBydW5zLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUZvcm0sIHNldEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyAkc3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvc3RhdGUudHNcIjtcblxuZXhwb3J0IHR5cGUgR2FsbGVyeVRoZW1lID0gXCJzeXN0ZW1cIiB8IFwibGlnaHRcIiB8IFwiZGFya1wiO1xuXG4vKiogVGhlIGdhbGxlcnkncyBBY3Rpb25Gb3JtIGJpbmRzIHRvIGFuIGVtcHR5IGJ1bmRsZSDigJQgbm8gc3RvcmUgaXMgdG91Y2hlZC4gKi9cbmV4cG9ydCB0eXBlIEdhbGxlcnlTdG9yZXMgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG5cbi8qKiBUaGVtZSBvdmVycmlkZSwgYXBwbGllZCB0byB0aGUgcGFuZWwgYXMgYGRhdGEtcG9sbHktdGhlbWVgLiBgc3lzdGVtYCBvbWl0c1xuICogIHRoZSBhdHRyaWJ1dGUgYW5kIGxldHMgYHByZWZlcnMtY29sb3Itc2NoZW1lYCBkZWNpZGUuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUaGVtZSA9ICRzdGF0ZTxHYWxsZXJ5VGhlbWU+KFwic3lzdGVtXCIpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8TW9kYWw+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5TW9kYWxPcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBEcml2ZXMgdGhlIGxpdmUgPERyb3Bkb3duPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeURyb3Bkb3duT3BlbiA9ICRzdGF0ZTxib29sZWFuPihmYWxzZSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdFNpbmdsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJjb21ldFwiXSkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIG11bHRpLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdE11bHRpID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCIsIFwibmVidWxhXCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgY2xlYXJhYmxlIHNpbmdsZS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uIFN0YXJ0cyBlbXB0eVxuICogIHNvIHRoZSBcIkFueSDigKZcIiBjbGVhciBvcHRpb24gaXMgdGhlIGFjdGl2ZSByb3cuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4vKiogVGhlIGxpdmUsIHNpZ25hbC1ib3VuZCA8Q2hlY2tib3g+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5Q2hlY2tlZCA9ICRzdGF0ZTxib29sZWFuPih0cnVlKTtcbi8qKiBUaGUgY29udHJvbGxlZCA8VGV4dElucHV0PiBzcGVjaW1lbiB2YWx1ZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRleHQgPSAkc3RhdGU8c3RyaW5nPihcIkNvbnRyb2xsZWQgdmFsdWVcIik7XG4vKiogTGFzdCB2YWx1ZSBjb21taXR0ZWQgYnkgdGhlIDxBY3Rpb25JbnB1dD4gLyA8QWN0aW9uU2VsZWN0PiBzcGVjaW1lbnMuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDb21taXR0ZWQgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcbi8qKiBBY3RpdmUgdGFiIGlkIGZvciB0aGUgPFRhYnM+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGFiID0gJHN0YXRlPHN0cmluZz4oXCJvdmVydmlld1wiKTtcbi8qKiBOYW1lIG9mIHRoZSBsYXN0IGZpbGUgcGlja2VkIGJ5IHRoZSA8RmlsZUlucHV0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUZpbGVOYW1lID0gJHN0YXRlPHN0cmluZz4oXCLigJRcIik7XG5cbi8qKlxuICogVGhlIGZvcm0gYmVoaW5kIHRoZSA8QWN0aW9uRm9ybT4gc3BlY2ltZW4uIGBjcmVhdGVGb3JtYCByZXF1aXJlcyBgYmluZFN0b3Jlc2BcbiAqIGJlZm9yZSBhIHN1Ym1pdCBjYW4gcnVuOyBjbGllbnQudHN4IGJpbmRzIGl0IHRvIHRoZSBlbXB0eSBnYWxsZXJ5IGJ1bmRsZSBhdFxuICogYm9vdC4gSXRzIGAuYWN0aW9uc2AgYXJlIHNwcmVhZCBpbnRvIHRoZSByZWdpc3RyeSAoc2VlIGFjdGlvbnMudHMpLlxuICovXG5leHBvcnQgY29uc3QgZ2FsbGVyeUZvcm0gPSBjcmVhdGVGb3JtPHsgZnVsbE5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9LCBHYWxsZXJ5U3RvcmVzPih7XG4gIG5hbWU6IFwiZ2FsbGVyeS1mb3JtXCIsXG4gIGluaXRpYWxWYWx1ZXM6IHsgZnVsbE5hbWU6IFwiXCIsIGVtYWlsOiBcIlwiIH0sXG4gIG9uU3VibWl0OiAoeyB2YWx1ZXMgfSkgPT4ge1xuICAgIHNldEVycm9yKFxuICAgICAgYEFjdGlvbkZvcm0gc3VibWl0dGVkIOKAlCBuYW1lIFwiJHt2YWx1ZXMuZnVsbE5hbWUgfHwgXCIoZW1wdHkpXCJ9XCIsIGAgK1xuICAgICAgICBgZW1haWwgXCIke3ZhbHVlcy5lbWFpbCB8fCBcIihlbXB0eSlcIn1cIi5gLFxuICAgICAgeyBzZXZlcml0eTogXCJpbmZvXCIgfVxuICAgICk7XG4gIH0sXG59KTtcblxuLyoqIFJlc2V0IGV2ZXJ5IGdhbGxlcnkgc2lnbmFsIHRvIGl0cyBpbml0aWFsIHZhbHVlIOKAlCBmb3IgdGVzdCBpc29sYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRHYWxsZXJ5U3RvcmVzKCk6IHZvaWQge1xuICAkZ2FsbGVyeVRoZW1lLnZhbHVlID0gXCJzeXN0ZW1cIjtcbiAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgJGdhbGxlcnlEcm9wZG93bk9wZW4udmFsdWUgPSBmYWxzZTtcbiAgJGdhbGxlcnlTZWxlY3RTaW5nbGUudmFsdWUgPSBuZXcgU2V0KFtcImNvbWV0XCJdKTtcbiAgJGdhbGxlcnlTZWxlY3RNdWx0aS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZS52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgJGdhbGxlcnlDaGVja2VkLnZhbHVlID0gdHJ1ZTtcbiAgJGdhbGxlcnlUZXh0LnZhbHVlID0gXCJDb250cm9sbGVkIHZhbHVlXCI7XG4gICRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlID0gXCLigJRcIjtcbiAgJGdhbGxlcnlUYWIudmFsdWUgPSBcIm92ZXJ2aWV3XCI7XG4gICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBcIuKAlFwiO1xuICBnYWxsZXJ5Rm9ybS5jbG9zZSgpO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvbnMgZm9yIHRoZSBnYWxsZXJ5J3MgaW50ZXJhY3RpdmUgc3BlY2ltZW5zLiBFdmVyeSBoYW5kbGVyIGRyaXZlcyBhXG4gKiBtb2R1bGUtbG9jYWwgc2lnbmFsIChzdG9yZXMudHMpIG9yIGEgcG9sbHkgb3ZlcmxheSBwcmltaXRpdmUg4oCUIG5vbmUgdG91Y2hlcyBhXG4gKiBzdG9yZSBidW5kbGUsIHNvIHRoZSBnYWxsZXJ5IHN0YXlzIGEgc2VsZi1jb250YWluZWQgZGV2IHN1cmZhY2UuIFNwcmVhZGluZ1xuICogYGdhbGxlcnlGb3JtLmFjdGlvbnNgIGFkZHMgdGhlIGF1dG8tcmVnaXN0ZXJlZCBgZ2FsbGVyeS1mb3JtOntvcGVuLGNsb3NlLFxuICogc3VibWl0fWAgaGFuZGxlcnMuIGNsaWVudC50c3ggd2lyZXMgdGhpcyByZWdpc3RyeSBpbnRvIHRoZSBkb2N1bWVudCB2aWFcbiAqIGBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uYCwgZXhhY3RseSBhcyBhIHJlYWwgY29uc3VtZXIgYXBwIHdvdWxkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQWN0aW9uUmVnaXN0cnksIEVycm9yU2V2ZXJpdHkgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IHNldEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHtcbiAgJGdhbGxlcnlDb21taXR0ZWQsXG4gICRnYWxsZXJ5TW9kYWxPcGVuLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUaGVtZSxcbiAgdHlwZSBHYWxsZXJ5U3RvcmVzLFxuICB0eXBlIEdhbGxlcnlUaGVtZSxcbiAgZ2FsbGVyeUZvcm0sXG59IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG5jb25zdCBUSEVNRVM6IHJlYWRvbmx5IEdhbGxlcnlUaGVtZVtdID0gW1wic3lzdGVtXCIsIFwibGlnaHRcIiwgXCJkYXJrXCJdO1xuY29uc3QgU0VWRVJJVElFUzogcmVhZG9ubHkgRXJyb3JTZXZlcml0eVtdID0gW1wiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXTtcblxuZXhwb3J0IGNvbnN0IEdBTExFUllfQUNUSU9OUzogQWN0aW9uUmVnaXN0cnk8R2FsbGVyeVN0b3Jlcz4gPSB7XG4gIC4uLmdhbGxlcnlGb3JtLmFjdGlvbnMsXG5cbiAgXCJnYWxsZXJ5OnNldC10aGVtZVwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IGRhdGFbXCJ0aGVtZVwiXTtcbiAgICBpZiAodGhlbWUgPT09IFwic3lzdGVtXCIgfHwgdGhlbWUgPT09IFwibGlnaHRcIiB8fCB0aGVtZSA9PT0gXCJkYXJrXCIpIHtcbiAgICAgICRnYWxsZXJ5VGhlbWUudmFsdWUgPSB0aGVtZTtcbiAgICB9XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OnNldC10YWJcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgaWQgPSBkYXRhW1wiaWRcIl07XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIikgJGdhbGxlcnlUYWIudmFsdWUgPSBpZDtcbiAgfSxcblxuICBcImdhbGxlcnk6bW9kYWwtb3BlblwiOiAoKSA9PiB7XG4gICAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSB0cnVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb21taXRcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW1widmFsdWVcIl07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSB2YWx1ZTtcbiAgfSxcblxuICBcImdhbGxlcnk6dG9hc3RcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3Qgc2V2ZXJpdHkgPSBTRVZFUklUSUVTLmZpbmQoKHMpID0+IHMgPT09IGRhdGFbXCJzZXZlcml0eVwiXSkgPz8gXCJpbmZvXCI7XG4gICAgc2V0RXJyb3IoYFRoaXMgaXMgYSAke3NldmVyaXR5fSB0b2FzdCDigJQgY2xpY2sgaXQgb3Igd2FpdCBmb3IgaXQgdG8gZGlzbWlzcy5gLCB7XG4gICAgICBzZXZlcml0eSxcbiAgICB9KTtcbiAgfSxcblxuICBcImdhbGxlcnk6Y29uZmlybVwiOiBhc3luYyAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBkYW5nZXIgPSBkYXRhW1wiZGFuZ2VyXCJdID09PSBcInRydWVcIjtcbiAgICBjb25zdCBvayA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgdGl0bGU6IGRhbmdlciA/IFwiRGVsZXRlIHRoaXMgaXRlbT9cIiA6IFwiU2F2ZSB5b3VyIGNoYW5nZXM/XCIsXG4gICAgICBib2R5OiBkYW5nZXJcbiAgICAgICAgPyBcIlRoaXMgY2Fubm90IGJlIHVuZG9uZS4gVGhlIGl0ZW0gd2lsbCBiZSBwZXJtYW5lbnRseSByZW1vdmVkLlwiXG4gICAgICAgIDogXCJZb3VyIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkIGltbWVkaWF0ZWx5LlwiLFxuICAgICAgZGFuZ2VyLFxuICAgICAgY29uZmlybUxhYmVsOiBkYW5nZXIgPyBcIkRlbGV0ZVwiIDogXCJTYXZlXCIsXG4gICAgfSk7XG4gICAgc2V0RXJyb3IoYENvbmZpcm1EaWFsb2cgcmVzb2x2ZWQgJHtTdHJpbmcob2spfS5gLCB7IHNldmVyaXR5OiBvayA/IFwiaW5mb1wiIDogXCJ3YXJuaW5nXCIgfSk7XG4gIH0sXG59O1xuXG4vKiogVGhlIHRoZW1lIGN5Y2xlLCBleHBvc2VkIHNvIHRoZSBwYW5lbCBjYW4gcmVuZGVyIG9uZSBidXR0b24gcGVyIG9wdGlvbi4gKi9cbmV4cG9ydCB7IFRIRU1FUyB9O1xuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5IGNhdGFsb2d1ZSDigJQgb25lIHNlY3Rpb24gcGVyIHBvbGx5LXVpIHByaW1pdGl2ZSwgZWFjaCByZW5kZXJpbmdcbiAqIHRoZSBjb25maWd1cmF0aW9ucyB3b3J0aCBzZWVpbmcuIEFkYXB0ZWQgZnJvbSBlYWwncyBzaG93Y2FzZSAod2hpY2ggY29uc3VtZXNcbiAqIHRoaXMgdmVyeSBsaWJyYXJ5KSwgcmVwb2ludGVkIGF0IHRoZSBsb2NhbCBzb3VyY2Ugc28gdGhlIGdhbGxlcnkgcmVuZGVycyB0aGVcbiAqIHByaW1pdGl2ZXMgZXhhY3RseSBhcyB0aGV5IHNoaXAuXG4gKlxuICogRXZlcnkgc2VjdGlvbiBjYXJyaWVzIGEgYGNvbXBvbmVudGAgbmFtaW5nIHRoZSBwb2xseS11aSBleHBvcnQgaXQgY292ZXJzO1xuICogcmVnaXN0cnktY292ZXJhZ2UudHMgYXNzZXJ0cyB0aGF0IGV2ZXJ5IGNvbXBvbmVudCBpbiByZWdpc3RyeS5nZW5lcmF0ZWQudHNcbiAqIGhhcyBhIHNlY3Rpb24gaGVyZSwgc28gYSBuZXcgcHJpbWl0aXZlIGNhbid0IGxhbmQgd2l0aG91dCBhIHNwZWNpbWVuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7XG4gIEFjdGlvbkZvcm0sXG4gIEFjdGlvbklucHV0LFxuICBBY3Rpb25TZWxlY3QsXG4gIEJhZGdlLFxuICBCdXR0b24sXG4gIENhcmQsXG4gIENoZWNrYm94LFxuICBDbHVzdGVyLFxuICBDb2RlLFxuICBDb2xsYXBzaWJsZSxcbiAgRHJvcGRvd24sXG4gIEZpbGVJbnB1dCxcbiAgSHRtbCxcbiAgTGF5b3V0LFxuICBMaW5rLFxuICBNb2RhbCxcbiAgT3V0cHV0LFxuICBTZWxlY3QsXG4gIFNrZWxldG9uLFxuICBTdXJmYWNlLFxuICBUYWJzLFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFRvZ2dsZSxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHtcbiAgJGdhbGxlcnlDaGVja2VkLFxuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlEcm9wZG93bk9wZW4sXG4gICRnYWxsZXJ5RmlsZU5hbWUsXG4gICRnYWxsZXJ5TW9kYWxPcGVuLFxuICAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSxcbiAgJGdhbGxlcnlTZWxlY3RNdWx0aSxcbiAgJGdhbGxlcnlTZWxlY3RTaW5nbGUsXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRleHQsXG4gIGdhbGxlcnlGb3JtLFxufSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqXG4gKiBPbmUgY2F0YWxvZ3VlZCBleGFtcGxlOiBhIHN0YWdlIGhvbGRpbmcgbGl2ZSBjb21wb25lbnQocykgYW5kIGEgY2FwdGlvblxuICogbmFtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9uIHNob3cuIGB3aWRlYCBzcGFucyBldmVyeSBncmlkIGNvbHVtbiBmb3JcbiAqIHNwZWNpbWVucyB0aGF0IG5lZWQgdGhlIHJvb20gKGxheW91dHMsIGZvcm1zLCBjYXJkcykuXG4gKi9cbmZ1bmN0aW9uIFNwZWNpbWVuKHByb3BzOiB7IGNhcHRpb246IHN0cmluZzsgd2lkZT86IGJvb2xlYW47IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJzdW5rZW5cIlxuICAgICAgcmFkaXVzPVwibWRcIlxuICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCJcbiAgICAgIGNsYXNzTmFtZT17cHJvcHMud2lkZSA/IFwiZ2FsbGVyeS1zcGVjaW1lbiBnYWxsZXJ5LXNwZWNpbWVuLS13aWRlXCIgOiBcImdhbGxlcnktc3BlY2ltZW5cIn1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FsbGVyeS1zdGFnZVwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCIgY2xhc3NOYW1lPVwiZ2FsbGVyeS1jb2RlXCI+XG4gICAgICAgICAge3Byb3BzLmNhcHRpb259XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuLyoqIEEgbmV1dHJhbCBmaWxsZXIgYmxvY2sgZm9yIHRoZSBsYXlvdXQgc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gQm94KHByb3BzOiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgdmFyaWFudD1cInJhaXNlZFwiIHJhZGl1cz1cInNtXCIgYm9yZGVyPVwiZGVmYXVsdFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgIDxUZXh0IHNpemU9XCJzbVwiPntwcm9wcy5jaGlsZHJlbn08L1RleHQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5jb25zdCBTVEFSOiBKU1guRWxlbWVudCA9IChcbiAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJnYWxsZXJ5LWljb25cIj5cbiAgICDimIVcbiAgPC9zcGFuPlxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBHYWxsZXJ5U2VjdGlvbiB7XG4gIC8qKiBBbmNob3IgaWQgZm9yIHRoZSBpbi1wYWdlIG5hdi4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgaGVhZGluZy4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIFRoZSBwb2xseS11aSBleHBvcnQgdGhpcyBzZWN0aW9uIGNvdmVycyAobWF0Y2hlZCBhZ2FpbnN0IHRoZSByZWdpc3RyeSkuICovXG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24uICovXG4gIHN1bW1hcnk6IHN0cmluZztcbiAgcmVuZGVyOiAoKSA9PiBKU1guRWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IEdBTExFUllfU0VDVElPTlM6IHJlYWRvbmx5IEdhbGxlcnlTZWN0aW9uW10gPSBbXG4gIHtcbiAgICBpZDogXCJiYWRnZVwiLFxuICAgIHRpdGxlOiBcIkJhZGdlXCIsXG4gICAgY29tcG9uZW50OiBcIkJhZGdlXCIsXG4gICAgc3VtbWFyeTogXCJTbWFsbCBpbmxpbmUgc3RhdHVzIGNoaXAuIE9uZSB2YXJpYW50IHBlciBzZW1hbnRpYyB0b25lLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJkZWZhdWx0XCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPEJhZGdlIHZhcmlhbnQ9e3Z9Pnt2fTwvQmFkZ2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYnV0dG9uXCIsXG4gICAgdGl0bGU6IFwiQnV0dG9uXCIsXG4gICAgY29tcG9uZW50OiBcIkJ1dHRvblwiLFxuICAgIHN1bW1hcnk6IFwiSW50ZXJhY3RpdmUgY29udHJvbC4gVGllciBzZXRzIGltcG9ydGFuY2UsIGNvbG9yIG92ZXJsYXlzIG1lYW5pbmcsIHNpemUgc2V0cyBzY2FsZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidGllcjogcHJpbWFyeSAvIHNlY29uZGFyeSAvIHRlcnRpYXJ5XCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiUHJpbWFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgbGFiZWw9XCJTZWNvbmRhcnlcIiAvPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgbGFiZWw9XCJUZXJ0aWFyeVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29sb3I6IGRlZmF1bHQgLyBpbmZvIC8gc3VjY2VzcyAvIHdhcm5pbmcgLyBkYW5nZXJcIj5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGVmYXVsdFwiIGxhYmVsPVwiRGVmYXVsdFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIkluZm9cIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzdWNjZXNzXCIgbGFiZWw9XCJTdWNjZXNzXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwid2FybmluZ1wiIGxhYmVsPVwiV2FybmluZ1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImRhbmdlclwiIGxhYmVsPVwiRGFuZ2VyXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiBzbWFsbCAvIG5vcm1hbCAvIGxhcmdlXCI+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBsYWJlbD1cIlNtYWxsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJub3JtYWxcIiBsYWJlbD1cIk5vcm1hbFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwibGFyZ2VcIiBsYWJlbD1cIkxhcmdlXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxCdXR0b24gbGFiZWw9XCJEaXNhYmxlZFwiIGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaWNvbiArIGxhYmVsXCI+XG4gICAgICAgICAgPEJ1dHRvbiBpY29uPXtTVEFSfSBsYWJlbD1cIldpdGggaWNvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2lyY2xlIChpY29uLW9ubHkgbmVlZHMgYXJpYS1sYWJlbClcIj5cbiAgICAgICAgICA8QnV0dG9uIGNpcmNsZSBhcmlhLWxhYmVsPVwiU3RhclwiIGxhYmVsPXtTVEFSfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImhyZWYg4oCUIHJlbmRlcnMgYW4gPGE+XCI+XG4gICAgICAgICAgPEJ1dHRvbiBocmVmPVwiI2J1dHRvblwiIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIkxpbmsgYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmdWxsV2lkdGhcIiB3aWRlPlxuICAgICAgICAgIDxCdXR0b24gZnVsbFdpZHRoIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGdWxsLXdpZHRoIGJ1dHRvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dFwiLFxuICAgIHRpdGxlOiBcIlRleHRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dFwiLFxuICAgIHN1bW1hcnk6IFwiVHlwb2dyYXBoaWMgcHJpbWl0aXZlIOKAlCB0b25lLCBzaXplLCB3ZWlnaHQsIGl0YWxpYywgc3RyaWtldGhyb3VnaCwgYW5kIGxlYWRpbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRvbmU6IGRlZmF1bHQgLyBtdXRlZCAvIGRhbmdlciAvIHdhcm5pbmcgLyBzdWNjZXNzXCI+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRlZmF1bHRcIj5EZWZhdWx0PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPk11dGVkPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJkYW5nZXJcIj5EYW5nZXI8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIndhcm5pbmdcIj5XYXJuaW5nPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJzdWNjZXNzXCI+U3VjY2VzczwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiB4cyAvIHNtIC8gbWQgLyBsZyAvIHhsXCI+XG4gICAgICAgICAgeyhbXCJ4c1wiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcInhsXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgIDxUZXh0IGtleT17c30gc2l6ZT17c30+XG4gICAgICAgICAgICAgIHtzfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndlaWdodDogbm9ybWFsIC8gbWVkaXVtIC8gYm9sZFwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm5vcm1hbFwiPk5vcm1hbDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5NZWRpdW08L1RleHQ+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkJvbGQ8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaXRhbGljIC8gc3RyaWtldGhyb3VnaFwiPlxuICAgICAgICAgIDxUZXh0IGl0YWxpYz5JdGFsaWMgZW1waGFzaXM8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3RyaWtldGhyb3VnaD5TdHJ1Y2sgdGhyb3VnaDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2xlYWRpbmc9XCJsb29zZVwiIOKAlCBtdWx0aS1saW5lIGJvZHkgY29weScgd2lkZT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiBsZWFkaW5nPVwibG9vc2VcIj5cbiAgICAgICAgICAgIEEgcGFyYWdyYXBoIHJlbmRlcmVkIHdpdGggbG9vc2UgbGVhZGluZy4gUG9sbHkncyBUZXh0IHByaW1pdGl2ZSBiYWNrcyBldmVyeSBzcGFuLFxuICAgICAgICAgICAgcGFyYWdyYXBoLCBsYWJlbCwgYW5kIGNhcHRpb24gc28gY29uc3VtZXJzIG5ldmVyIHJlYWNoIGZvciBhIHJhdyBzdHlsZSBhdHRyaWJ1dGUgdG8gc2V0XG4gICAgICAgICAgICB0b25lLCBzaXplLCB3ZWlnaHQsIG9yIGxpbmUgaGVpZ2h0LlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2RlXCIsXG4gICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2RlXCIsXG4gICAgc3VtbWFyeTogXCJNb25vc3BhY2UgY29kZSDigJQgaW5saW5lIGJ5IGRlZmF1bHQsIG9yIGEgd3JhcHBlZCBibG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBSdW4gPENvZGU+cG9sbHkgZ2FsbGVyeTwvQ29kZT4gdG8gb3BlbiB0aGlzIHBhZ2UuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJsb2NrXCIgd2lkZT5cbiAgICAgICAgICA8Q29kZSBibG9jaz57J2NvbnN0IGdhbGxlcnkgPSB7XFxuICBzZXJ2ZWQ6IFwiYnkgcG9sbHlcIixcXG59Oyd9PC9Db2RlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxpbmtcIixcbiAgICB0aXRsZTogXCJMaW5rXCIsXG4gICAgY29tcG9uZW50OiBcIkxpbmtcIixcbiAgICBzdW1tYXJ5OiBcIkFuY2hvciBwcmltaXRpdmUg4oCUIHVuZGVybGluZSBieSBkZWZhdWx0LCB3aXRoIGV4dGVybmFsLCBzdWJ0bGUsIGFuZCBkb3dubG9hZCBtb2Rlcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdFwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiPkluLXBhZ2UgbGluazwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJleHRlcm5hbCDigJQgbmV3IHRhYiwgcmVsPW5vb3BlbmVyXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImh0dHBzOi8vZXhhbXBsZS5jb21cIiBleHRlcm5hbD5cbiAgICAgICAgICAgIEV4dGVybmFsIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3VidGxlIOKAlCB1bmRlcmxpbmUgb24gaG92ZXIgb25seVwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiIHN1YnRsZT5cbiAgICAgICAgICAgIFN1YnRsZSBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRvd25sb2FkXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImRhdGE6dGV4dC9wbGFpbixnYWxsZXJ5XCIgZG93bmxvYWQ9XCJnYWxsZXJ5LnR4dFwiPlxuICAgICAgICAgICAgRG93bmxvYWQgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdXJmYWNlXCIsXG4gICAgdGl0bGU6IFwiU3VyZmFjZVwiLFxuICAgIGNvbXBvbmVudDogXCJTdXJmYWNlXCIsXG4gICAgc3VtbWFyeTogXCJPd25zIHZpc3VhbCBjaHJvbWUg4oCUIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIHBvc2l0aW9uaW5nLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJwbGFpblwiLCBcInJhaXNlZFwiLCBcInN1bmtlblwiLCBcImJ1YmJsZVwiLCBcImNoaXBcIiwgXCJjYWxsb3V0XCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFN1cmZhY2UgdmFyaWFudD17dn0gcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIj57dn08L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50OiBcImZsb2F0aW5nXCIgLyBcInN0aWNreS1iYXJcIiBwaW4gdG8gdGhlIHZpZXdwb3J0IOKAlCBvbWl0dGVkIGhlcmUnPlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgUG9zaXRpb25hbCB2YXJpYW50cyBhcmUgcHJldmlld2VkIGluIGNvbnRleHQsIG5vdCBpbiBhIGdyaWQgY2VsbC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmFkaXVzOiBub25lIC8gc20gLyBtZCAvIGxnIC8gZnVsbFwiPlxuICAgICAgICAgIHsoW1wibm9uZVwiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcImZ1bGxcIl0gYXMgY29uc3QpLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2VcbiAgICAgICAgICAgICAga2V5PXtyfVxuICAgICAgICAgICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgICAgICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgIHJhZGl1cz17cn1cbiAgICAgICAgICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntyfTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJib3JkZXI6IG5vbmUgLyBkZWZhdWx0IC8gc3Ryb25nXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwiZGVmYXVsdFwiLCBcInN0cm9uZ1wiXSBhcyBjb25zdCkubWFwKChiKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZSBrZXk9e2J9IGJvcmRlcj17Yn0gcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntifTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaGFkb3c6IHNtIC8gbWQgLyBsZ1wiPlxuICAgICAgICAgIHsoW1wic21cIiwgXCJtZFwiLCBcImxnXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlXG4gICAgICAgICAgICAgIGtleT17c31cbiAgICAgICAgICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICAgICAgICAgIHNoYWRvdz17c31cbiAgICAgICAgICAgICAgcmFkaXVzPVwibWRcIlxuICAgICAgICAgICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3N9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNhcmRcIixcbiAgICB0aXRsZTogXCJDYXJkXCIsXG4gICAgY29tcG9uZW50OiBcIkNhcmRcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIG9mIFN1cmZhY2VzIOKAlCBhIHJhaXNlZCBSb290IHdyYXBwaW5nIEhlYWRlciwgQm9keSwgYW5kIEZvb3RlciBzbG90cy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiQ2FyZC5Sb290ID4gSGVhZGVyIC8gQm9keSAvIEZvb3RlclwiIHdpZGU+XG4gICAgICAgIDxDYXJkLlJvb3QgcGFkZGluZz1cIjBcIj5cbiAgICAgICAgICA8Q2FyZC5IZWFkZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkNhcmQgaGVhZGVyPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgPENhcmQuQm9keSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgVGhlIGJvZHkgc2xvdCBjYXJyaWVzIHRoZSBtYWluIGNvbnRlbnQuIEVhY2ggc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gaXRcbiAgICAgICAgICAgICAgY2FuIGJlIHJldGludGVkIG9yIHJlcGFkZGVkIHdpdGhvdXQgcmVhY2hpbmcgcGFzdCB0aGUgcHJpbWl0aXZlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5Cb2R5PlxuICAgICAgICAgIDxDYXJkLkZvb3RlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGb290ZXIgYWN0aW9uXCIgLz5cbiAgICAgICAgICA8L0NhcmQuRm9vdGVyPlxuICAgICAgICA8L0NhcmQuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNrZWxldG9uXCIsXG4gICAgdGl0bGU6IFwiU2tlbGV0b25cIixcbiAgICBjb21wb25lbnQ6IFwiU2tlbGV0b25cIixcbiAgICBzdW1tYXJ5OiBcIlNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLiBBbmltYXRpb24gaG9ub3VycyByZWR1Y2VkLW1vdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1widGV4dFwiLCBcInJlY3RcIiwgXCJjaXJjbGVcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD17dn0gLz5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjdXN0b20gd2lkdGggKyBoZWlnaHRcIj5cbiAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInJlY3RcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9ezY0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm91dHB1dFwiLFxuICAgIHRpdGxlOiBcIk91dHB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJPdXRwdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJNb25vc3BhY2Ugb3V0cHV0IHJlZ2lvbiBmb3IgY29tbWFuZCByZXN1bHRzIG9yIGxvZ3Mg4oCUIHdyYXBzLCBvciBzY3JvbGxzIGhvcml6b250YWxseS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdCDigJQgd3JhcHNcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQ+cG9sbHkgZ2FsbGVyeSDihpIgc2VydmluZyBhdCBodHRwOi8vbG9jYWxob3N0OjQzMjE8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzY3JvbGwg4oCUIHNpbmdsZSBsb25nIGxpbmUgc2Nyb2xscyBpbnN0ZWFkIG9mIHdyYXBwaW5nXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0IHNjcm9sbD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkIHBvbGx5IGdhbGxlcnkgLS1idWlsZCAuL2Rpc3QvZ2FsbGVyeSAgICMgb25lIGxvbmcgbGluZSB0aGF0IHNjcm9sbHMgaG9yaXpvbnRhbGx5IHJhdGhlciB0aGFuIHdyYXBwaW5nIG9udG8gdGhlIG5leHQgcm93XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJodG1sXCIsXG4gICAgdGl0bGU6IFwiSHRtbFwiLFxuICAgIGNvbXBvbmVudDogXCJIdG1sXCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIGEgdHJ1c3RlZCBIVE1MIHN0cmluZy4gVGhlIGNhbGxlciBvd25zIHNhbml0aXNhdGlvbiDigJQgbmV2ZXIgcGFzcyB1c2VyIGlucHV0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJodG1sPXt0cnVzdGVkIHN0cmluZ31cIiB3aWRlPlxuICAgICAgICA8SHRtbCBodG1sPVwiPHN0cm9uZz5Cb2xkPC9zdHJvbmc+LCA8ZW0+aXRhbGljPC9lbT4sIGFuZCBhIDxjb2RlPmNvZGUgc3BhbjwvY29kZT4gZnJvbSBhIHRydXN0ZWQgbWFya3VwIHN0cmluZy5cIiAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29sbGFwc2libGVcIixcbiAgICB0aXRsZTogXCJDb2xsYXBzaWJsZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2xsYXBzaWJsZVwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gZGlzY2xvc3VyZSDigJQga2V5Ym9hcmQgYW5kIHNjcmVlbi1yZWFkZXIgYmVoYXZpb3VyIGZyZWUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsb3NlZCBieSBkZWZhdWx0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIlNob3cgbW9yZSBkZXRhaWxcIj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29udGVudCBpcyByZXZlYWxlZCB3aGVuIHRoZSBkaXNjbG9zdXJlIGlzIG9wZW5lZC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0T3BlblwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJPcGVuIGZyb20gdGhlIHN0YXJ0XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbGxhcHNpYmxlIHJlbmRlcnMgZXhwYW5kZWQgb24gZmlyc3QgcGFpbnQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZWRpdGFibGUgZmllbGQgaW4gdGhlIHN1bW1hcnkg4oCUIFNwYWNlL0VudGVyIG5vIGxvbmdlciBjb2xsYXBzZSBpdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgICAgICBzdW1tYXJ5PXtcbiAgICAgICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZ2FsbGVyeS1jb2xsYXBzaWJsZS1zdW1tYXJ5XCIgcGxhY2Vob2xkZXI9XCJUeXBlIGEgc3BhY2UgaGVyZeKAplwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQ+VGhlIGhlYWRlciBndWFyZCBjYW5jZWxzIHRoZSBkaXNjbG9zdXJlIHRvZ2dsZSBmb3IgdGV4dC1lbnRyeSBmaWVsZHMuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGF5b3V0XCIsXG4gICAgdGl0bGU6IFwiTGF5b3V0XCIsXG4gICAgY29tcG9uZW50OiBcIkxheW91dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlRoZSBncmlkIHByaW1pdGl2ZS4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyDigJQgbm8gaGFuZC13cml0dGVuIGZsZXggb3IgZ3JpZC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiMWZyIDFmciAxZnJcIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3RhY2tPbk1vYmlsZSDigJQgY29sbGFwc2VzIHRvIG9uZSBjb2x1bW4g4omkNjQwcHhcIiB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBzdGFja09uTW9iaWxlPlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNsdXN0ZXJcIixcbiAgICB0aXRsZTogXCJDbHVzdGVyXCIsXG4gICAgY29tcG9uZW50OiBcIkNsdXN0ZXJcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJXcmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMg4oCUIGNoaXBzLCB0YWdzLCBidXR0b24gZ3JvdXBzLiBSZWZsb3dzIGFzIHNwYWNlIHJ1bnMgb3V0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJnYXAg4oCUIGl0ZW1zIHdyYXAgb250byBuZXcgcm93c1wiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgIHtbXCJHcm9jZXJpZXNcIiwgXCJFcnJhbmRzXCIsIFwiSG9tZVwiLCBcIkdhcmRlblwiLCBcIkZpbmFuY2VcIiwgXCJUcmF2ZWxcIiwgXCJIZWFsdGhcIiwgXCJBZG1pblwiXS5tYXAoXG4gICAgICAgICAgICAodGFnKSA9PiAoXG4gICAgICAgICAgICAgIDxCYWRnZSBrZXk9e3RhZ30gdmFyaWFudD1cImluZm9cIj5cbiAgICAgICAgICAgICAgICB7dGFnfVxuICAgICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRhYnNcIixcbiAgICB0aXRsZTogXCJUYWJzXCIsXG4gICAgY29tcG9uZW50OiBcIlRhYnNcIixcbiAgICBzdW1tYXJ5OiBcIkhvcml6b250YWwgbmF2IHdpdGggYW4gYWN0aXZlLXRhYiBhY2NlbnQuIERpc3BhdGNoZXMgYW4gYWN0aW9uIHBlciB0YWIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludGVyYWN0aXZlIOKAlCBvbmUgdGFiIGRpc2FibGVkXCIgd2lkZT5cbiAgICAgICAgPFRhYnNcbiAgICAgICAgICB0YWJzPXtbXG4gICAgICAgICAgICB7IGlkOiBcIm92ZXJ2aWV3XCIsIGxhYmVsOiBcIk92ZXJ2aWV3XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYWN0aXZpdHlcIiwgbGFiZWw6IFwiQWN0aXZpdHlcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJzZXR0aW5nc1wiLCBsYWJlbDogXCJTZXR0aW5nc1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFyY2hpdmVkXCIsIGxhYmVsOiBcIkFyY2hpdmVkXCIsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBhY3RpdmVUYWI9eyRnYWxsZXJ5VGFiLnZhbHVlfVxuICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6c2V0LXRhYlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkdhbGxlcnkgdGFic1wiXG4gICAgICAgIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjaGVja2JveFwiLFxuICAgIHRpdGxlOiBcIkNoZWNrYm94XCIsXG4gICAgY29tcG9uZW50OiBcIkNoZWNrYm94XCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgY2hlY2tib3ggaW4gYSBsYWJlbC4gQSBwbGFpbiBib29sZWFuIGlzIGNvbnRyb2xsZWQ7IGEgU2lnbmFsIGJpbmRzIGl0c2VsZi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidW5jaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiVW5jaGVja2VkXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkNoZWNrZWRcIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWQ9e3NpZ25hbH0g4oCUIGNsaWNrIHRvIHRvZ2dsZVwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkJvdW5kIHRvIGEgc2lnbmFsXCIgY2hlY2tlZD17JGdhbGxlcnlDaGVja2VkfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvZ2dsZVwiLFxuICAgIHRpdGxlOiBcIlRvZ2dsZVwiLFxuICAgIGNvbXBvbmVudDogXCJUb2dnbGVcIixcbiAgICBzdW1tYXJ5OiBcIlN3aXRjaC1yb2xlIGNoZWNrYm94LiBQYXNzaXZlIOKAlCB0aGUgY2FsbGVyIGRyaXZlcyB0aGUgY2hlY2tlZCBzdGF0ZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib2ZmXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9mZlwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9uXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dC1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIlRleHRJbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0SW5wdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJTaWduYWwtZnJpZW5kbHkgbmF0aXZlIGlucHV0LiBBIHBsYWluIHN0cmluZyBpcyB1bmNvbnRyb2xsZWQ7IGEgU2lnbmFsIGlzIGNvbnRyb2xsZWQuIFwiICtcbiAgICAgIFwiaW5wdXRUeXBlIHBpY2tzIHRoZSBuYXRpdmUga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb247IGVycm9yIHJlbmRlcnMgYSBsaW5rZWQgbWVzc2FnZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwic2luZ2xlXCIgd2l0aCBwbGFjZWhvbGRlcic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1zaW5nbGVcIiBwbGFjZWhvbGRlcj1cIlR5cGUgaGVyZeKAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1tdWx0aVwiIHZhcmlhbnQ9XCJtdWx0aVwiIHJvd3M9ezN9IHBsYWNlaG9sZGVyPVwiTXVsdGlwbGUgbGluZXPigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZW1haWxcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lbWFpbFwiIGlucHV0VHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwibnVtYmVyXCIgd2l0aCBtaW4vbWF4L3N0ZXAnPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbnVtYmVyXCIgaW5wdXRUeXBlPVwibnVtYmVyXCIgbWluPXswfSBtYXg9ezEwfSBzdGVwPXsxfSB2YWx1ZT1cIjVcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVycm9yIOKAlCBsaW5rZWQgbWVzc2FnZSwgbWFya3MgaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZXJyb3JcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGVycm9yPVwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8taW52YWxpZFwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgaW52YWxpZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1kaXNhYmxlZFwiIHZhbHVlPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJlYWRPbmx5XCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1yZWFkb25seVwiIHZhbHVlPVwiUmVhZCBvbmx5XCIgcmVhZE9ubHkgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ2YWx1ZT17c2lnbmFsfSDigJQgY29udHJvbGxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tY29udHJvbGxlZFwiIHZhbHVlPXskZ2FsbGVyeVRleHR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgdGl0bGU6IFwiU2VsZWN0XCIsXG4gICAgY29tcG9uZW50OiBcIlNlbGVjdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkRyb3Bkb3duIG9mIG9wdGlvbnMgYm91bmQgdG8gYSBTaWduYWw8U2V0Pi4gU2luZ2xlIHJlcGxhY2VzLCBtdWx0aSB0b2dnbGVzLiBcIiArXG4gICAgICAnY2xlYXJhYmxlIHByZXBlbmRzIGFuIFwiQW55IOKAplwiIHJvdyBzbyBhbiBvcHRpb25hbCBmaWx0ZXIgaGFzIGEgcGF0aCBiYWNrIHRvIHVuc2V0LicsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpbmdsZS1zZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgb25lXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0U2luZ2xlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xlYXJhYmxlIOKAlCBzaW5nbGUtc2VsZWN0IHdpdGggYW4g4oCcQW55IOKApuKAnSByb3dcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlciBieVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFueSBvYmplY3RcIlxuICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdENsZWFyYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm11bHRpU2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIHNldmVyYWxcIlxuICAgICAgICAgICAgbXVsdGlTZWxlY3RcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TXVsdGl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJmaWxlLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiRmlsZUlucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIkZpbGVJbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiU3R5bGVkIHdyYXBwZXIgb3ZlciBhIG5hdGl2ZSBmaWxlIHBpY2tlci4gSGFuZHMgdGhlIGNob3NlbiBGaWxlTGlzdCB0byBvbkZpbGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvbkZpbGVzIOKAlCBwaWNrIGEgZmlsZVwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQ2hvb3NlIGZpbGVcIlxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImFjY2VwdCArIG11bHRpcGxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgaW1hZ2VzXCJcbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIG9uRmlsZXM9eyhmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gZmlsZXNbMF0/Lm5hbWUgPz8gXCLigJRcIjtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiRGlzYWJsZWRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIG9uRmlsZXM9eygpID0+IHtcbiAgICAgICAgICAgICAgLyogZGlzYWJsZWQg4oCUIG5ldmVyIGludm9rZWQgKi9cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IHBpY2tlZCBmaWxlXCIgd2lkZT5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIExhc3QgcGlja2VkOiA8Q29kZT57JGdhbGxlcnlGaWxlTmFtZS52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImRyb3Bkb3duXCIsXG4gICAgdGl0bGU6IFwiRHJvcGRvd25cIixcbiAgICBjb21wb25lbnQ6IFwiRHJvcGRvd25cIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJMb3ctbGV2ZWwgdHJpZ2dlciArIHBvcG92ZXIgcGx1bWJpbmcuIFRoZSBwcmltaXRpdmUgaXRzZWxmIGhhcyBubyBjaHJvbWUg4oCUIFwiICtcbiAgICAgIFwiY29uc3VtZXJzIChTZWxlY3QsIEFjdGlvblNlbGVjdCkgd3JhcCBpdCB3aXRoIHRoZSBzdHlsZWQgdHJpZ2dlciBhbmQgY2FyZXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRyaWdnZXIgZHJlc3NlZCB2aWEgdHJpZ2dlckNsYXNzTmFtZSArIGRhdGEtb3BlblwiPlxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49eyRnYWxsZXJ5RHJvcGRvd25PcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9XCJnYWxsZXJ5LWRyb3Bkb3duLXRyaWdnZXJcIlxuICAgICAgICAgIHRyaWdnZXI9e1xuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4+T3BlbiBtZW51PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdhbGxlcnktZHJvcGRvd24tY2FyZXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICA8VGV4dD5GaXJzdCBpdGVtPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+U2Vjb25kIGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5UaGlyZCBpdGVtPC9UZXh0PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBzdW1tYXJ5OiBcIkR1YWwtbW9kZSB2aWV3L2VkaXQgZmllbGQuIENsaWNrIHRvIGVkaXQ7IGNvbW1pdCBkaXNwYXRjaGVzIGFuIGFjdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJibHVyXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJDbGljayB0byBlZGl0LCBjb21taXRzIG9uIGJsdXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJCbHVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nc2F2ZU9uPVwiZW50ZXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkVkaXQgYW5kIHByZXNzIEVudGVyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHNhdmVPbj1cImVudGVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkVudGVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZGF0ZVwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiMjAyNi0wNS0yMlwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBpbnB1dFR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRGF0ZSBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJBIGxvbmdlciwgbXVsdGktbGluZSB2YWx1ZVwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB2YXJpYW50PVwibXVsdGlcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJNdWx0aS1saW5lIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibGFzdCBjb21taXR0ZWQgdmFsdWVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBjb21taXR0ZWQ6IDxDb2RlPnskZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1zZWxlY3RcIixcbiAgICB0aXRsZTogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uU2VsZWN0XCIsXG4gICAgc3VtbWFyeTogXCJTaW5nbGUtc2VsZWN0IHRoYXQgY29tbWl0cyBhIHBsYWluIHN0cmluZyB2YWx1ZSB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb21taXRzIHZpYSBhY3Rpb25cIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwibWVkaXVtXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsb3dcIiwgbGFiZWw6IFwiTG93XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJtZWRpdW1cIiwgbGFiZWw6IFwiTWVkaXVtXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJoaWdoXCIsIGxhYmVsOiBcIkhpZ2hcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkIOKAlCByZW5kZXJzIGFzIHN0YXRpYyB0ZXh0XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICB2YWx1ZT1cImhpZ2hcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1mb3JtXCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uRm9ybVwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25Gb3JtXCIsXG4gICAgc3VtbWFyeTogXCJXcmFwcyBhIG5hdGl2ZSBmb3JtIHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuIOKAlCBzdWJtaXQgZGlzcGF0Y2hlcyB0aGUgZm9ybSBoYW5kbGVyLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmb3JtIHdpdGggVGV4dElucHV0IGZpZWxkcyArIGEgc3VibWl0IEJ1dHRvblwiIHdpZGU+XG4gICAgICAgIDxBY3Rpb25Gb3JtIGZvcm09e2dhbGxlcnlGb3JtfSBhcmlhLWxhYmVsPVwiR2FsbGVyeSBkZW1vIGZvcm1cIj5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiPlxuICAgICAgICAgICAgICBGdWxsIG5hbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiIG5hbWU9XCJmdWxsTmFtZVwiIHBsYWNlaG9sZGVyPVwiQWRhIExvdmVsYWNlXCIgLz5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCI+XG4gICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCIgbmFtZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgdGllcj1cInByaW1hcnlcIiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIlN1Ym1pdFwiIC8+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvQWN0aW9uRm9ybT5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm1vZGFsXCIsXG4gICAgdGl0bGU6IFwiTW9kYWxcIixcbiAgICBjb21wb25lbnQ6IFwiTW9kYWxcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIGRpYWxvZyDigJQgZm9jdXMgdHJhcCwgRXNjYXBlIGhhbmRsaW5nLCBwb3J0YWwsIHNjcm9sbCBsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvcGVucyBhIHBvcnRhbGxlZCBkaWFsb2dcIj5cbiAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTptb2RhbC1vcGVuXCIgbGFiZWw9XCJPcGVuIG1vZGFsXCIgLz5cbiAgICAgICAgPE1vZGFsLlJvb3RcbiAgICAgICAgICB3aGVuPXskZ2FsbGVyeU1vZGFsT3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIH19XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbW8gbW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8TW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuVGl0bGU+TW9kYWwgdGl0bGU8L01vZGFsLlRpdGxlPlxuICAgICAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8TW9kYWwuQm9keT5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgRm9jdXMgaXMgdHJhcHBlZCBpbnNpZGUgdGhlIGRpYWxvZywgRXNjYXBlIGNsb3NlcyBpdCwgdGhlIGJhY2tkcm9wIGNsaWNrIGNsb3NlcyBpdCxcbiAgICAgICAgICAgICAgICBhbmQgdGhlIGJvZHkgc2Nyb2xsIGlzIGxvY2tlZCB3aGlsZSBpdCBpcyBvcGVuLlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L01vZGFsLkJvZHk+XG4gICAgICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRG9uZVwiIC8+XG4gICAgICAgICAgICAgIDwvTW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDwvTW9kYWwuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbmZpcm0tZGlhbG9nXCIsXG4gICAgdGl0bGU6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIGNvbXBvbmVudDogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgc3VtbWFyeTogXCJQcm9taXNlLXJldHVybmluZyBjb25maXJtYXRpb24uIGNvbmZpcm0oKSByZXNvbHZlcyB0cnVlIG9yIGZhbHNlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKCkg4oCUIHN0YW5kYXJkXCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIiBsYWJlbD1cIkNvbmZpcm0gYW4gYWN0aW9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKHsgZGFuZ2VyOiB0cnVlIH0pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1kYW5nZXI9XCJ0cnVlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiQ29uZmlybSBhIGRlbGV0aW9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvYXN0XCIsXG4gICAgdGl0bGU6IFwiVG9hc3RcIixcbiAgICBjb21wb25lbnQ6IFwiVG9hc3RcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgdGhlIGdsb2JhbCBlcnJvclN0YXRlIHNpZ25hbC4gU2V2ZXJpdHkgc2V0cyB0aGUgYXJpYS1saXZlIHBvbGl0ZW5lc3MuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInB1c2ggYSB0b2FzdCBhdCBlYWNoIHNldmVyaXR5XCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImluZm9cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiaW5mb1wiXG4gICAgICAgICAgICBsYWJlbD1cIkluZm8gdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwid2FybmluZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIldhcm5pbmcgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJlcnJvclwiXG4gICAgICAgICAgICBsYWJlbD1cIkVycm9yIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdmVybGF5LXJvb3RcIixcbiAgICB0aXRsZTogXCJPdmVybGF5Um9vdFwiLFxuICAgIGNvbXBvbmVudDogXCJPdmVybGF5Um9vdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkluZnJhc3RydWN0dXJlLCBub3QgYSB2aXN1YWwgY29udHJvbC4gTW91bnQgaXQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdDsgTW9kYWwsIFRvYXN0LCBhbmQgXCIgK1xuICAgICAgXCJDb25maXJtRGlhbG9nIHBvcnRhbCBpbnRvIGl0LiBUaGUgZ2FsbGVyeSBzaGVsbCBhbHJlYWR5IG1vdW50cyBvbmUg4oCUIHRoaXMgc2VjdGlvbiBkb2N1bWVudHMgaXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm1vdW50ZWQgb25jZSBhdCB0aGUgYXBwIHJvb3RcIiB3aWRlPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8Q29kZT57XCI8T3ZlcmxheVJvb3QgLz5cIn08L0NvZGU+IHJlbmRlcnMgdGhlIHBvcnRhbCB0YXJnZXQgdGhlIG92ZXJsYXkgcHJpbWl0aXZlcyBuZWVkLlxuICAgICAgICAgIFdpdGhvdXQgaXQsIHRoZSBNb2RhbCAvIFRvYXN0IC8gQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgYWJvdmUgd291bGQgaGF2ZSBub3doZXJlIHRvXG4gICAgICAgICAgcmVuZGVyLiBJdCBkcmF3cyBub3RoaW5nIGl0c2VsZjsgdGhlIGdhbGxlcnkgc2hlbGwgbW91bnRzIHRoZSBzaW5nbGUgbGl2ZSBpbnN0YW5jZS5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuXTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBhcHAgcm9vdCDigJQgYSBzaW5nbGUgc2Nyb2xsYWJsZSBwYWdlIGNhdGFsb2d1aW5nIGV2ZXJ5IHBvbGx5LXVpXG4gKiBwcmltaXRpdmUgaW4gaXRzIGNvbmZpZ3VyYXRpb25zLiBBbiBpbi1wYWdlIG5hdiBqdW1wcyBiZXR3ZWVuIHNlY3Rpb25zOyBhXG4gKiB0aGVtZSB0b2dnbGUgZm9yY2VzIGxpZ2h0L2Rhcmsgb24gdGhlIHBhbmVsIHN1YnRyZWUgdmlhIGBkYXRhLXBvbGx5LXRoZW1lYFxuICogc28gYm90aCBwYWxldHRlcyBjYW4gYmUgaW5zcGVjdGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIE9TIHNldHRpbmcuXG4gKlxuICogVGhlIG92ZXJsYXkgaG9zdHMgKE92ZXJsYXlSb290IC8gVG9hc3QuVmlld3BvcnQgLyBDb25maXJtRGlhbG9nLkhvc3QpIGFyZVxuICogbW91bnRlZCBoZXJlIG9uY2UsIHNvIHRoZSBNb2RhbCwgVG9hc3QsIGFuZCBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBoYXZlIGFcbiAqIHBvcnRhbCB0YXJnZXQg4oCUIHRoZSBzYW1lIHdpcmluZyBhIHJlYWwgY29uc3VtZXIgYXBwIGRvZXMgYXQgaXRzIHJvb3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDbHVzdGVyLFxuICBDb25maXJtRGlhbG9nLFxuICBMYXlvdXQsXG4gIE92ZXJsYXlSb290LFxuICBTdXJmYWNlLFxuICBUZXh0LFxuICBUb2FzdCxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHsgVEhFTUVTIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9TRUNUSU9OUywgdHlwZSBHYWxsZXJ5U2VjdGlvbiB9IGZyb20gXCIuL3NwZWNpbWVucy50c3hcIjtcbmltcG9ydCB7ICRnYWxsZXJ5VGhlbWUgfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqIEEgY2FwaXRhbGlzZWQgbGFiZWwgZm9yIGEgdGhlbWUgb3B0aW9uLiAqL1xuZnVuY3Rpb24gdGhlbWVMYWJlbCh0aGVtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRoZW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhlbWUuc2xpY2UoMSk7XG59XG5cbi8qKiBPbmUgY2F0YWxvZ3VlZCBjb21wb25lbnQ6IGEgbGFiZWxsZWQgbGFuZG1hcmsgd2l0aCBhIGdyaWQgb2Ygc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gU2VjdGlvbihwcm9wczogeyBzZWN0aW9uOiBHYWxsZXJ5U2VjdGlvbiB9KSB7XG4gIGNvbnN0IHsgc2VjdGlvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IGhlYWRpbmdJZCA9IGAke3NlY3Rpb24uaWR9LWhlYWRpbmdgO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBhcz1cInNlY3Rpb25cIlxuICAgICAgaWQ9e3NlY3Rpb24uaWR9XG4gICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgY2xhc3NOYW1lPVwiZ2FsbGVyeS1zZWN0aW9uXCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT17aGVhZGluZ0lkfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxoMiBpZD17aGVhZGluZ0lkfSBjbGFzcz1cImdhbGxlcnktc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgIHtzZWN0aW9uLnRpdGxlfVxuICAgICAgICA8L2gyPlxuICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICB7c2VjdGlvbi5zdW1tYXJ5fVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxMYXlvdXRcbiAgICAgICAgICBjb2x1bW5zPVwicmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KG1pbigxMDAlLCAxNHJlbSksIDFmcikpXCJcbiAgICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgICA+XG4gICAgICAgICAge3NlY3Rpb24ucmVuZGVyKCl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2FsbGVyeUFwcCgpIHtcbiAgY29uc3QgdGhlbWUgPSAkZ2FsbGVyeVRoZW1lLnZhbHVlO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHBhZGRpbmc9XCJjbGFtcCh2YXIoLS1wb2xseS1zcGFjZS1zbSksIDN2dywgdmFyKC0tcG9sbHktc3BhY2UteGwpKVwiXG4gICAgICBkYXRhLWdhbGxlcnktcGFuZWw9XCJ0cnVlXCJcbiAgICAgIGRhdGEtcG9sbHktdGhlbWU9e3RoZW1lID09PSBcInN5c3RlbVwiID8gdW5kZWZpbmVkIDogdGhlbWV9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIj5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJnYWxsZXJ5LXRpdGxlXCI+UG9sbHkgVUkgZ2FsbGVyeTwvaDE+XG4gICAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBFdmVyeSA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5AZmFpcmZveC9wb2xseS91aTwvVGV4dD4gcHJpbWl0aXZlLCBpbiBpdHMgY29uZmlndXJhdGlvbnMg4oCUXG4gICAgICAgICAgICBhIHJlZmVyZW5jZSBmb3IgYnVpbGRpbmcgcG9sbHkgYXBwcywgYW5kIGEgc2luZ2xlIHN1cmZhY2UgZm9yIGFjY2Vzc2liaWxpdHkgYW5kXG4gICAgICAgICAgICB2aXN1YWwtcmVncmVzc2lvbiBjaGVja3MuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0xheW91dD5cblxuICAgICAgICA8U3VyZmFjZSB2YXJpYW50PVwiY2FsbG91dFwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgICAgVGhlbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtUSEVNRVMubWFwKCh0KSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3R9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPXt0ID09PSB0aGVtZSA/IFwicHJpbWFyeVwiIDogXCJ0ZXJ0aWFyeVwifVxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGhlbWVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uLXRoZW1lPXt0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0aGVtZUxhYmVsKHQpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L1N1cmZhY2U+XG5cbiAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiQ29tcG9uZW50c1wiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3NlY3Rpb24uaWR9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICAgIGhyZWY9e2AjJHtzZWN0aW9uLmlkfWB9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3NlY3Rpb24udGl0bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICA8U2VjdGlvbiBrZXk9e3NlY3Rpb24uaWR9IHNlY3Rpb249e3NlY3Rpb259IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgIHsvKiBNb3VudGVkIG9uY2Ugc28gdGhlIG92ZXJsYXkgc3BlY2ltZW5zIGhhdmUgYSBwb3J0YWwgdGFyZ2V0LiAqL31cbiAgICAgIDxPdmVybGF5Um9vdCAvPlxuICAgICAgPFRvYXN0LlZpZXdwb3J0IC8+XG4gICAgICA8Q29uZmlybURpYWxvZy5Ib3N0IC8+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5J3MgYnJvd3NlciBlbnRyeSBwb2ludC4gQnVuZGxlZCBieSBzZXJ2ZXIudHMgKG9uZSBCdW4uYnVpbGQgcGFzcylcbiAqIOKAlCBpdHMgdHJhbnNpdGl2ZSBgLm1vZHVsZS5jc3NgIGltcG9ydHMgcGx1cyB0aGUgZ2xvYmFsIHN0eWxlc2hlZXRzIGJlbG93IGNvbWVcbiAqIG91dCBhcyBhIHNpbmdsZSBDU1MgYXJ0aWZhY3QgdGhlIHNlcnZlciBzZXJ2ZXMgYWxvbmdzaWRlIHRoaXMgc2NyaXB0LlxuICpcbiAqIEJvb3QgbWlycm9ycyBhIHJlYWwgY29uc3VtZXIgYXBwOiBiaW5kIHRoZSBkZW1vIGZvcm0sIGluc3RhbGwgdGhlIGRvY3VtZW50XG4gKiBldmVudCBkZWxlZ2F0aW9uIHRoYXQgcm91dGVzIGBkYXRhLWFjdGlvbmAgY2xpY2tzL3N1Ym1pdHMgaW50byB0aGUgZ2FsbGVyeSdzXG4gKiBhY3Rpb24gcmVnaXN0cnksIHRoZW4gcmVuZGVyLiBUaGUgb3ZlcmxheSBob3N0cyBsaXZlIGluc2lkZSA8R2FsbGVyeUFwcCAvPi5cbiAqL1xuXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBHQUxMRVJZX0FDVElPTlMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHYWxsZXJ5QXBwIH0gZnJvbSBcIi4vZ2FsbGVyeS1hcHAudHN4XCI7XG5pbXBvcnQgeyB0eXBlIEdhbGxlcnlTdG9yZXMsIGdhbGxlcnlGb3JtIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvdGhlbWUuY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvc3R5bGVzLmNzc1wiO1xuaW1wb3J0IFwiLi9nYWxsZXJ5LmNzc1wiO1xuXG5jb25zdCBzdG9yZXM6IEdhbGxlcnlTdG9yZXMgPSB7fTtcbmdhbGxlcnlGb3JtLmJpbmRTdG9yZXMoKCkgPT4gc3RvcmVzKTtcblxuaW5zdGFsbEV2ZW50RGVsZWdhdGlvbihhc3luYyAoZGlzcGF0Y2gpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IEdBTExFUllfQUNUSU9OU1tkaXNwYXRjaC5hY3Rpb25dO1xuICBpZiAoaGFuZGxlcikge1xuICAgIGF3YWl0IGhhbmRsZXIoe1xuICAgICAgc3RvcmVzLFxuICAgICAgZXZlbnQ6IGRpc3BhdGNoLmV2ZW50LFxuICAgICAgZWxlbWVudDogZGlzcGF0Y2guZWxlbWVudCxcbiAgICAgIGRhdGE6IGRpc3BhdGNoLmRhdGEsXG4gICAgfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBcIikgPz8gZG9jdW1lbnQuYm9keTtcbnJlbmRlcig8R2FsbGVyeUFwcCAvPiwgcm9vdCk7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRO0FBQVIsSUFBVTtBQUFWLElBQVk7QUFBWixJQUFjO0FBQWQsSUFBZ0I7QUFBaEIsSUFBa0I7QUFBbEIsSUFBb0I7QUFBcEIsSUFBc0I7QUFBdEIsSUFBd0I7QUFBeEIsSUFBMEI7QUFBMUIsSUFBNEI7QUFBNUIsSUFBOEI7QUFBOUIsSUFBZ0M7QUFBaEMsSUFBa0M7QUFBbEMsSUFBb0MsSUFBRSxDQUFDO0FBQXZDLElBQXlDLElBQUUsQ0FBQztBQUE1QyxJQUE4QyxJQUFFO0FBQWhELElBQW9ILElBQUUsTUFBTTtBQUFRLFNBQVMsQ0FBQyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsU0FBUSxNQUFLO0FBQUEsSUFBRSxHQUFFLE1BQUcsR0FBRTtBQUFBLEVBQUcsT0FBTztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLGNBQVksR0FBRSxXQUFXLFlBQVksRUFBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsSUFBRSxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxJQUFFLElBQUUsS0FBRSxDQUFDO0FBQUEsRUFBRSxLQUFJLE1BQUs7QUFBQSxJQUFTLE1BQVAsUUFBUyxLQUFFLEdBQUUsTUFBVSxNQUFQLFFBQVMsS0FBRSxHQUFFLE1BQUcsR0FBRSxNQUFHLEdBQUU7QUFBQSxFQUFHLElBQUcsVUFBVSxTQUFPLE1BQUksR0FBRSxXQUFTLFVBQVUsU0FBTyxJQUFFLEVBQUUsS0FBSyxXQUFVLENBQUMsSUFBRSxLQUFlLE9BQU8sTUFBbkIsY0FBNEIsR0FBRSxnQkFBUjtBQUFBLElBQXFCLEtBQUksTUFBSyxHQUFFO0FBQUEsTUFBc0IsR0FBRSxRQUFOLGNBQVcsR0FBRSxNQUFHLEdBQUUsYUFBYTtBQUFBLEVBQUksT0FBTyxFQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBSTtBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsRUFBQyxNQUFLLElBQUUsT0FBTSxJQUFFLEtBQUksSUFBRSxLQUFJLElBQUUsS0FBSSxNQUFLLElBQUcsTUFBSyxLQUFJLEdBQUUsS0FBSSxNQUFLLEtBQUksTUFBSyxhQUFpQixXQUFFLEtBQVUsTUFBTixPQUFRLEVBQUUsSUFBRSxJQUFFLEtBQUksSUFBRyxLQUFJLEVBQUM7QUFBQSxFQUFFLE9BQWEsTUFBTixRQUFlLEVBQUUsU0FBUixRQUFlLEVBQUUsTUFBTSxFQUFDLEdBQUU7QUFBQTtBQUFvQyxTQUFTLENBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxPQUFPLEdBQUU7QUFBQTtBQUFTLFNBQVMsQ0FBQyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsS0FBSyxRQUFNLElBQUUsS0FBSyxVQUFRO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLElBQVMsTUFBTjtBQUFBLElBQVEsT0FBTyxHQUFFLEtBQUcsRUFBRSxHQUFFLElBQUcsR0FBRSxNQUFJLENBQUMsSUFBRTtBQUFBLEVBQUssU0FBUSxHQUFFLEtBQUUsR0FBRSxJQUFJLFFBQU87QUFBQSxJQUFJLEtBQVUsS0FBRSxHQUFFLElBQUksUUFBZixRQUEwQixHQUFFLE9BQVI7QUFBQSxNQUFZLE9BQU8sR0FBRTtBQUFBLEVBQUksT0FBa0IsT0FBTyxHQUFFLFFBQXJCLGFBQTBCLEVBQUUsRUFBQyxJQUFFO0FBQUE7QUFBSyxTQUFTLENBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFHLEdBQUUsT0FBSyxHQUFFLEtBQUk7QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFLEtBQUksS0FBRSxHQUFFLEtBQUksS0FBRSxDQUFDLEdBQUUsS0FBRSxDQUFDLEdBQUUsS0FBRSxFQUFFLENBQUMsR0FBRSxFQUFDO0FBQUEsSUFBRSxHQUFFLE1BQUksR0FBRSxNQUFJLEdBQUUsRUFBRSxTQUFPLEVBQUUsTUFBTSxFQUFDLEdBQUUsRUFBRSxHQUFFLEtBQUksSUFBRSxJQUFFLEdBQUUsS0FBSSxHQUFFLElBQUksY0FBYSxLQUFHLEdBQUUsTUFBSSxDQUFDLEVBQUMsSUFBRSxNQUFLLElBQVEsTUFBTixPQUFRLEVBQUUsRUFBQyxJQUFFLElBQUUsQ0FBQyxFQUFFLEtBQUcsR0FBRSxNQUFLLEVBQUMsR0FBRSxHQUFFLE1BQUksR0FBRSxLQUFJLEdBQUUsR0FBRyxJQUFJLEdBQUUsT0FBSyxJQUFFLEVBQUUsSUFBRSxJQUFFLEVBQUMsR0FBRSxHQUFFLE1BQUksR0FBRSxLQUFHLE1BQUssR0FBRSxPQUFLLE1BQUcsRUFBRSxFQUFDO0FBQUEsRUFBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsS0FBVSxLQUFFLEdBQUUsT0FBWCxRQUFzQixHQUFFLE9BQVI7QUFBQSxJQUFZLE9BQU8sR0FBRSxNQUFJLEdBQUUsSUFBSSxPQUFLLE1BQUssR0FBRSxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUU7QUFBQSxNQUFDLElBQVMsTUFBTixRQUFlLEdBQUUsT0FBUjtBQUFBLFFBQVksT0FBTyxHQUFFLE1BQUksR0FBRSxJQUFJLE9BQUssR0FBRTtBQUFBLEtBQUksR0FBRSxFQUFFLEVBQUM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUU7QUFBQSxHQUFFLENBQUMsR0FBRSxRQUFNLEdBQUUsTUFBSSxTQUFLLEVBQUUsS0FBSyxFQUFDLEtBQUcsQ0FBQyxFQUFFLFNBQU8sS0FBRyxFQUFFLHdCQUFzQixJQUFFLEVBQUUsc0JBQW9CLEdBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUc7QUFBQSxJQUFDLFNBQVEsSUFB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QWdCLENBQUMsSUFBRyxNQUFHLENBQUMsTUFBUyxHQUFFLDJCQUFSLFNBQWtDLEtBQUUsR0FBRSx3QkFBd0IsSUFBRSxFQUFDLElBQUcsS0FBUSxNQUFOLFFBQVMsR0FBRSxTQUFPLEtBQVMsR0FBRSxPQUFSLE9BQVksRUFBRSxHQUFFLE1BQU0sUUFBUSxJQUFFLElBQUUsS0FBRSxFQUFFLElBQUUsRUFBRSxFQUFDLElBQUUsS0FBRSxDQUFDLEVBQUMsR0FBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsRUFBQyxHQUFFLEdBQUUsT0FBSyxHQUFFLEtBQUksR0FBRSxPQUFLLE1BQUssR0FBRSxJQUFJLFVBQVEsR0FBRSxLQUFLLEVBQUMsR0FBRSxPQUFJLEdBQUUsTUFBSSxHQUFFLEtBQUc7QUFBQSxRQUFNLE9BQU0sSUFBRTtBQUFBLFFBQUMsSUFBRyxHQUFFLE1BQUksTUFBSyxNQUFTLE1BQU47QUFBQSxVQUFRLElBQUcsR0FBRSxNQUFLO0FBQUEsWUFBQyxLQUFJLEdBQUUsT0FBSyxLQUFFLE1BQUksSUFBSSxNQUFNLEdBQUUsWUFBTCxLQUFlLEdBQUU7QUFBQSxjQUFhLEtBQUUsR0FBRTtBQUFBLFlBQVksR0FBRSxHQUFFLFFBQVEsRUFBQyxLQUFHLE1BQUssR0FBRSxNQUFJO0FBQUEsVUFBQyxFQUFLO0FBQUEsWUFBQyxLQUFJLEtBQUUsR0FBRSxPQUFPO0FBQUEsY0FBSyxFQUFFLEdBQUUsR0FBRTtBQUFBLFlBQUUsRUFBRSxFQUFDO0FBQUE7QUFBQSxRQUFPO0FBQUEsYUFBRSxNQUFJLEdBQUUsS0FBSSxHQUFFLE1BQUksR0FBRSxLQUFJLEdBQUUsUUFBTSxFQUFFLEVBQUM7QUFBQSxRQUFFLEVBQUUsSUFBSSxJQUFFLElBQUUsRUFBQztBQUFBO0FBQUEsSUFBTztBQUFBLE1BQU0sTUFBTixRQUFTLEdBQUUsT0FBSyxHQUFFLE9BQUssR0FBRSxNQUFJLEdBQUUsS0FBSSxHQUFFLE1BQUksR0FBRSxPQUFLLEtBQUUsR0FBRSxNQUFJLEVBQUUsR0FBRSxLQUFJLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsRUFBQztBQUFBLEVBQUUsUUFBTyxLQUFFLEVBQUUsV0FBUyxHQUFFLEVBQUMsR0FBRSxNQUFJLEdBQUUsTUFBUyxZQUFFO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxPQUFJLEdBQUUsUUFBTSxHQUFFLElBQUksTUFBSSxPQUFJLEdBQUUsT0FBSyxHQUFFLElBQUksS0FBSyxDQUFDO0FBQUE7QUFBRyxTQUFTLENBQUMsQ0FBQyxJQUFFLElBQUUsSUFBRTtBQUFBLEVBQUMsU0FBUSxLQUFFLEVBQUUsS0FBRSxHQUFFLFFBQU87QUFBQSxJQUFJLEVBQUUsR0FBRSxLQUFHLEdBQUUsRUFBRSxLQUFHLEdBQUUsRUFBRSxHQUFFO0FBQUEsRUFBRSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUUsRUFBQyxHQUFFLEdBQUUsS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsS0FBRSxHQUFFLEtBQUksR0FBRSxNQUFJLENBQUMsR0FBRSxHQUFFLEtBQUssUUFBUSxDQUFDLElBQUU7QUFBQSxRQUFDLEdBQUUsS0FBSyxFQUFDO0FBQUEsT0FBRTtBQUFBLE1BQUUsT0FBTSxJQUFFO0FBQUEsTUFBQyxFQUFFLElBQUksSUFBRSxHQUFFLEdBQUc7QUFBQTtBQUFBLEdBQUc7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUU7QUFBQSxFQUFDLE9BQWdCLE9BQU8sTUFBakIsWUFBMEIsTUFBTixRQUFTLEdBQUUsTUFBSSxJQUFFLEtBQUUsRUFBRSxFQUFDLElBQUUsR0FBRSxJQUFJLENBQUMsSUFBRSxFQUFFLENBQUMsR0FBRSxFQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLEtBQUUsR0FBRSxTQUFPLEdBQUUsS0FBRSxHQUFF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QUUsT0FBSyxHQUFFLElBQUksSUFBRSxJQUFFLE1BQUcsRUFBQyxHQUFFLEtBQUU7QUFBQSxFQUFFLElBQUksS0FBRSxHQUFFLFFBQU0sR0FBRSxNQUFJLEVBQUMsSUFBRyxDQUFDLEdBQUUsS0FBSSxDQUFDLEVBQUM7QUFBQSxFQUFHLE9BQU8sTUFBRyxHQUFFLEdBQUcsVUFBUSxHQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUc7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLElBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsSUFBRSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUUsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxJQUFHLEdBQUUsSUFBRSxJQUFFLENBQUMsR0FBRSxRQUFNLEdBQUUsS0FBRyxDQUFDLEtBQUUsR0FBRSxFQUFDLElBQUUsR0FBTyxXQUFFLEVBQUMsR0FBRSxRQUFRLENBQUMsSUFBRTtBQUFBLElBQUMsSUFBSSxLQUFFLEdBQUUsTUFBSSxHQUFFLElBQUksS0FBRyxHQUFFLEdBQUcsSUFBRyxLQUFFLEdBQUUsRUFBRSxJQUFFLEVBQUM7QUFBQSxJQUFFLE9BQUksT0FBSSxHQUFFLE1BQUksQ0FBQyxJQUFFLEdBQUUsR0FBRyxFQUFFLEdBQUUsR0FBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsR0FBRyxHQUFFLEdBQUUsTUFBSSxJQUFFLENBQUMsR0FBRSxNQUFLO0FBQUEsSUFBQyxJQUFJLEtBQUUsUUFBUSxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUEsTUFBQyxJQUFHLENBQUMsR0FBRSxJQUFJO0FBQUEsUUFBSSxPQUFNO0FBQUEsTUFBRyxJQUFJLEtBQUUsR0FBRSxJQUFJLElBQUksR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFFO0FBQUEsUUFBQyxPQUFPLEdBQUU7QUFBQSxPQUFJO0FBQUEsTUFBRSxJQUFHLEdBQUUsTUFBTSxRQUFRLENBQUMsSUFBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEdBQUU7QUFBQSxPQUFJO0FBQUEsUUFBRSxPQUFNLENBQUMsTUFBRyxHQUFFLEtBQUssTUFBSyxJQUFFLElBQUUsRUFBQztBQUFBLE1BQUUsSUFBSSxLQUFFLEdBQUUsSUFBSSxVQUFRO0FBQUEsTUFBRSxPQUFPLEdBQUUsS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLFFBQUMsSUFBRyxHQUFFLEtBQUk7QUFBQSxVQUFDLElBQUksS0FBRSxHQUFFLEdBQUc7QUFBQSxVQUFHLEdBQUUsS0FBRyxHQUFFLEtBQUksR0FBRSxNQUFTLFdBQUUsT0FBSSxHQUFFLEdBQUcsT0FBSyxLQUFFO0FBQUEsUUFBRztBQUFBLE9BQUUsR0FBRSxNQUFHLEdBQUUsS0FBSyxNQUFLLElBQUUsSUFBRSxFQUFDLEtBQUc7QUFBQTtBQUFBLElBQUcsR0FBRSxNQUFJO0FBQUEsSUFBRyxNQUFRLHVCQUFKLElBQThCLHFCQUFKLE9BQUU7QUFBQSxJQUFzQixHQUFFLHNCQUFvQixRQUFRLENBQUMsSUFBRSxJQUFFLElBQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsUUFBQyxJQUFJLEtBQUU7QUFBQSxRQUFFLEtBQU8sV0FBRSxHQUFFLElBQUUsSUFBRSxFQUFDLEdBQUUsS0FBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLE1BQUcsR0FBRSxLQUFLLE1BQUssSUFBRSxJQUFFLEVBQUM7QUFBQSxPQUFHLEdBQUUsd0JBQXNCO0FBQUEsRUFBQztBQUFBLEVBQUMsT0FBTyxHQUFFLE9BQUssR0FBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLENBQUMsR0FBRSxPQUFLLEdBQUUsR0FBRSxLQUFJLEVBQUMsTUFBSSxHQUFFLEtBQUcsSUFBRSxHQUFFLElBQUUsSUFBRSxHQUFFLElBQUksSUFBSSxLQUFLLEVBQUM7QUFBQTtBQUFtRixTQUFTLEVBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLFNBQVEsR0FBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBdU4sU0FBUyxFQUFDLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxHQUFFLEtBQUksRUFBQyxNQUFJLEdBQUUsS0FBRyxHQUFFLEdBQUUsR0FBRSxNQUFJLElBQUUsR0FBRSxNQUFJLEtBQUcsR0FBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTztBQUFBLEtBQUcsRUFBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEdBQUUsUUFBUSxHQUFFLE1BQUssS0FBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxHQUFFLElBQUUsSUFBRSxNQUFTLEdBQUUsTUFBUixTQUFhLEdBQUUsS0FBRyxNQUFHLEdBQUUsSUFBSSxFQUFDLElBQUcsR0FBRSxNQUFNLFNBQU8sR0FBRTtBQUFBO0FBQWtPLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFJLEVBQUU7QUFBQSxFQUFFLElBQUcsQ0FBQyxHQUFFLElBQUc7QUFBQSxJQUFDLFNBQVEsS0FBRSxHQUFFLElBQVcsT0FBUCxRQUFVLENBQUMsR0FBRSxPQUFZLEdBQUUsT0FBVDtBQUFBLE1BQWEsS0FBRSxHQUFFO0FBQUEsSUFBRyxJQUFJLEtBQUUsR0FBRSxRQUFNLEdBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLElBQUcsR0FBRSxLQUFHLE1BQUksR0FBRSxLQUFHLE1BQUksR0FBRTtBQUFBLEVBQUk7QUFBQSxFQUFDLE9BQU8sR0FBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsR0FBRSxLQUFFLEdBQUUsTUFBTSxLQUFHO0FBQUEsSUFBQyxJQUFJLEtBQUUsR0FBRTtBQUFBLElBQUksSUFBRyxHQUFFLE9BQUs7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEdBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxHQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxRQUFFLE9BQU0sSUFBRTtBQUFBLFFBQUMsR0FBRSxNQUFJLENBQUMsR0FBRSxHQUFFLElBQUksSUFBRSxHQUFFLEdBQUc7QUFBQTtBQUFBLEVBQUU7QUFBQTtBQUFFLEdBQUUsTUFBSSxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsS0FBRSxNQUFLLE1BQUcsR0FBRSxFQUFDO0FBQUEsR0FBRyxHQUFFLEtBQUcsUUFBUSxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLE9BQUssR0FBRSxJQUFJLFFBQU0sR0FBRSxNQUFJLEdBQUUsSUFBSSxNQUFLLE1BQUcsR0FBRSxJQUFFLEVBQUM7QUFBQSxHQUFHLEdBQUUsTUFBSSxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLEVBQUMsR0FBRSxLQUFFO0FBQUEsRUFBRSxJQUFJLE1BQUcsS0FBRSxHQUFFLEtBQUs7QUFBQSxFQUFJLE9BQUksT0FBSSxNQUFHLEdBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxHQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLElBQUMsR0FBRSxRQUFNLEdBQUUsS0FBRyxHQUFFLE1BQUssR0FBRSxJQUFFLEdBQUUsTUFBUztBQUFBLEdBQUUsTUFBSSxHQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsR0FBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEdBQUUsTUFBSSxDQUFDLEdBQUUsS0FBRSxLQUFJLEtBQUU7QUFBQSxHQUFHLEdBQUUsU0FBTyxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLEVBQUM7QUFBQSxFQUFFLElBQUksS0FBRSxHQUFFO0FBQUEsRUFBSSxNQUFHLEdBQUUsUUFBTSxHQUFFLElBQUksSUFBSSxXQUFhLEdBQUUsS0FBSyxFQUFDLE1BQVosS0FBZSxPQUFJLEdBQUUsMkJBQXlCLEtBQUUsR0FBRSwwQkFBd0IsSUFBRyxFQUFDLElBQUcsR0FBRSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLElBQUMsR0FBRSxNQUFJLEdBQUUsTUFBSSxHQUFFLElBQUcsR0FBRSxJQUFPO0FBQUEsR0FBRSxJQUFHLEtBQUUsS0FBRTtBQUFBLEdBQU0sR0FBRSxNQUFJLFFBQVEsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLEdBQUUsS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsR0FBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEdBQUUsTUFBSSxHQUFFLElBQUksT0FBTyxRQUFRLENBQUMsSUFBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEdBQUUsTUFBSSxHQUFFLEVBQUM7QUFBQSxPQUFFO0FBQUEsTUFBRSxPQUFNLElBQUU7QUFBQSxNQUFDLEdBQUUsS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLFFBQUMsR0FBRSxRQUFNLEdBQUUsTUFBSSxDQUFDO0FBQUEsT0FBRyxHQUFFLEtBQUUsQ0FBQyxHQUFFLEdBQUUsSUFBSSxJQUFFLEdBQUUsR0FBRztBQUFBO0FBQUEsR0FBRyxHQUFFLE1BQUcsR0FBRSxJQUFFLEVBQUM7QUFBQSxHQUFHLEdBQUUsVUFBUSxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLEVBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxLQUFFLEdBQUU7QUFBQSxFQUFJLE1BQUcsR0FBRSxRQUFNLEdBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLElBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEdBQUUsRUFBQztBQUFBLE1BQUUsT0FBTSxJQUFFO0FBQUEsTUFBQyxLQUFFO0FBQUE7QUFBQSxHQUFHLEdBQUUsR0FBRSxNQUFTLFdBQUUsTUFBRyxHQUFFLElBQUksSUFBRSxHQUFFLEdBQUc7QUFBQTtBQUFJLElB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S0FBTztBQUF0QyxJQUF3QyxLQUFFO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBWSxPQUFKLFdBQU07QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFO0FBQUEsSUFBRSxJQUFZLE9BQUosYUFBTyxHQUFFLE1BQUksSUFBRTtBQUFBLE1BQUMsS0FBRSxFQUFDLEdBQUUsR0FBRSxHQUFFLElBQUUsR0FBRSxHQUFFLEdBQUUsR0FBTyxXQUFFLEdBQUUsSUFBRSxHQUFPLFdBQUUsR0FBTyxXQUFFLEdBQUUsR0FBQztBQUFBLE1BQUUsSUFBWSxHQUFFLE1BQU47QUFBQSxRQUFRLEdBQUUsRUFBRSxJQUFFO0FBQUEsTUFBRSxHQUFFLElBQUU7QUFBQSxNQUFFLEdBQUUsSUFBRTtBQUFBLE1BQUUsSUFBRyxLQUFHLEdBQUU7QUFBQSxRQUFFLEdBQUUsRUFBRSxFQUFDO0FBQUEsTUFBRSxPQUFPO0FBQUEsSUFBQyxFQUFNLFNBQVEsR0FBRSxNQUFQLElBQVM7QUFBQSxNQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUUsSUFBWSxHQUFFLE1BQU4sV0FBUTtBQUFBLFFBQUMsR0FBRSxFQUFFLElBQUUsR0FBRTtBQUFBLFFBQUUsSUFBWSxHQUFFLE1BQU47QUFBQSxVQUFRLEdBQUUsRUFBRSxJQUFFLEdBQUU7QUFBQSxRQUFFLEdBQUUsSUFBRSxHQUFFO0FBQUEsUUFBRSxHQUFFLElBQU87QUFBQSxRQUFFLEdBQUUsRUFBRSxJQUFFO0FBQUEsUUFBRSxHQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBUSxNQUFOLE9BQWEsWUFBRSxHQUFFO0FBQUEsRUFBUSxLQUFLLElBQVEsTUFB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QUFFLElBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFDO0FBQUEsUUFBQztBQUFBO0FBQUEsT0FBRyxJQUFJO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUs7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUksSUFBRztBQUFBLE1BQUMsU0FBUSxLQUFFLEtBQUssRUFBVyxPQUFKLFdBQU0sS0FBRSxHQUFFO0FBQUEsUUFBRSxHQUFFLEVBQUUsRUFBRTtBQUFBLGNBQUU7QUFBQSxNQUFRLEdBQUU7QUFBQTtBQUFBLEVBQUU7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLElBQUUsRUFBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsU0FBUSxLQUFFLEdBQUUsRUFBVyxPQUFKLFdBQU0sS0FBRSxHQUFFO0FBQUEsSUFBRSxJQUFHLEdBQUUsRUFBRSxNQUFJLEdBQUUsS0FBRyxDQUFDLEdBQUUsRUFBRSxFQUFFLEtBQUcsR0FBRSxFQUFFLE1BQUksR0FBRTtBQUFBLE1BQUUsT0FBTTtBQUFBLEVBQUcsT0FBTTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsU0FBUSxLQUFFLEdBQUUsRUFBVyxPQUFKLFdBQU0sS0FBRSxHQUFFLEdBQUU7QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFLEVBQUU7QUFBQSxJQUFFLElBQVksT0FBSjtBQUFBLE1BQU0sR0FBRSxJQUFFO0FBQUEsSUFBRSxHQUFFLEVBQUUsSUFBRTtBQUFBLElBQUUsR0FBRSxJQUFFO0FBQUEsSUFBRyxJQUFZLEdBQUUsTUFBTixXQUFRO0FBQUEsTUFBQyxHQUFFLElBQUU7QUFBQSxNQUFFO0FBQUEsSUFBSztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLEdBQUUsS0FBTztBQUFBLEVBQUUsT0FBZSxPQUFKLFdBQU07QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFO0FBQUEsSUFBRSxJQUFRLEdBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxHQUFFLEVBQUUsRUFBRSxFQUFDO0FBQUEsTUFBRSxJQUFZLE9BQUo7QUFBQSxRQUFNLEdBQUUsSUFBRSxHQUFFO0FBQUEsTUFBRSxJQUFZLEdBQUUsTUFBTjtBQUFBLFFBQVEsR0FBRSxFQUFFLElBQUU7QUFBQSxJQUFDLEVBQU07QUFBQSxXQUFFO0FBQUEsSUFBRSxHQUFFLEVBQUUsSUFBRSxHQUFFO0FBQUEsSUFBRSxJQUFZLEdBQUUsTUFBTjtBQUFBLE1BQVEsR0FBRSxJQUFPO0FBQUEsSUFBRSxLQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsR0FBRSxJQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLEdBQUUsS0FBSyxNQUFVLFNBQUM7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUUsS0FBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsTUFBTixPQUFhLFlBQUUsR0FBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLE1BQU4sT0FBYSxZQUFFLEdBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxNQUFOLE9BQWEsWUFBRSxHQUFFO0FBQUE7QUFBSyxHQUFFLFlBQVUsSUFBSTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBUSxLQUFHLEtBQUssTUFBYjtBQUFBLElBQWdCLE9BQU07QUFBQSxFQUFHLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxLQUFLLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEtBQUssSUFBRSxLQUFHLENBQUMsR0FBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUU7QUFBQSxFQUFDLElBQUksS0FBRTtBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsR0FBRSxJQUFJO0FBQUEsSUFBRSxLQUFFO0FBQUEsSUFBSyxJQUFJLEtBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFHLEtBQUcsS0FBSyxLQUFHLEtBQUssTUFBSSxNQUFPLEtBQUssTUFBVCxHQUFXO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLEtBQUssS0FBRztBQUFBLE1BQUksS0FBSztBQUFBLElBQUc7QUFBQSxJQUFFLE9BQU0sSUFBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUc7QUFBQSxJQUFHLEtBQUs7QUFBQTtBQUFBLEVBQUksS0FBRTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLFNBQVEsS0FBRSxLQUFLLEVBQVcsT0FBSixXQUFNLEtBQUUsR0FBRTtBQUFBLE1BQUUsR0FBRSxFQUFFLEVBQUUsRUFBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLEVBQUM7QUFBQSxJQUFFLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxNQUFDLEtBQUssS0FBRztBQUFBLE1BQUksU0FBUSxLQUFFLEtBQUssRUFBVyxPQUFKLFdBQU0sS0FBRSxHQUFFO0FBQUEsUUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFDO0FBQUEs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U0FBUyxFQUFDLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxFQUFFLE1BQUcsR0FBRSxLQUFLLE1BQUssRUFBRSxPQUFJLFFBQVEsR0FBRSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFHLElBQUU7QUFBQSxJQUFDLElBQUksS0FBRTtBQUFBLElBQUUsS0FBTztBQUFBLElBQUUsR0FBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEtBQUUsTUFBRyxHQUFFLEVBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxNQUFLLEtBQUUsR0FBRSxNQUFLLEtBQUUsVUFBVSxFQUFDO0FBQUEsRUFBRSxHQUFFLFFBQU07QUFBQSxFQUFFLElBQUksS0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxLQUFFLElBQUUsS0FBRSxHQUFFO0FBQUEsSUFBSSxPQUFNLEtBQUUsR0FBRTtBQUFBLE1BQUcsSUFBRyxHQUFFLEtBQUk7QUFBQSxRQUFDLEdBQUUsSUFBSSxRQUFNO0FBQUEsUUFBRTtBQUFBLE1BQUs7QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsSUFBSSxLQUFFLEdBQUUsTUFBTTtBQUFBLE1BQU0sT0FBVyxPQUFKLElBQU0sSUFBTyxPQUFMLE9BQU8sS0FBRyxNQUFHO0FBQUEsS0FBRyxHQUFFLEtBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLE9BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRSxLQUFLLEtBQUcsQ0FBQyxFQUFFLEdBQUUsS0FBSztBQUFBLEtBQUUsR0FBRSxLQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLElBQUcsR0FBRSxPQUFNO0FBQUEsUUFBQyxJQUFJLEtBQUUsR0FBRTtBQUFBLFFBQU0sSUFBRyxHQUFFLE9BQUssR0FBRSxJQUFJLE9BQVMsR0FBRSxJQUFJLElBQUksYUFBZDtBQUFBLFVBQXVCLEdBQUUsSUFBSSxJQUFJLE9BQUs7QUFBQSxNQUFDO0FBQUEsS0FBRSxHQUFFLEtBQUUsR0FBRSxLQUFLO0FBQUEsSUFBRSxHQUFFLEtBQUssSUFBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLEdBQUU7QUFBQSxNQUFFLEdBQUUsS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUFHLE9BQU0sQ0FBQyxJQUFFLEVBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQyxHQUFFLEtBQUUsR0FBRSxJQUFHLEtBQUUsR0FBRTtBQUFBLEVBQUcsT0FBTyxHQUFFLFFBQU0sR0FBRSxLQUFLLElBQUUsR0FBRTtBQUFBO0FBQU0sR0FBRSxjQUFZO0FBQW1CLE9BQU8saUJBQWlCLEdBQUUsV0FBVSxFQUFDLGFBQVksRUFBQyxjQUFhLE1BQUcsT0FBVyxVQUFDLEdBQUUsTUFBSyxFQUFDLGNBQWEsTUFBRyxPQUFNLEdBQUMsR0FBRSxPQUFNLEVBQUMsY0FBYSxNQUFHLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUU7QUFBQSxFQUFLLE9BQU0sRUFBQyxNQUFLLE1BQUssS0FBSyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUU7QUFBQSxJQUFNLEVBQUM7QUFBQSxFQUFFLEdBQUUsS0FBSSxFQUFDLGNBQWEsTUFBRyxPQUFNLEVBQUMsRUFBQyxDQUFDO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLElBQWEsT0FBTyxHQUFFLFFBQW5CLFVBQXdCO0FBQUEsSUFBQyxJQUFJLElBQUUsS0FBRSxHQUFFO0FBQUEsSUFBTSxTQUFRLE1BQUs7QUFBQSxNQUFFLElBQWdCLE9BQWIsWUFBZTtBQUFBLFFBQUMsSUFBSSxLQUFFLEdBQUU7QUFBQSxRQUFHLElBQUcsY0FBYSxJQUFFO0FBQUEsVUFBQyxJQUFHLENBQUM7QUFBQSxZQUFFLEdBQUUsT0FBSyxLQUFFLENBQUM7QUFBQSxVQUFFLEdBQUUsTUFBRztBQUFBLFVBQUUsR0FBRSxNQUFHLEdBQUUsS0FBSztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsR0FBRSxFQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxHQUFFLEVBQUM7QUFBQSxFQUFFLElBQUcsR0FBRSxTQUFPLEdBQUU7QUFBQSxJQUFDLEdBQUU7QUFBQSxJQUFFLElBQUksSUFBRSxLQUFFLEdBQUU7QUFBQSxJQUFJLElBQUcsSUFBRTtBQUFBLE1BQUMsR0FBRSxRQUFNO0FBQUEsTUFBRyxLQUFhLEtBQUUsR0FBRSxVQUFUO0FBQUEsUUFBZSxHQUFFLE9BQUssS0FBRSxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsVUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLFlBQUMsS0FBRTtBQUFBLGFBQU0sRUFBQyxNQUFLLEdBQUMsQ0FBQztBQUFBLFVBQUUsR0FBRSxJQUFFO0FBQUEsVUFBRSxPQUFPO0FBQUEsVUFBRyxRQUFRLEdBQUU7QUFBQSxVQUFDLElBQUk7QUFBQSxVQUFFLElBQUc7QUFBQSxhQUFTLEtBQUUsR0FBRSxNQUFYLFFBQWUsR0FBRSxLQUFLLEVBQUM7QUFBQSxVQUFFLEdBQUUsUUFBTTtBQUFBLFVBQUUsR0FBRSxTQUFTLENBQUMsQ0FBQztBQUFBLFdBQWUsT0FBTyxHQUFFLFFBQXJCLGFBQTBCLEdBQUUsS0FBSyxlQUFhLEdBQUUsS0FBSyxPQUFLLEVBQUU7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFFO0FBQUEsSUFBRSxHQUFFLEVBQUM7QUFBQSxFQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsSUFBRSxJQUFFLElBQUUsSUFBRTtBQUFBLEVBQUMsR0FBRTtBQUFBLEVBQUUsS0FBTztBQUFBLEVBQUUsR0FBRSxJQUFFLElBQUUsRUFBQztBQUFBLENBQUU7QUFBRSxHQUFFLFVBQVMsUUFBUSxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsR0FBRTtBQUFBLEVBQUUsS0FBTztBQUFBLEVBQUUsSUFBSTtBQUFBLEVBQUUsSUFBYSxPQUFPLEdBQUUsUUFBbkIsYUFBMEIsS0FBRSxHQUFFLE1BQUs7QUFBQSxJQUFDLE1BQVEsTUFBSixJQUFhLE9BQUosT0FBRTtBQUFBLElBQVEsSUFBRyxJQUFFO0FBQUEsTUFBQyxJQUFJLEtBQUUsR0FBRTtBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUUsU0FBUSxNQUFLLElBQUU7QUFBQSxVQUFDLElBQUksS0FBRSxHQUFFO0FBQUEsVUFBRyxJQUFZLE9BQUosYUFBTyxFQUFFLE1BQUssS0FBRztBQUFBLFlBQUMsR0FBRSxFQUFFO0FBQUEsWUFBRSxHQUFFLE1BQVE7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFBLE1BQUs7QUFBQSxRQUFDLEtBQUUsQ0FBQztBQUFBLFFBQUUsR0FBRSxJQUFFO0FBQUE7QUFBQSxNQUFFLFNBQVEsTUFBSyxJQUFFO0FBQUEsUUFBQyxJQUFJLEtBQUUsR0FBRSxLQUFHLEtBQUUsR0FBRTtBQUFBLFFBQUcsSUFBWSxPQUFKLFdBQU07QUFBQSxVQUFDLEtBQUUsR0FBRSxJQUFFLElBQUUsRUFBQztBQUFBLFVBQUUsR0FBRSxNQUFHO0FBQUEsUUFBQyxFQUFNO0FBQUEsYUFBRSxFQUFFLElBQUUsRUFBQztBQUFBLE1BQUM7QUFBQSxNQUFDLFNBQVEsTUFBSztBQUFBLFFBQUUsR0FBRSxNQUFHLEdBQUU7QUFBQSxJQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsR0FBRSxFQUFDO0FBQUEsQ0FBRTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRSxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxNQUFLLE1BQVksR0FBRSxvQkFBTixXQUFzQixLQUFFLEdBQUUsRUFBQyxHQUFFLEtBQUUsR0FBRSxLQUFLO0FBQUEsRUFBRSxPQUFNLEVBQUMsR0FBRSxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsSUFBQyxHQUFFLFFBQU07QUFBQSxJQUFFLEtBQUUsR0FBRSxLQUFLO0FBQUEsS0FBRyxHQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxLQUFLLElBQUU7QUFBQSxJQUFFLElBQUksS0FBRSxHQUFFLE1BQU07QUFBQSxJQUFNLElB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SUFBQyxPQUFPLEdBQUUsSUFBRSxJQUFFLEVBQUM7QUFBQSxHQUFFLEdBQUUsR0FBRSxPQUFLLEdBQUUsSUFBSSxRQUFNLE9BQUksR0FBRSxPQUFLLEdBQUUsWUFBWSxHQUFFLEdBQUcsR0FBRSxHQUFFLElBQUksTUFBSSxNQUFHLEdBQUUsSUFBSSxNQUFJLE1BQUk7QUFBQTtBQUFFLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxLQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBQTtBQUFLLFNBQVMsRUFBQyxDQUFDLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLE1BQUksR0FBRSxHQUFHO0FBQUEsRUFBSSxPQUFPLE1BQUcsR0FBRSxPQUFLLEdBQUUsSUFBSSxFQUFDO0FBQUE7QUFBbU4sU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFBO0FBQUssRUFBRSxVQUFRLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRTtBQUFBLEVBQUksT0FBSSxHQUFFLE1BQUksT0FBSSxNQUFHLEdBQUUsT0FBSyxHQUFFLElBQUksR0FBRSxNQUFHLEtBQUcsR0FBRSxRQUFNLEdBQUUsT0FBSyxPQUFNLE1BQUcsR0FBRSxFQUFDO0FBQUEsSUFBSSxHQUFFLFlBQVUsSUFBSSxHQUFHLE1BQUksUUFBUSxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEdBQUUsS0FBSSxLQUFFO0FBQUEsRUFBVyxHQUFFLEtBQVIsU0FBWSxHQUFFLElBQUUsQ0FBQyxJQUFHLEdBQUUsRUFBRSxLQUFLLEVBQUM7QUFBQSxFQUFFLElBQUksS0FBRSxHQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUUsT0FBRyxLQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsTUFBRyxHQUFFLFFBQU0sS0FBRSxNQUFHLEdBQUUsTUFBSSxNQUFLLEtBQUUsR0FBRSxFQUFDLElBQUUsR0FBRTtBQUFBO0FBQUEsRUFBSSxHQUFFLE1BQUk7QUFBQSxFQUFFLElBQUksS0FBRSxHQUFFO0FBQUEsRUFBSSxHQUFFLE1BQUk7QUFBQSxFQUFLLElBQUksS0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUcsQ0FBQyxFQUFFLEdBQUUsS0FBSTtBQUFBLE1BQUMsSUFBRyxHQUFFLE1BQU0sS0FBSTtBQUFBLFFBQUMsSUFBSSxLQUFFLEdBQUUsTUFBTTtBQUFBLFFBQUksR0FBRSxJQUFJLElBQUksS0FBRyxHQUFFLElBQUUsR0FBRSxJQUFJLEtBQUksR0FBRSxJQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFJO0FBQUEsTUFBRSxLQUFJLEdBQUUsU0FBUyxFQUFDLEtBQUksR0FBRSxNQUFJLEtBQUksQ0FBQyxFQUFFLEtBQUUsR0FBRSxFQUFFLElBQUk7QUFBQSxRQUFHLEdBQUUsTUFBSSxJQUFFLEdBQUUsWUFBWTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUcsR0FBRSxTQUFPLEtBQUcsR0FBRSxPQUFLLEdBQUUsU0FBUyxFQUFDLEtBQUksR0FBRSxNQUFJLEdBQUUsSUFBSSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEdBQUUsS0FBSyxJQUFFLEVBQUM7QUFBQSxHQUFHLEdBQUUsVUFBVSx1QkFBcUIsUUFBUSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLFNBQU8sUUFBUSxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsSUFBRyxLQUFLLEtBQUk7QUFBQSxJQUFDLElBQUcsS0FBSyxJQUFJLEtBQUk7QUFBQSxNQUFDLElBQUksS0FBRSxTQUFTLGNBQWMsS0FBSyxHQUFFLEtBQUUsS0FBSyxJQUFJLElBQUksR0FBRztBQUFBLE1BQUksS0FBSyxJQUFJLElBQUksS0FBRyxHQUFFLEtBQUssS0FBSSxJQUFFLEdBQUUsTUFBSSxHQUFFLEdBQUc7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxPQUFLLEVBQUUsR0FBRSxNQUFLLEdBQUUsUUFBUTtBQUFBLEVBQUUsT0FBTyxPQUFJLEdBQUUsT0FBSyxNQUFLLENBQUMsRUFBRSxHQUFFLE1BQUssR0FBRSxNQUFJLE9BQUssR0FBRSxRQUFRLEdBQUUsRUFBQztBQUFBO0FBQUcsSUFBSSxLQUFFLFFBQVEsQ0FBQyxJQUFFLElBQUUsSUFBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLEdBQUUsT0FBSyxHQUFFLE1BQUksR0FBRSxFQUFFLE9BQU8sRUFBQyxHQUFFLEdBQUUsTUFBTSxnQkFBb0IsR0FBRSxNQUFNLFlBQVksT0FBMUIsT0FBOEIsQ0FBQyxHQUFFLEVBQUU7QUFBQSxJQUFNLEtBQUksS0FBRSxHQUFFLEVBQUUsTUFBRztBQUFBLE1BQUMsTUFBSyxHQUFFLFNBQU87QUFBQSxRQUFHLEdBQUUsSUFBSSxFQUFFO0FBQUEsTUFBRSxJQUFHLEdBQUUsS0FBRyxHQUFFO0FBQUEsUUFBRztBQUFBLE1BQU0sR0FBRSxJQUFFLEtBQUUsR0FBRTtBQUFBLElBQUU7QUFBQTtBQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSyxrQkFBZ0IsUUFBUSxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUU7QUFBQSxLQUFTLEdBQUU7QUFBQTtBQUFTLFNBQVMsQ0FBQyxDQUFDLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxNQUFLLEtBQUUsR0FBRTtBQUFBLEVBQUUsSUFBRyxHQUFFLHVCQUFxQixRQUFRLEdBQUU7QUFBQSxJQUFDLEVBQUUsTUFBSyxHQUFFLENBQUMsR0FBRSxHQUFFLElBQUUsTUFBSyxHQUFFLElBQUU7QUFBQSxLQUFNLEdBQUUsS0FBRyxHQUFFLE1BQUksTUFBRyxHQUFFLHFCQUFxQixHQUFFLENBQUMsR0FBRSxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUUsR0FBRSxJQUFXLE9BQVAsUUFBVSxDQUFDLEdBQUUsT0FBWSxHQUFFLE9BQVQ7QUFBQSxNQUFhLEtBQUUsR0FBRTtBQUFBLElBQUcsR0FBRSxJQUFFLElBQUUsR0FBRSxJQUFFLEVBQUMsVUFBUyxHQUFFLFlBQVcsSUFBRSxZQUFXLENBQUMsR0FBRSxLQUFJLEVBQUMsS0FBSSxHQUFFLElBQUcsR0FBRSxVQUFTLFFBQVEsR0FBRTtBQUFBLE1BQUMsT0FBTTtBQUFBLE9BQUksY0FBYSxHQUFFLGNBQWEsY0FBYSxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsTUFBQyxLQUFLLFdBQVcsS0FBSyxFQUFDLEdBQUUsR0FBRSxFQUFFLGFBQWEsSUFBRSxFQUFDO0FBQUEsT0FBRyxhQUFZLFFBQVEsQ0FBQyxJQUFFO0FBQUEsTUFBQyxLQUFLLFdBQVcsT0FBTyxLQUFLLFdBQVcsUUFBUSxFQUFDLE1BQUksR0FBRSxDQUFDLEdBQUUsR0FBRSxFQUFFLFlBQVksRUFBQztBQUFBLE1BQUU7QUFBQSxFQUFDO0FBQUEsRUFBQyxFQUFFLEVBQUUsR0FBRSxFQUFDLFNBQVEsR0FBRSxRQUFPLEdBQUUsR0FBRSxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxFQUFFLEdBQUUsRUFBQyxLQUFJLElBQUUsR0FBRSxHQUFDLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxnQkFBYyxJQUFFO0FBQUE7QUFBQSxDQUFHLEdBQUUsWUFBVSxJQUFJLEdBQUcsTUFBSSxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLE1BQUssS0FBRSxHQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUUsR0FBRSxFQUFFLElBQUksRUFBQztBQUFBLEVBQUUsT0FBTyxHQUFFLE1BQUssUUFBUSxDQUFDLElBQUU7QUFBQSxJQUFDLElBQUksS0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLEdBQUUsTUFBTSxlQUFhLEdBQUUsS0FBSyxFQUFDLEdBQUUsR0FBRSxJQUFFLElBQUUsRUFBQyxLQUFHLEdBQUU7QUFBQTtBQUFBLElBQUcsS0FBRSxHQUFFLEVBQUMsSUFBRSxHQUFFO0FBQUE7QUFBQSxHQUFJLEdBQUUsVUFBVSxTQUFPLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsTUFBSyxL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
|
|
5333
|
+
//# debugId=8B8045F75A293C3A64756E2164756E21
|
|
5334
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9BY3Rpb25TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9CYWRnZS50c3giLCAic3JjL3BvbGx5LXVpL0J1dHRvbi50c3giLCAic3JjL3BvbGx5LXVpL1N1cmZhY2UudHN4IiwgInNyYy9wb2xseS11aS9DYXJkLnRzeCIsICJzcmMvcG9sbHktdWkvQ2hlY2tib3gudHN4IiwgInNyYy9wb2xseS11aS9DbHVzdGVyLnRzeCIsICJzcmMvcG9sbHktdWkvQ29kZS50c3giLCAic3JjL3BvbGx5LXVpL0NvbGxhcHNpYmxlLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuMS9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2ZvY3VzLXRyYXAudHMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL3Njcm9sbC1sb2NrLnRzIiwgInNyYy9wb2xseS11aS9PdmVybGF5Um9vdC50c3giLCAic3JjL3BvbGx5LXVpL01vZGFsLnRzeCIsICJzcmMvcG9sbHktdWkvQ29uZmlybURpYWxvZy50c3giLCAic3JjL3BvbGx5LXVpL0ZpbGVJbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL0h0bWwudHN4IiwgInNyYy9wb2xseS11aS9MaW5rLnRzeCIsICJzcmMvcG9sbHktdWkvT3V0cHV0LnRzeCIsICJzcmMvcG9sbHktdWkvU2VsZWN0LnRzeCIsICJzcmMvcG9sbHktdWkvU2tlbGV0b24udHN4IiwgInNyYy9wb2xseS11aS9UYWJzLnRzeCIsICJzcmMvcG9sbHktdWkvVGV4dC50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2lucHV0LWJhc2UudHMiLCAic3JjL3BvbGx5LXVpL1RleHRJbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL1RvYXN0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9nZ2xlLnRzeCIsICJzcmMvc2hhcmVkL2xpYi9zdGF0ZS50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9zdG9yZXMudHMiLCAidG9vbHMvZ2FsbGVyeS9zcmMvYWN0aW9ucy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9zcGVjaW1lbnMudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2dhbGxlcnktYXBwLnRzeCIsICJ0b29scy9nYWxsZXJ5L3NyYy9jbGllbnQudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInZhciBuLGwsdSx0LGkscixvLGUsZixjLHMsYSxoLHAsdix5LGQ9e30sdz1bXSxfPS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksZz1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIG0obixsKXtmb3IodmFyIHUgaW4gbCluW3VdPWxbdV07cmV0dXJuIG59ZnVuY3Rpb24gYihuKXtuJiZuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX1mdW5jdGlvbiBrKGwsdSx0KXt2YXIgaSxyLG8sZT17fTtmb3IobyBpbiB1KVwia2V5XCI9PW8/aT11W29dOlwicmVmXCI9PW8/cj11W29dOmVbb109dVtvXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihlLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGwmJm51bGwhPWwuZGVmYXVsdFByb3BzKWZvcihvIGluIGwuZGVmYXVsdFByb3BzKXZvaWQgMD09PWVbb10mJihlW29dPWwuZGVmYXVsdFByb3BzW29dKTtyZXR1cm4geChsLGUsaSxyLG51bGwpfWZ1bmN0aW9uIHgobix0LGkscixvKXt2YXIgZT17dHlwZTpuLHByb3BzOnQsa2V5OmkscmVmOnIsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Om51bGw9PW8/Kyt1Om8sX19pOi0xLF9fdTowfTtyZXR1cm4gbnVsbD09byYmbnVsbCE9bC52bm9kZSYmbC52bm9kZShlKSxlfWZ1bmN0aW9uIE0oKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBTKG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uIEMobixsKXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PWx9ZnVuY3Rpb24gJChuLGwpe2lmKG51bGw9PWwpcmV0dXJuIG4uX18/JChuLl9fLG4uX19pKzEpOm51bGw7Zm9yKHZhciB1O2w8bi5fX2subGVuZ3RoO2wrKylpZihudWxsIT0odT1uLl9fa1tsXSkmJm51bGwhPXUuX19lKXJldHVybiB1Ll9fZTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/JChuKTpudWxsfWZ1bmN0aW9uIEkobil7aWYobi5fX1AmJm4uX19kKXt2YXIgdT1uLl9fdix0PXUuX19lLGk9W10scj1bXSxvPW0oe30sdSk7by5fX3Y9dS5fX3YrMSxsLnZub2RlJiZsLnZub2RlKG8pLHEobi5fX1Asbyx1LG4uX19uLG4uX19QLm5hbWVzcGFjZVVSSSwzMiZ1Ll9fdT9bdF06bnVsbCxpLG51bGw9PXQ/JCh1KTp0LCEhKDMyJnUuX191KSxyKSxvLl9fdj11Ll9fdixvLl9fLl9fa1tvLl9faV09byxEKGksbyxyKSx1Ll9fZT11Ll9fPW51bGwsby5fX2UhPXQmJlAobyl9fWZ1bmN0aW9uIFAobil7aWYobnVsbCE9KG49bi5fXykmJm51bGwhPW4uX19jKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPW51bGwsbi5fX2suc29tZShmdW5jdGlvbihsKXtpZihudWxsIT1sJiZudWxsIT1sLl9fZSlyZXR1cm4gbi5fX2U9bi5fX2MuYmFzZT1sLl9fZX0pLFAobil9ZnVuY3Rpb24gQShuKXsoIW4uX19kJiYobi5fX2Q9ITApJiZpLnB1c2gobikmJiFILl9fcisrfHxyIT1sLmRlYm91bmNlUmVuZGVyaW5nKSYmKChyPWwuZGVib3VuY2VSZW5kZXJpbmcpfHxvKShIKX1mdW5jdGlvbiBIKCl7dHJ5e2Zvcih2YXIgbixsPTE7aS5sZW5ndGg7KWkubGVuZ3RoPmwmJmkuc29ydChlKSxuPWkuc2hpZnQoKSxsPWkubGVuZ3RoLEkobil9ZmluYWxseXtpLmxlbmd0aD1ILl9fcj0wfX1mdW5jdGlvbiBMKG4sbCx1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSxfLGcsbT10JiZ0Ll9fa3x8dyxiPWwubGVuZ3RoO2ZvcihmPVQodSxsLG0sZixiKSxhPTA7YTxiO2ErKyludWxsIT0ocD11Ll9fa1thXSkmJihoPS0xIT1wLl9faSYmbVtwLl9faV18fGQscC5fX2k9YSxfPXEobixwLGgsaSxyLG8sZSxmLGMscyksdj1wLl9fZSxwLnJlZiYmaC5yZWYhPXAucmVmJiYoaC5yZWYmJkooaC5yZWYsbnVsbCxwKSxzLnB1c2gocC5yZWYscC5fX2N8fHYscCkpLG51bGw9PXkmJm51bGwhPXYmJih5PXYpLChnPSEhKDQmcC5fX3UpKXx8aC5fX2s9PT1wLl9faz8oZj1qKHAsZixuLGcpLGcmJmguX19lJiYoaC5fX2U9bnVsbCkpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHAudHlwZSYmdm9pZCAwIT09Xz9mPV86diYmKGY9di5uZXh0U2libGluZykscC5fX3UmPS03KTtyZXR1cm4gdS5fX2U9eSxmfWZ1bmN0aW9uIFQobixsLHUsdCxpKXt2YXIgcixvLGUsZixjLHM9dS5sZW5ndGgsYT1zLGg9MDtmb3Iobi5fX2s9bmV3IEFycmF5KGkpLHI9MDtyPGk7cisrKW51bGwhPShvPWxbcl0pJiZcImJvb2xlYW5cIiE9dHlwZW9mIG8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8/KFwic3RyaW5nXCI9PXR5cGVvZiBvfHxcIm51bWJlclwiPT10eXBlb2Ygb3x8XCJiaWdpbnRcIj09dHlwZW9mIG98fG8uY29uc3RydWN0b3I9PVN0cmluZz9vPW4uX19rW3JdPXgobnVsbCxvLG51bGwsbnVsbCxudWxsKTpnKG8pP289bi5fX2tbcl09eChTLHtjaGlsZHJlbjpvfSxudWxsLG51bGwsbnVsbCk6dm9pZCAwPT09by5jb25zdHJ1Y3RvciYmby5fX2I+MD9vPW4uX19rW3JdPXgoby50eXBlLG8ucHJvcHMsby5rZXksby5yZWY/by5yZWY6bnVsbCxvLl9fdik6bi5fX2tbcl09byxmPXIraCxvLl9fPW4sby5fX2I9bi5fX2IrMSxlPW51bGwsLTEhPShjPW8uX19pPU8obyx1LGYsYSkpJiYoYS0tLChlPXVbY10pJiYoZS5fX3V8PTIpKSxudWxsPT1lfHxudWxsPT1lLl9fdj8oLTE9PWMmJihpPnM/aC0tOmk8cyYmaCsrKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBvLnR5cGUmJihvLl9fdXw9NCkpOmMhPWYmJihjPT1mLTE/aC0tOmM9PWYrMT9oKys6KGM+Zj9oLS06aCsrLG8uX191fD00KSkpOm4uX19rW3JdPW51bGw7aWYoYSlmb3Iocj0wO3I8cztyKyspbnVsbCE9KGU9dVtyXSkmJjA9PSgyJmUuX191KSYmKGUuX19lPT10JiYodD0kKGUpKSxLKGUsZSkpO3JldHVybiB0fWZ1bmN0aW9uIGoobixsLHUsdCl7dmFyIGkscjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUpe2ZvcihpPW4uX19rLHI9MDtpJiZyPGkubGVuZ3RoO3IrKylpW3JdJiYoaVtyXS5fXz1uLGw9aihpW3JdLGwsdSx0KSk7cmV0dXJuIGx9bi5fX2UhPWwmJih0JiYobCYmbi50eXBlJiYhbC5wYXJlbnROb2RlJiYobD0kKG4pKSx1Lmluc2VydEJlZm9yZShuLl9fZSxsfHxudWxsKSksbD1uLl9fZSk7ZG97bD1sJiZsLm5leHRTaWJsaW5nfXdoaWxlKG51bGwhPWwmJjg9PWwubm9kZVR5cGUpO3JldHVybiBsfWZ1bmN0aW9uIEYobixsKXtyZXR1cm4gbD1sfHxbXSxudWxsPT1ufHxcImJvb2xlYW5cIj09dHlwZW9mIG58fChnKG4pP24uc29tZShmdW5jdGlvbihuKXtGKG4sbCl9KTpsLnB1c2gobikpLGx9ZnVuY3Rpb24gTyhuLGwsdSx0KXt2YXIgaSxyLG8sZT1uLmtleSxmPW4udHlwZSxjPWxbdV0scz1udWxsIT1jJiYwPT0oMiZjLl9fdSk7aWYobnVsbD09PWMmJm51bGw9PWV8fHMmJmU9PWMua2V5JiZmPT1jLnR5cGUpcmV0dXJuIHU7aWYodD4ocz8xOjApKWZvcihpPXUtMSxyPXUrMTtpPj0wfHxyPGwubGVuZ3RoOylpZihudWxsIT0oYz1sW289aT49MD9pLS06cisrXSkmJjA9PSgyJmMuX191KSYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gbztyZXR1cm4tMX1mdW5jdGlvbiB6KG4sbCx1KXtcIi1cIj09bFswXT9uLnNldFByb3BlcnR5KGwsbnVsbD09dT9cIlwiOnUpOm5bbF09bnVsbD09dT9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiB1fHxfLnRlc3QobCk/dTp1K1wicHhcIn1mdW5jdGlvbiBOKG4sbCx1LHQsaSl7dmFyIHIsbztuOmlmKFwic3R5bGVcIj09bClpZihcInN0cmluZ1wiPT10eXBlb2YgdSluLnN0eWxlLmNzc1RleHQ9dTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYobi5zdHlsZS5jc3NUZXh0PXQ9XCJcIiksdClmb3IobCBpbiB0KXUmJmwgaW4gdXx8eihuLnN0eWxlLGwsXCJcIik7aWYodSlmb3IobCBpbiB1KXQmJnVbbF09PXRbbF18fHoobi5zdHlsZSxsLHVbbF0pfWVsc2UgaWYoXCJvXCI9PWxbMF0mJlwiblwiPT1sWzFdKXI9bCE9KGw9bC5yZXBsYWNlKGEsXCIkMVwiKSksbz1sLnRvTG93ZXJDYXNlKCksbD1vIGluIG58fFwib25Gb2N1c091dFwiPT1sfHxcIm9uRm9jdXNJblwiPT1sP28uc2xpY2UoMik6bC5zbGljZSgyKSxuLmx8fChuLmw9e30pLG4ubFtsK3JdPXUsdT90P3Vbc109dFtzXToodVtzXT1oLG4uYWRkRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpKTpuLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxyP3Y6cCxyKTtlbHNle2lmKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09aSlsPWwucmVwbGFjZSgveGxpbmsoSHw6aCkvLFwiaFwiKS5yZXBsYWNlKC9zTmFtZSQvLFwic1wiKTtlbHNlIGlmKFwid2lkdGhcIiE9bCYmXCJoZWlnaHRcIiE9bCYmXCJocmVmXCIhPWwmJlwibGlzdFwiIT1sJiZcImZvcm1cIiE9bCYmXCJ0YWJJbmRleFwiIT1sJiZcImRvd25sb2FkXCIhPWwmJlwicm93U3BhblwiIT1sJiZcImNvbFNwYW5cIiE9bCYmXCJyb2xlXCIhPWwmJlwicG9wb3ZlclwiIT1sJiZsIGluIG4pdHJ5e25bbF09bnVsbD09dT9cIlwiOnU7YnJlYWsgbn1jYXRjaChuKXt9XCJmdW5jdGlvblwiPT10eXBlb2YgdXx8KG51bGw9PXV8fCExPT09dSYmXCItXCIhPWxbNF0/bi5yZW1vdmVBdHRyaWJ1dGUobCk6bi5zZXRBdHRyaWJ1dGUobCxcInBvcG92ZXJcIj09bCYmMT09dT9cIlwiOnUpKX19ZnVuY3Rpb24gVihuKXtyZXR1cm4gZnVuY3Rpb24odSl7aWYodGhpcy5sKXt2YXIgdD10aGlzLmxbdS50eXBlK25dO2lmKG51bGw9PXVbY10pdVtjXT1oKys7ZWxzZSBpZih1W2NdPHRbc10pcmV0dXJuO3JldHVybiB0KGwuZXZlbnQ/bC5ldmVudCh1KTp1KX19fWZ1bmN0aW9uIHEobix1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSxkLF8sayx4LE0sJCxJLFAsQSxILFQ9dS50eXBlO2lmKHZvaWQgMCE9PXUuY29uc3RydWN0b3IpcmV0dXJuIG51bGw7MTI4JnQuX191JiYoYz0hISgzMiZ0Ll9fdSksbz1bZj11Ll9fZT10Ll9fZV0pLChhPWwuX19iKSYmYSh1KTtuOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIFQpdHJ5e2lmKGs9dS5wcm9wcyx4PVQucHJvdG90eXBlJiZULnByb3RvdHlwZS5yZW5kZXIsTT0oYT1ULmNvbnRleHRUeXBlKSYmaVthLl9fY10sJD1hP00/TS5wcm9wcy52YWx1ZTphLl9fOmksdC5fX2M/Xz0oaD11Ll9fYz10Ll9fYykuX189aC5fX0U6KHg/dS5fX2M9aD1uZXcgVChrLCQpOih1Ll9fYz1oPW5ldyBDKGssJCksaC5jb25zdHJ1Y3Rvcj1ULGgucmVuZGVyPVEpLE0mJk0uc3ViKGgpLGguc3RhdGV8fChoLnN0YXRlPXt9KSxoLl9fbj1pLHA9aC5fX2Q9ITAsaC5fX2g9W10saC5fc2I9W10pLHgmJm51bGw9PWguX19zJiYoaC5fX3M9aC5zdGF0ZSkseCYmbnVsbCE9VC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJihoLl9fcz09aC5zdGF0ZSYmKGguX19zPW0oe30saC5fX3MpKSxtKGguX19zLFQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGssaC5fX3MpKSksdj1oLnByb3BzLHk9aC5zdGF0ZSxoLl9fdj11LHApeCYmbnVsbD09VC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJm51bGwhPWguY29tcG9uZW50V2lsbE1vdW50JiZoLmNvbXBvbmVudFdpbGxNb3VudCgpLHgmJm51bGwhPWguY29tcG9uZW50RGlkTW91bnQmJmguX19oLnB1c2goaC5jb21wb25lbnREaWRNb3VudCk7ZWxzZXtpZih4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmayE9PXYmJm51bGwhPWguY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmaC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGssJCksdS5fX3Y9PXQuX192fHwhaC5fX2UmJm51bGwhPWguc2hvdWxkQ29tcG9uZW50VXBkYXRlJiYhMT09PWguc2hvdWxkQ29tcG9uZW50VXBkYXRlKGssaC5fX3MsJCkpe3UuX192IT10Ll9fdiYmKGgucHJvcHM9ayxoLnN0YXRlPWguX19zLGguX19kPSExKSx1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayx1Ll9fay5zb21lKGZ1bmN0aW9uKG4pe24mJihuLl9fPXUpfSksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXSxoLl9faC5sZW5ndGgmJmUucHVzaChoKTticmVhayBufW51bGwhPWguY29tcG9uZW50V2lsbFVwZGF0ZSYmaC5jb21wb25lbnRXaWxsVXBkYXRlKGssaC5fX3MsJCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRVcGRhdGUmJmguX19oLnB1c2goZnVuY3Rpb24oKXtoLmNvbXBvbmVudERpZFVwZGF0ZSh2LHksZCl9KX1pZihoLmNvbnRleHQ9JCxoLnByb3BzPWssaC5fX1A9bixoLl9fZT0hMSxJPWwuX19yLFA9MCx4KWguc3RhdGU9aC5fX3MsaC5fX2Q9ITEsSSYmSSh1KSxhPWgucmVuZGVyKGgucHJvcHMsaC5zdGF0ZSxoLmNvbnRleHQpLHcucHVzaC5hcHBseShoLl9faCxoLl9zYiksaC5fc2I9W107ZWxzZSBkb3toLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksaC5zdGF0ZT1oLl9fc313aGlsZShoLl9fZCYmKytQPDI1KTtoLnN0YXRlPWguX19zLG51bGwhPWguZ2V0Q2hpbGRDb250ZXh0JiYoaT1tKG0oe30saSksaC5nZXRDaGlsZENvbnRleHQoKSkpLHgmJiFwJiZudWxsIT1oLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYoZD1oLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHYseSkpLEE9bnVsbCE9YSYmYS50eXBlPT09UyYmbnVsbD09YS5rZXk/RShhLnByb3BzLmNoaWxkcmVuKTphLGY9TChuLGcoQSk/QTpbQV0sdSx0LGkscixvLGUsZixjLHMpLGguYmFzZT11Ll9fZSx1Ll9fdSY9LTE2MSxoLl9faC5sZW5ndGgmJmUucHVzaChoKSxfJiYoaC5fX0U9aC5fXz1udWxsKX1jYXRjaChuKXtpZih1Ll9fdj1udWxsLGN8fG51bGwhPW8paWYobi50aGVuKXtmb3IodS5fX3V8PWM/MTYwOjEyODtmJiY4PT1mLm5vZGVUeXBlJiZmLm5leHRTaWJsaW5nOylmPWYubmV4dFNpYmxpbmc7b1tvLmluZGV4T2YoZildPW51bGwsdS5fX2U9Zn1lbHNle2ZvcihIPW8ubGVuZ3RoO0gtLTspYihvW0hdKTtCKHUpfWVsc2UgdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssbi50aGVufHxCKHUpO2wuX19lKG4sdSx0KX1lbHNlIG51bGw9PW8mJnUuX192PT10Ll9fdj8odS5fX2s9dC5fX2ssdS5fX2U9dC5fX2UpOmY9dS5fX2U9Ryh0Ll9fZSx1LHQsaSxyLG8sZSxjLHMpO3JldHVybihhPWwuZGlmZmVkKSYmYSh1KSwxMjgmdS5fX3U/dm9pZCAwOmZ9ZnVuY3Rpb24gQihuKXtuJiYobi5fX2MmJihuLl9fYy5fX2U9ITApLG4uX19rJiZuLl9fay5zb21lKEIpKX1mdW5jdGlvbiBEKG4sdSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylKKHRbaV0sdFsrK2ldLHRbKytpXSk7bC5fX2MmJmwuX19jKHUsbiksbi5zb21lKGZ1bmN0aW9uKHUpe3RyeXtuPXUuX19oLHUuX19oPVtdLG4uc29tZShmdW5jdGlvbihuKXtuLmNhbGwodSl9KX1jYXRjaChuKXtsLl9fZShuLHUuX192KX19KX1mdW5jdGlvbiBFKG4pe3JldHVyblwib2JqZWN0XCIhPXR5cGVvZiBufHxudWxsPT1ufHxuLl9fYj4wP246ZyhuKT9uLm1hcChFKTptKHt9LG4pfWZ1bmN0aW9uIEcodSx0LGkscixvLGUsZixjLHMpe3ZhciBhLGgscCx2LHksdyxfLG09aS5wcm9wc3x8ZCxrPXQucHJvcHMseD10LnR5cGU7aWYoXCJzdmdcIj09eD9vPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjpcIm1hdGhcIj09eD9vPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiOm98fChvPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSxudWxsIT1lKWZvcihhPTA7YTxlLmxlbmd0aDthKyspaWYoKHk9ZVthXSkmJlwic2V0QXR0cmlidXRlXCJpbiB5PT0hIXgmJih4P3kubG9jYWxOYW1lPT14OjM9PXkubm9kZVR5cGUpKXt1PXksZVthXT1udWxsO2JyZWFrfWlmKG51bGw9PXUpe2lmKG51bGw9PXgpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspO3U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8seCxrLmlzJiZrKSxjJiYobC5fX20mJmwuX19tKHQsZSksYz0hMSksZT1udWxsfWlmKG51bGw9PXgpbT09PWt8fGMmJnUuZGF0YT09a3x8KHUuZGF0YT1rKTtlbHNle2lmKGU9ZSYmbi5jYWxsKHUuY2hpbGROb2RlcyksIWMmJm51bGwhPWUpZm9yKG09e30sYT0wO2E8dS5hdHRyaWJ1dGVzLmxlbmd0aDthKyspbVsoeT11LmF0dHJpYnV0ZXNbYV0pLm5hbWVdPXkudmFsdWU7Zm9yKGEgaW4gbSl5PW1bYV0sXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP3A9eTpcImNoaWxkcmVuXCI9PWF8fGEgaW4ga3x8XCJ2YWx1ZVwiPT1hJiZcImRlZmF1bHRWYWx1ZVwiaW4ga3x8XCJjaGVja2VkXCI9PWEmJlwiZGVmYXVsdENoZWNrZWRcImluIGt8fE4odSxhLG51bGwseSxvKTtmb3IoYSBpbiBrKXk9a1thXSxcImNoaWxkcmVuXCI9PWE/dj15OlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09YT9oPXk6XCJ2YWx1ZVwiPT1hP3c9eTpcImNoZWNrZWRcIj09YT9fPXk6YyYmXCJmdW5jdGlvblwiIT10eXBlb2YgeXx8bVthXT09PXl8fE4odSxhLHksbVthXSxvKTtpZihoKWN8fHAmJihoLl9faHRtbD09cC5fX2h0bWx8fGguX19odG1sPT11LmlubmVySFRNTCl8fCh1LmlubmVySFRNTD1oLl9faHRtbCksdC5fX2s9W107ZWxzZSBpZihwJiYodS5pbm5lckhUTUw9XCJcIiksTChcInRlbXBsYXRlXCI9PXQudHlwZT91LmNvbnRlbnQ6dSxnKHYpP3Y6W3ZdLHQsaSxyLFwiZm9yZWlnbk9iamVjdFwiPT14P1wiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiOm8sZSxmLGU/ZVswXTppLl9fayYmJChpLDApLGMscyksbnVsbCE9ZSlmb3IoYT1lLmxlbmd0aDthLS07KWIoZVthXSk7Y3x8KGE9XCJ2YWx1ZVwiLFwicHJvZ3Jlc3NcIj09eCYmbnVsbD09dz91LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpOm51bGwhPXcmJih3IT09dVthXXx8XCJwcm9ncmVzc1wiPT14JiYhd3x8XCJvcHRpb25cIj09eCYmdyE9bVthXSkmJk4odSxhLHcsbVthXSxvKSxhPVwiY2hlY2tlZFwiLG51bGwhPV8mJl8hPXVbYV0mJk4odSxhLF8sbVthXSxvKSl9cmV0dXJuIHV9ZnVuY3Rpb24gSihuLHUsdCl7dHJ5e2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4uX191O2kmJm4uX191KCksaSYmbnVsbD09dXx8KG4uX191PW4odSkpfWVsc2Ugbi5jdXJyZW50PXV9Y2F0Y2gobil7bC5fX2Uobix0KX19ZnVuY3Rpb24gSyhuLHUsdCl7dmFyIGkscjtpZihsLnVubW91bnQmJmwudW5tb3VudChuKSwoaT1uLnJlZikmJihpLmN1cnJlbnQmJmkuY3VycmVudCE9bi5fX2V8fEooaSxudWxsLHUpKSxudWxsIT0oaT1uLl9fYykpe2lmKGkuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e2kuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChuKXtsLl9fZShuLHUpfWkuYmFzZT1pLl9fUD1udWxsfWlmKGk9bi5fX2spZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdJiZLKGlbcl0sdSx0fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLnR5cGUpO3R8fGIobi5fX2UpLG4uX19jPW4uX189bi5fX2U9dm9pZCAwfWZ1bmN0aW9uIFEobixsLHUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKG4sdSl9ZnVuY3Rpb24gUih1LHQsaSl7dmFyIHIsbyxlLGY7dD09ZG9jdW1lbnQmJih0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksbC5fXyYmbC5fXyh1LHQpLG89KHI9XCJmdW5jdGlvblwiPT10eXBlb2YgaSk/bnVsbDppJiZpLl9fa3x8dC5fX2ssZT1bXSxmPVtdLHEodCx1PSghciYmaXx8dCkuX19rPWsoUyxudWxsLFt1XSksb3x8ZCxkLHQubmFtZXNwYWNlVVJJLCFyJiZpP1tpXTpvP251bGw6dC5maXJzdENoaWxkP24uY2FsbCh0LmNoaWxkTm9kZXMpOm51bGwsZSwhciYmaT9pOm8/by5fX2U6dC5maXJzdENoaWxkLHIsZiksRChlLHUsZil9ZnVuY3Rpb24gVShuLGwpe1IobixsLFUpfWZ1bmN0aW9uIFcobCx1LHQpe3ZhciBpLHIsbyxlLGY9bSh7fSxsLnByb3BzKTtmb3IobyBpbiBsLnR5cGUmJmwudHlwZS5kZWZhdWx0UHJvcHMmJihlPWwudHlwZS5kZWZhdWx0UHJvcHMpLHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZltvXT12b2lkIDA9PT11W29dJiZudWxsIT1lP2Vbb106dVtvXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoZi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/bi5jYWxsKGFyZ3VtZW50cywyKTp0KSx4KGwudHlwZSxmLGl8fGwua2V5LHJ8fGwucmVmLG51bGwpfWZ1bmN0aW9uIFgobil7ZnVuY3Rpb24gbChuKXt2YXIgdSx0O3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KHU9bmV3IFNldCwodD17fSlbbC5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3U9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5wcm9wcy52YWx1ZSE9bi52YWx1ZSYmdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uX19lPSEwLEEobil9KX0sdGhpcy5zdWI9ZnVuY3Rpb24obil7dS5hZGQobik7dmFyIGw9bi5jb21wb25lbnRXaWxsVW5tb3VudDtuLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dSYmdS5kZWxldGUobiksbCYmbC5jYWxsKG4pfX0pLG4uY2hpbGRyZW59cmV0dXJuIGwuX19jPVwiX19jQ1wiK3krKyxsLl9fPW4sbC5Qcm92aWRlcj1sLl9fbD0obC5Db25zdW1lcj1mdW5jdGlvbihuLGwpe3JldHVybiBuLmNoaWxkcmVuKGwpfSkuY29udGV4dFR5cGU9bCxsfW49dy5zbGljZSxsPXtfX2U6ZnVuY3Rpb24obixsLHUsdCl7Zm9yKHZhciBpLHIsbztsPWwuX187KWlmKChpPWwuX19jKSYmIWkuX18pdHJ5e2lmKChyPWkuY29uc3RydWN0b3IpJiZudWxsIT1yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciYmKGkuc2V0U3RhdGUoci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IobikpLG89aS5fX2QpLG51bGwhPWkuY29tcG9uZW50RGlkQ2F0Y2gmJihpLmNvbXBvbmVudERpZENhdGNoKG4sdHx8e30pLG89aS5fX2QpLG8pcmV0dXJuIGkuX19FPWl9Y2F0Y2gobCl7bj1sfXRocm93IG59fSx1PTAsdD1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbCE9biYmdm9pZCAwPT09bi5jb25zdHJ1Y3Rvcn0sQy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24obixsKXt2YXIgdTt1PW51bGwhPXRoaXMuX19zJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1tKHt9LHRoaXMuc3RhdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPW4obSh7fSx1KSx0aGlzLnByb3BzKSksbiYmbSh1LG4pLG51bGwhPW4mJnRoaXMuX192JiYobCYmdGhpcy5fc2IucHVzaChsKSxBKHRoaXMpKX0sQy5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxuJiZ0aGlzLl9faC5wdXNoKG4pLEEodGhpcykpfSxDLnByb3RvdHlwZS5yZW5kZXI9UyxpPVtdLG89XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsZT1mdW5jdGlvbihuLGwpe3JldHVybiBuLl9fdi5fX2ItbC5fX3YuX19ifSxILl9fcj0wLGY9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxjPVwiX19kXCIrZixzPVwiX19hXCIrZixhPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLGg9MCxwPVYoITEpLHY9VighMCkseT0wO2V4cG9ydHtDIGFzIENvbXBvbmVudCxTIGFzIEZyYWdtZW50LFcgYXMgY2xvbmVFbGVtZW50LFggYXMgY3JlYXRlQ29udGV4dCxrIGFzIGNyZWF0ZUVsZW1lbnQsTSBhcyBjcmVhdGVSZWYsayBhcyBoLFUgYXMgaHlkcmF0ZSx0IGFzIGlzVmFsaWRFbGVtZW50LGwgYXMgb3B0aW9ucyxSIGFzIHJlbmRlcixGIGFzIHRvQ2hpbGRBcnJheX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cInByZWFjdFwiO3ZhciB0LHIsdSxpLG89MCxmPVtdLGM9bixlPWMuX19iLGE9Yy5fX3Isdj1jLmRpZmZlZCxsPWMuX19jLG09Yy51bm1vdW50LHM9Yy5fXztmdW5jdGlvbiBwKG4sdCl7Yy5fX2gmJmMuX19oKHIsbixvfHx0KSxvPTA7dmFyIHU9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIG4+PXUuX18ubGVuZ3RoJiZ1Ll9fLnB1c2goe30pLHUuX19bbl19ZnVuY3Rpb24gZChuKXtyZXR1cm4gbz0xLGgoRCxuKX1mdW5jdGlvbiBoKG4sdSxpKXt2YXIgbz1wKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6RCh2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIuX19mKSl7dmFyIGY9ZnVuY3Rpb24obix0LHIpe2lmKCFvLl9fYy5fX0gpcmV0dXJuITA7dmFyIHU9by5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5fX2N9KTtpZih1LmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiFuLl9fTn0pKXJldHVybiFjfHxjLmNhbGwodGhpcyxuLHQscik7dmFyIGk9by5fX2MucHJvcHMhPT1uO3JldHVybiB1LnNvbWUoZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSxjJiZjLmNhbGwodGhpcyxuLHQscil8fGl9O3IuX19mPSEwO3ZhciBjPXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlLGU9ci5jb21wb25lbnRXaWxsVXBkYXRlO3IuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihuLHQscil7aWYodGhpcy5fX2Upe3ZhciB1PWM7Yz12b2lkIDAsZihuLHQsciksYz11fWUmJmUuY2FsbCh0aGlzLG4sdCxyKX0sci5zaG91bGRDb21wb25lbnRVcGRhdGU9Zn1yZXR1cm4gby5fX058fG8uX199ZnVuY3Rpb24geShuLHUpe3ZhciBpPXAodCsrLDMpOyFjLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLnU9dSxyLl9fSC5fX2gucHVzaChpKSl9ZnVuY3Rpb24gXyhuLHUpe3ZhciBpPXAodCsrLDQpOyFjLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLnU9dSxyLl9faC5wdXNoKGkpKX1mdW5jdGlvbiBBKG4pe3JldHVybiBvPTUsVChmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om59fSxbXSl9ZnVuY3Rpb24gRihuLHQscil7bz02LF8oZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgcj1uKHQoKSk7cmV0dXJuIGZ1bmN0aW9uKCl7bihudWxsKSxyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZyKCl9fWlmKG4pcmV0dXJuIG4uY3VycmVudD10KCksZnVuY3Rpb24oKXtyZXR1cm4gbi5jdXJyZW50PW51bGx9fSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIFQobixyKXt2YXIgdT1wKHQrKyw3KTtyZXR1cm4gQyh1Ll9fSCxyKSYmKHUuX189bigpLHUuX19IPXIsdS5fX2g9biksdS5fX31mdW5jdGlvbiBxKG4sdCl7cmV0dXJuIG89OCxUKGZ1bmN0aW9uKCl7cmV0dXJuIG59LHQpfWZ1bmN0aW9uIHgobil7dmFyIHU9ci5jb250ZXh0W24uX19jXSxpPXAodCsrLDkpO3JldHVybiBpLmM9bix1PyhudWxsPT1pLl9fJiYoaS5fXz0hMCx1LnN1YihyKSksdS5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiBQKG4sdCl7Yy51c2VEZWJ1Z1ZhbHVlJiZjLnVzZURlYnVnVmFsdWUodD90KG4pOm4pfWZ1bmN0aW9uIGIobil7dmFyIHU9cCh0KyssMTApLGk9ZCgpO3JldHVybiB1Ll9fPW4sci5jb21wb25lbnREaWRDYXRjaHx8KHIuY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24obix0KXt1Ll9fJiZ1Ll9fKG4sdCksaVsxXShuKX0pLFtpWzBdLGZ1bmN0aW9uKCl7aVsxXSh2b2lkIDApfV19ZnVuY3Rpb24gZygpe3ZhciBuPXAodCsrLDExKTtpZighbi5fXyl7Zm9yKHZhciB1PXIuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187dmFyIGk9dS5fX218fCh1Ll9fbT1bMCwwXSk7bi5fXz1cIlBcIitpWzBdK1wiLVwiK2lbMV0rK31yZXR1cm4gbi5fX31mdW5jdGlvbiBqKCl7Zm9yKHZhciBuO249Zi5zaGlmdCgpOyl7dmFyIHQ9bi5fX0g7aWYobi5fX1AmJnQpdHJ5e3QuX19oLnNvbWUoeiksdC5fX2guc29tZShCKSx0Ll9faD1bXX1jYXRjaChyKXt0Ll9faD1bXSxjLl9fZShyLG4uX192KX19fWMuX19iPWZ1bmN0aW9uKG4pe3I9bnVsbCxlJiZlKG4pfSxjLl9fPWZ1bmN0aW9uKG4sdCl7biYmdC5fX2smJnQuX19rLl9fbSYmKG4uX19tPXQuX19rLl9fbSkscyYmcyhuLHQpfSxjLl9fcj1mdW5jdGlvbihuKXthJiZhKG4pLHQ9MDt2YXIgaT0ocj1uLl9fYykuX19IO2kmJih1PT09cj8oaS5fX2g9W10sci5fX2g9W10saS5fXy5zb21lKGZ1bmN0aW9uKG4pe24uX19OJiYobi5fXz1uLl9fTiksbi51PW4uX19OPXZvaWQgMH0pKTooaS5fX2guc29tZSh6KSxpLl9faC5zb21lKEIpLGkuX19oPVtdLHQ9MCkpLHU9cn0sYy5kaWZmZWQ9ZnVuY3Rpb24obil7diYmdihuKTt2YXIgdD1uLl9fYzt0JiZ0Ll9fSCYmKHQuX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKHQpJiZpPT09Yy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fHcpKGopKSx0Ll9fSC5fXy5zb21lKGZ1bmN0aW9uKG4pe24udSYmKG4uX19IPW4udSksbi51PXZvaWQgMH0pKSx1PXI9bnVsbH0sYy5fX2M9ZnVuY3Rpb24obix0KXt0LnNvbWUoZnVuY3Rpb24obil7dHJ5e24uX19oLnNvbWUoeiksbi5fX2g9bi5fX2guZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFuLl9ffHxCKG4pfSl9Y2F0Y2gocil7dC5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pfSksdD1bXSxjLl9fZShyLG4uX192KX19KSxsJiZsKG4sdCl9LGMudW5tb3VudD1mdW5jdGlvbihuKXttJiZtKG4pO3ZhciB0LHI9bi5fX2M7ciYmci5fX0gmJihyLl9fSC5fXy5zb21lKGZ1bmN0aW9uKG4pe3RyeXt6KG4pfWNhdGNoKG4pe3Q9bn19KSxyLl9fSD12b2lkIDAsdCYmYy5fX2UodCxyLl9fdikpfTt2YXIgaz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gdyhuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGsmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobil9LHU9c2V0VGltZW91dChyLDM1KTtrJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIHoobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gQihuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24gQyhuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBEKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e3EgYXMgdXNlQ2FsbGJhY2sseCBhcyB1c2VDb250ZXh0LFAgYXMgdXNlRGVidWdWYWx1ZSx5IGFzIHVzZUVmZmVjdCxiIGFzIHVzZUVycm9yQm91bmRhcnksZyBhcyB1c2VJZCxGIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUsXyBhcyB1c2VMYXlvdXRFZmZlY3QsVCBhcyB1c2VNZW1vLGggYXMgdXNlUmVkdWNlcixBIGFzIHVzZVJlZixkIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAidmFyIGk9U3ltYm9sLmZvcihcInByZWFjdC1zaWduYWxzXCIpO2Z1bmN0aW9uIHQoKXtpZighKHM+MSkpe3ZhciBpLHQ9ITE7IWZ1bmN0aW9uKCl7dmFyIGk9YztjPXZvaWQgMDt3aGlsZSh2b2lkIDAhPT1pKXtpZihpLlMudj09PWkudilpLlMuaT1pLmk7aT1pLm99fSgpO3doaWxlKHZvaWQgMCE9PWgpe3ZhciBuPWg7aD12b2lkIDA7disrO3doaWxlKHZvaWQgMCE9PW4pe3ZhciByPW4udTtuLnU9dm9pZCAwO24uZiY9LTM7aWYoISg4Jm4uZikmJncobikpdHJ5e24uYygpfWNhdGNoKG4pe2lmKCF0KXtpPW47dD0hMH19bj1yfX12PTA7cy0tO2lmKHQpdGhyb3cgaX1lbHNlIHMtLX1mdW5jdGlvbiBuKGkpe2lmKHM+MClyZXR1cm4gaSgpO2U9Kyt1O3MrKzt0cnl7cmV0dXJuIGkoKX1maW5hbGx5e3QoKX19dmFyIHI9dm9pZCAwO2Z1bmN0aW9uIG8oaSl7dmFyIHQ9cjtyPXZvaWQgMDt0cnl7cmV0dXJuIGkoKX1maW5hbGx5e3I9dH19dmFyIGYsaD12b2lkIDAscz0wLHY9MCx1PTAsZT0wLGM9dm9pZCAwLGQ9MDtmdW5jdGlvbiBhKGkpe2lmKHZvaWQgMCE9PXIpe3ZhciB0PWkubjtpZih2b2lkIDA9PT10fHx0LnQhPT1yKXt0PXtpOjAsUzppLHA6ci5zLG46dm9pZCAwLHQ6cixlOnZvaWQgMCx4OnZvaWQgMCxyOnR9O2lmKHZvaWQgMCE9PXIucylyLnMubj10O3Iucz10O2kubj10O2lmKDMyJnIuZilpLlModCk7cmV0dXJuIHR9ZWxzZSBpZigtMT09PXQuaSl7dC5pPTA7aWYodm9pZCAwIT09dC5uKXt0Lm4ucD10LnA7aWYodm9pZCAwIT09dC5wKXQucC5uPXQubjt0LnA9ci5zO3Qubj12b2lkIDA7ci5zLm49dDtyLnM9dH1yZXR1cm4gdH19fWZ1bmN0aW9uIGwoaSx0KXt0aGlzLnY9aTt0aGlzLmk9MDt0aGlzLm49dm9pZCAwO3RoaXMudD12b2lkIDA7dGhpcy5sPTA7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1sLnByb3RvdHlwZS5icmFuZD1pO2wucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXt2YXIgdD10aGlzLG49dGhpcy50O2lmKG4hPT1pJiZ2b2lkIDA9PT1pLmUpe2kueD1uO3RoaXMudD1pO2lmKHZvaWQgMCE9PW4pbi5lPWk7ZWxzZSBvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5XKXx8aS5jYWxsKHQpfSl9fTtsLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy50KXt2YXIgbj1pLmUscj1pLng7aWYodm9pZCAwIT09bil7bi54PXI7aS5lPXZvaWQgMH1pZih2b2lkIDAhPT1yKXtyLmU9bjtpLng9dm9pZCAwfWlmKGk9PT10aGlzLnQpe3RoaXMudD1yO2lmKHZvaWQgMD09PXIpbyhmdW5jdGlvbigpe3ZhciBpO251bGw9PShpPXQuWil8fGkuY2FsbCh0KX0pfX19O2wucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihpKXt2YXIgdD10aGlzO3JldHVybiBqKGZ1bmN0aW9uKCl7dmFyIG49dC52YWx1ZSxvPXI7cj12b2lkIDA7dHJ5e2kobil9ZmluYWxseXtyPW99fSx7bmFtZTpcInN1YlwifSl9O2wucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07bC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZStcIlwifTtsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07bC5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gaS52YWx1ZX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgaT1hKHRoaXMpO2lmKHZvaWQgMCE9PWkpaS5pPXRoaXMuaTtyZXR1cm4gdGhpcy52fSxzZXQ6ZnVuY3Rpb24oaSl7aWYoaSE9PXRoaXMudil7aWYodj4xMDApdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7IWZ1bmN0aW9uKGkpe2lmKDAhPT1zJiYwPT09dilpZihpLmwhPT1lKXtpLmw9ZTtjPXtTOmksdjppLnYsaTppLmksbzpjfX19KHRoaXMpO3RoaXMudj1pO3RoaXMuaSsrO2QrKztzKys7dHJ5e2Zvcih2YXIgbj10aGlzLnQ7dm9pZCAwIT09bjtuPW4ueCluLnQuTigpfWZpbmFsbHl7dCgpfX19fSk7ZnVuY3Rpb24geShpLHQpe3JldHVybiBuZXcgbChpLHQpfWZ1bmN0aW9uIHcoaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKWlmKHQuUy5pIT09dC5pfHwhdC5TLmgoKXx8dC5TLmkhPT10LmkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gXyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4pe3ZhciBuPXQuUy5uO2lmKHZvaWQgMCE9PW4pdC5yPW47dC5TLm49dDt0Lmk9LTE7aWYodm9pZCAwPT09dC5uKXtpLnM9dDticmVha319fWZ1bmN0aW9uIGIoaSl7dmFyIHQ9aS5zLG49dm9pZCAwO3doaWxlKHZvaWQgMCE9PXQpe3ZhciByPXQucDtpZigtMT09PXQuaSl7dC5TLlUodCk7aWYodm9pZCAwIT09cilyLm49dC5uO2lmKHZvaWQgMCE9PXQubil0Lm4ucD1yfWVsc2Ugbj10O3QuUy5uPXQucjtpZih2b2lkIDAhPT10LnIpdC5yPXZvaWQgMDt0PXJ9aS5zPW59ZnVuY3Rpb24gcChpLHQpe2wuY2FsbCh0aGlzLHZvaWQgMCk7dGhpcy54PWk7dGhpcy5zPXZvaWQgMDt0aGlzLmc9ZC0xO3RoaXMuZj00O3RoaXMuVz1udWxsPT10P3ZvaWQgMDp0LndhdGNoZWQ7dGhpcy5aPW51bGw9PXQ/dm9pZCAwOnQudW53YXRjaGVkO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWV9cC5wcm90b3R5cGU9bmV3IGw7cC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3RoaXMuZiY9LTM7aWYoMSZ0aGlzLmYpcmV0dXJuITE7aWYoMzI9PSgzNiZ0aGlzLmYpKXJldHVybiEwO3RoaXMuZiY9LTU7aWYodGhpcy5nPT09ZClyZXR1cm4hMDt0aGlzLmc9ZDt0aGlzLmZ8PTE7aWYodGhpcy5pPjAmJiF3KHRoaXMpKXt0aGlzLmYmPS0yO3JldHVybiEwfXZhciBpPXI7dHJ5e18odGhpcyk7cj10aGlzO3ZhciB0PXRoaXMueCgpO2lmKDE2JnRoaXMuZnx8dGhpcy52IT09dHx8MD09PXRoaXMuaSl7dGhpcy52PXQ7dGhpcy5mJj0tMTc7dGhpcy5pKyt9fWNhdGNoKGkpe3RoaXMudj1pO3RoaXMuZnw9MTY7dGhpcy5pKyt9cj1pO2IodGhpcyk7dGhpcy5mJj0tMjtyZXR1cm4hMH07cC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZnw9MzY7Zm9yKHZhciB0PXRoaXMuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5TKHQpfWwucHJvdG90eXBlLlMuY2FsbCh0aGlzLGkpfTtwLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMCE9PXRoaXMudCl7bC5wcm90b3R5cGUuVS5jYWxsKHRoaXMsaSk7aWYodm9pZCAwPT09dGhpcy50KXt0aGlzLmYmPS0zMztmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlUodCl9fX07cC5wcm90b3R5cGUuTj1mdW5jdGlvbigpe2lmKCEoMiZ0aGlzLmYpKXt0aGlzLmZ8PTY7Zm9yKHZhciBpPXRoaXMudDt2b2lkIDAhPT1pO2k9aS54KWkudC5OKCl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsXCJ2YWx1ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtpZigxJnRoaXMuZil0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTt2YXIgaT1hKHRoaXMpO3RoaXMuaCgpO2lmKHZvaWQgMCE9PWkpaS5pPXRoaXMuaTtpZigxNiZ0aGlzLmYpdGhyb3cgdGhpcy52O3JldHVybiB0aGlzLnZ9fSk7ZnVuY3Rpb24gZyhpLHQpe3JldHVybiBuZXcgcChpLHQpfWZ1bmN0aW9uIFMoaSl7dmFyIG49aS5tO2kubT12b2lkIDA7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7cysrO3ZhciBvPXI7cj12b2lkIDA7dHJ5e24oKX1jYXRjaCh0KXtpLmYmPS0yO2kuZnw9ODttKGkpO3Rocm93IHR9ZmluYWxseXtyPW87dCgpfX19ZnVuY3Rpb24gbShpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlUodCk7aS54PXZvaWQgMDtpLnM9dm9pZCAwO1MoaSl9ZnVuY3Rpb24geChpKXtpZihyIT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoXCJPdXQtb2Ytb3JkZXIgZWZmZWN0XCIpO2IodGhpcyk7cj1pO3RoaXMuZiY9LTI7aWYoOCZ0aGlzLmYpbSh0aGlzKTt0KCl9ZnVuY3Rpb24gRShpLHQpe3RoaXMueD1pO3RoaXMubT12b2lkIDA7dGhpcy5zPXZvaWQgMDt0aGlzLnU9dm9pZCAwO3RoaXMuZj0zMjt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lO2lmKGYpZi5wdXNoKHRoaXMpfUUucHJvdG90eXBlLmM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLlMoKTt0cnl7aWYoOCZ0aGlzLmYpcmV0dXJuO2lmKHZvaWQgMD09PXRoaXMueClyZXR1cm47dmFyIHQ9dGhpcy54KCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl0aGlzLm09dH1maW5hbGx5e2koKX19O0UucHJvdG90eXBlLlM9ZnVuY3Rpb24oKXtpZigxJnRoaXMuZil0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTt0aGlzLmZ8PTE7dGhpcy5mJj0tOTtTKHRoaXMpO18odGhpcyk7cysrO3ZhciBpPXI7cj10aGlzO3JldHVybiB4LmJpbmQodGhpcyxpKX07RS5wcm90b3R5cGUuTj1mdW5jdGlvbigpe2lmKCEoMiZ0aGlzLmYpKXt0aGlzLmZ8PTI7dGhpcy51PWg7aD10aGlzfX07RS5wcm90b3R5cGUuZD1mdW5jdGlvbigpe3RoaXMuZnw9ODtpZighKDEmdGhpcy5mKSltKHRoaXMpfTtFLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5kKCl9O2Z1bmN0aW9uIGooaSx0KXt2YXIgbj1uZXcgRShpLHQpO3RyeXtuLmMoKX1jYXRjaChpKXtuLmQoKTt0aHJvdyBpfXZhciByPW4uZC5iaW5kKG4pO3JbU3ltYm9sLmRpc3Bvc2VdPXI7cmV0dXJuIHJ9ZnVuY3Rpb24gQyhpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj10aGlzO3JldHVybiBuKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseShyLFtdLnNsaWNlLmNhbGwodCkpfSl9KX19ZnVuY3Rpb24gTygpe3ZhciBpPWY7Zj1bXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1mO2lmKGYmJmkpaT1pLmNvbmNhdChmKTtmPWk7cmV0dXJuIHR9fXZhciBrPWZ1bmN0aW9uKGkpe2Zvcih2YXIgdCBpbiBpKXt2YXIgbj1pW3RdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4paVt0XT1DKG4pO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uJiYhKFwiYnJhbmRcImluIG4pKWsobil9fTtmdW5jdGlvbiBUKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0LG4scj1PKCk7dHJ5e249aS5hcHBseSh2b2lkIDAsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1jYXRjaChpKXtmPXZvaWQgMDt0aHJvdyBpfWZpbmFsbHl7dD1yKCl9ayhuKTtuW1N5bWJvbC5kaXNwb3NlXT1DKGZ1bmN0aW9uKCl7aWYodClmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldLmRpc3Bvc2UoKTt0PXZvaWQgMH0pO3JldHVybiBufX1leHBvcnR7cCBhcyBDb21wdXRlZCxFIGFzIEVmZmVjdCxsIGFzIFNpZ25hbCxDIGFzIGFjdGlvbixuIGFzIGJhdGNoLGcgYXMgY29tcHV0ZWQsVCBhcyBjcmVhdGVNb2RlbCxqIGFzIGVmZmVjdCx5IGFzIHNpZ25hbCxvIGFzIHVudHJhY2tlZH07Ly8jIHNvdXJjZU1hcHBpbmdVUkw9c2lnbmFscy1jb3JlLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBpLG9wdGlvbnMgYXMgbixpc1ZhbGlkRWxlbWVudCBhcyByLEZyYWdtZW50IGFzIHR9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZU1lbW8gYXMgbyx1c2VSZWYgYXMgZSx1c2VFZmZlY3QgYXMgZn1mcm9tXCJwcmVhY3QvaG9va3NcIjtpbXBvcnR7ZWZmZWN0IGFzIHUsU2lnbmFsIGFzIGEsY29tcHV0ZWQgYXMgYyxzaWduYWwgYXMgdixiYXRjaCBhcyBzfWZyb21cIkBwcmVhY3Qvc2lnbmFscy1jb3JlXCI7ZXhwb3J0e1NpZ25hbCxhY3Rpb24sYmF0Y2gsY29tcHV0ZWQsY3JlYXRlTW9kZWwsZWZmZWN0LHNpZ25hbCx1bnRyYWNrZWR9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjt2YXIgbCxkLGgscD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYhIXdpbmRvdy5fX1BSRUFDVF9TSUdOQUxTX0RFVlRPT0xTX18sbT1bXSxfPVtdO3UoZnVuY3Rpb24oKXtsPXRoaXMuTn0pKCk7ZnVuY3Rpb24gZyhpLHIpe25baV09ci5iaW5kKG51bGwsbltpXXx8ZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBiKGkpe2lmKGgpe3ZhciBuPWg7aD12b2lkIDA7bigpfWg9aSYmaS5TKCl9ZnVuY3Rpb24geShpKXt2YXIgbj10aGlzLHQ9aS5kYXRhLGU9dXNlU2lnbmFsKHQpO2UudmFsdWU9dDt2YXIgZj1vKGZ1bmN0aW9uKCl7dmFyIGk9bix0PW4uX192O3doaWxlKHQ9dC5fXylpZih0Ll9fYyl7dC5fX2MuX18kZnw9NDticmVha312YXIgbz1jKGZ1bmN0aW9uKCl7dmFyIGk9ZS52YWx1ZS52YWx1ZTtyZXR1cm4gMD09PWk/MDohMD09PWk/XCJcIjppfHxcIlwifSksZj1jKGZ1bmN0aW9uKCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoby52YWx1ZSkmJiFyKG8udmFsdWUpfSksYT11KGZ1bmN0aW9uKCl7dGhpcy5OPUY7aWYoZi52YWx1ZSl7dmFyIG49by52YWx1ZTtpZihpLl9fdiYmaS5fX3YuX19lJiYzPT09aS5fX3YuX19lLm5vZGVUeXBlKWkuX192Ll9fZS5kYXRhPW59fSksdj1uLl9fJHUuZDtuLl9fJHUuZD1mdW5jdGlvbigpe2EoKTt2LmNhbGwodGhpcyl9O3JldHVybltmLG9dfSxbXSksYT1mWzBdLHY9ZlsxXTtyZXR1cm4gYS52YWx1ZT92LnBlZWsoKTp2LnZhbHVlfXkuZGlzcGxheU5hbWU9XCJSZWFjdGl2ZVRleHROb2RlXCI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25maWd1cmFibGU6ITAsdmFsdWU6dm9pZCAwfSx0eXBlOntjb25maWd1cmFibGU6ITAsdmFsdWU6eX0scHJvcHM6e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybntkYXRhOntnZXQgdmFsdWUoKXtyZXR1cm4gaS52YWx1ZX19fX19LF9fYjp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjF9fSk7ZyhcIl9fYlwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHIsdD1uLnByb3BzO2Zvcih2YXIgbyBpbiB0KWlmKFwiY2hpbGRyZW5cIiE9PW8pe3ZhciBlPXRbb107aWYoZSBpbnN0YW5jZW9mIGEpe2lmKCFyKW4uX19ucD1yPXt9O3Jbb109ZTt0W29dPWUucGVlaygpfX19aShuKX0pO2coXCJfX3JcIixmdW5jdGlvbihpLG4pe2kobik7aWYobi50eXBlIT09dCl7YigpO3ZhciByLG89bi5fX2M7aWYobyl7by5fXyRmJj0tMjtpZih2b2lkIDA9PT0ocj1vLl9fJHUpKW8uX18kdT1yPWZ1bmN0aW9uKGksbil7dmFyIHI7dShmdW5jdGlvbigpe3I9dGhpc30se25hbWU6bn0pO3IuYz1pO3JldHVybiByfShmdW5jdGlvbigpe3ZhciBpO2lmKHApbnVsbD09KGk9ci55KXx8aS5jYWxsKHIpO28uX18kZnw9MTtvLnNldFN0YXRlKHt9KX0sXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlP24udHlwZS5kaXNwbGF5TmFtZXx8bi50eXBlLm5hbWU6XCJcIil9ZD1vO2Iocil9fSk7ZyhcIl9fZVwiLGZ1bmN0aW9uKGksbixyLHQpe2IoKTtkPXZvaWQgMDtpKG4scix0KX0pO2coXCJkaWZmZWRcIixmdW5jdGlvbihpLG4pe2IoKTtkPXZvaWQgMDt2YXIgcjtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiYocj1uLl9fZSkpe3ZhciB0PW4uX19ucCxvPW4ucHJvcHM7aWYodCl7dmFyIGU9ci5VO2lmKGUpZm9yKHZhciBmIGluIGUpe3ZhciB1PWVbZl07aWYodm9pZCAwIT09dSYmIShmIGluIHQpKXt1LmQoKTtlW2ZdPXZvaWQgMH19ZWxzZXtlPXt9O3IuVT1lfWZvcih2YXIgYSBpbiB0KXt2YXIgYz1lW2FdLHY9dFthXTtpZih2b2lkIDA9PT1jKXtjPXcocixhLHYpO2VbYV09Y31lbHNlIGMubyh2LG8pfWZvcih2YXIgcyBpbiB0KW9bc109dFtzXX19aShuKX0pO2Z1bmN0aW9uIHcoaSxuLHIsdCl7dmFyIG89biBpbiBpJiZ2b2lkIDA9PT1pLm93bmVyU1ZHRWxlbWVudCxlPXYociksZj1yLnBlZWsoKTtyZXR1cm57bzpmdW5jdGlvbihpLG4pe2UudmFsdWU9aTtmPWkucGVlaygpfSxkOnUoZnVuY3Rpb24oKXt0aGlzLk49Rjt2YXIgcj1lLnZhbHVlLnZhbHVlO2lmKGYhPT1yKXtmPXZvaWQgMDtpZihvKWlbbl09cjtlbHNlIGlmKG51bGwhPXImJighMSE9PXJ8fFwiLVwiPT09bls0XSkpaS5zZXRBdHRyaWJ1dGUobixyKTtlbHNlIGkucmVtb3ZlQXR0cmlidXRlKG4pfWVsc2UgZj12b2lkIDB9KX19ZyhcInVubW91bnRcIixmdW5jdGlvbihpLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByPW4uX19lO2lmKHIpe3ZhciB0PXIuVTtpZih0KXtyLlU9dm9pZCAwO2Zvcih2YXIgbyBpbiB0KXt2YXIgZT10W29dO2lmKGUpZS5kKCl9fX1uLl9fbnA9dm9pZCAwfWVsc2V7dmFyIGY9bi5fX2M7aWYoZil7dmFyIHU9Zi5fXyR1O2lmKHUpe2YuX18kdT12b2lkIDA7dS5kKCl9fX1pKG4pfSk7ZyhcIl9faFwiLGZ1bmN0aW9uKGksbixyLHQpe2lmKHQ8M3x8OT09PXQpbi5fXyRmfD0yO2kobixyLHQpfSk7aS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKGksbil7aWYodGhpcy5fX1IpcmV0dXJuITA7dmFyIHI9dGhpcy5fXyR1LHQ9ciYmdm9pZCAwIT09ci5zO2Zvcih2YXIgbyBpbiBuKXJldHVybiEwO2lmKHRoaXMuX19mfHxcImJvb2xlYW5cIj09dHlwZW9mIHRoaXMudSYmITA9PT10aGlzLnUpe3ZhciBlPTImdGhpcy5fXyRmO2lmKCEodHx8ZXx8NCZ0aGlzLl9fJGYpKXJldHVybiEwO2lmKDEmdGhpcy5fXyRmKXJldHVybiEwfWVsc2V7aWYoISh0fHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMyZ0aGlzLl9fJGYpcmV0dXJuITB9Zm9yKHZhciBmIGluIGkpaWYoXCJfX3NvdXJjZVwiIT09ZiYmaVtmXSE9PXRoaXMucHJvcHNbZl0pcmV0dXJuITA7Zm9yKHZhciB1IGluIHRoaXMucHJvcHMpaWYoISh1IGluIGkpKXJldHVybiEwO3JldHVybiExfTtmdW5jdGlvbiB1c2VTaWduYWwoaSxuKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB2KGksbil9LFtdKX1mdW5jdGlvbiB1c2VDb21wdXRlZChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZC5fXyRmfD00O3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIGMoZnVuY3Rpb24oKXtyZXR1cm4gci5jdXJyZW50KCl9LG4pfSxbXSl9dmFyIGs9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9zZXRUaW1lb3V0OmZ1bmN0aW9uKGkpe3ZhciBuPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpO2NhbmNlbEFuaW1hdGlvbkZyYW1lKHQpO2koKX0scj1zZXRUaW1lb3V0KG4sMzUpLHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxxPWZ1bmN0aW9uKGkpe3F1ZXVlTWljcm90YXNrKGZ1bmN0aW9uKCl7cXVldWVNaWNyb3Rhc2soaSl9KX07ZnVuY3Rpb24gQSgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPW0uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBUKCl7aWYoMT09PW0ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGspKEEpfWZ1bmN0aW9uIHgoKXtzKGZ1bmN0aW9uKCl7dmFyIGk7d2hpbGUoaT1fLnNoaWZ0KCkpbC5jYWxsKGkpfSl9ZnVuY3Rpb24gRigpe2lmKDE9PT1fLnB1c2godGhpcykpKG4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxxKSh4KX1mdW5jdGlvbiB1c2VTaWduYWxFZmZlY3QoaSxuKXt2YXIgcj1lKGkpO3IuY3VycmVudD1pO2YoZnVuY3Rpb24oKXtyZXR1cm4gdShmdW5jdGlvbigpe3RoaXMuTj1UO3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX1mdW5jdGlvbiBNKGkpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSxbXSk7ZihmdW5jdGlvbigpe3JldHVybiBuW1N5bWJvbC5kaXNwb3NlXX0sW25dKTtyZXR1cm4gbn1leHBvcnR7dXNlQ29tcHV0ZWQsTSBhcyB1c2VNb2RlbCx1c2VTaWduYWwsdXNlU2lnbmFsRWZmZWN0fTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBHbG9iYWwgZXJyb3Igc3VyZmFjZSBmb3IgYWN0aW9uIGhhbmRsZXJzLlxuICpcbiAqIEFjdGlvbnMgdGhhdCBmYWlsIHNldCB0aGUgZXJyb3JTdGF0ZSBzaWduYWwgdmlhIGBzdWJtaXRFcnJvcmA7IGEgYDxUb2FzdD5gXG4gKiBjb21wb25lbnQgY29uc3VtZXMgdGhhdCBzaWduYWwgYW5kIHJlbmRlcnMgYSBkaXNtaXNzYWJsZSBtZXNzYWdlLiBIYW5kbGVyc1xuICogdGhhdCBjYXRjaCBleHBlY3RlZCBmYWlsdXJlcyAodmFsaWRhdGlvbiwgcXVvdGEpIG1heSBjYWxsIGBzZXRFcnJvcmAgZGlyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvclNldmVyaXR5ID0gXCJlcnJvclwiIHwgXCJ3YXJuaW5nXCIgfCBcImluZm9cIjtcblxuZXhwb3J0IHR5cGUgRXJyb3JFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXZlcml0eTogRXJyb3JTZXZlcml0eTtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclN0YXRlID0gc2lnbmFsPEVycm9yRW50cnlbXT4oW10pO1xuXG5sZXQgbmV4dElkID0gMDtcbmZ1bmN0aW9uIGFsbG9jSWQoKTogc3RyaW5nIHtcbiAgbmV4dElkICs9IDE7XG4gIHJldHVybiBgcG9sbHktZXJyLSR7bmV4dElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBvcHRzOiB7IHNldmVyaXR5PzogRXJyb3JTZXZlcml0eTsgYWN0aW9uPzogc3RyaW5nIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cnk6IEVycm9yRW50cnkgPSB7XG4gICAgaWQ6IGFsbG9jSWQoKSxcbiAgICBtZXNzYWdlLFxuICAgIHNldmVyaXR5OiBvcHRzLnNldmVyaXR5ID8/IFwiZXJyb3JcIixcbiAgICBhY3Rpb246IG9wdHMuYWN0aW9uLFxuICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfTtcbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IFsuLi5lcnJvclN0YXRlLnZhbHVlLCBlbnRyeV07XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvclN0YXRlLnZhbHVlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIGVycm9yU3RhdGUudmFsdWUgPSBlcnJvclN0YXRlLnZhbHVlLmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gaWQpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGFuIGFjdGlvbidzIGNhdGNoIGJsb2NrLlxuICogTG9ncyB0aGUgYWN0aW9uIG5hbWUgKyBlcnJvciBhbmQgc3VyZmFjZXMgYSB1c2VyLXZpc2libGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Ym1pdEVycm9yKGFjdGlvbjogc3RyaW5nLCBlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICByZXR1cm4gc2V0RXJyb3IobWVzc2FnZSwgeyBhY3Rpb24sIHNldmVyaXR5OiBcImVycm9yXCIgfSk7XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheSByZWdpc3RyeS5cbiAqXG4gKiBUcmFja3MgdGhlIHN0YWNrIG9mIG9wZW4gb3ZlcmxheXMgKG1vZGFscywgcG9wb3ZlcnMsIGNvbmZpcm0gZGlhbG9ncykgc29cbiAqIEVzY2FwZSBjYW4gY2xvc2UgdGhlIHRvcG1vc3QgYW5kIGBkYXRhLW92ZXJsYXktaWRgLWJhc2VkIERPTSBzY2FucyBoYXZlXG4gKiBhIG1pcnJvciBpbiBtZW1vcnkuIEVhY2ggZW50cnkgc3RvcmVzIGFuIGlkIHBsdXMgYW4gb3B0aW9uYWwgY2xvc2VcbiAqIGNhbGxiYWNrOyBgY2xvc2VUb3BPdmVybGF5YCBpbnZva2VzIHRoZSBjYWxsYmFjayBhbmQgcG9wcyB0aGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBPdmVybGF5RW50cnkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3Qgc3RhY2sgPSBzaWduYWw8T3ZlcmxheUVudHJ5W10+KFtdKTtcblxuLyoqIEN1cnJlbnQgb3ZlcmxheSBzdGFjayBhcyBhIHJlYWQtb25seSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybGF5U3RhY2soKTogcmVhZG9ubHkgT3ZlcmxheUVudHJ5W10ge1xuICByZXR1cm4gc3RhY2sudmFsdWU7XG59XG5cbi8qKiBJcyBhbnkgb3ZlcmxheSBjdXJyZW50bHkgb3Blbj8gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPcGVuT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YWNrLnZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbi8qKiBUaGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICByZXR1cm4gc1tzLmxlbmd0aCAtIDFdO1xufVxuXG4vKiogUHVzaCBhbiBvdmVybGF5IG9udG8gdGhlIHN0YWNrLiBSZXR1cm5zIHRoZSBwb3BwZWQgZW50cnkgd2hlbiBjbG9zZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaE92ZXJsYXkoZW50cnk6IE92ZXJsYXlFbnRyeSk6IHZvaWQge1xuICBzdGFjay52YWx1ZSA9IFsuLi5zdGFjay52YWx1ZSwgZW50cnldO1xufVxuXG4vKiogUG9wIGEgc3BlY2lmaWMgb3ZlcmxheSBieSBpZCAob3IgdGhlIHRvcCBpZiBubyBpZCBnaXZlbikuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wT3ZlcmxheShpZD86IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzdGFjay52YWx1ZTtcbiAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHRvcCA9IHNbcy5sZW5ndGggLSAxXTtcbiAgICBzdGFjay52YWx1ZSA9IHMuc2xpY2UoMCwgLTEpO1xuICAgIHJldHVybiB0b3A7XG4gIH1cbiAgY29uc3QgaWR4ID0gcy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVudHJ5ID0gc1tpZHhdO1xuICBzdGFjay52YWx1ZSA9IFsuLi5zLnNsaWNlKDAsIGlkeCksIC4uLnMuc2xpY2UoaWR4ICsgMSldO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBDbG9zZSB0aGUgdG9wIG92ZXJsYXkgYnkgY2FsbGluZyBpdHMgb25DbG9zZSBhbmQgcG9wcGluZyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9wID0gdG9wT3ZlcmxheSgpO1xuICBpZiAoIXRvcCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdG9wLm9uQ2xvc2U/LigpO1xuICByZXR1cm4gcG9wT3ZlcmxheSh0b3AuaWQpO1xufVxuXG4vKiogUmVzZXQgdGhlIHN0YWNrLiBJbnRlbmRlZCBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRPdmVybGF5U3RhY2soKTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gW107XG59XG4iLAogICAgIi8qKlxuICogRXZlbnQgZGVsZWdhdGlvbiBjb3JlLlxuICpcbiAqIE9uZSBkb2N1bWVudCBsaXN0ZW5lciBkaXNwYXRjaGVzIGBkYXRhLWFjdGlvbmAgZXZlbnRzIHRvIHR5cGVkIGhhbmRsZXJzLlxuICogV2Fsa3MgdXAgdGhlIERPTSB3aXRoIGBjbG9zZXN0KCdbZGF0YS1hY3Rpb25dJylgLCBwYXJzZXMgYGRhdGEtYWN0aW9uLSpgXG4gKiBhdHRyaWJ1dGVzIGludG8gYSBjYW1lbENhc2Ugb2JqZWN0LCBhbmQgaGFuZHMgdGhlIGRpc3BhdGNoIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogRm9ybXMgYXJlIHNraXBwZWQgb24gY2xpY2sg4oCUIGEgYDxmb3JtIGRhdGEtYWN0aW9uPVwiLi4uXCI+YCByZXNwb25kcyB0b1xuICogc3VibWl0IG9ubHksIHNvIGNsaWNrcyBvbiBmb3JtIGNoaWxkcmVuIGRvbid0IGJ1YmJsZSBpbnRvIGl0cyBhY3Rpb24uXG4gKiBFc2NhcGUgY2xvc2VzIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgY2FsbGluZyB0aGUgb3ZlcmxheSByZWdpc3RyeS5cbiAqIEVudGVyL1NwYWNlIG9uIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyB3aXRoIGBkYXRhLWFjdGlvbmAgZmlyZSB0aGVcbiAqIGFjdGlvbiAoU3BhY2UgaXMgcHJldmVudGVkIHRvIHN0b3AgcGFnZSBzY3JvbGwpLiBDbGljayBvdXRzaWRlIGFueVxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFsc28gcG9wcyB0aGUgdG9wIG92ZXJsYXkuXG4gKi9cblxuaW1wb3J0IHsgY2xvc2VUb3BPdmVybGF5IGFzIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheS50c1wiO1xuXG4vKiogRWxlbWVudHMgdGhhdCBuYXRpdmVseSBmaXJlIGNsaWNrIG9uIEVudGVyL1NwYWNlLiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX1RBR1MgPSBuZXcgU2V0KFtcIkJVVFRPTlwiLCBcIkFcIiwgXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdKTtcblxuLyoqIEV2ZW50IHR5cGVzIHRoYXQgbWF5IHRyaWdnZXIgYSBkYXRhLWFjdGlvbiBkaXNwYXRjaC4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcImNsaWNrXCIsIFwic3VibWl0XCIsIFwiY2hhbmdlXCIsIFwiaW5wdXRcIl0pO1xuXG4vKiogUGFyc2VkIGFjdGlvbiBkaXNwYXRjaCDigJQgd2hhdCB0aGUgcnVudGltZSByZXNvbHZlcyBiZWZvcmUgaW52b2tpbmcgYSBoYW5kbGVyLiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uRGlzcGF0Y2ggPSB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgZXZlbnQ6IEV2ZW50O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQYXJzZSBgZGF0YS1hY3Rpb24tKmAgYXR0cmlidXRlcyBpbnRvIGNhbWVsQ2FzZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogYGRhdGEtYWN0aW9uLXRleHQtc2V0LWlkPVwiNDJcImAgYmVjb21lcyBgeyB0ZXh0U2V0SWQ6IFwiNDJcIiB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWN0aW9uRGF0YShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgYXR0ciBvZiBBcnJheS5mcm9tKGVsZW1lbnQuYXR0cmlidXRlcykpIHtcbiAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0dHIubmFtZVxuICAgICAgICAucmVwbGFjZShcImRhdGEtYWN0aW9uLVwiLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvLShbYS16XSkvZywgKF9tOiBzdHJpbmcsIGxldHRlcjogc3RyaW5nKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICBkYXRhW2tleV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBDbG9zZSB0aGUgdG9wbW9zdCBvdmVybGF5IGJ5IGRpc3BhdGNoaW5nIGBvdmVybGF5OmNsb3NlYCBvbiBpdHMgZWxlbWVudC5cbiAqIE92ZXJsYXlzIG1hcmsgdGhlbXNlbHZlcyB3aXRoIGBkYXRhLW92ZXJsYXktaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VUb3BPdmVybGF5KCk6IHZvaWQge1xuICBjb25zdCBvdmVybGF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgXCJbZGF0YS1vdmVybGF5LWlkXTpwb3BvdmVyLW9wZW4sIGRpYWxvZ1tkYXRhLW92ZXJsYXktaWRdW29wZW5dXCJcbiAgKTtcbiAgaWYgKG92ZXJsYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCB0b3BPdmVybGF5ID0gb3ZlcmxheXNbb3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gIGlmICghdG9wT3ZlcmxheSkgcmV0dXJuO1xuICB0b3BPdmVybGF5LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwib3ZlcmxheTpjbG9zZVwiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7IGlkOiB0b3BPdmVybGF5LmdldEF0dHJpYnV0ZShcImRhdGEtb3ZlcmxheS1pZFwiKSB9LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIERPTSBldmVudCB0byBhbiBBY3Rpb25EaXNwYXRjaCwgb3IgbnVsbCBpZiBubyBkYXRhLWFjdGlvbiBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFjdGlvbihldmVudDogRXZlbnQpOiBBY3Rpb25EaXNwYXRjaCB8IG51bGwge1xuICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtYWN0aW9uXVwiKTtcbiAgaWYgKCEoYWN0aW9uRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG51bGw7XG4gIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgYWN0aW9uRWxlbWVudC50YWdOYW1lID09PSBcIkZPUk1cIikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hY3Rpb25cIik7XG4gIGlmICghYWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBhY3Rpb24sXG4gICAgZWxlbWVudDogYWN0aW9uRWxlbWVudCxcbiAgICBldmVudCxcbiAgICBkYXRhOiBwYXJzZUFjdGlvbkRhdGEoYWN0aW9uRWxlbWVudCksXG4gIH07XG59XG5cbi8qKlxuICogSW5zdGFsbCBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgZm9yIHRoZSBkZWxlZ2F0aW9uIHN5c3RlbS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBldmVyeSBsaXN0ZW5lciBpdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uKFxuICBvbkRpc3BhdGNoOiAoZGlzcGF0Y2g6IEFjdGlvbkRpc3BhdGNoKSA9PiB2b2lkLFxuICBvcHRpb25zOiB7IG9uRXNjYXBlPzogKCkgPT4gdm9pZDsgb25PdXRzaWRlT3ZlcmxheUNsaWNrPzogKCkgPT4gdm9pZCB9ID0ge31cbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBoYW5kbGVBY3Rpb25FdmVudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHJlc29sdmVBY3Rpb24oZXZlbnQpO1xuICAgIGlmIChkaXNwYXRjaCkgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uRXNjYXBlKSB7XG4gICAgICAgIG9wdGlvbnMub25Fc2NhcGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5KCk7XG4gICAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5ID09PSBcIiBcIikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgIGlmIChJTlRFUkFDVElWRV9UQUdTLmhhcyh0YXJnZXQudGFnTmFtZSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgY29uc3QgY2xpY2tlZE92ZXJsYXkgPSBldmVudC50YXJnZXQuY2xvc2VzdChcIltkYXRhLW92ZXJsYXktaWRdXCIpO1xuICAgIGlmIChjbGlja2VkT3ZlcmxheSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdChcImJ1dHRvbltwb3BvdmVydGFyZ2V0XVwiKSkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaykge1xuICAgICAgb3B0aW9ucy5vbk91dHNpZGVPdmVybGF5Q2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlQWN0aW9uRXZlbnQpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGhhbmRsZU1vdXNlRG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gICAgfVxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGb3JtIHByaW1pdGl2ZS5cbiAqXG4gKiBgY3JlYXRlRm9ybWAgcmV0dXJucyBhIHR5cGVkIGZvcm0gc3RvcmU6IHBlci1maWVsZCBzaWduYWxzLCBhbiBhZ2dyZWdhdGVkXG4gKiB2YWx1ZXMgc2lnbmFsLCBvcGVuL2Nsb3NlL3N1Ym1pdCBtZXRob2RzLCBhbmQgdGhyZWUgYXV0by1yZWdpc3RlcmVkIGFjdGlvblxuICogaGFuZGxlcnMgKGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGApIHRoYXQgY2FsbGVycyBzcHJlYWRcbiAqIGludG8gdGhlaXIgZ2xvYmFsIGFjdGlvbiByZWdpc3RyeS5cbiAqXG4gKiBMaWZlY3ljbGU6XG4gKiAgIG9wZW4gIOKGkiByZXNldHMgZmllbGRzIHRvIGluaXRpYWxWYWx1ZXMsIGFwcGxpZXMgb25PcGVuIG92ZXJyaWRlcyxcbiAqICAgICAgICAgICBzZXRzIGlzT3BlbiA9IHRydWUsIHJlY29yZHMgZGF0YS1hY3Rpb24tKiBkYXRhIGluIG9wZW5QYXJhbXNcbiAqICAgdHlwaW5nIOKGkiB1bmNvbnRyb2xsZWQgaW5wdXRzIGtlZXAgdGhlaXIgb3duIHN0YXRlOyBjb250cm9sbGVkIGlucHV0c1xuICogICAgICAgICAgIHdyaXRlIGZpZWxkcy5YLnZhbHVlIGRpcmVjdGx5XG4gKiAgIHN1Ym1pdCDihpIgcmVhZHMgRm9ybURhdGEgZnJvbSB0aGUgZm9ybSBlbGVtZW50LCBtZXJnZXMgaW50byBmaWVsZHMsXG4gKiAgICAgICAgICAgcnVucyBvcHRpb25hbCB2YWxpZGF0ZSwgY2FsbHMgdXNlciBvblN1Ym1pdCB3aXRoIGZpbmFsIHZhbHVlcyxcbiAqICAgICAgICAgICBjbG9zZXMgb24gc3VjY2Vzcywgc2V0cyBlcnJvclN0YXRlIG9uIGZhaWx1cmVcbiAqICAgY2xvc2UgIOKGkiByZXNldHMgYW5kIHNldHMgaXNPcGVuID0gZmFsc2VcbiAqICAgZ3VhcmQgIOKGkiBhdXRvbm9tb3VzIGVmZmVjdDsgaWYgZ3VhcmQoKSByZXR1cm5zIGZhbHNlIHdoaWxlIG9wZW4sIGNsb3NlKClcbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCB0eXBlIFJlYWRvbmx5U2lnbmFsLCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgc3VibWl0RXJyb3IgfSBmcm9tIFwiLi9lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LnRzXCI7XG5cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgSFRNTEZvcm1FbGVtZW50IHtcbiAgaWYgKCF0YXJnZXQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50O1xuICB9XG4gIGNvbnN0IHQgPSB0YXJnZXQgYXMgdW5rbm93biBhcyB7IHRhZ05hbWU/OiB1bmtub3duIH07XG4gIHJldHVybiB0eXBlb2YgdC50YWdOYW1lID09PSBcInN0cmluZ1wiICYmIHQudGFnTmFtZSA9PT0gXCJGT1JNXCI7XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPiA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4gPSB7XG4gIHZhbHVlczogVFZhbHVlcztcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbmZpZzxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIC8qKiBVc2VkIGFzIGFjdGlvbiBuYW1lc3BhY2U6IGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGAuICovXG4gIG5hbWU6IHN0cmluZztcbiAgaW5pdGlhbFZhbHVlczogVFZhbHVlcztcbiAgb25TdWJtaXQ6IChjdHg6IEZvcm1TdWJtaXRDb250ZXh0PFRWYWx1ZXMsIFRTdG9yZXM+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEludm9rZWQgb24gb3BlbjsgcmV0dXJuIHBhcnRpYWwgb3ZlcnJpZGVzIHRvIHByZS1wb3B1bGF0ZSBmaWVsZHMuICovXG4gIG9uT3Blbj86IChjdHg6IEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPikgPT4gUGFydGlhbDxUVmFsdWVzPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiDihpIgZm9ybSBhdXRvLWNsb3NlcyAoZW50aXR5LWRlbGV0aW9uIGd1YXJkKS4gKi9cbiAgZ3VhcmQ/OiAoY3R4OiB7IHN0b3JlczogVFN0b3JlcyB9KSA9PiBib29sZWFuO1xuICAvKiogU3luY2hyb25vdXMgdmFsaWRhdGlvbi4gUmV0dXJuaW5nIGtleXMgYmxvY2tzIHN1Ym1pdC4gKi9cbiAgdmFsaWRhdGU/OiAodmFsdWVzOiBUVmFsdWVzKSA9PiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+PiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3RvcmU8VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+ID0ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzT3BlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZhbHVlczogUmVhZG9ubHlTaWduYWw8VFZhbHVlcz47XG4gIHJlYWRvbmx5IGZpZWxkczogeyBbSyBpbiBrZXlvZiBUVmFsdWVzXTogU2lnbmFsPFRWYWx1ZXNbS10+IH07XG4gIHJlYWRvbmx5IGVycm9yczogUmVhZG9ubHlTaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+O1xuICByZWFkb25seSBpc1N1Ym1pdHRpbmc6IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBvcGVuUGFyYW1zOiBSZWFkb25seVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgb3BlbihvdmVycmlkZT86IFBhcnRpYWw8VFZhbHVlcz4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICBjbG9zZSgpOiB2b2lkO1xuICBzdWJtaXQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBMYXRlLWJpbmRzIHN0b3JlczsgcmVxdWlyZWQgYmVmb3JlIGd1YXJkL29uT3Blbi9vblN1Ym1pdCBjYW4gYWNjZXNzIHN0b3Jlcy4gKi9cbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xuICAvKiogQWN0aW9uIGhhbmRsZXIgZW50cmllcy4gU3ByZWFkIGludG8gdGhlIHVzZXIncyBBY3Rpb25SZWdpc3RyeS4gKi9cbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4oXG4gIGNvbmZpZzogRm9ybUNvbmZpZzxUVmFsdWVzLCBUU3RvcmVzPlxuKTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+IHtcbiAgY29uc3QgZmllbGRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLmluaXRpYWxWYWx1ZXMpIGFzIHVua25vd24gYXMgKGtleW9mIFRWYWx1ZXMpW107XG5cbiAgY29uc3QgZmllbGRzID0ge30gYXMgdW5rbm93biBhcyB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgZmllbGRzW2tleV0gPSBzaWduYWwoY29uZmlnLmluaXRpYWxWYWx1ZXNba2V5XSk7XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlZDxUVmFsdWVzPigoKSA9PiB7XG4gICAgY29uc3QgdiA9IHt9IGFzIHVua25vd24gYXMgVFZhbHVlcztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgIHZba2V5XSA9IGZpZWxkc1trZXldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSk7XG5cbiAgY29uc3QgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+Pih7fSk7XG4gIGNvbnN0IG9wZW5QYXJhbXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGxldCBnZXRTdG9yZXNSZWY6ICgoKSA9PiBUU3RvcmVzKSB8IG51bGwgPSBudWxsO1xuICBsZXQgZGlzcG9zZUd1YXJkRWZmZWN0OiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXNPclRocm93KCk6IFRTdG9yZXMge1xuICAgIGlmICghZ2V0U3RvcmVzUmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGb3JtIFwiJHtjb25maWcubmFtZX1cIiB1c2VkIGJlZm9yZSBiaW5kU3RvcmVzKCkuIENhbGwgZm9ybS5iaW5kU3RvcmVzKCgpID0+IHlvdXJTdG9yZXMpIGF0IGFwcCBpbml0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZXNSZWYoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VG9Jbml0aWFsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgZmllbGRzW2tleV0udmFsdWUgPSBjb25maWcuaW5pdGlhbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBvcGVuIGFwcGxpZXMgdHdvIGxheWVycyBvZiBvdmVycmlkZXMgcGx1cyBvcHRpb25hbCBvbk9wZW4g4oCUIGJyYW5jaHkgYnkgZGVzaWduLlxuICBmdW5jdGlvbiBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pOiB2b2lkIHtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSBwYXJhbXM7XG4gICAgaWYgKGNvbmZpZy5vbk9wZW4gJiYgZ2V0U3RvcmVzUmVmKSB7XG4gICAgICBjb25zdCBvbk9wZW5PdmVycmlkZSA9IGNvbmZpZy5vbk9wZW4oeyBkYXRhOiBwYXJhbXMsIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpIH0pID8/IHt9O1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob25PcGVuT3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkIHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzdWJtaXQgZnVubmVscyBGb3JtRGF0YSwgdmFsaWRhdGUsIG9uU3VibWl0LCBlcnJvclN0YXRlLCBhbmQgY2xvc2Ug4oCUIG9uZS1wYXRoLXBlci1zdGFnZSBieSBkZXNpZ24uXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudCAmJiBpc0Zvcm1FbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKGV2ZW50LnRhcmdldCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZmQuZ2V0KGtleSBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gICAgICAgIGlmIChyYXcgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IFN0cmluZyhyYXcpIGFzIHVua25vd24gYXMgVFZhbHVlc1t0eXBlb2Yga2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVzLnZhbHVlO1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBjb25maWcudmFsaWRhdGU/LihjdXJyZW50KTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9ycyAmJiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlcnJvcnMudmFsdWUgPSB2YWxpZGF0aW9uRXJyb3JzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgICBpc1N1Ym1pdHRpbmcudmFsdWUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25maWcub25TdWJtaXQoe1xuICAgICAgICB2YWx1ZXM6IGN1cnJlbnQsXG4gICAgICAgIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpLFxuICAgICAgfSk7XG4gICAgICBjbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3VibWl0RXJyb3IoYCR7Y29uZmlnLm5hbWV9OnN1Ym1pdGAsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRTdG9yZXMoZ2V0U3RvcmVzOiAoKSA9PiBUU3RvcmVzKTogdm9pZCB7XG4gICAgZ2V0U3RvcmVzUmVmID0gZ2V0U3RvcmVzO1xuICAgIGRpc3Bvc2VHdWFyZEVmZmVjdD8uKCk7XG4gICAgY29uc3QgZ3VhcmRGbiA9IGNvbmZpZy5ndWFyZDtcbiAgICBpZiAoZ3VhcmRGbikge1xuICAgICAgZGlzcG9zZUd1YXJkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKCFndWFyZEZuKHsgc3RvcmVzOiBnZXRTdG9yZXMoKSB9KSkgY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFjdGlvbnM6IEFjdGlvblJlZ2lzdHJ5PFRTdG9yZXM+ID0ge1xuICAgIFtgJHtjb25maWcubmFtZX06b3BlbmBdOiAoeyBkYXRhIH0pID0+IHtcbiAgICAgIG9wZW4odW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06Y2xvc2VgXTogKCkgPT4ge1xuICAgICAgY2xvc2UoKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06c3VibWl0YF06IGFzeW5jICh7IGV2ZW50IH0pID0+IHtcbiAgICAgIGF3YWl0IHN1Ym1pdChldmVudCk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgIGlzT3BlbixcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRzLFxuICAgIGVycm9ycyxcbiAgICBpc1N1Ym1pdHRpbmcsXG4gICAgb3BlblBhcmFtcyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIHN1Ym1pdCxcbiAgICBiaW5kU3RvcmVzLFxuICAgIGFjdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQ29tcG9zZSBtYW55IGZvcm1zIGludG8gYSBzaW5nbGUgc2V0OiBtZXJnZWQgYWN0aW9ucywgY2xvc2VBbGwsIG9wZW5Gb3JtIHNpZ25hbC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVNldDxUU3RvcmVzPiA9IHtcbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG4gIG9wZW5Gb3JtOiBSZWFkb25seVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgY2xvc2VBbGwoKTogdm9pZDtcbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TZXQ8VFN0b3Jlcz4oXG4gIGZvcm1zOiByZWFkb25seSBGb3JtU3RvcmU8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz5bXVxuKTogRm9ybVNldDxUU3RvcmVzPiB7XG4gIGNvbnN0IG1lcmdlZDogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7fTtcbiAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihtZXJnZWQsIGZvcm0uYWN0aW9ucyk7XG4gIH1cblxuICBjb25zdCBvcGVuRm9ybSA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICAgIGlmIChmb3JtLmlzT3Blbi52YWx1ZSkgcmV0dXJuIGZvcm0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aW9uczogbWVyZ2VkLFxuICAgIG9wZW5Gb3JtLFxuICAgIGNsb3NlQWxsKCkge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmNsb3NlKCk7XG4gICAgfSxcbiAgICBiaW5kU3RvcmVzKGdldFN0b3Jlcykge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmJpbmRTdG9yZXMoZ2V0U3RvcmVzKTtcbiAgICB9LFxuICB9O1xufVxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyByLEZyYWdtZW50IGFzIGV9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciB0PS9bXCImPF0vO2Z1bmN0aW9uIG4ocil7aWYoMD09PXIubGVuZ3RofHwhMT09PXQudGVzdChyKSlyZXR1cm4gcjtmb3IodmFyIGU9MCxuPTAsbz1cIlwiLGY9XCJcIjtuPHIubGVuZ3RoO24rKyl7c3dpdGNoKHIuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDpmPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpmPVwiJmFtcDtcIjticmVhaztjYXNlIDYwOmY9XCImbHQ7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1uIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksbys9ZixlPW4rMX1yZXR1cm4gbiE9PWUmJihvKz1yLnNsaWNlKGUsbikpLG99dmFyIG89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxmPTAsaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHUoZSx0LG4sbyxpLHUpe3R8fCh0PXt9KTt2YXIgYSxjLHA9dDtpZihcInJlZlwiaW4gcClmb3IoYyBpbiBwPXt9LHQpXCJyZWZcIj09Yz9hPXRbY106cFtjXT10W2NdO3ZhciBsPXt0eXBlOmUscHJvcHM6cCxrZXk6bixyZWY6YSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1mLF9faTotMSxfX3U6MCxfX3NvdXJjZTppLF9fc2VsZjp1fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoYT1lLmRlZmF1bHRQcm9wcykpZm9yKGMgaW4gYSl2b2lkIDA9PT1wW2NdJiYocFtjXT1hW2NdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShsKSxsfWZ1bmN0aW9uIGEocil7dmFyIHQ9dShlLHt0cGw6cixleHByczpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX0pO3JldHVybiB0LmtleT10Ll9fdix0fXZhciBjPXt9LHA9L1tBLVpdL2c7ZnVuY3Rpb24gbChlLHQpe2lmKHIuYXR0cil7dmFyIGY9ci5hdHRyKGUsdCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpcmV0dXJuIGZ9aWYodD1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnZhbHVlT2Y/ci52YWx1ZU9mKCk6cn0odCksXCJyZWZcIj09PWV8fFwia2V5XCI9PT1lKXJldHVyblwiXCI7aWYoXCJzdHlsZVwiPT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBpPVwiXCI7Zm9yKHZhciB1IGluIHQpe3ZhciBhPXRbdV07aWYobnVsbCE9YSYmXCJcIiE9PWEpe3ZhciBsPVwiLVwiPT11WzBdP3U6Y1t1XXx8KGNbdV09dS5yZXBsYWNlKHAsXCItJCZcIikudG9Mb3dlckNhc2UoKSkscz1cIjtcIjtcIm51bWJlclwiIT10eXBlb2YgYXx8bC5zdGFydHNXaXRoKFwiLS1cIil8fG8udGVzdChsKXx8KHM9XCJweDtcIiksaT1pK2wrXCI6XCIrYStzfX1yZXR1cm4gZSsnPVwiJytuKGkpKydcIid9cmV0dXJuIG51bGw9PXR8fCExPT09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdHx8XCJvYmplY3RcIj09dHlwZW9mIHQ/XCJcIjohMD09PXQ/ZTplKyc9XCInK24oXCJcIit0KSsnXCInfWZ1bmN0aW9uIHMocil7aWYobnVsbD09cnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiBudWxsO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXtpZih2b2lkIDA9PT1yLmNvbnN0cnVjdG9yKXJldHVybiByO2lmKGkocikpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV09cyhyW2VdKTtyZXR1cm4gcn19cmV0dXJuIG4oXCJcIityKX1leHBvcnR7dSBhcyBqc3gsbCBhcyBqc3hBdHRyLHUgYXMganN4REVWLHMgYXMganN4RXNjYXBlLGEgYXMganN4VGVtcGxhdGUsdSBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIFN0b3JlIGJhc2UgKyBQcmVhY3QgY29udGV4dC5cbiAqXG4gKiBgY3JlYXRlU3RvcmVgIGlzIGEgdGhpbiBjb252ZW50aW9uLWVuZm9yY2VyOiBhIHR5cGVkIGJhZyBvZiBzaWduYWxzXG4gKiBwbHVzIG1ldGhvZHMuIEFwcHMgdXNlIGl0IHRvIGRlZmluZSBkb21haW4gc3RvcmVzIHdob3NlIG9ubHkgcHVibGljXG4gKiBtdXRhdGlvbiBzdXJmYWNlIGlzIG5hbWVkIG1ldGhvZHMgKGFjdGlvbnMgY2FsbCB0aGVtOyBjb21wb25lbnRzIHJlYWRcbiAqIHNpZ25hbHMgYW5kIGRpc3BhdGNoIGFjdGlvbnMpLiBObyBjbGV2ZXJuZXNzIOKAlCBhIG5hbWVkIHBhdHRlcm4gbW9yZVxuICogdGhhbiBhIGxpYnJhcnkuXG4gKlxuICogYFN0b3JlUHJvdmlkZXJgICsgYHVzZVN0b3Jlc2Agd2lyZSB0aGUgc3RvcmVzIGJhZyBpbnRvIFByZWFjdCBjb250ZXh0XG4gKiBzbyBjb21wb25lbnRzIGFuZCB0aGUgZGVsZWdhdGlvbiBydW50aW1lIGNhbiByZWFjaCBpdCB2aWEgYSBzaW5nbGUgaG9vay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgaGVscGVyOyBleGlzdHMgc28gZG9tYWluIHN0b3JlcyBoYXZlIGEgY2Fub25pY2FsIGNyZWF0aW9uXG4gKiBjYWxsIGV2ZW4gdGhvdWdoIHRoZSBiYWcgaXRzZWxmIGlzIGEgcGxhaW4gb2JqZWN0LiBDZW50cmFsaXNpbmcgaGVyZVxuICogbGV0cyB1cyBoYW5nIGFkZGl0aW9uYWwgYmVoYXZpb3VyIG9mZiB0aGUgY2FsbCBzaXRlIGxhdGVyIChkZWJ1Z1xuICogaW5zdHJ1bWVudGF0aW9uLCBkZXZ0b29scykgd2l0aG91dCBhIG1pZ3JhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KGluaXQ6IFQpOiBUIHtcbiAgcmV0dXJuIGluaXQ7XG59XG5cbmNvbnN0IFN0b3JlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8dW5rbm93bj4obnVsbCk7XG5cbmV4cG9ydCB0eXBlIFN0b3JlUHJvdmlkZXJQcm9wczxUU3RvcmVzPiA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3RvcmVQcm92aWRlcjxUU3RvcmVzPih7IGNoaWxkcmVuLCBzdG9yZXMgfTogU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+KSB7XG4gIHJldHVybiA8U3RvcmVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdG9yZXN9PntjaGlsZHJlbn08L1N0b3JlQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yZXM8VFN0b3Jlcz4oKTogVFN0b3JlcyB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoU3RvcmVDb250ZXh0KSBhcyB1bmtub3duIGFzIFRTdG9yZXMgfCBudWxsO1xuICBpZiAoY3R4ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlU3RvcmVzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBTdG9yZVByb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uRm9ybSDigJQgd3JhcHMgYSBuYXRpdmUgPGZvcm0+IHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuLlxuICpcbiAqIFJlbmRlcnMgPGZvcm0gZGF0YS1hY3Rpb249XCJ7Zm9ybS5uYW1lfTpzdWJtaXRcIj4gc28gdGhlIGluc3RhbGxlZFxuICogZXZlbnQgZGVsZWdhdGlvbiBjYXRjaGVzIHRoZSBzdWJtaXQgZXZlbnQgYW5kIGRpc3BhdGNoZXMgdG8gdGhlXG4gKiBmb3JtJ3MgYXV0by1yZWdpc3RlcmVkIDpzdWJtaXQgaGFuZGxlci4gYGFyaWEtYnVzeWAgbWlycm9ycyB0aGVcbiAqIGBpc1N1Ym1pdHRpbmdgIHNpZ25hbCBzbyBjb25zdW1lciBzdHlsaW5nIGNhbiByZXNwb25kIHdpdGhvdXQgZXh0cmFcbiAqIHdpcmluZy4gVGhlIGZvcm0gZWxlbWVudCBhbHNvIGV4cG9zZXMgYGRhdGEtcG9sbHktYWN0aW9uLWZvcm1gIGZvclxuICogc3RhYmxlIHNlbGVjdG9yIGhvb2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgRm9ybVN0b3JlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZm9ybS50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uRm9ybS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIGZvcm06IEZvcm1TdG9yZTxUVmFsdWVzLCBUU3RvcmVzPjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25Gb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgcHJvcHM6IEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzLCBUU3RvcmVzPlxuKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGZvcm0sIGNoaWxkcmVuLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgY29tYmluZWQgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiZm9ybVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJmb3JtXCJdO1xuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17Y29tYmluZWR9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1mb3JtPXtmb3JtLm5hbWV9XG4gICAgICBkYXRhLWFjdGlvbj17YCR7Zm9ybS5uYW1lfTpzdWJtaXRgfVxuICAgICAgYXJpYS1idXN5PXtmb3JtLmlzU3VibWl0dGluZy52YWx1ZX1cbiAgICAgIGFyaWEtbGFiZWw9e3Byb3BzW1wiYXJpYS1sYWJlbFwiXX1cbiAgICAgIGFyaWEtbGFiZWxsZWRieT17cHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl19XG4gICAgICBub1ZhbGlkYXRlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZm9ybT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGaXJlIGEgbmFtZWQgYWN0aW9uIHRocm91Z2ggdGhlIGdsb2JhbCBldmVudC1kZWxlZ2F0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBBY3Rpb24qIHByaW1pdGl2ZXMgKDxBY3Rpb25JbnB1dD4sIDxBY3Rpb25TZWxlY3Q+KSBjb21taXQgYnlcbiAqIGNsaWNraW5nIGEgZGV0YWNoZWQgYDxidXR0b24gZGF0YS1hY3Rpb249XCLigKZcIj5gIGNhcnJ5aW5nIGRhdGEtYWN0aW9uLSpcbiAqIGF0dHJpYnV0ZXM7IHRoZSBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXIgcm91dGVzIGl0IGludG8gdGhlXG4gKiBjb25zdW1lcidzIGFjdGlvbiByZWdpc3RyeSB3aXRoIG5vIGV4dHJhIHdpcmluZy4gQ2VudHJhbGlzZWQgaGVyZSBzb1xuICogZXZlcnkgQWN0aW9uKiBwcmltaXRpdmUgZGlzcGF0Y2hlcyBpZGVudGljYWxseS5cbiAqXG4gKiBLZXlzIGluIGBkYXRhYCBhcmUgY2FtZWxDYXNlIGFuZCBjb252ZXJ0ZWQgdG8gZGFzaC1jYXNlIGF0dHJpYnV0ZVxuICogbmFtZXMg4oCUIGBhY3Rpb25EYXRhPXt7IHRhc2tJZCB9fWAgYmVjb21lcyBgZGF0YS1hY3Rpb24tdGFzay1pZGAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGNvbnN0IGhpZGRlbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGhpZGRlbi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiLCBhY3Rpb24pO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhc2hLZXkgPSBrZXkucmVwbGFjZSgvW0EtWl0vZywgKG0pID0+IGAtJHttLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgaGlkZGVuLnNldEF0dHJpYnV0ZShgZGF0YS1hY3Rpb24tJHtkYXNoS2V5fWAsIHZhbHVlKTtcbiAgfVxuICBoaWRkZW4uc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gIGhpZGRlbi5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gIGhpZGRlbi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIGhpZGRlbi50YWJJbmRleCA9IC0xO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlbik7XG4gIHRyeSB7XG4gICAgaGlkZGVuLmNsaWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaGlkZGVuLnJlbW92ZSgpO1xuICB9XG59XG4iLAogICAgIi8qKlxuICogcG9sbHkjMTI1OiBkYXRhLSogLyBhcmlhLSogYXR0cmlidXRlIHBhc3N0aHJvdWdoIGZvciBVSSBwcmltaXRpdmVzLlxuICpcbiAqIFByaW1pdGl2ZXMgYWNjZXB0IGEgZml4ZWQgcHJvcCBzZXQuIFdpdGhvdXQgcGFzc3Rocm91Z2gsIGEgY29uc3VtZXJcbiAqIHRoYXQgbmVlZHMgYSBgZGF0YS0qYCB0ZXN0IGhvb2sgb3IgYW4gYGFyaWEtKmAgYXR0cmlidXRlIG9uIHRoZVxuICogcHJpbWl0aXZlJ3Mgb3duIGVsZW1lbnQgaGFzIHRvIHdyYXAgaXQgaW4gYW4gZXh0cmEgRE9NIG5vZGUg4oCUIGEgc21lbGwuXG4gKlxuICoge0BsaW5rIFBhc3N0aHJvdWdoQXR0cnN9IHdpZGVucyBhIHByaW1pdGl2ZSdzIHByb3BzIHRvIGFjY2VwdCBhbnlcbiAqIGBkYXRhLSpgIC8gYGFyaWEtKmAga2V5OyB7QGxpbmsgY29sbGVjdFBhc3N0aHJvdWdofSBnYXRoZXJzIHRoZW0gZm9yXG4gKiBzcHJlYWRpbmcgb250byB0aGUgcmVuZGVyZWQgcm9vdCBlbGVtZW50LiBTcHJlYWQgdGhlIHJlc3VsdCAqYmVmb3JlKlxuICogdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHNvIGEgY29uc3VtZXIga2V5IGNhbiBuZXZlciBvdmVycmlkZVxuICogb25lIHRoZSBwcmltaXRpdmUgc2V0cyBpdHNlbGYgKGBkYXRhLXBvbGx5LSpgLCBldGMuKS5cbiAqL1xuXG4vKiogSW5kZXggc2lnbmF0dXJlcyBsZXR0aW5nIGEgcHJpbWl0aXZlJ3MgcHJvcHMgYWNjZXB0IGFyYml0cmFyeVxuICogIGBkYXRhLSpgIGFuZCBgYXJpYS0qYCBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBzdGFuZGFyZCBgdGl0bGVgXG4gKiAgYXR0cmlidXRlIOKAlCBhIG5hdGl2ZSB0b29sdGlwIGlzIGEgRE9NIGhvb2ssIG5vdCBzdHlsaW5nLCBzbyBpdFxuICogIHJpZGVzIHRoZSBzYW1lIHBhc3N0aHJvdWdoIHBhdGggKHBvbGx5IzEzNSkuICovXG5leHBvcnQgdHlwZSBQYXNzdGhyb3VnaEF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKiogTmF0aXZlIHRvb2x0aXAgdGV4dCwgZm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuLyoqIEtleXMsIGJleW9uZCB0aGUgYGRhdGEtKmAgLyBgYXJpYS0qYCBwcmVmaXhlcywgdGhhdCBwYXNzIHRocm91Z2guICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChcImRhdGEtXCIpIHx8IGtleS5zdGFydHNXaXRoKFwiYXJpYS1cIikgfHwga2V5ID09PSBcInRpdGxlXCI7XG59XG5cbi8qKlxuICogQ29sbGVjdCBgZGF0YS0qYCAvIGBhcmlhLSpgIC8gYHRpdGxlYCBhdHRyaWJ1dGVzIGZyb20gYSBwcm9wcyBvYmplY3RcbiAqIHNvIHRoZXkgY2FuIGJlIHNwcmVhZCBvbnRvIGEgcHJpbWl0aXZlJ3Mgcm9vdCBlbGVtZW50LiBgdW5kZWZpbmVkYFxuICogdmFsdWVzIGFuZCBub24tYXR0cmlidXRlIHZhbHVlIHR5cGVzIChmdW5jdGlvbnMsIG9iamVjdHMpIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhc3N0aHJvdWdoKFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoIWlzUGFzc3Rocm91Z2hLZXkoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uSW5wdXQg4oCUIGR1YWwtbW9kZSB2aWV3L2VkaXQgaW5wdXQgd2l0aCBhY3Rpb24gZGlzcGF0Y2ggb24gY29tbWl0LlxuICpcbiAqIFZpZXcgbW9kZSByZW5kZXJzIHRoZSBjdXJyZW50IHZhbHVlIGFzIHRleHQgKG9wdGlvbmFsbHkgdGhyb3VnaCBhXG4gKiBjYWxsZXItc3VwcGxpZWQgYHJlbmRlclZpZXdgIGZvciBtYXJrZG93biwgcmljaCBmb3JtYXR0aW5nLCBldGMuKS5cbiAqIENsaWNrLCBFbnRlciwgb3IgU3BhY2UgZW50ZXJzIGVkaXQgbW9kZS4gRWRpdCBtb2RlIGlzIGEgbmF0aXZlIGlucHV0XG4gKiBvciB0ZXh0YXJlYTsgY29tbWl0IGZpcmVzIHRoZSBjb25maWd1cmVkIGFjdGlvbiB3aXRoIGBkYXRhLWFjdGlvbi12YWx1ZWBcbiAqIGFuZCBgZGF0YS1hY3Rpb24tZmllbGRgIHNldCBmcm9tIEZvcm1EYXRhLXNoYXBlIHNlbWFudGljcywgc28gdGhlXG4gKiBleGlzdGluZyBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXMgaXQgd2l0aCBubyBleHRyYSB3aXJpbmcuXG4gKlxuICogYHNhdmVPbmAgcGlja3MgdGhlIGNvbW1pdCB0cmlnZ2VyOlxuICogICBcImJsdXJcIiAgICAgICBjb21taXQgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXNcbiAqICAgXCJlbnRlclwiICAgICAgY29tbWl0IG9uIEVudGVyIChzaW5nbGUtbGluZSkgb3IgQ21kL0N0cmwrRW50ZXIgKG11bHRpLWxpbmUpXG4gKiAgIFwiY21kLWVudGVyXCIgIGNvbW1pdCBvbmx5IG9uIENtZC9DdHJsK0VudGVyXG4gKiAgIFwiZXhwbGljaXRcIiAgIG5ldmVyIGF1dG8tY29tbWl0IOKAlCBjYWxsZXIgd2lyZXMgYSBzYXZlIGJ1dHRvbiB3aXRoIGRhdGEtYWN0aW9uXG4gKiAgIFwiaW5wdXRcIiAgICAgIGNvbW1pdCBvbiBldmVyeSBrZXlzdHJva2Ug4oCUIGZvciBmaWx0ZXItYXMteW91LXR5cGUgZmllbGRzO1xuICogICAgICAgICAgICAgICAgdGhlIGZpZWxkIHN0YXlzIGluIGVkaXQgbW9kZSByYXRoZXIgdGhhbiB0b2dnbGluZyB0byB2aWV3XG4gKlxuICogYGlucHV0VHlwZWAgc2V0cyB0aGUgbmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IOKAlFxuICogXCJ0ZXh0XCIgKGRlZmF1bHQpLCBcImRhdGVcIiwgXCJ0aW1lXCIsIFwibnVtYmVyXCIsIGFuZCBmcmllbmRzIOKAlCBzbyBhIGRhdGVcbiAqIG9yIG51bWVyaWMgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtIGxpa2UgYW55IG90aGVyLlxuICpcbiAqIExheW91dC1zaGlmdC1mcmVlOiB2aWV3IGFuZCBlZGl0IG1vZGVzIHNoYXJlIHBhZGRpbmcsIGJvcmRlciB3aWR0aCxcbiAqIGZvbnQsIGFuZCBsaW5lLWhlaWdodCBzbyB0aGUgdG9nZ2xlIGNhdXNlcyBubyByZWZsb3cuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uSW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRTYXZlT24gPSBcImJsdXJcIiB8IFwiZW50ZXJcIiB8IFwiY21kLWVudGVyXCIgfCBcImV4cGxpY2l0XCIgfCBcImlucHV0XCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFZhcmlhbnQgPSBcInNpbmdsZVwiIHwgXCJtdWx0aVwiO1xuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZGF0ZVwiXG4gIHwgXCJkYXRldGltZS1sb2NhbFwiXG4gIHwgXCJ0aW1lXCJcbiAgfCBcIm1vbnRoXCJcbiAgfCBcIndlZWtcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBDdXJyZW50IHZhbHVlIHRvIHJlbmRlciBpbiB2aWV3IG1vZGUgYW5kIHNlZWQgdGhlIGVkaXQgYnVmZmVyLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gY29tbWl0LiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08bmV3IHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb21taXQgdHJpZ2dlci4gRGVmYXVsdDogXCJibHVyXCIuICovXG4gIHNhdmVPbj86IEFjdGlvbklucHV0U2F2ZU9uO1xuICB2YXJpYW50PzogQWN0aW9uSW5wdXRWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogQWN0aW9uSW5wdXRUeXBlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXh0cmEgZGF0YS1hY3Rpb24tKiBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgYXQgY29tbWl0IChlLmcuIGVudGl0eSBpZCkuICovXG4gIGFjdGlvbkRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogQ3VzdG9tIHZpZXcgcmVuZGVyZXIg4oCUIHJlY2VpdmVzIHZhbHVlLCByZXR1cm5zIFZOb2RlLiAqL1xuICByZW5kZXJWaWV3PzogKHZhbHVlOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICAvKiogTGFiZWwgYW5ub3VuY2VkIGJ5IHNjcmVlbiByZWFkZXJzIGZvciB0aGUgZWRpdCBhZmZvcmRhbmNlLiAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiB0d28gcmVuZGVyIGJyYW5jaGVzIHRpbWVzIHR3byB2YXJpYW50cyB0aW1lcyBmaXZlIHNhdmVPbiB0cmlnZ2VyczsgYnJhbmNoaW5nIGlzIGluaGVyZW50IHRvIHRoZSBwcmltaXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uSW5wdXQocHJvcHM6IEFjdGlvbklucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIGNvbnN0IHNhdmVPbiA9IHByb3BzLnNhdmVPbiA/PyBcImJsdXJcIjtcbiAgLy8gXCJpbnB1dFwiIG1vZGUgaXMgYSBwZXJtYW5lbnRseS1lZGl0YWJsZSBmaWx0ZXIgZmllbGQg4oCUIGl0IG5ldmVyIGhhcyBhXG4gIC8vIHZpZXcgbW9kZSB0byB0b2dnbGUgYmFjayB0bywgc28gaXQgc3RhcnRzIGluIGVkaXQuXG4gIGNvbnN0IGxpdmUgPSBzYXZlT24gPT09IFwiaW5wdXRcIjtcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8XCJ2aWV3XCIgfCBcImVkaXRcIj4obGl2ZSA/IFwiZWRpdFwiIDogXCJ2aWV3XCIpO1xuICBjb25zdCBbZHJhZnQsIHNldERyYWZ0XSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSBcInZpZXdcIikgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICB9LCBbcHJvcHMudmFsdWUsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIG9uIG1vdW50IGZvciBhIGxpdmUgZmlsdGVyIGZpZWxkOyBvbmx5IHB1bGwgZm9jdXNcbiAgICAvLyB3aGVuIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHRvZ2dsZWQgYSB2aWV3IGZpZWxkIGludG8gZWRpdCBtb2RlLlxuICAgIGlmIChtb2RlID09PSBcImVkaXRcIiAmJiAhbGl2ZSAmJiBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnNlbGVjdD8uKCk7XG4gICAgfVxuICB9LCBbbW9kZSwgbGl2ZV0pO1xuXG4gIGNvbnN0IGVudGVyRWRpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gICAgc2V0TW9kZShcImVkaXRcIik7XG4gIH0sIFtwcm9wcy5kaXNhYmxlZCwgcHJvcHMudmFsdWVdKTtcblxuICBjb25zdCBjb21taXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV4dCAhPT0gcHJvcHMudmFsdWUpIHtcbiAgICAgICAgZGlzcGF0Y2hBY3Rpb24ocHJvcHMuYWN0aW9uLCB7IC4uLihwcm9wcy5hY3Rpb25EYXRhID8/IHt9KSwgdmFsdWU6IG5leHQgfSk7XG4gICAgICB9XG4gICAgICAvLyBBIGxpdmUgZmlsdGVyIGZpZWxkIHN0YXlzIGVkaXRhYmxlOyBldmVyeSBvdGhlciB0cmlnZ2VyIHJldHVybnNcbiAgICAgIC8vIHRvIHZpZXcgbW9kZSBvbmNlIHRoZSB2YWx1ZSBpcyBjb21taXR0ZWQuXG4gICAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICAgIH0sXG4gICAgW3Byb3BzLmFjdGlvbiwgcHJvcHMuYWN0aW9uRGF0YSwgcHJvcHMudmFsdWUsIGxpdmVdXG4gICk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICB9LCBbcHJvcHMudmFsdWUsIGxpdmVdKTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eToga2V5Ym9hcmQgaGFuZGxlciBlbmNvZGVzIHRoZSBzYXZlT24gw5cgdmFyaWFudCBtYXRyaXguXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgY29uc3QgY21kID0gZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5O1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwic2luZ2xlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29tbWl0KGRyYWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwibXVsdGlcIiAmJiBjbWQpIHx8IHNhdmVPbiA9PT0gXCJjbWQtZW50ZXJcIikge1xuICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJyb290XCJdfSAke3Byb3BzLmNsYXNzTmFtZX1gIDogY2xhc3Nlc1tcInJvb3RcIl07XG5cbiAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmb3J3YXJkZWQgb250byB3aGljaGV2ZXIgZWxlbWVudCBpcyB0aGUgcm9vdFxuICAvLyBmb3IgdGhlIGN1cnJlbnQgbW9kZTsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbiBvbiBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAobW9kZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICBjb25zdCByZW5kZXJlZCA9IHByb3BzLnJlbmRlclZpZXcgPyBwcm9wcy5yZW5kZXJWaWV3KHByb3BzLnZhbHVlKSA6IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBwcm9wcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogPGJ1dHRvbj4gd291bGQgc3dhbGxvdyB0ZXh0IHNlbGVjdGlvbiBhbmQgYWRkIGRlZmF1bHQgc3R5bGluZzsgZGl2IHdpdGggcm9sZT1idXR0b24gaXMgdGhlIGlubGluZS1lZGl0IGlkaW9tLlxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGNsYXNzPXtgJHtjbGFzc05hbWV9ICR7Y2xhc3Nlc1tcInZpZXdcIl19YH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgICAgICBkYXRhLXZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgIHRhYkluZGV4PXtwcm9wcy5kaXNhYmxlZCA/IC0xIDogMH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3Byb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIn1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17cHJvcHMuZGlzYWJsZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17ZW50ZXJFZGl0fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgfHwgZS5rZXkgPT09IFwiIFwiKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbnRlckVkaXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc0VtcHR5ICYmIHByb3BzLnBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl19Pntwcm9wcy5wbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb25zdCBjb21tb24gPSB7XG4gICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgY2xhc3M6IGAke2NsYXNzZXNbXCJlZGl0XCJdfSAke2NsYXNzZXNbXCJyb290XCJdfWAsXG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFwiOiB0cnVlLFxuICAgIFwiZGF0YS1zdGF0ZVwiOiBcImVkaXRpbmdcIixcbiAgICBcImRhdGEtdmFyaWFudFwiOiB2YXJpYW50LFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogZHJhZnQsXG4gICAgb25JbnB1dDogKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIHNldERyYWZ0KG5leHQpO1xuICAgICAgaWYgKGxpdmUpIGNvbW1pdChuZXh0KTtcbiAgICB9LFxuICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJibHVyXCIpIGNvbW1pdChkcmFmdCk7XG4gICAgICBlbHNlIGlmICghbGl2ZSkgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBvbktleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gIH07XG5cbiAgaWYgKHZhcmlhbnQgPT09IFwibXVsdGlcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICAgIH19XG4gICAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudCA9IGVsO1xuICAgICAgfX1cbiAgICAgIHR5cGU9e3Byb3BzLmlucHV0VHlwZSA/PyBcInRleHRcIn1cbiAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIExheW91dCDigJQgdGhlIG9uZSBwcmltaXRpdmUgdGhhdCBvd25zIGxheW91dGluZyBjb25jZXJucy5cbiAqXG4gKiBFdmVyeSBvdGhlciBjb21wb25lbnQgaW4gQGZhaXJmb3gvcG9sbHkvdWkgKGFuZCBldmVyeSBjb25zdW1lciBhcHBcbiAqIHRoYXQgcnVucyBgcG9sbHkgcXVhbGl0eSBjc3MtbGF5b3V0YCkgcm91dGVzIGZsZXgvZ3JpZCBkZWNpc2lvbnNcbiAqIHRocm91Z2ggdGhpcyBjb21wb25lbnQuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gdGhlXG4gKiBzdHlsZXNoZWV0IGNhbiByZWFkIHRoZW0gdW5pZm9ybWx5IGFuZCBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlXG4gKiBhbnkgb2YgdGhlbSBpbiBtZWRpYSBxdWVyaWVzIHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG5cbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogc2l4dGVlbiBvcHRpb25hbCBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nczsgZmxhdCBhbmQgbGluZWFyLlxuZXhwb3J0IGZ1bmN0aW9uIExheW91dChwcm9wczogTGF5b3V0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwiZGl2XCIsXG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRlbnRzLFxuICAgIHN1YmdyaWQsXG4gICAgZ2FwLFxuICAgIHBhZGRpbmcsXG4gICAgaGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhJbmxpbmVTaXplLFxuICAgIGp1c3RpZnlJdGVtcyxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGp1c3RpZnlDb250ZW50LFxuICAgIGFsaWduQ29udGVudCxcbiAgICBqdXN0aWZ5U2VsZixcbiAgICBhbGlnblNlbGYsXG4gICAgYXV0b0Zsb3csXG4gICAgYXV0b1Jvd3MsXG4gICAgYXV0b0NvbHVtbnMsXG4gICAgc3RhY2tPbk1vYmlsZSxcbiAgICBpbmxpbmUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIHJvbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmIChjb250ZW50cykge1xuICAgIHN0eWxlW1wiZGlzcGxheVwiXSA9IFwiY29udGVudHNcIjtcbiAgfSBlbHNlIGlmIChzdWJncmlkKSB7XG4gICAgc3R5bGVbXCItLWwtY29sXCJdID0gXCIxIC8gLTFcIjtcbiAgICBzdHlsZVtcIi0tbC1jb2xzXCJdID0gXCJzdWJncmlkXCI7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICB9IGVsc2Uge1xuICAgIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tbC1wXCJdID0gcGFkZGluZztcbiAgICBpZiAoaGVpZ2h0KSBzdHlsZVtcIi0tbC1oXCJdID0gaGVpZ2h0O1xuICAgIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1sLW1oXCJdID0gbWluSGVpZ2h0O1xuICAgIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tbC1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICAgIGlmIChyb3dzKSBzdHlsZVtcIi0tbC1yb3dzXCJdID0gcm93cztcbiAgICBpZiAoY29sdW1ucykgc3R5bGVbXCItLWwtY29sc1wiXSA9IGNvbHVtbnM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICAgIGlmIChqdXN0aWZ5SXRlbXMpIHN0eWxlW1wiLS1sLWppXCJdID0ganVzdGlmeUl0ZW1zO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGp1c3RpZnlDb250ZW50KSBzdHlsZVtcIi0tbC1qY1wiXSA9IGp1c3RpZnlDb250ZW50O1xuICAgIGlmIChhbGlnbkNvbnRlbnQpIHN0eWxlW1wiLS1sLWFjXCJdID0gYWxpZ25Db250ZW50O1xuICAgIGlmIChhdXRvRmxvdykgc3R5bGVbXCItLWwtZmxvd1wiXSA9IGF1dG9GbG93O1xuICAgIGlmIChhdXRvUm93cykgc3R5bGVbXCItLWwtYXJvd3NcIl0gPSBhdXRvUm93cztcbiAgICBpZiAoYXV0b0NvbHVtbnMpIHN0eWxlW1wiLS1sLWFjb2xzXCJdID0gYXV0b0NvbHVtbnM7XG4gIH1cbiAgaWYgKGp1c3RpZnlTZWxmKSBzdHlsZVtcIi0tbC1qc1wiXSA9IGp1c3RpZnlTZWxmO1xuICBpZiAoYWxpZ25TZWxmKSBzdHlsZVtcIi0tbC1hc1wiXSA9IGFsaWduU2VsZjtcblxuICBjb25zdCBiYXNlUGFydHMgPSBbY2xhc3Nlc1tcImxheW91dFwiXV07XG4gIGlmIChpbmxpbmUpIGJhc2VQYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoc3RhY2tPbk1vYmlsZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcInN0YWNrT25Nb2JpbGVcIl0pO1xuICBjb25zdCBiYXNlQ2xhc3MgPSBiYXNlUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCBjb21iaW5lZCA9IGNvbnRlbnRzID8gY2xhc3NOYW1lIDogY2xhc3NOYW1lID8gYCR7YmFzZUNsYXNzfSAke2NsYXNzTmFtZX1gIDogYmFzZUNsYXNzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzc05hbWU6IGNvbWJpbmVkLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJ0cmlnZ2VyTGFiZWxcIl19PntkaXNwbGF5VGV4dH08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9e1xuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJ0cmlnZ2VyTGFiZWxcIl19PntkaXNwbGF5VGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIGhlaWdodCArIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLlxuICogVGhlIGJ1dHRvbiBpcyBhIGZsZXggY29udGFpbmVyLCBzbyBhbiBpY29uIGFuZCBhIGxhYmVsIGFyZSBpdHMgb3duXG4gKiBjaGlsZHJlbiB3aXRoIGEgYGdhcGAgYmV0d2VlbiB0aGVtLlxuICpcbiAqIEhlaWdodCBjb21lcyBmcm9tIC0tcG9sbHktY29udHJvbC1oZWlnaHQtKiwgbmV2ZXIgZnJvbSBwYWRkaW5nLCBzbyBhXG4gKiBCdXR0b24gaXMgZXhhY3RseSBhcyB0YWxsIGFzIGEgVGV4dElucHV0IG9yIGEgU2VsZWN0IGluIHRoZSBzYW1lIHJvdy5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIFwiZGF0YS1hY3Rpb25cIj86IHN0cmluZztcbiAgLyoqIEFkZGl0aW9uYWwgYWN0aW9uLXBheWxvYWQgYXR0cmlidXRlcyB0aGUgZXZlbnQgZGVsZWdhdG9yIHBhcnNlc1xuICAgKiBpbnRvIGBjdHguZGF0YWAuIGBkYXRhLWFjdGlvbi10aWQ9XCJ0LTE3XCJgIGJlY29tZXMgYHsgdGlkOiBcInQtMTdcIiB9YCxcbiAgICogYGRhdGEtYWN0aW9uLWl0ZW0taWQ9XCLigKZcImAgYmVjb21lcyBgeyBpdGVtSWQ6IFwi4oCmXCIgfWAsIGFuZCBzbyBvbi5cbiAgICogVHlwZWQgYXMgYW4gaW5kZXggc2lnbmF0dXJlIHNvIGV2ZXJ5IGBkYXRhLWFjdGlvbi0qYCBrZXkgdGhlXG4gICAqIGNvbnN1bWVyIGNhcmVzIGFib3V0IHR5cGUtY2hlY2tzIHdpdGhvdXQgYSBCdXR0b24tc2lkZSBlbnVtZXJhdGlvbi4gKi9cbiAgW2FjdGlvbkRhdGFBdHRyOiBgZGF0YS1hY3Rpb24tJHtzdHJpbmd9YF06IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ29udGVudC9hY2Nlc3NpYmlsaXR5IGRpbWVuc2lvbi4gQSB2aXNpYmxlIHRleHQgYGxhYmVsYCBpcyB0aGVcbiAqIGFjY2Vzc2libGUgbmFtZSwgc28gaXQgbWFrZXMgYGFyaWEtbGFiZWxgIG9wdGlvbmFsLiBBbiBpY29uLW9ubHlcbiAqIGJ1dHRvbiBoYXMgbm8gdGV4dCB0byBuYW1lIGl0LCBzbyBgYXJpYS1sYWJlbGAgaXMgUkVRVUlSRUQg4oCUIHlvdVxuICogY2Fubm90IGNvbnN0cnVjdCBhbiB1bm5hbWVkIGljb24gYnV0dG9uLiAoQnV0dG9uJ3MgaG92ZXIgdGl0bGUgdGhlblxuICogZmFsbHMgYmFjayB0byB0aGF0IGFyaWEtbGFiZWwsIHNvIHRoZSBzYW1lIHByb3AgZ2l2ZXMgYm90aCB0aGVcbiAqIGFjY2Vzc2libGUgbmFtZSBhbmQgdGhlIHRvb2x0aXAuKVxuICovXG50eXBlIExhYmVsbGVkQ29udGVudCA9IHtcbiAgbGFiZWw6IENvbXBvbmVudENoaWxkcmVuO1xuICBpY29uPzogVk5vZGU7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcbnR5cGUgSWNvbk9ubHlDb250ZW50ID0ge1xuICBpY29uOiBWTm9kZTtcbiAgbGFiZWw/OiBuZXZlcjtcbiAgXCJhcmlhLWxhYmVsXCI6IHN0cmluZztcbn07XG50eXBlIEJ1dHRvbkNvbnRlbnQgPSBMYWJlbGxlZENvbnRlbnQgfCBJY29uT25seUNvbnRlbnQ7XG5cbnR5cGUgQnV0dG9uRWxlbWVudCA9IHtcbiAgaHJlZj86IG5ldmVyO1xuICB0YXJnZXQ/OiBuZXZlcjtcbiAgcmVsPzogbmV2ZXI7XG4gIGRvd25sb2FkPzogbmV2ZXI7XG4gIHR5cGU/OiBcImJ1dHRvblwiIHwgXCJzdWJtaXRcIiB8IFwicmVzZXRcIjtcbn07XG5cbnR5cGUgTGlua0VsZW1lbnQgPSB7XG4gIGhyZWY6IHN0cmluZztcbiAgdGFyZ2V0Pzogc3RyaW5nO1xuICByZWw/OiBzdHJpbmc7XG4gIC8qKiBGb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIDxhPiBzbyBhIEJ1dHRvbi1hcy1saW5rIGNhbiBvZmZlciBhIGZpbGVcbiAgICogZG93bmxvYWQuIEFuIGVtcHR5IHN0cmluZyB1c2VzIHRoZSByZXNvdXJjZSdzIG93biBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBuZXZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblByb3BzID0gQmFzZUJ1dHRvblByb3BzICYgQnV0dG9uQ29udGVudCAmIChCdXR0b25FbGVtZW50IHwgTGlua0VsZW1lbnQpO1xuXG5mdW5jdGlvbiB0aWVyQ2xhc3ModGllcjogQnV0dG9uVGllcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0aWVyID09PSBcInByaW1hcnlcIikgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyUHJpbWFyeVwiXTtcbiAgaWYgKHRpZXIgPT09IFwidGVydGlhcnlcIikgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyVGVydGlhcnlcIl07XG4gIHJldHVybiBjbGFzc2VzW1widGllclNlY29uZGFyeVwiXTtcbn1cblxuZnVuY3Rpb24gY29sb3JDbGFzcyhjb2xvcjogQnV0dG9uQ29sb3IpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY29sb3IgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9ySW5mb1wiXTtcbiAgaWYgKGNvbG9yID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvclN1Y2Nlc3NcIl07XG4gIGlmIChjb2xvciA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JXYXJuaW5nXCJdO1xuICBpZiAoY29sb3IgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JEYW5nZXJcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNpemVDbGFzcyhzaXplOiBCdXR0b25TaXplKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNpemUgPT09IFwic21hbGxcIikgcmV0dXJuIGNsYXNzZXNbXCJidG5TbWFsbFwiXTtcbiAgaWYgKHNpemUgPT09IFwibGFyZ2VcIikgcmV0dXJuIGNsYXNzZXNbXCJidG5MYXJnZVwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IGZsYXQgcHJvcC10by1jbGFzcyBjb21wb3NpdGlvbiBwbHVzIG9uZSBhbmNob3IvYnV0dG9uIGJyYW5jaDsgc3BsaXR0aW5nIHdvdWxkIGp1c3QgaGlkZSB0aGUgbWFwcGluZy5cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b24ocHJvcHM6IEJ1dHRvblByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdGllciA9IFwic2Vjb25kYXJ5XCIsXG4gICAgY29sb3IgPSBcImRlZmF1bHRcIixcbiAgICBzaXplID0gXCJub3JtYWxcIixcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGNpcmNsZSA9IGZhbHNlLFxuICAgIGJvdW5kZWQgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIC8vIFRoZSBidXR0b24gaXMgYSBmbGV4IGNvbnRhaW5lciwgc28gdGhlIGljb24gYW5kIHRoZSBsYWJlbFxuICAvLyBhcmUgaXRzIGRpcmVjdCBjaGlsZHJlbiB3aXRoIGEgcmVhbCBgZ2FwYCBiZXR3ZWVuIHRoZW0uIE5vIG5lc3RlZFxuICAvLyBMYXlvdXQ6IHRoZSBhcnJhbmdlbWVudCB0aGUgZ3JpZCB1c2VkIHRvIHByb3ZpZGUgaXMgbm93IHRoZSBidXR0b24nc1xuICAvLyBvd24sIHdoaWNoIGlzIGFsc28gd2hhdCBtYWtlcyBhbiBpY29uIGJ1dHRvbiB0aGUgc2FtZSBoZWlnaHQgYXMgYVxuICAvLyBwbGFpbiBvbmUuXG4gIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpY29uICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJpY29uXCJdfT57aWNvbn08L3NwYW4+fVxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC8+XG4gICk7XG5cbiAgY29uc3QgZGF0YUFjdGlvbiA9IHByb3BzW1wiZGF0YS1hY3Rpb25cIl07XG4gIGNvbnN0IGFyaWFMYWJlbCA9IHByb3BzW1wiYXJpYS1sYWJlbFwiXTtcbiAgLy8gRXZlcnkgYnV0dG9uIHN1cmZhY2VzIGEgaG92ZXIgdG9vbHRpcDogYW4gZXhwbGljaXQgdGl0bGUgd2lucywgZWxzZSB0aGVcbiAgLy8gdmlzaWJsZSB0ZXh0IGxhYmVsLCBlbHNlIHRoZSBhY2Nlc3NpYmxlIG5hbWUg4oCUIHNvIGFuIGljb24tb25seSBidXR0b25cbiAgLy8gKHdoaWNoIGNhcnJpZXMgYW4gYXJpYS1sYWJlbCkgc3RpbGwgZ2V0cyBvbmUuIFBhc3MgdGl0bGU9XCJcIiB0byBvcHQgb3V0LlxuICBjb25zdCByZXNvbHZlZFRpdGxlID1cbiAgICB0aXRsZSA/P1xuICAgICh0eXBlb2YgbGFiZWwgPT09IFwic3RyaW5nXCIgJiYgbGFiZWwubGVuZ3RoID4gMFxuICAgICAgPyBsYWJlbFxuICAgICAgOiB0eXBlb2YgYXJpYUxhYmVsID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gYXJpYUxhYmVsXG4gICAgICAgIDogdW5kZWZpbmVkKTtcbiAgLy8gQ29sbGVjdCBldmVyeSBgZGF0YS1hY3Rpb24tKmAgZXh0cmEgdGhlIGNvbnN1bWVyIHBhc3NlZCBzbyB0aGVcbiAgLy8gZXZlbnQgZGVsZWdhdG9yIGNhbiByZWFkIHRoZW0gb2ZmIHRoZSByZW5kZXJlZCBlbGVtZW50LiBXaXRob3V0XG4gIC8vIHRoaXMsIGFueXRoaW5nIGJleW9uZCBgZGF0YS1hY3Rpb25gIGlzIHNpbGVudGx5IGRyb3BwZWQgYW5kXG4gIC8vIGhhbmRsZXJzIGZpcmUgd2l0aCBhbiBlbXB0eSBgY3R4LmRhdGFgLlxuICBjb25zdCBhY3Rpb25EYXRhQXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiZGF0YS1hY3Rpb24tXCIpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhY3Rpb25EYXRhQXR0cnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChcImhyZWZcIiBpbiBwcm9wcyAmJiBwcm9wcy5ocmVmKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxhXG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgY2xhc3M9e2J1dHRvbkNsYXNzfVxuICAgICAgICB0aXRsZT17cmVzb2x2ZWRUaXRsZX1cbiAgICAgICAgaHJlZj17ZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5ocmVmfVxuICAgICAgICB0YXJnZXQ9e1widGFyZ2V0XCIgaW4gcHJvcHMgPyBwcm9wcy50YXJnZXQgOiB1bmRlZmluZWR9XG4gICAgICAgIHJlbD17XCJyZWxcIiBpbiBwcm9wcyA/IHByb3BzLnJlbCA6IHVuZGVmaW5lZH1cbiAgICAgICAgZG93bmxvYWQ9e1wiZG93bmxvYWRcIiBpbiBwcm9wcyA/IHByb3BzLmRvd25sb2FkIDogdW5kZWZpbmVkfVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktYnV0dG9uPXt0aWVyfVxuICAgICAgICBkYXRhLWFjdGlvbj17ZGF0YUFjdGlvbn1cbiAgICAgICAgey4uLmFjdGlvbkRhdGFBdHRyc31cbiAgICAgID5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2E+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkVHlwZTogXCJidXR0b25cIiB8IFwic3VibWl0XCIgfCBcInJlc2V0XCIgPVxuICAgIFwidHlwZVwiIGluIHByb3BzICYmIHByb3BzLnR5cGUgPyBwcm9wcy50eXBlIDogXCJidXR0b25cIjtcblxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtidXR0b25DbGFzc31cbiAgICAgIHRpdGxlPXtyZXNvbHZlZFRpdGxlfVxuICAgICAgdHlwZT17cmVzb2x2ZWRUeXBlfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1idXR0b249e3RpZXJ9XG4gICAgICBkYXRhLWFjdGlvbj17ZGF0YUFjdGlvbn1cbiAgICAgIHsuLi5hY3Rpb25EYXRhQXR0cnN9XG4gICAgPlxuICAgICAge2NvbnRlbnR9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU3VyZmFjZSDigJQgdGhlIG9uZSBwcmltaXRpdmUgdGhhdCBvd25zIHZpc3VhbC1zdXJmYWNlIGNvbmNlcm5zLlxuICpcbiAqIFdoZXJlIExheW91dCBnb3Zlcm5zIHNwYXRpYWwgY29uY2VybnMgKGdyaWQsIGZsZXgsIGdhcCwgYWxpZ25tZW50KSxcbiAqIFN1cmZhY2UgZ292ZXJucyB0aGUgY2hyb21lIHRoYXQgc2l0cyBvbiB0b3Agb2YgbGF5b3V0OiBwYWRkaW5nLFxuICogYmFja2dyb3VuZCwgYm9yZGVyLCByYWRpdXMsIHNoYWRvdywgYW5kIHRoZSBuYXJyb3cgcG9zaXRpb25pbmcgaWRpb21zXG4gKiAoc3RpY2t5IHN0cmlwcywgZml4ZWQgZmxvYXRpbmcgcGFuZXMpIHRoYXQgY29uc3VtZXJzIHJlYWNoIGZvciBpbmxpbmVcbiAqIHN0eWxlcyB0byBleHByZXNzLiBFdmVyeSBwcm9wIG1hcHMgdG8gYSBgLS1wb2xseS0qYCB0b2tlbiB0aHJvdWdoIGFcbiAqIGxvY2FsIGAtLXMtKmAgY3VzdG9tIHByb3BlcnR5LCBzbyBjb25zdW1lcnMgY2FuIHJldGhlbWUgYW4gaW5kaXZpZHVhbFxuICogU3VyZmFjZSBieSBvdmVycmlkaW5nIHRoZSBwb2xseSB0b2tlbiBpbiBgc3R5bGVgIHdpdGhvdXQgdG91Y2hpbmcgdGhlXG4gKiBwcmltaXRpdmUncyBDU1MuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TdXJmYWNlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU3VyZmFjZVZhcmlhbnQgPVxuICB8IFwicGxhaW5cIlxuICB8IFwicmFpc2VkXCJcbiAgfCBcInN1bmtlblwiXG4gIHwgXCJidWJibGVcIlxuICB8IFwiY2hpcFwiXG4gIHwgXCJjYWxsb3V0XCJcbiAgfCBcImZsb2F0aW5nXCJcbiAgfCBcInN0aWNreS1iYXJcIjtcblxudHlwZSBCYWNrZ3JvdW5kID0gXCJyYWlzZWRcIiB8IFwic3Vua2VuXCIgfCBcInRyYW5zcGFyZW50XCIgfCAoc3RyaW5nICYge30pO1xudHlwZSBSYWRpdXMgPSBcIm5vbmVcIiB8IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiB8IFwiZnVsbFwiO1xudHlwZSBCb3JkZXIgPSBcIm5vbmVcIiB8IFwiZGVmYXVsdFwiIHwgXCJzdHJvbmdcIjtcbnR5cGUgQm9yZGVyV2lkdGggPSBcIm5vbmVcIiB8IFwiZGVmYXVsdFwiIHwgXCJtZWRpdW1cIiB8IFwidGhpY2tcIjtcbnR5cGUgQm9yZGVyU2lkZXMgPVxuICB8IFwiYWxsXCJcbiAgfCBcImJsb2NrLXN0YXJ0XCJcbiAgfCBcImJsb2NrLWVuZFwiXG4gIHwgXCJpbmxpbmUtc3RhcnRcIlxuICB8IFwiaW5saW5lLWVuZFwiXG4gIHwgXCJibG9ja1wiXG4gIHwgXCJpbmxpbmVcIjtcbnR5cGUgU2hhZG93ID0gXCJub25lXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCI7XG50eXBlIFBvc2l0aW9uID0gXCJzdGF0aWNcIiB8IFwicmVsYXRpdmVcIiB8IFwiYWJzb2x1dGVcIiB8IFwic3RpY2t5XCIgfCBcImZpeGVkXCI7XG50eXBlIEJvcmRlclN0eWxlID0gXCJzb2xpZFwiIHwgXCJkYXNoZWRcIjtcbnR5cGUgT3ZlcmZsb3cgPSBcInZpc2libGVcIiB8IFwiaGlkZGVuXCIgfCBcImF1dG9cIiB8IFwic2Nyb2xsXCI7XG50eXBlIFNjaGVtZSA9IFwiZGFya1wiIHwgXCJsaWdodFwiO1xuXG4vKipcbiAqIEFyYml0cmFyeSBgZGF0YS0qYCwgYGFyaWEtKmAsIGFuZCBgdGl0bGVgIGF0dHJpYnV0ZXMgZm9yd2FyZGVkIHRvIHRoZVxuICogcmVuZGVyZWQgZWxlbWVudCBzbyBjb25zdW1lcnMgKE1vZGFsLCBUb2FzdCwgQ2FyZCwgZXRjLikgY2FuIGNvbXBvc2VcbiAqIFN1cmZhY2Ugd2l0aG91dCBsb3NpbmcgRE9NIGhvb2tzLCBBUklBIHNlbWFudGljcywgb3IgYSBuYXRpdmUgdG9vbHRpcC5cbiAqL1xuZXhwb3J0IHR5cGUgU3VyZmFjZURhdGFBdHRycyA9IHtcbiAgW2RhdGFBdHRyOiBgZGF0YS0ke3N0cmluZ31gXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgW2FyaWFBdHRyOiBgYXJpYS0ke3N0cmluZ31gXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdXJmYWNlUHJvcHMgPSBTdXJmYWNlRGF0YUF0dHJzICYge1xuICBjaGlsZHJlbj86IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIHNlY3Rpb24sIGFydGljbGUsIGFzaWRlLCBoZWFkZXIsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogTmFtZWQgcHJlc2V0IHRoYXQgcmVzb2x2ZXMgdG8gYSBkZWZhdWx0IGJ1bmRsZSBvZiB0aGUgcHJvcHMgYmVsb3cuIEV4cGxpY2l0IHByb3BzIG92ZXJyaWRlLiAqL1xuICB2YXJpYW50PzogU3VyZmFjZVZhcmlhbnQ7XG5cbiAgLyoqIEFueSBDU1MgbGVuZ3RoLCB0eXBpY2FsbHkgYHZhcigtLXBvbGx5LXNwYWNlLSopYC4gKi9cbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogTmFtZWQgdmFsdWVzIG1hcCB0byBgdmFyKC0tcG9sbHktc3VyZmFjZS0qKWA7IHJhdyBzdHJpbmdzIHBhc3MgdGhyb3VnaCBmb3Igb25lLW9mZiBjb2xvdXJzLiAqL1xuICBiYWNrZ3JvdW5kPzogQmFja2dyb3VuZDtcblxuICByYWRpdXM/OiBSYWRpdXM7XG4gIGJvcmRlcj86IEJvcmRlcjtcbiAgYm9yZGVyV2lkdGg/OiBCb3JkZXJXaWR0aDtcbiAgYm9yZGVyU2lkZXM/OiBCb3JkZXJTaWRlcztcbiAgLyoqIEJvcmRlciBsaW5lIHN0eWxlLiBEZWZhdWx0OiBgJ3NvbGlkJ2AuICovXG4gIGJvcmRlclN0eWxlPzogQm9yZGVyU3R5bGU7XG4gIC8qKiBBbnkgQ1NTIGNvbG91ciwgb3ZlcnJpZGluZyB0aGUgdG9rZW4gdGhlIGBib3JkZXJgIHByb3Agd291bGQgcGljay5cbiAgICogRm9yIG9uZS1vZmYgcmluZ3MgKGEgY3V0b3V0IHJpbmcsIGEgZm9jdXMgaGFsbykgdGhhdCBubyBzZW1hbnRpY1xuICAgKiBib3JkZXIgdG9rZW4gZXhwcmVzc2VzLiBJbXBsaWVzIGEgYm9yZGVyIHdpZHRoIHdoZW4gbm9uZSBpcyBzZXQuICovXG4gIGJvcmRlckNvbG9yPzogc3RyaW5nO1xuICBzaGFkb3c/OiBTaGFkb3c7XG5cbiAgLyoqXG4gICAqIFJldGludCB0aGUgdG9rZW4gc3VidHJlZSBzbyBkZXNjZW5kYW50IGBUZXh0YC9gQnV0dG9uYCByZWFkIHRoZVxuICAgKiByaWdodCBjb250cmFzdCBvbiBhIGRhcmsgKG9yIGZvcmNlZC1saWdodCkgU3VyZmFjZSDigJQgZXJyb3JcbiAgICogYmFubmVycywgY2FtZXJhIG92ZXJsYXlzLCBjaGF0IGJ1YmJsZXMuIFNldHMgYGRhdGEtcG9sbHktdGhlbWVgLFxuICAgKiBzbyBldmVyeSBgLS1wb2xseS0qYCBjb2xvdXIgdG9rZW4gZmxpcHMgZm9yIHRoZSBzdWJ0cmVlOyBubyBpbmxpbmVcbiAgICogYC0tcG9sbHktdGV4dGAgb3ZlcnJpZGUgbmVlZGVkIChwb2xseSMxMzUpLlxuICAgKi9cbiAgc2NoZW1lPzogU2NoZW1lO1xuXG4gIC8qKiBgJ25vbmUnYCBtYWtlcyBhIGRlY29yYXRpdmUgU3VyZmFjZSAoYSBzY2FuLWZyYW1lIG92ZXJsYXkpIGlnbm9yZVxuICAgKiB0aGUgcG9pbnRlciBzbyBjbGlja3MgZmFsbCB0aHJvdWdoIHRvIHdoYXQgaXMgYmVoaW5kIGl0LiAqL1xuICBwb2ludGVyRXZlbnRzPzogXCJub25lXCIgfCBcImF1dG9cIjtcblxuICAvKiogZGlzcGxheTogaW5saW5lLWJsb2NrIOKAlCBTdXJmYWNlIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG4gIHdpZHRoPzogc3RyaW5nO1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqIE1heGltdW0gYmxvY2sgc2l6ZSDigJQgYSBTdXJmYWNlIHRoYXQgc2hyaW5rcyB0byBjb250ZW50IGJ1dCBpcyBjYXBwZWQuICovXG4gIG1heEhlaWdodD86IHN0cmluZztcbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogT3ZlcmZsb3cgYmVoYXZpb3VyLiBgJ2F1dG8nYCBtYWtlcyBhIGhlaWdodC1jYXBwZWQgU3VyZmFjZSBzY3JvbGwuICovXG4gIG92ZXJmbG93PzogT3ZlcmZsb3c7XG5cbiAgcG9zaXRpb24/OiBQb3NpdGlvbjtcbiAgLyoqIEFueSBDU1MgaW5zZXQgdmFsdWUgKGAnMCdgLCBgJ2F1dG8gYXV0byAxcmVtIDFyZW0nYCwgYCcxcmVtJ2AsIOKApikuICovXG4gIGluc2V0Pzogc3RyaW5nO1xuICAvKiogQ1NTIHRyYW5zZm9ybSDigJQgZS5nLiBgJ3RyYW5zbGF0ZVgoLTUwJSknYCB0byBjZW50cmUgYSBmaXhlZCBiYW5uZXJcbiAgICogcGFpcmVkIHdpdGggYGluc2V0OiAn4oCmIGF1dG8g4oCmIDUwJSdgLiBUaGUgc2FuY3Rpb25lZCB0cmFuc2Zvcm0gZXNjYXBlLiAqL1xuICB0cmFuc2Zvcm0/OiBzdHJpbmc7XG4gIHpJbmRleD86IG51bWJlcjtcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugb3ZlcnJpZGVzLiBUaGUgc3VwcG9ydGVkIHJldGludCBwYXRoIGlzIHRvIHNldCBwb2xseSB0b2tlbnNcbiAgICogaGVyZSwgZS5nLiBgc3R5bGU9e3sgXCItLXBvbGx5LXN1cmZhY2UtcmFpc2VkXCI6IFwiI2ZlZjNjN1wiIH19YC4gU3VyZmFjZVxuICAgKiBtZXJnZXMgdGhpcyBpbnRvIGl0cyBvd24gY29tcHV0ZWQgc3R5bGUuXG4gICAqL1xuICBzdHlsZT86IEpTWC5DU1NQcm9wZXJ0aWVzO1xuXG4gIGlkPzogc3RyaW5nO1xuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI/OiBzdHJpbmc7XG4gIFwiYXJpYS1kZXNjcmliZWRieVwiPzogc3RyaW5nO1xuICBvbkNsaWNrPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgb25LZXlEb3duPzogSlNYLktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50Pjtcbn07XG5cbnR5cGUgVmFyaWFudERlZmF1bHRzID0gUGFydGlhbDxcbiAgUGljazxcbiAgICBTdXJmYWNlUHJvcHMsXG4gICAgfCBcInBhZGRpbmdcIlxuICAgIHwgXCJiYWNrZ3JvdW5kXCJcbiAgICB8IFwicmFkaXVzXCJcbiAgICB8IFwiYm9yZGVyXCJcbiAgICB8IFwiYm9yZGVyV2lkdGhcIlxuICAgIHwgXCJib3JkZXJTaWRlc1wiXG4gICAgfCBcInNoYWRvd1wiXG4gICAgfCBcImlubGluZVwiXG4gICAgfCBcIndpZHRoXCJcbiAgICB8IFwiaGVpZ2h0XCJcbiAgICB8IFwibWluSGVpZ2h0XCJcbiAgICB8IFwibWF4SW5saW5lU2l6ZVwiXG4gICAgfCBcInBvc2l0aW9uXCJcbiAgICB8IFwiaW5zZXRcIlxuICAgIHwgXCJ6SW5kZXhcIlxuICA+XG4+O1xuXG5jb25zdCB2YXJpYW50RGVmYXVsdHM6IFJlY29yZDxTdXJmYWNlVmFyaWFudCwgVmFyaWFudERlZmF1bHRzPiA9IHtcbiAgcGxhaW46IHt9LFxuICByYWlzZWQ6IHtcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIHNoYWRvdzogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIHN1bmtlbjoge1xuICAgIGJhY2tncm91bmQ6IFwic3Vua2VuXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbiAgYnViYmxlOiB7XG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgY2hpcDoge1xuICAgIGlubGluZTogdHJ1ZSxcbiAgICByYWRpdXM6IFwiZnVsbFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2UteHMpIHZhcigtLXBvbGx5LXNwYWNlLXNtKVwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGNhbGxvdXQ6IHtcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHJhZGl1czogXCJzbVwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBmbG9hdGluZzoge1xuICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgcmFkaXVzOiBcImxnXCIsXG4gICAgc2hhZG93OiBcImxnXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHpJbmRleDogOTk5OSxcbiAgfSxcbiAgXCJzdGlja3ktYmFyXCI6IHtcbiAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICBpbnNldDogXCIwIDAgYXV0byAwXCIsXG4gICAgYm9yZGVyU2lkZXM6IFwiYmxvY2stZW5kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGJnVmFsdWUoYjogQmFja2dyb3VuZCk6IHN0cmluZyB7XG4gIGlmIChiID09PSBcInJhaXNlZFwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXJhaXNlZClcIjtcbiAgaWYgKGIgPT09IFwic3Vua2VuXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2Utc3Vua2VuKVwiO1xuICBpZiAoYiA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gcmFkaXVzVmFsdWUocjogUmFkaXVzKTogc3RyaW5nIHtcbiAgaWYgKHIgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktcmFkaXVzLSR7cn0pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyQ29sb3JWYWx1ZShiOiBCb3JkZXIpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJub25lXCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIGlmIChiID09PSBcInN0cm9uZ1wiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXItc3Ryb25nKVwiO1xuICByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXIpXCI7XG59XG5cbmZ1bmN0aW9uIGJvcmRlcldpZHRoVmFsdWUodzogQm9yZGVyV2lkdGgpOiBzdHJpbmcge1xuICBpZiAodyA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1ib3JkZXItd2lkdGgtJHt3fSlgO1xufVxuXG5mdW5jdGlvbiBzaGFkb3dWYWx1ZShzOiBTaGFkb3cpOiBzdHJpbmcge1xuICBpZiAocyA9PT0gXCJub25lXCIpIHJldHVybiBcIm5vbmVcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1zaGFkb3ctJHtzfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJTaWRlc0NsYXNzKHNpZGVzOiBCb3JkZXJTaWRlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaWRlcyA9PT0gXCJhbGxcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2tcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmVcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmVcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nOyBmbGF0IGFuZCBsaW5lYXIsIG1pcnJvcnMgTGF5b3V0LnRzeC5cbmV4cG9ydCBmdW5jdGlvbiBTdXJmYWNlKHByb3BzOiBTdXJmYWNlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicGxhaW5cIiB9ID0gcHJvcHM7XG4gIGNvbnN0IHYgPSB2YXJpYW50RGVmYXVsdHNbdmFyaWFudF07XG5cbiAgY29uc3QgYXMgPSBwcm9wcy5hcyA/PyBcImRpdlwiO1xuICBjb25zdCBwYWRkaW5nID0gcHJvcHMucGFkZGluZyA/PyB2LnBhZGRpbmc7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kID8/IHYuYmFja2dyb3VuZDtcbiAgY29uc3QgcmFkaXVzID0gcHJvcHMucmFkaXVzID8/IHYucmFkaXVzO1xuICBjb25zdCBib3JkZXIgPSBwcm9wcy5ib3JkZXIgPz8gdi5ib3JkZXI7XG4gIGNvbnN0IGJvcmRlclNpZGVzID0gcHJvcHMuYm9yZGVyU2lkZXMgPz8gdi5ib3JkZXJTaWRlcyA/PyBcImFsbFwiO1xuICBjb25zdCBzaGFkb3cgPSBwcm9wcy5zaGFkb3cgPz8gdi5zaGFkb3c7XG4gIGNvbnN0IGlubGluZSA9IHByb3BzLmlubGluZSA/PyB2LmlubGluZTtcbiAgY29uc3Qgd2lkdGggPSBwcm9wcy53aWR0aCA/PyB2LndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBwcm9wcy5oZWlnaHQgPz8gdi5oZWlnaHQ7XG4gIGNvbnN0IG1pbkhlaWdodCA9IHByb3BzLm1pbkhlaWdodCA/PyB2Lm1pbkhlaWdodDtcbiAgY29uc3QgbWF4SW5saW5lU2l6ZSA9IHByb3BzLm1heElubGluZVNpemUgPz8gdi5tYXhJbmxpbmVTaXplO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uID8/IHYucG9zaXRpb247XG4gIGNvbnN0IGluc2V0ID0gcHJvcHMuaW5zZXQgPz8gdi5pbnNldDtcbiAgY29uc3QgekluZGV4ID0gcHJvcHMuekluZGV4ID8/IHYuekluZGV4O1xuICAvLyBwb2xseSMxMjYvIzEzNTogbm8gdmFyaWFudCBzZXRzIHRoZXNlLCBzbyB0aGV5IHJlc29sdmUgc3RyYWlnaHQgZnJvbSBwcm9wcy5cbiAgY29uc3QgeyBtYXhIZWlnaHQsIG92ZXJmbG93LCBib3JkZXJTdHlsZSwgdHJhbnNmb3JtLCBib3JkZXJDb2xvciwgc2NoZW1lLCBwb2ludGVyRXZlbnRzIH0gPSBwcm9wcztcblxuICAvLyBBIGJvcmRlcmVkIHN1cmZhY2UgbmVlZHMgYSB3aWR0aC4gSWYgdGhlIGNvbnN1bWVyIGFza2VkIGZvciBhIGJvcmRlciDigJRcbiAgLy8gYnkgbmFtZSBvciBieSByYXcgY29sb3VyIOKAlCBidXQgZGlkbid0IHBpY2sgYSB3aWR0aCwgaW5mZXIgJ2RlZmF1bHQnXG4gIC8vIHNvIHRoZSBib3JkZXIgcmVuZGVycy5cbiAgY29uc3Qgd2FudHNCb3JkZXIgPSAoYm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYm9yZGVyICE9PSBcIm5vbmVcIikgfHwgYm9yZGVyQ29sb3IgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aCA/PyB2LmJvcmRlcldpZHRoID8/ICh3YW50c0JvcmRlciA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLXMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChiYWNrZ3JvdW5kKSBzdHlsZVtcIi0tcy1iZ1wiXSA9IGJnVmFsdWUoYmFja2dyb3VuZCk7XG4gIGlmIChyYWRpdXMpIHN0eWxlW1wiLS1zLXJhZGl1c1wiXSA9IHJhZGl1c1ZhbHVlKHJhZGl1cyk7XG4gIGlmIChib3JkZXIpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yVmFsdWUoYm9yZGVyKTtcbiAgLy8gQSByYXcgYm9yZGVyQ29sb3Igd2lucyBvdmVyIHdoYXRldmVyIHRva2VuIGBib3JkZXJgIHJlc29sdmVkIHRvLlxuICBpZiAoYm9yZGVyQ29sb3IpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yO1xuICBpZiAoYm9yZGVyV2lkdGgpIHN0eWxlW1wiLS1zLWJvcmRlci13aWR0aFwiXSA9IGJvcmRlcldpZHRoVmFsdWUoYm9yZGVyV2lkdGgpO1xuICBpZiAoc2hhZG93KSBzdHlsZVtcIi0tcy1zaGFkb3dcIl0gPSBzaGFkb3dWYWx1ZShzaGFkb3cpO1xuICBpZiAoYm9yZGVyU3R5bGUpIHN0eWxlW1wiLS1zLWJvcmRlci1zdHlsZVwiXSA9IGJvcmRlclN0eWxlO1xuICBpZiAocG9pbnRlckV2ZW50cykgc3R5bGVbXCItLXMtcGVcIl0gPSBwb2ludGVyRXZlbnRzO1xuICBpZiAod2lkdGgpIHN0eWxlW1wiLS1zLXdcIl0gPSB3aWR0aDtcbiAgaWYgKGhlaWdodCkgc3R5bGVbXCItLXMtaFwiXSA9IGhlaWdodDtcbiAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLXMtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gIGlmIChtYXhIZWlnaHQpIHN0eWxlW1wiLS1zLW1heGhcIl0gPSBtYXhIZWlnaHQ7XG4gIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tcy1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICBpZiAob3ZlcmZsb3cpIHN0eWxlW1wiLS1zLW92ZXJmbG93XCJdID0gb3ZlcmZsb3c7XG4gIGlmIChwb3NpdGlvbikgc3R5bGVbXCItLXMtcG9zaXRpb25cIl0gPSBwb3NpdGlvbjtcbiAgaWYgKGluc2V0KSBzdHlsZVtcIi0tcy1pbnNldFwiXSA9IGluc2V0O1xuICBpZiAodHJhbnNmb3JtKSBzdHlsZVtcIi0tcy10cmFuc2Zvcm1cIl0gPSB0cmFuc2Zvcm07XG4gIGlmICh6SW5kZXggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCItLXMtelwiXSA9IFN0cmluZyh6SW5kZXgpO1xuXG4gIGlmIChwcm9wcy5zdHlsZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHByb3BzLnN0eWxlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cblxuICBjb25zdCBwYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtjbGFzc2VzW1wic3VyZmFjZVwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIHBhcnRzLnB1c2goYm9yZGVyU2lkZXNDbGFzcyhib3JkZXJTaWRlcykpO1xuICBpZiAocHJvcHMuY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKHByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXNzdGhyb3VnaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgY29uc3QgaXNEYXRhID0ga2V5LnN0YXJ0c1dpdGgoXCJkYXRhLVwiKTtcbiAgICBjb25zdCBpc0FyaWEgPSBrZXkuc3RhcnRzV2l0aChcImFyaWEtXCIpO1xuICAgIGlmICghaXNEYXRhICYmICFpc0FyaWEgJiYga2V5ICE9PSBcInRpdGxlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiZGF0YS1wb2xseS1zdXJmYWNlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiYXJpYS1sYWJlbFwiIHx8IGtleSA9PT0gXCJhcmlhLWxhYmVsbGVkYnlcIiB8fCBrZXkgPT09IFwiYXJpYS1kZXNjcmliZWRieVwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBwYXNzdGhyb3VnaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrOiBwcm9wcy5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duOiBwcm9wcy5vbktleURvd24sXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdGFiSW5kZXg6IHByb3BzLnRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1zdXJmYWNlXCI6IHZhcmlhbnQsXG4gICAgICBcImRhdGEtcG9sbHktdGhlbWVcIjogc2NoZW1lLFxuICAgICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgfSxcbiAgICBwcm9wcy5jaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENhcmQg4oCUIGNvbXBvdW5kIHByaW1pdGl2ZSB0aGF0IGNvbXBvc2VzIFN1cmZhY2UgZm9yIGVhY2ggbmFtZWQgc2xvdC5cbiAqXG4gKiBDYXJkIGlzIHRoZSBmaXJzdCBjb21wb3VuZCB0aGF0IGlzIHB1cmVseSBhIHJlLXNraW4gb2YgU3VyZmFjZSDigJQgbm9cbiAqIGJlaGF2aW91cmFsIGxheWVyLiBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgYXJlIGVhY2ggU3VyZmFjZXMgd2l0aFxuICogc2Vuc2libGUgZGVmYXVsdHM7IFJvb3QgaXMgYSByYWlzZWQgU3VyZmFjZSB0aGF0IHdyYXBzIHRoZW0uIEV2ZXJ5XG4gKiBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBjb25zdW1lcnMgcmV0aW50LCBvdmVycmlkZSwgb3JcbiAqIHJlYWNoIGZvciByYXcgcGFkZGluZyB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IFN1cmZhY2UsIHR5cGUgU3VyZmFjZVByb3BzIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZFByb3BzID0gU3VyZmFjZVByb3BzO1xuZXhwb3J0IHR5cGUgQ2FyZFNsb3RQcm9wcyA9IFN1cmZhY2VQcm9wcztcblxuZnVuY3Rpb24gUm9vdChwcm9wczogQ2FyZFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInJhaXNlZFwiLCByYWRpdXMgPSBcIm1kXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3ZhcmlhbnR9IHJhZGl1cz17cmFkaXVzfSBkYXRhLXBvbGx5LWNhcmQgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1lbmRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWhlYWRlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keShwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgcGFkZGluZz17cGFkZGluZ30gZGF0YS1wb2xseS1jYXJkLWJvZHkgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1zdGFydFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtZm9vdGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ2FyZCA9IHsgUm9vdCwgSGVhZGVyLCBCb2R5LCBGb290ZXIgfTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja2JveCDigJQgbmF0aXZlIGNoZWNrYm94IHdyYXBwZWQgaW4gYSBsYWJlbC5cbiAqXG4gKiBQYXNzIGEgcGxhaW4gYm9vbGVhbiBmb3IgY29udHJvbGxlZCB1c2UgKGNhbGxlciBsaXN0ZW5zIGVsc2V3aGVyZSksXG4gKiBvciBhIFNpZ25hbDxib29sZWFuPiB0byBoYXZlIHRoZSBwcmltaXRpdmUgYmluZCBpdHMgb3duIGNoYW5nZVxuICogbGlzdGVuZXIgYW5kIG11dGF0ZSB0aGUgc2lnbmFsIGRpcmVjdGx5LiBUaGUgbGFiZWwgd3JhcHMgdGhlIGlucHV0XG4gKiBzbyBjbGlja3MgYW55d2hlcmUgaW4gdGhlIHRhcmdldCBhcmVhIHRvZ2dsZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBDaGVja2JveFByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbiB8IFNpZ25hbDxib29sZWFuPjtcbiAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTaWduYWw8Ym9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiBcInBlZWtcIiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KHByb3BzOiBDaGVja2JveFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKGNoZWNrZWQpKSB7XG4gICAgICBjaGVja2VkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrZWRWYWx1ZSA9IGlzU2lnbmFsKGNoZWNrZWQpID8gY2hlY2tlZC52YWx1ZSA6IGNoZWNrZWQ7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNoZWNrYm94XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1jaGVja2JveD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWRWYWx1ZX1cbiAgICAgICAgZGVmYXVsdENoZWNrZWQ9e2RlZmF1bHRDaGVja2VkfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDbHVzdGVyIOKAlCB3cmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMuXG4gKlxuICogVGhlIGZsZXgtd3JhcCBjb3VudGVycGFydCB0byA8TGF5b3V0Pi4gV2hlcmUgTGF5b3V0IG93bnMgQ1NTIGdyaWRcbiAqIHRyYWNrcywgQ2x1c3RlciBvd25zIGEgcm93IG9mIGl0ZW1zIHRoYXQgZGlmZmVyIGluIHdpZHRoIGFuZCBtdXN0XG4gKiByZWZsb3cgYXMgc3BhY2UgcnVucyBvdXQg4oCUIGZpbHRlciBjaGlwcywgdGFnIGFuZCBiYWRnZSBsaXN0cywgZ3JvdXBzXG4gKiBvZiBzbWFsbCBidXR0b25zLiBJdGVtcyBrZWVwIGV2ZW4gc3BhY2luZyBvbiBib3RoIGF4ZXMgdmlhIGBnYXBgOyB0aGVcbiAqIHJvdyB3cmFwcyBhdXRvbWF0aWNhbGx5IGF0IG5hcnJvdyB3aWR0aHMuIExpa2UgTGF5b3V0LCBwcm9wcyBtYXAgdG9cbiAqIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGVtIGluIGFcbiAqIG1lZGlhIHF1ZXJ5IHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgc2Vjb25kIChhbmQgZmluYWwpIGxheW91dCBwcmltaXRpdmU6IGEgY29uc3VtZXIgbmV2ZXJcbiAqIHdyaXRlcyBgZGlzcGxheTogZmxleGAgb3IgYGRpc3BsYXk6IGdyaWRgIHRoZW1zZWx2ZXMg4oCUIGdyaWQgZ29lc1xuICogdGhyb3VnaCA8TGF5b3V0PiwgYSB3cmFwcGluZyBjbHVzdGVyIGdvZXMgdGhyb3VnaCA8Q2x1c3Rlcj4uXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DbHVzdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ2x1c3RlclByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIG5hdiwgdWwsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogU3BhY2UgYmV0d2VlbiBpdGVtcywgYm90aCBheGVzLiBUeXBpY2FsbHkgYSBgLS1wb2xseS1zcGFjZS0qYCB0b2tlbi4gKi9cbiAgZ2FwPzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBNYWluLWF4aXMgZGlzdHJpYnV0aW9uIOKAlCBtYXBzIHRvIGp1c3RpZnktY29udGVudC4gRGVmYXVsdDogc3RhcnQuICovXG4gIGp1c3RpZnk/OiBzdHJpbmc7XG4gIC8qKiBDcm9zcy1heGlzIGFsaWdubWVudCB3aXRoaW4gYSB3cmFwcGVkIHJvdyDigJQgbWFwcyB0byBhbGlnbi1pdGVtcy4gRGVmYXVsdDogY2VudGVyLiAqL1xuICBhbGlnbj86IHN0cmluZztcblxuICAvKiogUmVuZGVyIGFzIGlubGluZS1mbGV4IHNvIHRoZSBjbHVzdGVyIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2x1c3Rlcihwcm9wczogQ2x1c3RlclByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBhcyA9IFwiZGl2XCIsIGdhcCwgcGFkZGluZywganVzdGlmeSwgYWxpZ24sIGlubGluZSwgY2xhc3NOYW1lLCBpZCwgcm9sZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGdhcCkgc3R5bGVbXCItLWMtZ2FwXCJdID0gZ2FwO1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLWMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChqdXN0aWZ5KSBzdHlsZVtcIi0tYy1qY1wiXSA9IGp1c3RpZnk7XG4gIGlmIChhbGlnbikgc3R5bGVbXCItLWMtYWlcIl0gPSBhbGlnbjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2x1c3RlclwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcm9sZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS1jbHVzdGVyXCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvZGUg4oCUIGlubGluZSBtb25vc3BhY2UgY29kZSBzcGFuLlxuICpcbiAqIFJlbmRlcnMgYSBgPGNvZGU+YCB3aXRoIHRoZSBgLS1wb2xseS1mb250LW1vbm9gIHN0YWNrLCBhIGZhaW50IHN1bmtlblxuICogdGludCwgYW5kIHNudWcgcGFkZGluZyBzbyBhIGNvbnN1bWVyIG5ldmVyIGhhbmQtcm9sbHMgYSBgLm1vbm9gIGNsYXNzXG4gKiBmb3IgaW5saW5lIGNvZGUsIGlkZW50aWZpZXJzLCBvciBrZXlib2FyZCBoaW50cy4gRm9yIG11bHRpLWxpbmUgY29kZVxuICogYmxvY2tzLCBwYXNzIGBibG9ja2AsIHdoaWNoIHN3aXRjaGVzIHRvIGEgcHJlLXdyYXBwZWQgPHByZT48Y29kZT4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29kZS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENvZGVQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFJlbmRlciBhcyBhIGJsb2NrICg8cHJlPjxjb2RlPikgaW5zdGVhZCBvZiBhbiBpbmxpbmUgc3Bhbi4gKi9cbiAgYmxvY2s/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvZGUocHJvcHM6IENvZGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYmxvY2ssIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogc3ByZWFkIGZpcnN0OyB0aGUgZXhwbGljaXQgYXR0cmlidXRlcyBhZnRlclxuICAvLyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChibG9jaykge1xuICAgIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJibG9ja1wiXV07XG4gICAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8cHJlXG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktY29kZT1cImJsb2NrXCJcbiAgICAgID5cbiAgICAgICAgPGNvZGU+e2NoaWxkcmVufTwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29kZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8Y29kZVxuICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29kZT1cImlubGluZVwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvY29kZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2xsYXBzaWJsZSDigJQgbmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gd3JhcHBlci5cbiAqXG4gKiBVc2VzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gZGlzY2xvc3VyZSBzZW1hbnRpY3Mgc28ga2V5Ym9hcmQgYW5kXG4gKiBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBjb21lIGZyZWUuIEEgOjpiZWZvcmUgYXJyb3cgcm90YXRlcyBvbiBvcGVuLlxuICogQ29sb3JzLCBzcGFjaW5nLCBhbmQgbW90aW9uIGNvbWUgZnJvbSB0b2tlbnM7IGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYFxuICogemVyb2VzIHRoZSByb3RhdGlvbiB2aWEgdGhlIG1vdGlvbiB0b2tlbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Db2xsYXBzaWJsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIENvbGxhcHNpYmxlUHJvcHMgPSB7XG4gIC8qKiBEaXNjbG9zdXJlIGhlYWRlci4gQSBzdHJpbmcgZm9yIHRoZSBjb21tb24gY2FzZSwgb3IgYW55IG5vZGUg4oCUXG4gICAqIGUuZy4gYSBtdXRlZCwgc21hbGwgPFRleHQ+IOKAlCB3aGVuIHRoZSBoZWFkZXIgbmVlZHMgc3R5bGluZy4gKi9cbiAgc3VtbWFyeTogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgZGVmYXVsdE9wZW4/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuLyoqIElucHV0IHR5cGVzIHdob3NlIFNwYWNlL0VudGVyIGlzIGFuIGFjdGl2YXRpb24sIG5vdCB0ZXh0IGVudHJ5IOKAlCB0aGVzZVxuICoga2VlcCB0aGVpciBvd24ga2V5Ym9hcmQgYmVoYXZpb3VyIGFuZCBtdXN0IG5vdCBiZSBndWFyZGVkLiAqL1xuY29uc3QgTk9OX1RFWFRfSU5QVVRfVFlQRVMgPSBuZXcgU2V0KFtcbiAgXCJjaGVja2JveFwiLFxuICBcInJhZGlvXCIsXG4gIFwiYnV0dG9uXCIsXG4gIFwic3VibWl0XCIsXG4gIFwicmVzZXRcIixcbiAgXCJmaWxlXCIsXG4gIFwiaW1hZ2VcIixcbiAgXCJyYW5nZVwiLFxuICBcImNvbG9yXCIsXG5dKTtcblxuLyoqIElzIHRoZSBldmVudCB0YXJnZXQgYSBmaWVsZCB3aGVyZSBTcGFjZS9FbnRlciBpbnNlcnRzL2VkaXRzIHRleHQ/ICovXG5mdW5jdGlvbiBpc1RleHRFbnRyeVRhcmdldCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHJldHVybiB0cnVlO1xuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICByZXR1cm4gIU5PTl9URVhUX0lOUFVUX1RZUEVTLmhhcyh0YXJnZXQudHlwZSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENocm9taXVtIHRvZ2dsZXMgYSA8ZGV0YWlscz4gb24gdGhlIFNwYWNlL0VudGVyICprZXl1cCogb2YgaXRzIDxzdW1tYXJ5PixcbiAqIGV2ZW4gd2hlbiBmb2N1cyBzaXRzIGluIGEgbmVzdGVkIHRleHQgZmllbGQg4oCUIHNvIGV2ZXJ5IHNwYWNlIHR5cGVkIGluIGFuXG4gKiBlZGl0YWJsZSBoZWFkZXIgd291bGQgY29sbGFwc2UgdGhlIGRpc2Nsb3N1cmUuIHN0b3BQcm9wYWdhdGlvbiBjYW4ndCBzdG9wXG4gKiBpdCAodGhlIHRvZ2dsZSBpcyB0aGUgc3VtbWFyeSdzIG93biBhY3RpdmF0aW9uIGJlaGF2aW91ciwgbm90IGEgYnViYmxpbmdcbiAqIGxpc3RlbmVyKSBhbmQgcHJldmVudERlZmF1bHQgb24gKmtleWRvd24qIHdvdWxkIHN3YWxsb3cgdGhlIGNoYXJhY3Rlci4gVGhlXG4gKiBjaGFyYWN0ZXIgaXMgYWxyZWFkeSBpbnNlcnRlZCBieSB0aGUgdGltZSBrZXl1cCBmaXJlcywgc28gY2FuY2VsbGluZyB0aGVcbiAqIGtleXVwIGRlZmF1bHQgZm9yIHRleHQtZW50cnkgZmllbGRzIGtpbGxzIHRoZSB0b2dnbGUgd2hpbGUgbGVhdmluZyB0eXBpbmdcbiAqIHVudG91Y2hlZC4gQnV0dG9ucy9jaGVja2JveC9yYWRpbyBmYWxsIHRocm91Z2ggYW5kIGtlZXAgdGhlaXIgb3duXG4gKiBhY3RpdmF0aW9uOyB0aGUgc3VtbWFyeSBpdHNlbGYgKG5vIG5lc3RlZCBmaWVsZCkga2VlcHMgbm9ybWFsIGtleWJvYXJkXG4gKiBkaXNjbG9zdXJlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5S2V5VXAoZXZlbnQ6IEpTWC5UYXJnZXRlZEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XG4gIGlmIChldmVudC5rZXkgIT09IFwiIFwiICYmIGV2ZW50LmtleSAhPT0gXCJFbnRlclwiKSByZXR1cm47XG4gIGlmICghaXNUZXh0RW50cnlUYXJnZXQoZXZlbnQudGFyZ2V0KSkgcmV0dXJuO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29sbGFwc2libGUocHJvcHM6IENvbGxhcHNpYmxlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgc3VtbWFyeSwgY2hpbGRyZW4sIGRlZmF1bHRPcGVuID0gZmFsc2UsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29sbGFwc2libGVcIl1dO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgPGRldGFpbHNcbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5qb2luKFwiIFwiKX1cbiAgICAgIG9wZW49e2RlZmF1bHRPcGVufVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1jb2xsYXBzaWJsZVxuICAgID5cbiAgICAgIHsvKiBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogPHN1bW1hcnk+IGlzIGEgbmF0aXZlIGludGVyYWN0aXZlIGRpc2Nsb3N1cmUgY29udHJvbDsgdGhpcyBrZXl1cCBndWFyZCBjYW5jZWxzIGl0cyB0b2dnbGUgd2hlbiBhIG5lc3RlZCBlZGl0YWJsZSBmaWVsZCBpcyB0aGUgdGFyZ2V0LiAqL31cbiAgICAgIDxzdW1tYXJ5IGNsYXNzPXtjbGFzc2VzW1wic3VtbWFyeVwiXX0gb25LZXlVcD17aGFuZGxlU3VtbWFyeUtleVVwfT5cbiAgICAgICAge3N1bW1hcnl9XG4gICAgICA8L3N1bW1hcnk+XG4gICAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiY29udGVudFwiXX0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgKTtcbn1cbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsRnJhZ21lbnQgYXMgU3RyaWN0TW9kZSxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBhLHVzZUxheW91dEVmZmVjdCBhcyBzLHVzZUVmZmVjdCBhcyBoLHVzZUNhbGxiYWNrIGFzIHYsdXNlQ29udGV4dCBhcyBkLHVzZURlYnVnVmFsdWUgYXMgbSx1c2VJZCBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgeSx1c2VNZW1vIGFzIF8sdXNlUmVkdWNlciBhcyBiLHVzZVJlZiBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEUobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQyhuLHQpe3ZhciBlPXQoKSxyPWEoe3Q6e19fOmUsdTp0fX0pLHU9clswXS50LG89clsxXTtyZXR1cm4gcyhmdW5jdGlvbigpe3UuX189ZSx1LnU9dCxSKHUpJiZvKHt0OnV9KX0sW24sZSx0XSksaChmdW5jdGlvbigpe3JldHVybiBSKHUpJiZvKHt0OnV9KSxuKGZ1bmN0aW9uKCl7Uih1KSYmbyh7dDp1fSl9KX0sW25dKSxlfWZ1bmN0aW9uIFIobil7dHJ5e3JldHVybiEoKHQ9bi5fXyk9PT0oZT1uLnUoKSkmJigwIT09dHx8MS90PT0xL2UpfHx0IT10JiZlIT1lKX1jYXRjaChuKXtyZXR1cm4hMH12YXIgdCxlfWZ1bmN0aW9uIHgobil7bigpfWZ1bmN0aW9uIHcobil7cmV0dXJuIG59ZnVuY3Rpb24gaygpe3JldHVyblshMSx4XX12YXIgST1zO2Z1bmN0aW9uIE0obix0KXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PXR9ZnVuY3Rpb24gTihuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIHQhPW4ucmVmJiZ0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fHQhPW4ucmVmOkUodGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5fX2Y9dS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1LnR5cGU9bix1fShNLnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsTS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEUodGhpcy5wcm9wcyxuKXx8RSh0aGlzLnN0YXRlLHQpfTt2YXIgVD1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCksVCYmVChuKX07dmFyIEE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIEQobil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1BLHQucmVuZGVyPW4sdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBGPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sTD17bWFwOkYsZm9yRWFjaDpGLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxPPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fayksdS5fX2Mobix0KTtPKG4sdCxlLHIpfTt2YXIgVT1lLnVubW91bnQ7ZnVuY3Rpb24gVihuLHQsZSl7cmV0dXJuIG4mJihuLl9fYyYmbi5fX2MuX19IJiYobi5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX2MmJm4uX19jKCl9KSxuLl9fYy5fX0g9bnVsbCksbnVsbCE9KG49Zyh7fSxuKSkuX19jJiYobi5fX2MuX19QPT09ZSYmKG4uX19jLl9fUD10KSxuLl9fYy5fX2U9ITAsbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVihuLHQsZSl9KSksbn1mdW5jdGlvbiBXKG4sdCxlKXtyZXR1cm4gbiYmZSYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVyhuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmFwcGVuZENoaWxkKG4uX19lKSxuLl9fYy5fX2U9ITAsbi5fX2MuX19QPWUpKSxufWZ1bmN0aW9uIFAoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gaihuKXt2YXIgdD1uLl9fJiZuLl9fLl9fYztyZXR1cm4gdCYmdC5fX2EmJnQuX19hKG4pfWZ1bmN0aW9uIHoobil7dmFyIGUscix1LG89bnVsbDtmdW5jdGlvbiBpKGkpe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtuJiYobz1uLmRlZmF1bHR8fG4pLHU9ITB9LGZ1bmN0aW9uKG4pe3I9bix1PSEwfSkscil0aHJvdyByO2lmKCF1KXRocm93IGU7cmV0dXJuIG8/dChvLGkpOm51bGx9cmV0dXJuIGkuZGlzcGxheU5hbWU9XCJMYXp5XCIsaS5fX2Y9ITAsaX1mdW5jdGlvbiBCKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJih0Ll9fej0hMCksdCYmdC5fX1ImJnQuX19SKCksdCYmMzImbi5fX3UmJihuLnR5cGU9bnVsbCksVSYmVShuKX0sKFAucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci5vJiYoci5vPVtdKSxyLm8ucHVzaChlKTt2YXIgdT1qKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHxyLl9fenx8KG89ITAsZS5fX1I9bnVsbCx1P3UoYyk6YygpKX07ZS5fX1I9aTt2YXIgbD1lLl9fUDtlLl9fUD1udWxsO3ZhciBjPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VyhuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci5vLnBvcCgpOyl0Ll9fUD1sLHQuZm9yY2VVcGRhdGUoKX19O3IuX191Kyt8fDMyJnQuX191fHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LFAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxQLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09Vih0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX191Jj0tMzMpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgSD1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5sLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5sLnNpemUpKWZvcihlPW4uaTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24uaT1lPWVbMl19fTtmdW5jdGlvbiBaKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gWShuKXt2YXIgZT10aGlzLHI9bi5oO2lmKGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS52KSxlLnY9bnVsbCxlLmg9bnVsbH0sZS5oJiZlLmghPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksIWUudil7Zm9yKHZhciB1PWUuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187ZS5oPXIsZS52PXtub2RlVHlwZToxLHBhcmVudE5vZGU6cixjaGlsZE5vZGVzOltdLF9fazp7X19tOnUuX19tfSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiEwfSxuYW1lc3BhY2VVUkk6ci5uYW1lc3BhY2VVUkksaW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5oLmluc2VydEJlZm9yZShuLHQpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKG4pPj4+MSwxKSxlLmgucmVtb3ZlQ2hpbGQobil9fX1vKHQoWix7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLnYpfWZ1bmN0aW9uICQobixlKXt2YXIgcj10KFkse19fdjpuLGg6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShCLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1qKHQuX192KSxyPXQubC5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxIKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sQi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLmwuc2V0KHRbZV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIG4uY2hpbGRyZW59LEIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1CLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24odCxlKXtIKG4sZSx0KX0pfTt2YXIgcT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsRz0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sSj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLEs9L1tBLVowLTldL2csUT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQsWD1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBubihuLHQsZSl7cmV0dXJuIG51bGw9PXQuX19rJiYodC50ZXh0Q29udGVudD1cIlwiKSxvKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1mdW5jdGlvbiB0bihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgZW49ZS5ldmVudDtlLmV2ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBlbiYmKG49ZW4obikpLG4ucGVyc2lzdD1mdW5jdGlvbigpe30sbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sbi5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxuLm5hdGl2ZUV2ZW50PW59O3ZhciBybix1bj17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sb249ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJmZ1bmN0aW9uKG4pe3ZhciB0PW4ucHJvcHMsZT1uLnR5cGUsdT17fSxvPS0xPT1lLmluZGV4T2YoXCItXCIpO2Zvcih2YXIgaSBpbiB0KXt2YXIgbD10W2ldO2lmKCEoXCJ2YWx1ZVwiPT09aSYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWx8fFEmJlwiY2hpbGRyZW5cIj09PWkmJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PWl8fFwiY2xhc3NOYW1lXCI9PT1pKSl7dmFyIGM9aS50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1pJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP2k9XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PWkmJiEwPT09bD9sPVwiXCI6XCJ0cmFuc2xhdGVcIj09PWMmJlwibm9cIj09PWw/bD0hMTpcIm9cIj09PWNbMF0mJlwiblwiPT09Y1sxXT9cIm9uZG91YmxlY2xpY2tcIj09PWM/aT1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1jfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxYKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1jP2k9XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09Yz9pPVwib25mb2N1c291dFwiOkoudGVzdChpKSYmKGk9Yyk6Yz1pPVwib25pbnB1dFwiOm8mJkcudGVzdChpKT9pPWkucmVwbGFjZShLLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCk6bnVsbD09PWwmJihsPXZvaWQgMCksXCJvbmlucHV0XCI9PT1jJiZ1W2k9Y10mJihpPVwib25pbnB1dENhcHR1cmVcIiksdVtpXT1sfX1cInNlbGVjdFwiPT1lJiYodS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh1LnZhbHVlKSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9LTEhPXUudmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKX0pKSxudWxsIT11LmRlZmF1bHRWYWx1ZSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9dS5tdWx0aXBsZT8tMSE9dS5kZWZhdWx0VmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKTp1LmRlZmF1bHRWYWx1ZT09bi5wcm9wcy52YWx1ZX0pKSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIix1bikpOnQuY2xhc3NOYW1lJiYodS5jbGFzcz11LmNsYXNzTmFtZT10LmNsYXNzTmFtZSksbi5wcm9wcz11fShuKSxuLiQkdHlwZW9mPXEsb24mJm9uKG4pfTt2YXIgbG49ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24obil7bG4mJmxuKG4pLHJuPW4uX19jfTt2YXIgY249ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24obil7Y24mJmNuKG4pO3ZhciB0PW4ucHJvcHMsZT1uLl9fZTtudWxsIT1lJiZcInRleHRhcmVhXCI9PT1uLnR5cGUmJlwidmFsdWVcImluIHQmJnQudmFsdWUhPT1lLnZhbHVlJiYoZS52YWx1ZT1udWxsPT10LnZhbHVlP1wiXCI6dC52YWx1ZSkscm49bnVsbH07dmFyIGZuPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gcm4uX19uW24uX19jXS5wcm9wcy52YWx1ZX0sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHVzZURlZmVycmVkVmFsdWU6dyx1c2VFZmZlY3Q6aCx1c2VJZDpwLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VJbnNlcnRpb25FZmZlY3Q6SSx1c2VMYXlvdXRFZmZlY3Q6cyx1c2VNZW1vOl8sdXNlUmVkdWNlcjpiLHVzZVJlZjpTLHVzZVN0YXRlOmEsdXNlU3luY0V4dGVybmFsU3RvcmU6Qyx1c2VUcmFuc2l0aW9uOmt9fX0sYW49XCIxOC4zLjFcIjtmdW5jdGlvbiBzbihuKXtyZXR1cm4gdC5iaW5kKG51bGwsbil9ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuJiZuLiQkdHlwZW9mPT09cX1mdW5jdGlvbiB2bihuKXtyZXR1cm4gaG4obikmJm4udHlwZT09PXV9ZnVuY3Rpb24gZG4obil7cmV0dXJuISFuJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5kaXNwbGF5TmFtZSYmMD09bi5kaXNwbGF5TmFtZS5pbmRleE9mKFwiTWVtbyhcIil9ZnVuY3Rpb24gbW4obil7cmV0dXJuIGhuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gcG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24geW4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgX249ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sYm49ZnVuY3Rpb24obix0KXt2YXIgcj1lLmRlYm91bmNlUmVuZGVyaW5nO2UuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24obil7cmV0dXJuIG4oKX07dmFyIHU9bih0KTtyZXR1cm4gZS5kZWJvdW5jZVJlbmRlcmluZz1yLHV9LFNuPWhuLGduPXt1c2VTdGF0ZTphLHVzZUlkOnAsdXNlUmVkdWNlcjpiLHVzZUVmZmVjdDpoLHVzZUxheW91dEVmZmVjdDpzLHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZVRyYW5zaXRpb246ayx1c2VEZWZlcnJlZFZhbHVlOncsdXNlU3luY0V4dGVybmFsU3RvcmU6QyxzdGFydFRyYW5zaXRpb246eCx1c2VSZWY6Uyx1c2VJbXBlcmF0aXZlSGFuZGxlOnksdXNlTWVtbzpfLHVzZUNhbGxiYWNrOnYsdXNlQ29udGV4dDpkLHVzZURlYnVnVmFsdWU6bSx2ZXJzaW9uOlwiMTguMy4xXCIsQ2hpbGRyZW46TCxyZW5kZXI6bm4saHlkcmF0ZTp0bix1bm1vdW50Q29tcG9uZW50QXROb2RlOnBuLGNyZWF0ZVBvcnRhbDokLGNyZWF0ZUVsZW1lbnQ6dCxjcmVhdGVDb250ZXh0OmwsY3JlYXRlRmFjdG9yeTpzbixjbG9uZUVsZW1lbnQ6bW4sY3JlYXRlUmVmOmMsRnJhZ21lbnQ6dSxpc1ZhbGlkRWxlbWVudDpobixpc0VsZW1lbnQ6U24saXNGcmFnbWVudDp2bixpc01lbW86ZG4sZmluZERPTU5vZGU6eW4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDpNLG1lbW86Tixmb3J3YXJkUmVmOkQsZmx1c2hTeW5jOmJuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOl9uLFN0cmljdE1vZGU6dSxTdXNwZW5zZTpQLFN1c3BlbnNlTGlzdDpCLGxhenk6eixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpmbn07ZXhwb3J0e0wgYXMgQ2hpbGRyZW4sTSBhcyBQdXJlQ29tcG9uZW50LFAgYXMgU3VzcGVuc2UsQiBhcyBTdXNwZW5zZUxpc3QsZm4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsbW4gYXMgY2xvbmVFbGVtZW50LHNuIGFzIGNyZWF0ZUZhY3RvcnksJCBhcyBjcmVhdGVQb3J0YWwsZ24gYXMgZGVmYXVsdCx5biBhcyBmaW5kRE9NTm9kZSxibiBhcyBmbHVzaFN5bmMsRCBhcyBmb3J3YXJkUmVmLHRuIGFzIGh5ZHJhdGUsU24gYXMgaXNFbGVtZW50LHZuIGFzIGlzRnJhZ21lbnQsZG4gYXMgaXNNZW1vLGhuIGFzIGlzVmFsaWRFbGVtZW50LHogYXMgbGF6eSxOIGFzIG1lbW8sbm4gYXMgcmVuZGVyLHggYXMgc3RhcnRUcmFuc2l0aW9uLHBuIGFzIHVubW91bnRDb21wb25lbnRBdE5vZGUsX24gYXMgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsdyBhcyB1c2VEZWZlcnJlZFZhbHVlLEkgYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LEMgYXMgdXNlU3luY0V4dGVybmFsU3RvcmUsayBhcyB1c2VUcmFuc2l0aW9uLGFuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBGb2N1cyB0cmFwLlxuICpcbiAqIEtlZXBzIFRhYiAvIFNoaWZ0K1RhYiBpbnNpZGUgYSByb290IGVsZW1lbnQuIFJldHVybnMgYSBjbGVhbnVwIHRoYXRcbiAqIHJlc3RvcmVzIGZvY3VzIHRvIHRoZSBlbGVtZW50IHRoYXQgd2FzIGFjdGl2ZSBiZWZvcmUgdGhlIHRyYXAgbW91bnRlZC5cbiAqIFNpbXBsZSBhbmQgc3luY2hyb25vdXMg4oCUIGFzc3VtZXMgYSBzaW5nbGUgYWN0aXZlIHRyYXAgcGVyIE92ZXJsYXlSb290XG4gKiBhbmQgbGV0cyB0aGUgb3ZlcmxheSByZWdpc3RyeSBpbiBgQGZhaXJmb3gvcG9sbHkvYWN0aW9uc2AgZW5mb3JjZSB0aGF0XG4gKiBhdCB0aGUgc3RhY2sgbGV2ZWwuXG4gKi9cblxuY29uc3QgRk9DVVNBQkxFX1NFTEVDVE9SID0gW1xuICBcImFbaHJlZl1cIixcbiAgXCJhcmVhW2hyZWZdXCIsXG4gIFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKVwiLFxuICBcImlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3R5cGU9aGlkZGVuXSlcIixcbiAgXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaWZyYW1lXCIsXG4gIFwib2JqZWN0XCIsXG4gIFwiZW1iZWRcIixcbiAgJ1t0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScsXG4gIFwiW2NvbnRlbnRlZGl0YWJsZV1cIixcbl0uam9pbihcIixcIik7XG5cbmZ1bmN0aW9uIGdldEZvY3VzYWJsZShyb290OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50W10ge1xuICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihGT0NVU0FCTEVfU0VMRUNUT1IpKTtcbiAgcmV0dXJuIG5vZGVzLmZpbHRlcihcbiAgICAoZWwpID0+ICFlbC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSAmJiBlbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxGb2N1c1RyYXAocm9vdDogSFRNTEVsZW1lbnQpOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgcHJldmlvdXNBY3RpdmUgPSAoXG4gICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6IG51bGxcbiAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLy8gTW92ZSBmb2N1cyBpbnRvIHRoZSByb290IGlmIGl0J3Mgbm90IGFscmVhZHkuXG4gIGNvbnN0IGZvY3VzYWJsZSA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgY29uc3QgZmlyc3QgPSBmb2N1c2FibGVbMF0gPz8gcm9vdDtcbiAgaWYgKCFyb290LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgZmlyc3QuZm9jdXMoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIlRhYlwiKSByZXR1cm47XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGb2N1c2FibGUocm9vdCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RJdGVtID0gaXRlbXNbMF07XG4gICAgY29uc3QgbGFzdEl0ZW0gPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWZpcnN0SXRlbSB8fCAhbGFzdEl0ZW0pIHJldHVybjtcbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgaWYgKGFjdGl2ZSA9PT0gZmlyc3RJdGVtIHx8ICFyb290LmNvbnRhaW5zKGFjdGl2ZSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGFzdEl0ZW0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gbGFzdEl0ZW0pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBmaXJzdEl0ZW0uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGlmIChwcmV2aW91c0FjdGl2ZSAmJiBkb2N1bWVudC5jb250YWlucyhwcmV2aW91c0FjdGl2ZSkpIHtcbiAgICAgIHByZXZpb3VzQWN0aXZlLmZvY3VzKCk7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIvKipcbiAqIFNjcm9sbCBsb2NrLlxuICpcbiAqIFJlZmVyZW5jZS1jb3VudGVkLiBNdWx0aXBsZSBvdmVybGF5cyBjYW4gcmVxdWVzdCBhIGxvY2s7IHRoZSBib2R5XG4gKiBzdGF5cyBsb2NrZWQgdW50aWwgZXZlcnkgcmVxdWVzdCByZWxlYXNlcy4gQSBzY3JvbGxiYXItZ3V0dGVyIHRva2VuXG4gKiBpcyB3cml0dGVuIGF0IGFjcXVpcmUgdGltZSBzbyBjb250ZW50IGJlaGluZCB0aGUgb3ZlcmxheSBkb2Vzbid0XG4gKiByZWZsb3cgd2hlbiB0aGUgYmFyIGRpc2FwcGVhcnMuXG4gKi9cblxubGV0IGNvdW50ID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjcXVpcmVTY3JvbGxMb2NrKCk6ICgpID0+IHZvaWQge1xuICBpZiAoY291bnQgPT09IDApIHtcbiAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IGd1dHRlciA9IHdpbmRvdy5pbm5lcldpZHRoIC0gaHRtbC5jbGllbnRXaWR0aDtcbiAgICBodG1sLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIsIGAke2d1dHRlcn1weGApO1xuICAgIGh0bWwuc2V0QXR0cmlidXRlKFwiZGF0YS1wb2xseS1zY3JvbGwtbG9ja2VkXCIsIFwidHJ1ZVwiKTtcbiAgfVxuICBjb3VudCArPSAxO1xuICBsZXQgcmVsZWFzZWQgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAocmVsZWFzZWQpIHJldHVybjtcbiAgICByZWxlYXNlZCA9IHRydWU7XG4gICAgY291bnQgLT0gMTtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgY291bnQgPSAwO1xuICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgIGh0bWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1wb2xseS1zY3JvbGwtbG9ja2VkXCIpO1xuICAgICAgaHRtbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tcG9sbHktc2Nyb2xsYmFyLWd1dHRlclwiKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheVJvb3Qg4oCUIHBvcnRhbCB0YXJnZXQgZm9yIHN0YWNrZWQgb3ZlcmxheXMuXG4gKlxuICogQXBwcyByZW5kZXIgPE92ZXJsYXlSb290IC8+IG9uY2UsIHR5cGljYWxseSBhcyB0aGUgbGFzdCBjaGlsZCBvZiB0aGVcbiAqIGFwcCByb290LiBNb2RhbCwgQ29uZmlybURpYWxvZywgYW5kIFRvYXN0IHBvcnRhbCBpbnRvIHRoaXMgZWxlbWVudDtcbiAqIHRoZSBzY3JvbGwgbG9jayB0b2dnbGVzIGJhc2VkIG9uIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGNvdW50LlxuICovXG5cbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgaGFzT3Blbk92ZXJsYXkgfSBmcm9tIFwiLi4vYWN0aW9ucy9vdmVybGF5LnRzXCI7XG5pbXBvcnQgeyBhY3F1aXJlU2Nyb2xsTG9jayB9IGZyb20gXCIuL2ludGVybmFsL3Njcm9sbC1sb2NrLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdmVybGF5Um9vdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBPdmVybGF5Um9vdCgpIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCByZWxlYXNlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChoYXNPcGVuT3ZlcmxheSgpKSB7XG4gICAgICAgIGlmICghcmVsZWFzZSkgcmVsZWFzZSA9IGFjcXVpcmVTY3JvbGxMb2NrKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbGVhc2UpIHtcbiAgICAgICAgcmVsZWFzZSgpO1xuICAgICAgICByZWxlYXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGlzcG9zZSgpO1xuICAgICAgcmVsZWFzZT8uKCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiA8ZGl2IHJlZj17cmVmfSBjbGFzcz17Y2xhc3Nlc1tcInJvb3RcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1vdmVybGF5LXJvb3QgLz47XG59XG5cbi8qKiBHZXQgdGhlIG1vdW50IG5vZGUgZm9yIHBvcnRhbGVkIG92ZXJsYXlzLiBSZXR1cm5zIG51bGwgYmVmb3JlIG1vdW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE92ZXJsYXlSb290Tm9kZSgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXCJbZGF0YS1wb2xseS1vdmVybGF5LXJvb3RdXCIpO1xufVxuIiwKICAgICIvKipcbiAqIE1vZGFsIOKAlCBjb21wb3VuZCBkaWFsb2cgd2l0aCBmb2N1cyB0cmFwLCBFc2NhcGUgaGFuZGxpbmcsIHBvcnRhbCxcbiAqIGFuZCBvdmVybGF5LXN0YWNrIGludGVncmF0aW9uLlxuICpcbiAqIFJvb3QgdGFrZXMgYSBgd2hlbmAgc2lnbmFsIChvciBib29sZWFuKS4gV2hlbiB0cnV0aHkgdGhlIGNvbnRlbnQgbW91bnRzXG4gKiBpbnRvIHRoZSBPdmVybGF5Um9vdCBwb3J0YWwsIGZvY3VzIG1vdmVzIGluc2lkZSwgVGFiIGlzIHRyYXBwZWQsIEVzY2FwZVxuICogZmlyZXMgYGRhdGEtYWN0aW9uPVwibW9kYWw6Y2xvc2VcImAgKG9yIHRoZSBvdmVybGF5IHJlZ2lzdHJ5J3Mgb25DbG9zZVxuICogY2FsbGJhY2spLCBhbmQgdGhlIGJvZHkgc2Nyb2xsIGxvY2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVDb250ZXh0LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZUlkLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgcG9wT3ZlcmxheSwgcHVzaE92ZXJsYXkgfSBmcm9tIFwiLi4vYWN0aW9ucy9vdmVybGF5LnRzXCI7XG5pbXBvcnQgeyBpbnN0YWxsRm9jdXNUcmFwIH0gZnJvbSBcIi4vaW50ZXJuYWwvZm9jdXMtdHJhcC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZ2V0T3ZlcmxheVJvb3ROb2RlIH0gZnJvbSBcIi4vT3ZlcmxheVJvb3QudHN4XCI7XG5pbXBvcnQgeyBTdXJmYWNlIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxudHlwZSBNb2RhbENvbnRleHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlSWQ6IHN0cmluZztcbiAgZGVzY0lkOiBzdHJpbmc7XG4gIGNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3QgQ3R4ID0gY3JlYXRlQ29udGV4dDxNb2RhbENvbnRleHQgfCBudWxsPihudWxsKTtcblxuZnVuY3Rpb24gdXNlTW9kYWwoKTogTW9kYWxDb250ZXh0IHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChDdHgpO1xuICBpZiAoIWN0eCkgdGhyb3cgbmV3IEVycm9yKFwiTW9kYWwgc3ViLWNvbXBvbmVudHMgbXVzdCByZW5kZXIgaW5zaWRlIDxNb2RhbC5Sb290PlwiKTtcbiAgcmV0dXJuIGN0eDtcbn1cblxudHlwZSBSb290UHJvcHMgPSB7XG4gIHdoZW46IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgc291cmNlOiBcInRpdGxlXCIgdXNlcyB0aGUgPE1vZGFsLlRpdGxlPiBpZCwgb3IgcGFzcyBhbiBleHBsaWNpdCBsYWJlbC4gKi9cbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBSb290KHsgd2hlbiwgb25DbG9zZSwgY2hpbGRyZW4sIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwgfTogUm9vdFByb3BzKSB7XG4gIGNvbnN0IGlkID0gdXNlSWQoKTtcbiAgY29uc3QgdGl0bGVJZCA9IGAke2lkfS10aXRsZWA7XG4gIGNvbnN0IGRlc2NJZCA9IGAke2lkfS1kZXNjYDtcbiAgY29uc3QgbW91bnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3BvcnRhbE5vZGUsIHNldFBvcnRhbE5vZGVdID0gdXNlU3RhdGU8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBpc09wZW4gPSB0eXBlb2Ygd2hlbiA9PT0gXCJib29sZWFuXCIgPyB3aGVuIDogd2hlbi52YWx1ZTtcblxuICAvLyBDb25zdW1lcnMgYWxtb3N0IGFsd2F5cyBwYXNzIGFuIGlubGluZSBjbG9zdXJlIGZvciBgb25DbG9zZWAsIHNvIHRoZSBwcm9wXG4gIC8vIGhhcyBhIG5ldyBpZGVudGl0eSBvbiBldmVyeSByZW5kZXIuIEtlZXBpbmcgaXQgaW4gdGhlIG92ZXJsYXkgZWZmZWN0J3NcbiAgLy8gZGVwZW5kZW5jeSBhcnJheSBtYWRlIHRoYXQgZWZmZWN0IHRlYXIgZG93biBhbmQgcmUtaW5zdGFsbCBwZXIgcmVuZGVyOlxuICAvLyBlYWNoIHJ1biB3cm90ZSB0aGUgYHN0YWNrYCBzaWduYWwgdHdpY2UgYW5kIG1vdmVkIGZvY3VzIHR3aWNlLCBhbmQgdGhlXG4gIC8vIHNpZ25hbCB3cml0ZSByZS1yZW5kZXJlZCB0aGUgc3Vic2NyaWJlciB0aGF0IHByb2R1Y2VkIHRoZSBuZXh0IGNsb3N1cmUuXG4gIC8vIFRoZSByZXN1bHQgd2FzIGFuIHVuYm91bmRlZCByZW5kZXIgbG9vcCB0aGF0IHBpbm5lZCB0aGUgbWFpbiB0aHJlYWRcbiAgLy8gKHBvbGx5IzE3NykuIFRoZSBlZmZlY3Qgbm93IHJlYWRzIHRoZSBsYXRlc3QgY2FsbGJhY2sgdGhyb3VnaCBhIHJlZiwgc29cbiAgLy8gaXRzIGRlcGVuZGVuY2llcyBhcmUgb25seSB0aGUgdmFsdWVzIHRoYXQgZ2VudWluZWx5IHJlLW9wZW4gdGhlIG92ZXJsYXkuXG4gIGNvbnN0IG9uQ2xvc2VSZWYgPSB1c2VSZWYob25DbG9zZSk7XG4gIG9uQ2xvc2VSZWYuY3VycmVudCA9IG9uQ2xvc2U7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgc2V0UG9ydGFsTm9kZShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0UG9ydGFsTm9kZShnZXRPdmVybGF5Um9vdE5vZGUoKSk7XG4gIH0sIFtpc09wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm47XG4gICAgY29uc3QgZW50cnkgPSB7IGlkLCBvbkNsb3NlOiAoKSA9PiBvbkNsb3NlUmVmLmN1cnJlbnQ/LigpIH07XG4gICAgcHVzaE92ZXJsYXkoZW50cnkpO1xuICAgIGNvbnN0IGVsID0gbW91bnRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjbGVhbnVwID0gZWxcbiAgICAgID8gaW5zdGFsbEZvY3VzVHJhcChlbClcbiAgICAgIDogKCkgPT4ge1xuICAgICAgICAgIC8qIG5vIHJlZiB5ZXQgKi9cbiAgICAgICAgfTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcG9wT3ZlcmxheShpZCk7XG4gICAgfTtcbiAgfSwgW2lzT3BlbiwgcG9ydGFsTm9kZSwgaWRdKTtcblxuICBpZiAoIWlzT3BlbiB8fCAhcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgb25DbG9zZT8uKCk7XG4gIH07XG5cbiAgY29uc3QgY3R4OiBNb2RhbENvbnRleHQgPSB7IGlkLCB0aXRsZUlkLCBkZXNjSWQsIGNsb3NlIH07XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8Q3R4LlByb3ZpZGVyIHZhbHVlPXtjdHh9PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21vdW50UmVmfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNvbnRhaW5lclwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNvbnRlbnRcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtpZH1cbiAgICAgICAgZGF0YS1zdGF0ZT1cIm9wZW5cIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbCA/IHVuZGVmaW5lZCA6IHRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZGVzY0lkfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L0N0eC5Qcm92aWRlcj5cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBCYWNrZHJvcCgpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYmFja2Ryb3BcIl19IGRhdGEtcG9sbHktbW9kYWwtYmFja2Ryb3Agb25DbGljaz17Y2xvc2V9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICk7XG59XG5cbnR5cGUgQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIENvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdHlsZSB9OiBDb250ZW50UHJvcHMpIHtcbiAgY29uc3QgY2xzID0gY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInN1cmZhY2VcIl19ICR7Y2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wic3VyZmFjZVwiXTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICByYWRpdXM9XCJsZ1wiXG4gICAgICBzaGFkb3c9XCJsZ1wiXG4gICAgICBwb3NpdGlvbj1cInJlbGF0aXZlXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1zdXJmYWNlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3M9e2NsYXNzZXNbXCJoZWFkZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtaGVhZGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaGVhZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUaXRsZSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyB0aXRsZUlkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxoMiBpZD17dGl0bGVJZH0gY2xhc3M9e2NsYXNzZXNbXCJ0aXRsZVwiXX0gZGF0YS1wb2xseS1tb2RhbC10aXRsZT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2gyPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IGRlc2NJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtkZXNjSWR9IGNsYXNzPXtjbGFzc2VzW1wiYm9keVwiXX0gZGF0YS1wb2xseS1tb2RhbC1ib2R5PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzcz17Y2xhc3Nlc1tcImZvb3RlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1mb290ZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb290ZXI+XG4gICk7XG59XG5cbnR5cGUgQ2xvc2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogRmlyZSBhIHJlZ2lzdGVyZWQgZGF0YS1hY3Rpb24gaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbkNsb3NlIGNhbGxiYWNrLiAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDbG9zZSh7IGNoaWxkcmVuLCBhY3Rpb24gfTogQ2xvc2VQcm9wcykge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICBpZiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICBvbkNsaWNrPXtjbG9zZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IHtcbiAgUm9vdCxcbiAgQmFja2Ryb3AsXG4gIENvbnRlbnQsXG4gIEhlYWRlcixcbiAgVGl0bGUsXG4gIEJvZHksXG4gIEZvb3RlcixcbiAgQ2xvc2UsXG59O1xuIiwKICAgICIvKipcbiAqIENvbmZpcm1EaWFsb2cg4oCUIFByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbiBwcmltaXRpdmUuXG4gKlxuICogYGNvbmZpcm0oeyB0aXRsZSwgYm9keSwgZGFuZ2VyIH0pYCByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4uIE9wZW5zIHRoZVxuICogcmVuZGVyZWQgYDxDb25maXJtRGlhbG9nLkhvc3QgLz5gIG1vZGFsICh3aGljaCBtdXN0IGJlIG1vdW50ZWQgb25jZSBhdFxuICogdGhlIGFwcCByb290KS4gVXNlciBwaWNraW5nIGNvbmZpcm0gb3IgY2FuY2VsIHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogRXNjYXBlLCBiYWNrZHJvcCBjbGljaywgYW5kIGV4cGxpY2l0IGAuZGlzbWlzcygpYCByZXNvbHZlIGZhbHNlLlxuICovXG5cbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29uZmlybURpYWxvZy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsLnRzeFwiO1xuXG50eXBlIENvbmZpcm1SZXF1ZXN0ID0ge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBwZW5kaW5nID0gc2lnbmFsPENvbmZpcm1SZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG5jb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xubGV0IG5leHRJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIENvbmZpcm1PcHRpb25zID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpcm0ob3B0aW9uczogQ29uZmlybU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgbmV4dElkICs9IDE7XG4gICAgcGVuZGluZy52YWx1ZSA9IHtcbiAgICAgIGlkOiBuZXh0SWQsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGRhbmdlcjogb3B0aW9ucy5kYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IG9wdGlvbnMuY29uZmlybUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IG9wdGlvbnMuY2FuY2VsTGFiZWwsXG4gICAgICByZXNvbHZlLFxuICAgIH07XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3VsdDogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICBwZW5kaW5nLnZhbHVlID0gbnVsbDtcbiAgY3VycmVudC5yZXNvbHZlKHJlc3VsdCk7XG59XG5cbi8qKiBSZW5kZXJzIHRoZSBhY3RpdmUgY29uZmlybSBkaWFsb2cuIE1vdW50IG9uY2UgbmVhciB0aGUgYXBwIHJvb3QuICovXG5mdW5jdGlvbiBIb3N0KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxNb2RhbC5Sb290IHdoZW49e2lzT3Blbn0gb25DbG9zZT17KCkgPT4gY2xvc2UoZmFsc2UpfT5cbiAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLlRpdGxlPntjdXJyZW50LnRpdGxlfTwvTW9kYWwuVGl0bGU+XG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICB7Y3VycmVudC5ib2R5ID8gPE1vZGFsLkJvZHk+e2N1cnJlbnQuYm9keX08L01vZGFsLkJvZHk+IDogbnVsbH1cbiAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYWN0aW9uc1wiXX0gZGF0YS1wb2xseS1jb25maXJtLWFjdGlvbnM+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNhbmNlbFwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1jYW5jZWxcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UoZmFsc2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jYW5jZWxMYWJlbCA/PyBcIkNhbmNlbFwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y3VycmVudC5kYW5nZXIgPyBjbGFzc2VzW1wiY29uZmlybURhbmdlclwiXSA6IGNsYXNzZXNbXCJjb25maXJtXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLW9rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKHRydWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jb25maXJtTGFiZWwgPz8gXCJPS1wifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgIDwvTW9kYWwuUm9vdD5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbmZpcm1EaWFsb2cgPSB7IEhvc3QsIGNvbmZpcm0gfTtcbiIsCiAgICAiLyoqXG4gKiBGaWxlSW5wdXQg4oCUIGEgc3R5bGVkIHRyaWdnZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBwaWNrZXIuXG4gKlxuICogQSBmaWxlIGlzIGEgYmluYXJ5IG9iamVjdDogaXQgY2Fubm90IHJpZGUgYSBgZGF0YS1hY3Rpb25gIGF0dHJpYnV0ZVxuICogdGhlIHdheSBhIHN0cmluZyB2YWx1ZSBkb2VzLCBzbyBGaWxlSW5wdXQgaXMgdGhlIG9uZSBpbnB1dCBwcmltaXRpdmVcbiAqIHRoYXQgdGFrZXMgYSBjYWxsYmFjay4gYG9uRmlsZXNgIGZpcmVzIHdpdGggdGhlIGNob3NlbiBGaWxlTGlzdC4gVGhlXG4gKiBuYXRpdmUgPGlucHV0IHR5cGU9XCJmaWxlXCI+IHN0YXlzIGluIHRoZSBET00g4oCUIHZpc3VhbGx5IGhpZGRlbiBpbnNpZGVcbiAqIHRoZSA8bGFiZWw+IOKAlCBzbyB0aGUgd2hvbGUgY29udHJvbCBvcGVucyB0aGUgcGlja2VyIGFuZCByZW1haW5zXG4gKiBrZXlib2FyZC1hY2Nlc3NpYmxlIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0UHJvcHMgPSB7XG4gIC8qKiBGaXJlZCB3aXRoIHRoZSBjaG9zZW4gZmlsZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkO1xuICAvKiogVmlzaWJsZSB0cmlnZ2VyIHRleHQuIERlZmF1bHQ6ICdDaG9vc2UgZmlsZScuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogYGFjY2VwdGAgZmlsdGVyIGZvcndhcmRlZCB0byB0aGUgbmF0aXZlIGlucHV0IChlLmcuICdpbWFnZS8qJykuICovXG4gIGFjY2VwdD86IHN0cmluZztcbiAgLyoqIEFsbG93IHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dChwcm9wczogRmlsZUlucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgb25GaWxlcywgbGFiZWwgPSBcIkNob29zZSBmaWxlXCIsIGFjY2VwdCwgbXVsdGlwbGUsIGRpc2FibGVkLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIG9uRmlsZXMoZmlsZXMpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJmaWxlSW5wdXRcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpbGUtaW5wdXQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm5hdGl2ZVwiXX1cbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBIdG1sIOKAlCByZW5kZXIgdHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgcmF3IG1hcmt1cC5cbiAqXG4gKiBUaGUgZGVsaWJlcmF0ZSBlc2NhcGUgaGF0Y2ggZm9yIHRoZSByYXJlIHRoaW5nIHBvbGx5LXVpIGNhbm5vdFxuICogZXhwcmVzczogYSBsb2NhbGx5IGdlbmVyYXRlZCwgYWxyZWFkeS1zYWZlIFNWRyAoYSBRUiBjb2RlKSwgYVxuICogcHJlLXJlbmRlcmVkIGRpYWdyYW0uIFRoZSBjYWxsZXIgb3ducyBzYWZldHkg4oCUIGBodG1sYCBnb2VzIHN0cmFpZ2h0XG4gKiBpbnRvIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAsIHNvIGl0IE1VU1QgYmUgdHJ1c3RlZCBvciBzYW5pdGlzZWRcbiAqIGZpcnN0LiBGb3IgdW50cnVzdGVkIG1hcmtkb3duIHVzZSBgcmVuZGVyTWFya2Rvd25gLCB3aGljaCBzYW5pdGlzZXM7XG4gKiBmb3IgYW55dGhpbmcgYSBwcmltaXRpdmUgYWxyZWFkeSBjb3ZlcnMsIHVzZSB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBIdG1sUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogVHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgSFRNTC4gVGhlIGNhbGxlciBvd25zIGl0cyBzYWZldHkuICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIFBvbHltb3JwaGljIHdyYXBwZXIgZWxlbWVudCAoZGl2LCBzcGFuLCBmaWd1cmUsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKHByb3BzOiBIdG1sUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgaHRtbCwgYXMgPSBcImRpdlwiLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChhcywge1xuICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAvLyBhdHRyaWJ1dGVzIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgaWQsXG4gICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaHRtbFwiOiB0cnVlLFxuICAgIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbCDigJQgdGhpcyBwcmltaXRpdmUgSVMgdGhlIGRvY3VtZW50ZWQgdHJ1c3RlZC1tYXJrdXAgZXNjYXBlIGhhdGNoOyB0aGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogaHRtbCB9LFxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBMaW5rIOKAlCB0b2tlbi1zdHlsZWQgbmF2aWdhdGlvbmFsIGFuY2hvci5cbiAqXG4gKiBUaGUgcHJpbWl0aXZlIGZvciBwbGFpbiBoeXBlcmxpbmtzOiBodWIgYXBwLWdyaWQgY2FyZHMsIGEgZmlsZVxuICogZG93bmxvYWQsIGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gPEJ1dHRvbiBocmVmPiBpcyBmb3IgbGluay1zaGFwZWRcbiAqIEJVVFRPTlMg4oCUIGEgY2FsbCB0byBhY3Rpb24gd2VhcmluZyBidXR0b24gY2hyb21lOyA8TGluaz4gaXMgZm9yXG4gKiBpbmxpbmUsIHRleHR1YWwgbGlua3MgdGhhdCByZWFkIGFzIGxpbmtzLiBgZXh0ZXJuYWxgIG9wZW5zIGEgbmV3IHRhYlxuICogd2l0aCBgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiYDsgYGRvd25sb2FkYCBvZmZlcnMgdGhlIHRhcmdldCBhcyBhXG4gKiBmaWxlIChhbiBlbXB0eSBzdHJpbmcga2VlcHMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MaW5rLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGlua1Byb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBocmVmOiBzdHJpbmc7XG4gIC8qKiBPcGVuIGluIGEgbmV3IHRhYiB3aXRoIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIi4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogT2ZmZXIgdGhlIGhyZWYgYXMgYSBkb3dubG9hZDsgYW4gZW1wdHkgc3RyaW5nIGtlZXBzIGl0cyBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBEcm9wIHRoZSB1bmRlcmxpbmUgdW50aWwgaG92ZXIg4oCUIGZvciBsaW5rIGdyaWRzIGFuZCBjYXJkIGxpbmtzLiAqL1xuICBzdWJ0bGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExpbmsocHJvcHM6IExpbmtQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgaHJlZiwgZXh0ZXJuYWwsIGRvd25sb2FkLCBzdWJ0bGUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJsaW5rXCJdXTtcbiAgaWYgKHN1YnRsZSkgcGFydHMucHVzaChjbGFzc2VzW1wic3VidGxlXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9e2V4dGVybmFsID8gXCJfYmxhbmtcIiA6IHVuZGVmaW5lZH1cbiAgICAgIHJlbD17ZXh0ZXJuYWwgPyBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiA6IHVuZGVmaW5lZH1cbiAgICAgIGRvd25sb2FkPXtkb3dubG9hZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktbGlua1xuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogT3V0cHV0IOKAlCByZWFkLW9ubHksIG11bHRpLWxpbmUgZGlhZ25vc3RpYyB0ZXh0LlxuICpcbiAqIEZvciBwcm9ncmFtIG91dHB1dCBhIGNvbnN1bWVyIG11c3QgU0hPVyBidXQgbm90IGVkaXQ6IGEgbWVzaC1zdGF0ZVxuICogc25hcHNob3QsIGEgcGVyLXBlZXIgc3luYyB0YWJsZSwgYSByZWNvdmVyeSBibG9iLiA8VGV4dElucHV0PiBhbmRcbiAqIDxBY3Rpb25JbnB1dD4gYXJlIHNpbmdsZS1saW5lIGFuZCBlZGl0YWJsZTsgPENvZGU+IGlzIGZvciBjb2RlXG4gKiBzYW1wbGVzIGFuZCBuZXZlciB3cmFwcy4gPE91dHB1dD4gcmVuZGVycyBhIG1vbm9zcGFjZSA8cHJlPiB0aGF0XG4gKiB3cmFwcyBsb25nIGxpbmVzIGJ5IGRlZmF1bHQg4oCUIGEgZGlhZ25vc3RpYyBkdW1wIHNob3VsZCBzdGF5IG9uXG4gKiBzY3JlZW4g4oCUIHdpdGggYHNjcm9sbGAgdG8gc3dpdGNoIHRvIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5zdGVhZC5cbiAqXG4gKiBJdCBjYXJyaWVzIHRoZSBwb2xseSMxMjUgcGFzc3Rocm91Z2ggc3VyZmFjZSwgc28gYSBgZGF0YS1hY3Rpb25gXG4gKiBmb3IgYSB0YXAtdG8tc2VsZWN0LWFsbCBnZXN0dXJlIHJpZGVzIHN0cmFpZ2h0IG9udG8gdGhlIDxwcmU+XG4gKiAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdXRwdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFNjcm9sbCBsb25nIHVuYnJlYWthYmxlIGxpbmVzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHdyYXBwaW5nLiAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKiogTWFrZSB0aGUgYmxvY2sgZm9jdXNhYmxlIOKAlCBwYWlyIHdpdGggYSBgZGF0YS1hY3Rpb25gIHRhcCBnZXN0dXJlLiAqL1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXQocHJvcHM6IE91dHB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBzY3JvbGwsIHRhYkluZGV4LCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wib3V0cHV0XCJdXTtcbiAgaWYgKHNjcm9sbCkgcGFydHMucHVzaChjbGFzc2VzW1wic2Nyb2xsXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHByZVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1vdXRwdXRcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wcmU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2VsZWN0IOKAlCBkcm9wZG93biBvZiBvcHRpb25zIHdpdGggc2luZ2xlLSBvciBtdWx0aS1zZWxlY3Qgc2VtYW50aWNzLlxuICpcbiAqIENvbXBvc2VzIERyb3Bkb3duIGZvciB0aGUgbWVudSBhbmQgYSBuYXRpdmUgY2hlY2tib3ggaW4gZWFjaCBvcHRpb25cbiAqIHJvdyBmb3IgbXVsdGktc2VsZWN0LiBUaGUgYHNlbGVjdGVkYCBzdGF0ZSBpcyBhIFNpZ25hbDxTZXQ8VD4+O1xuICogc2luZ2xlLXNlbGVjdCByZXBsYWNlcyB0aGUgc2V0LCBtdWx0aS1zZWxlY3QgdG9nZ2xlcyBtZW1iZXJzaGlwLlxuICogTXVsdGktc2VsZWN0IG1vZGUgYWxzbyBzaG93cyBTZWxlY3QgQWxsIC8gQ2xlYXIgYWN0aW9uIGJ1dHRvbnMgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIG1lbnUuIFNpbmdsZS1zZWxlY3QgbW9kZSBjYW4gb3B0IGludG8gYGNsZWFyYWJsZWAsXG4gKiB3aGljaCBwcmVwZW5kcyBhIHBsYWNlaG9sZGVyLWxhYmVsbGVkIG9wdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gKiBzZWxlY3Rpb24gdG8gZW1wdHkg4oCUIGZvciBcIkFueSDigKZcIiBmaWx0ZXIgc2VtYW50aWNzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VDb21wdXRlZCwgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uPFQgPSBzdHJpbmc+ID0geyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RQcm9wczxUID0gc3RyaW5nPiA9IHtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W107XG4gIHNlbGVjdGVkOiBTaWduYWw8U2V0PFQ+PjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaW5nbGUtc2VsZWN0IG9ubHk6IHByZXBlbmQgYW4gb3B0aW9uIGxhYmVsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyXG4gICAqIHRoYXQgcmV0dXJucyB0aGUgc2VsZWN0aW9uIHRvIGVtcHR5LiBXaXRob3V0IGl0LCBwaWNraW5nIGFuIG9wdGlvblxuICAgKiBpcyBhIHRyYXAg4oCUIG5vdGhpbmcgaW4gdGhlIGxpc3QgbGVhZHMgYmFjayB0byBcImFueVwiLiBVc2UgaXQgZm9yXG4gICAqIG9wdGlvbmFsIGZpbHRlcnMgKFwiQW55IHN0YWdlXCIpLCBub3QgcmVxdWlyZWQgZm9ybSBmaWVsZHNcbiAgICogKFwiU2VsZWN0IGEgdGVhbVwiKS4gSWdub3JlZCBpbiBtdWx0aS1zZWxlY3QsIHdoaWNoIGhhcyBDbGVhci5cbiAgICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gZm9ybWF0U2VsZWN0ZWQ8VD4oXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxuICBzZWxlY3RlZDogU2V0PFQ+LFxuICBtdWx0aVNlbGVjdDogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGVkLnNpemUgPT09IDApIHJldHVybiBcIlwiO1xuICBpZiAobXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWQuc2l6ZSA+IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQuc2l6ZX0gc2VsZWN0ZWRgO1xuICB9XG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChzZWxlY3RlZC5oYXMob3B0LnZhbHVlKSkgbGFiZWxzLnB1c2gob3B0LmxhYmVsKTtcbiAgfVxuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdDxUID0gc3RyaW5nPihwcm9wczogU2VsZWN0UHJvcHM8VD4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIHNlbGVjdGVkLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyID0gXCJTZWxlY3RcXHUyMDI2XCIsXG4gICAgbXVsdGlTZWxlY3QgPSBmYWxzZSxcbiAgICBjbGVhcmFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIHdpZGUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc09wZW4gPSB1c2VTaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlQ29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTZWxlY3RlZChvcHRpb25zLCBzZWxlY3RlZC52YWx1ZSwgbXVsdGlTZWxlY3QpO1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyB0ZXh0IDogcGxhY2Vob2xkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VDb21wdXRlZCgoKSA9PiBzZWxlY3RlZC52YWx1ZS5zaXplID09PSAwKTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25DbGljayA9ICh2YWx1ZTogVCk6IHZvaWQgPT4ge1xuICAgIGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgaWYgKG5leHQuaGFzKHZhbHVlKSkgbmV4dC5kZWxldGUodmFsdWUpO1xuICAgICAgZWxzZSBuZXh0LmFkZCh2YWx1ZSk7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChbdmFsdWVdKTtcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KG9wdGlvbnMubWFwKChvKSA9PiBvLnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gIH07XG5cbiAgLy8gVGhlIGNsZWFyIG9wdGlvbiBiZWhhdmVzIGxpa2UgYSBub3JtYWwgc2VsZWN0aW9uOiBwaWNrIGl0LCBtZW51IGNsb3Nlcy5cbiAgY29uc3QgaGFuZGxlQ2xlYXJPcHRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclBhcnRzID0gW2NsYXNzZXNbXCJ0cmlnZ2VyXCJdID8/IFwiXCJdO1xuICBpZiAoaXNFbXB0eS52YWx1ZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInBsYWNlaG9sZGVyXCJdID8/IFwiXCIpO1xuICBpZiAod2lkZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInRyaWdnZXJXaWRlXCJdID8/IFwiXCIpO1xuICBjb25zdCB0cmlnZ2VyQ2xhc3MgPSB0cmlnZ2VyUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCB0cmlnZ2VyQ29udGVudCA9IChcbiAgICA8PlxuICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJ0cmlnZ2VyTGFiZWxcIl19PntkaXNwbGF5VGV4dC52YWx1ZX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImNhcmV0XCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJzZWxlY3RcIl0gPz8gXCJcIl07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9e2lkfSBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktc2VsZWN0PlxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgICA8RHJvcGRvd25cbiAgICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICAgIHRyaWdnZXI9e3RyaWdnZXJDb250ZW50fVxuICAgICAgICB0cmlnZ2VyQ2xhc3NOYW1lPXt0cmlnZ2VyQ2xhc3N9XG4gICAgICAgIHRyaWdnZXJEaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIHRyaWdnZXJUaXRsZT17ZGlzcGxheVRleHQudmFsdWV9XG4gICAgICAgIG11bHRpU2VsZWN0PXttdWx0aVNlbGVjdH1cbiAgICAgID5cbiAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYWN0aW9uc1wiXX0+XG4gICAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPXtjbGFzc2VzW1wiYWN0aW9uQnRuXCJdfSBvbkNsaWNrPXtoYW5kbGVTZWxlY3RBbGx9PlxuICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPXtjbGFzc2VzW1wiYWN0aW9uQnRuXCJdfSBvbkNsaWNrPXtoYW5kbGVDbGVhcn0+XG4gICAgICAgICAgICAgICAgQ2xlYXJcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgeyFtdWx0aVNlbGVjdCAmJiBjbGVhcmFibGUgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc0VtcHR5LnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICBjbGFzcz17XG4gICAgICAgICAgICAgIGlzRW1wdHkudmFsdWVcbiAgICAgICAgICAgICAgICA/IGAke2NsYXNzZXNbXCJvcHRpb25cIl19ICR7Y2xhc3Nlc1tcIm9wdGlvblNlbGVjdGVkXCJdfWBcbiAgICAgICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEtcG9sbHktc2VsZWN0LWNsZWFyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGVhck9wdGlvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57cGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBzZWxlY3RlZC52YWx1ZS5oYXMob3B0LnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgOiBjbGFzc2VzW1wib3B0aW9uXCJdO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17U3RyaW5nKG9wdC52YWx1ZSl9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wdGlvbkNsaWNrKG9wdC52YWx1ZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttdWx0aVNlbGVjdCAmJiAoXG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJvcHRpb25DaGVja1wiXX1cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICAgICAgICByZWFkT25seT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8c3Bhbj57b3B0LmxhYmVsfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9Ecm9wZG93bj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTa2VsZXRvbiDigJQgc2hpbW1lcmluZyBwbGFjZWhvbGRlciBmb3IgbG9hZGluZyBzdGF0ZXMuXG4gKlxuICogVGhyZWUgdmFyaWFudHM6IHRleHQgKGZ1bGwtd2lkdGgsIDFlbSB0YWxsKSwgcmVjdCAoZnVsbC13aWR0aCwgMTAwcHhcbiAqIHRhbGwpLCBjaXJjbGUgKDQweDQwKS4gQSBDU1MgZ3JhZGllbnQgYW5pbWF0ZXMgbGVmdC10by1yaWdodCBvdmVyXG4gKiAxLjVzLiBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmAgemVyb2VzIHRoZSBhbmltYXRpb24gdmlhIHRoZSB0b2tlblxuICogc3lzdGVtLiBDb25zdW1lcnMgc2l6ZSB2aWEgd2lkdGgvaGVpZ2h0IHByb3BzIChweCBudW1iZXJzIG9yIENTU1xuICogc3RyaW5ncyk7IGRlZmF1bHQgc2l6aW5nIGNvbWVzIGZyb20gdGhlIHZhcmlhbnQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ta2VsZXRvbi5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uVmFyaWFudCA9IFwidGV4dFwiIHwgXCJyZWN0XCIgfCBcImNpcmNsZVwiO1xuXG5leHBvcnQgdHlwZSBTa2VsZXRvblByb3BzID0ge1xuICB2YXJpYW50PzogU2tlbGV0b25WYXJpYW50O1xuICB3aWR0aD86IHN0cmluZyB8IG51bWJlcjtcbiAgaGVpZ2h0Pzogc3RyaW5nIHwgbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiByZXNvbHZlU2l6ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiBgJHt2YWx1ZX1weGA7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdmFyaWFudENsYXNzKHZhcmlhbnQ6IFNrZWxldG9uVmFyaWFudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YXJpYW50ID09PSBcImNpcmNsZVwiKSByZXR1cm4gY2xhc3Nlc1tcImNpcmNsZVwiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwicmVjdFwiKSByZXR1cm4gY2xhc3Nlc1tcInJlY3RcIl07XG4gIHJldHVybiBjbGFzc2VzW1widGV4dFwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNrZWxldG9uKHByb3BzOiBTa2VsZXRvblByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInRleHRcIiwgd2lkdGgsIGhlaWdodCwgY2xhc3NOYW1lIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCB3ID0gcmVzb2x2ZVNpemUod2lkdGgpO1xuICBjb25zdCBoID0gcmVzb2x2ZVNpemUoaGVpZ2h0KTtcbiAgaWYgKHcgIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJ3aWR0aFwiXSA9IHc7XG4gIGlmIChoICE9PSB1bmRlZmluZWQpIHN0eWxlW1wiaGVpZ2h0XCJdID0gaDtcblxuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgYmFzZSA9IGNsYXNzZXNbXCJza2VsZXRvblwiXTtcbiAgaWYgKGJhc2UpIHBhcnRzLnB1c2goYmFzZSk7XG4gIGNvbnN0IHZDbGFzcyA9IHZhcmlhbnRDbGFzcyh2YXJpYW50KTtcbiAgaWYgKHZDbGFzcykgcGFydHMucHVzaCh2Q2xhc3MpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhblxuICAgICAgY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1za2VsZXRvbj17dmFyaWFudH1cbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUYWJzIOKAlCBob3Jpem9udGFsIG5hdiB3aXRoIGFjdGl2ZS10YWIgYWNjZW50LlxuICpcbiAqIEVhY2ggYnV0dG9uIGNhcnJpZXMgYGRhdGEtYWN0aW9uYCAodGhlIGNvbnN1bWVyLXByb3ZpZGVkIGFjdGlvbiBuYW1lKVxuICogYW5kIGBkYXRhLWFjdGlvbi1pZD17dGFiLmlkfWAgc28gdGhlIGV2ZW50IGRlbGVnYXRvciByZXNvbHZlcyB0aGVcbiAqIGFjdGl2YXRlZCB0YWIuIFRoZSBhY3RpdmUgdGFiIGdldHMgYGFyaWEtY3VycmVudD1cInBhZ2VcImAgYW5kIGFcbiAqIGJvdHRvbS1ib3JkZXIgYWNjZW50LiBUaGUgbmF2IHNjcm9sbHMgaG9yaXpvbnRhbGx5IHdpdGggYSBoaWRkZW5cbiAqIHNjcm9sbGJhciBmb3Igb3ZlcmZsb3cuIEludGVybmFsIGFycmFuZ2VtZW50IHVzZXMgPExheW91dD4sIHBhY2tlZCB0b1xuICogdGhlIGlubGluZSBzdGFydDogdGhlIGdyaWQgaXMgMTAwJSB3aWRlLCBzbyB3aXRob3V0IGp1c3RpZnlDb250ZW50IHRoZVxuICogYGF1dG9gIHRyYWNrcyBzdHJldGNoIGFuZCBmb3VyIHRhYnMgc3ByZWFkIGFjcm9zcyB0aGUgd2hvbGUgY29udGFpbmVyLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGFicy5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRhYiA9IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgZGlzYWJsZWQ/OiBib29sZWFuIH07XG5cbmV4cG9ydCB0eXBlIFRhYnNQcm9wcyA9IHtcbiAgdGFiczogVGFiW107XG4gIGFjdGl2ZVRhYjogc3RyaW5nO1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRhYnMocHJvcHM6IFRhYnNQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB0YWJzLCBhY3RpdmVUYWIsIGFjdGlvbiwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0YWJzXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgPG5hdlxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGFyaWEtbGFiZWw9e3Byb3BzW1wiYXJpYS1sYWJlbFwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdGFic1xuICAgID5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgY29sdW1ucz17YHJlcGVhdCgke3RhYnMubGVuZ3RofSwgYXV0bylgfVxuICAgICAgICBnYXA9XCIwXCJcbiAgICAgICAgYWxpZ25JdGVtcz1cImVuZFwiXG4gICAgICAgIGp1c3RpZnlDb250ZW50PVwic3RhcnRcIlxuICAgICAgPlxuICAgICAgICB7dGFicy5tYXAoKHRhYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVGFiID09PSB0YWIuaWQ7XG4gICAgICAgICAgY29uc3QgdGFiQ2xhc3MgPSBpc0FjdGl2ZSA/IGAke2NsYXNzZXNbXCJ0YWJcIl19ICR7Y2xhc3Nlc1tcImFjdGl2ZVwiXX1gIDogY2xhc3Nlc1tcInRhYlwiXTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3RhYi5pZH1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXt0YWJDbGFzc31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RhYi5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgYXJpYS1jdXJyZW50PXtpc0FjdGl2ZSA/IFwicGFnZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBkYXRhLWFjdGlvbj17YWN0aW9ufVxuICAgICAgICAgICAgICBkYXRhLWFjdGlvbi1pZD17dGFiLmlkfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGFiLmxhYmVsfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0xheW91dD5cbiAgICA8L25hdj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUZXh0IOKAlCB0eXBvZ3JhcGhpYyBwcmltaXRpdmUgZm9yIHNlY29uZGFyeSwgc2l6ZWQsIGFuZCBzdGF0dXMgY29weS5cbiAqXG4gKiBSZW5kZXJzIHN1YnRpdGxlcywgY2FwdGlvbnMsIGZpZWxkIGxhYmVscywgZW1wdHktc3RhdGUgY29weSwgYW5kXG4gKiBlcnJvci93YXJuaW5nIG1lc3NhZ2VzIHdpdGhvdXQgdGhlIGNvbnN1bWVyIHJlYWNoaW5nIGZvciBhIGBzdHlsZWBcbiAqIGF0dHJpYnV0ZSBvciBhIGhhbmQtcm9sbGVkIGNsYXNzLiBgdG9uZWAgbWFwcyB0byB0aGUgc2VtYW50aWNcbiAqIGAtLXBvbGx5LXRleHQtKmAgYW5kIGAtLXBvbGx5LXN0YXR1cy0qYCB0b2tlbiBmYW1pbGllczsgYHNpemVgLFxuICogYHdlaWdodGAsIGBpdGFsaWNgLCBhbmQgYGxlYWRpbmdgIGNvdmVyIHRoZSByZW1haW5pbmcgdHlwb2dyYXBoaWNcbiAqIGF4ZXMuIGBhc2Aga2VlcHMgdGhlIGVsZW1lbnQgcG9seW1vcnBoaWMgc28gdGhlIHNhbWUgcHJpbWl0aXZlIGJhY2tzIGFcbiAqIDxzcGFuPiwgPHA+LCA8bGFiZWw+LCBvciA8ZmlnY2FwdGlvbj4uIEEgbm8tcHJvcCA8VGV4dD4gaXMgYW4gb3JkaW5hcnlcbiAqIDxzcGFuPiBhdCBib2R5IHNpemUgYW5kIGRlZmF1bHQgY29sb3VyLlxuICpcbiAqIHBvbGx5IzEyNTogYXJiaXRyYXJ5IGBkYXRhLSpgIC8gYGFyaWEtKmAgYXR0cmlidXRlcyBhcmUgZm9yd2FyZGVkIHRvXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCwgc28gYSBUZXh0IHRoYXQgYWxzbyBuZWVkcyBhIHRlc3QgaG9vayBvciBhblxuICogYTExeSBhdHRyaWJ1dGUgc3RheXMgYSBzaW5nbGUgZWxlbWVudC5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RleHQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUZXh0VG9uZSA9IFwiZGVmYXVsdFwiIHwgXCJtdXRlZFwiIHwgXCJkYW5nZXJcIiB8IFwid2FybmluZ1wiIHwgXCJzdWNjZXNzXCI7XG5leHBvcnQgdHlwZSBUZXh0U2l6ZSA9IFwieHNcIiB8IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiB8IFwieGxcIjtcbmV4cG9ydCB0eXBlIFRleHRXZWlnaHQgPSBcIm5vcm1hbFwiIHwgXCJtZWRpdW1cIiB8IFwiYm9sZFwiO1xuZXhwb3J0IHR5cGUgVGV4dExlYWRpbmcgPSBcInRpZ2h0XCIgfCBcImJhc2VcIiB8IFwibG9vc2VcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChzcGFuLCBwLCBsYWJlbCwgZmlnY2FwdGlvbiwg4oCmKS4gRGVmYXVsdHMgdG8gJ3NwYW4nLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogQ29sb3VyIHJvbGUuICdtdXRlZCcgZGUtZW1waGFzaXNlczsgJ2RhbmdlcicvJ3dhcm5pbmcnLydzdWNjZXNzJ1xuICAgKiByZW5kZXIgc3RhdHVzIGNvcHkgZnJvbSB0aGUgYC0tcG9sbHktc3RhdHVzLSpgIHRva2Vucy4gRGVmYXVsdDogJ2RlZmF1bHQnLiAqL1xuICB0b25lPzogVGV4dFRvbmU7XG5cbiAgLyoqIFRva2VuLWJhY2tlZCBmb250IHNpemUuIERlZmF1bHQ6IGluaGVyaXQgZnJvbSBjb250ZXh0LiAqL1xuICBzaXplPzogVGV4dFNpemU7XG5cbiAgLyoqIFRva2VuLWJhY2tlZCBmb250IHdlaWdodC4gRGVmYXVsdDogaW5oZXJpdCBmcm9tIGNvbnRleHQuICovXG4gIHdlaWdodD86IFRleHRXZWlnaHQ7XG5cbiAgLyoqIEl0YWxpYyBlbXBoYXNpcyDigJQgZm9yIGhpbnRzIGFuZCBhc2lkZXMg4oCUIHdpdGhvdXQgYW4gaW5saW5lIHN0eWxlLiAqL1xuICBpdGFsaWM/OiBib29sZWFuO1xuXG4gIC8qKiBMaW5lLXRocm91Z2gg4oCUIGZvciBjb21wbGV0ZWQgdG9kbyBpdGVtcyBhbmQgc3VwZXJzZWRlZCBjb3B5LiAqL1xuICBzdHJpa2V0aHJvdWdoPzogYm9vbGVhbjtcblxuICAvKiogVG9rZW4tYmFja2VkIGxpbmUgaGVpZ2h0LiAnbG9vc2UnIHN1aXRzIG11bHRpLWxpbmUgYm9keSBjb3B5LiAqL1xuICBsZWFkaW5nPzogVGV4dExlYWRpbmc7XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgLyoqIEZvcndhcmRlZCBzbyA8VGV4dCBhcz1cImxhYmVsXCI+IGNhbiBwb2ludCBhdCBhIGNvbnRyb2wuICovXG4gIGh0bWxGb3I/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVGV4dChwcm9wczogVGV4dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgYXMgPSBcInNwYW5cIixcbiAgICB0b25lID0gXCJkZWZhdWx0XCIsXG4gICAgc2l6ZSxcbiAgICB3ZWlnaHQsXG4gICAgaXRhbGljLFxuICAgIHN0cmlrZXRocm91Z2gsXG4gICAgbGVhZGluZyxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widGV4dFwiXV07XG4gIGlmICh0b25lICE9PSBcImRlZmF1bHRcIikgcGFydHMucHVzaChjbGFzc2VzW3RvbmVdKTtcbiAgaWYgKHNpemUpIHBhcnRzLnB1c2goY2xhc3Nlc1tzaXplXSk7XG4gIGlmICh3ZWlnaHQpIHBhcnRzLnB1c2goY2xhc3Nlc1t3ZWlnaHRdKTtcbiAgaWYgKGl0YWxpYykgcGFydHMucHVzaChjbGFzc2VzW1wiaXRhbGljXCJdKTtcbiAgaWYgKHN0cmlrZXRocm91Z2gpIHBhcnRzLnB1c2goY2xhc3Nlc1tcInN0cmlrZXRocm91Z2hcIl0pO1xuICBpZiAobGVhZGluZykgcGFydHMucHVzaChjbGFzc2VzW2xlYWRpbmddKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd24gYXR0cmlidXRlc1xuICAgICAgLy8gYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzczogcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLFxuICAgICAgZm9yOiBwcm9wcy5odG1sRm9yLFxuICAgICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgICBcImRhdGEtcG9sbHktdGV4dFwiOiB0b25lLFxuICAgIH0sXG4gICAgY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTaGFyZWQgaW5wdXQgYTExeSB3aXJpbmcuXG4gKlxuICogUmV0dXJucyBhIGNvbW1vbiBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IFRleHRJbnB1dCwgQWN0aW9uSW5wdXQsIGFuZFxuICogYW55IGNvbnN1bWVyLWJ1aWx0IGlucHV0IGNhbiBzcGxhdCBvbnRvIGl0cyBuYXRpdmUgZWxlbWVudC4gS2VlcHNcbiAqIGFyaWEtKiBhbmQgZGF0YS1wb2xseS0qIG5hbWVzIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYW1pbHkuXG4gKi9cblxuZXhwb3J0IHR5cGUgSW5wdXRBMTF5UHJvcHMgPSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGludmFsaWQ/OiBib29sZWFuO1xuICBkZXNjcmliZWRCeT86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW5wdXRBMTF5KHByb3BzOiBJbnB1dEExMXlQcm9wcykge1xuICBjb25zdCBhdHRyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWlucHV0XCI6IHRydWUsXG4gICAgXCJhcmlhLWludmFsaWRcIjogcHJvcHMuaW52YWxpZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkLFxuICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBwcm9wcy5yZXF1aXJlZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkLFxuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wcy5kZXNjcmliZWRCeSxcbiAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgIGlkOiBwcm9wcy5pZCxcbiAgICBwbGFjZWhvbGRlcjogcHJvcHMucGxhY2Vob2xkZXIsXG4gICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5OiBwcm9wcy5yZWFkT25seSxcbiAgfTtcbiAgaWYgKHByb3BzLmludmFsaWQpIGF0dHJzW1wiZGF0YS1zdGF0ZVwiXSA9IFwiaW52YWxpZFwiO1xuICByZXR1cm4gYXR0cnM7XG59XG4iLAogICAgIi8qKlxuICogVGV4dElucHV0IOKAlCBwYXNzaXZlLCBzaWduYWwtZnJpZW5kbHkgbmF0aXZlIGlucHV0IHdyYXBwZXIuXG4gKlxuICogRGVzaWduZWQgdG8gbGl2ZSBpbnNpZGUgPEFjdGlvbkZvcm0+LiBQYXNzIGEgcGxhaW4gc3RyaW5nIGZvclxuICogdW5jb250cm9sbGVkIG1vZGUgKEZvcm1EYXRhLW9uLXN1Ym1pdCBwaWNrcyB1cCB0aGUgdmFsdWUpIG9yIGFcbiAqIFNpZ25hbDxzdHJpbmc+IGZvciBjb250cm9sbGVkIG1vZGUuIEVpdGhlciB3YXksIGExMXkgYXR0cmlidXRlcyBhcmVcbiAqIHdpcmVkIGJ5IHRoZSBzaGFyZWQgaW5wdXQtYmFzZSwgdGhlIHN0YWJsZSBgW2RhdGEtcG9sbHktaW5wdXRdYCBob29rXG4gKiBpcyBhcHBsaWVkIGZvciBzdHlsaW5nLCBhbmQgYGludmFsaWRgIGZsaXBzIGBhcmlhLWludmFsaWRgIGFuZFxuICogYGRhdGEtc3RhdGU9XCJpbnZhbGlkXCJgIGZvciBjb25zdW1lciBzZWxlY3RvcnMuXG4gKlxuICogYGlucHV0VHlwZWAgc2V0cyB0aGUgbmF0aXZlIHNpbmdsZS1saW5lIGlucHV0IHR5cGUg4oCUIFwidGV4dFwiIChkZWZhdWx0KSxcbiAqIFwiZW1haWxcIiwgXCJudW1iZXJcIiwgXCJkYXRlXCIsIGFuZCBmcmllbmRzIOKAlCBzbyB0aGUgYnJvd3NlciBzdXBwbGllcyB0aGVcbiAqIHJpZ2h0IGtleWJvYXJkIGFuZCB2YWxpZGF0aW9uLiBgbWluYC9gbWF4YC9gc3RlcGAgYXBwbHkgdG8gdGhlXG4gKiBzaW5nbGUtbGluZSB2YXJpYW50IChlLmcuIG51bWVyaWMgb3IgZGF0ZSBib3VuZHMpIGFuZCBrZWVwIGZpbHRlclxuICogZmllbGRzIGZyb20gYmVpbmcgdW52YWxpZGF0ZWQgZnJlZSB0ZXh0LlxuICpcbiAqIGBlcnJvcmAsIHdoZW4gc3VwcGxpZWQsIHJlbmRlcnMgYSBtZXNzYWdlIGJlbmVhdGggdGhlIGZpZWxkLCB3cmFwcyB0aGVcbiAqIGNvbnRyb2wgaW4gYSBsYWJlbGxlZCBncm91cCwgYW5kIGF1dG8td2lyZXMgYGFyaWEtZGVzY3JpYmVkYnlgIHBsdXMgdGhlXG4gKiBpbnZhbGlkIHN0YXRlIOKAlCBubyBtYW51YWwgaWQganVnZ2xpbmcuIFdpdGhvdXQgYGVycm9yYCB0aGUgcHJpbWl0aXZlXG4gKiBzdGF5cyBhIGJhcmUgbmF0aXZlIGVsZW1lbnQsIGV4YWN0bHkgYXMgYmVmb3JlLCBzbyBjb25zdW1lcnMgdGhhdCBvd25cbiAqIHRoZWlyIG93biBzdXJyb3VuZGluZyBzdHJ1Y3R1cmUgYXJlIHVuYWZmZWN0ZWQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgYnVpbGRJbnB1dEExMXkgfSBmcm9tIFwiLi9pbnRlcm5hbC9pbnB1dC1iYXNlLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuXG50eXBlIFZhcmlhbnQgPSBcInNpbmdsZVwiIHwgXCJtdWx0aVwiO1xuXG4vKiogTmF0aXZlIHNpbmdsZS1saW5lIGlucHV0IHR5cGVzIHBvbGx5J3MgZmlsdGVyL2Zvcm0gZmllbGRzIHVzZS4gKi9cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFR5cGUgPVxuICB8IFwidGV4dFwiXG4gIHwgXCJlbWFpbFwiXG4gIHwgXCJ1cmxcIlxuICB8IFwidGVsXCJcbiAgfCBcInNlYXJjaFwiXG4gIHwgXCJwYXNzd29yZFwiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiZGF0ZVwiXG4gIHwgXCJkYXRldGltZS1sb2NhbFwiXG4gIHwgXCJ0aW1lXCJcbiAgfCBcIm1vbnRoXCJcbiAgfCBcIndlZWtcIjtcblxuZXhwb3J0IHR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNpZ25hbDxzdHJpbmc+IGZvciBjb250cm9sbGVkLCBzdHJpbmcgZm9yIHVuY29udHJvbGxlZCBkZWZhdWx0LiAqL1xuICB2YWx1ZT86IFNpZ25hbDxzdHJpbmc+IHwgc3RyaW5nO1xuICB2YXJpYW50PzogVmFyaWFudDtcbiAgLyoqIE5hdGl2ZSBpbnB1dCB0eXBlIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudC4gRGVmYXVsdDogXCJ0ZXh0XCIuICovXG4gIGlucHV0VHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIC8qKiBMb3dlciBib3VuZCBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgbWluPzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogVXBwZXIgYm91bmQgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IChudW1iZXIvZGF0ZSB0eXBlcykuICovXG4gIG1heD86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIFN0ZXAgZ3JhbnVsYXJpdHkgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IChudW1iZXIvZGF0ZSB0eXBlcykuICovXG4gIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGEgaGludCBiZXlvbmQgdGhlIHBsYWNlaG9sZGVyL2xhYmVsLiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgaW52YWxpZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBWYWxpZGF0aW9uIG1lc3NhZ2UgcmVuZGVyZWQgYmVuZWF0aCB0aGUgZmllbGQuIFdoZW4gcHJlc2VudCB0aGVcbiAgICogcHJpbWl0aXZlIHdyYXBzIHRoZSBjb250cm9sLCBsaW5rcyB0aGUgbWVzc2FnZSB2aWEgYXJpYS1kZXNjcmliZWRieSxcbiAgICogYW5kIG1hcmtzIHRoZSBmaWVsZCBpbnZhbGlkLiBPbWl0IGl0IHRvIGtlZXAgYSBiYXJlIG5hdGl2ZSBlbGVtZW50LlxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGlkPzogc3RyaW5nO1xuICBkZXNjcmliZWRCeT86IHN0cmluZztcbiAgcm93cz86IG51bWJlcjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWw8VD4odjogU2lnbmFsPFQ+IHwgVCB8IHVuZGVmaW5lZCk6IHYgaXMgU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgXCJ2YWx1ZVwiIGluIHYgJiYgXCJwZWVrXCIgaW4gKHYgYXMgdW5rbm93biBhcyBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzOiBUZXh0SW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgdmFyaWFudCA9IHByb3BzLnZhcmlhbnQgPz8gXCJzaW5nbGVcIjtcbiAgLy8gQWx3YXlzIGNhbGxlZCBzbyBob29rIG9yZGVyIGlzIHN0YWJsZTsgb25seSB1c2VkIHdoZW4gYGVycm9yYCBpcyBzZXQuXG4gIGNvbnN0IGVycm9ySWQgPSB1c2VJZCgpO1xuICBjb25zdCBoYXNFcnJvciA9IHByb3BzLmVycm9yICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZXJyb3IgIT09IFwiXCI7XG5cbiAgY29uc3QgZGVzY3JpYmVkQnkgPVxuICAgIFtwcm9wcy5kZXNjcmliZWRCeSwgaGFzRXJyb3IgPyBlcnJvcklkIDogdW5kZWZpbmVkXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIikgfHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGExMXkgPSBidWlsZElucHV0QTExeSh7XG4gICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgcmVxdWlyZWQ6IHByb3BzLnJlcXVpcmVkLFxuICAgIC8vIEFuIGVycm9yIG1lc3NhZ2UgaW1wbGllcyB0aGUgZmllbGQgaXMgaW52YWxpZC5cbiAgICBpbnZhbGlkOiBwcm9wcy5pbnZhbGlkIHx8IGhhc0Vycm9yLFxuICAgIGRlc2NyaWJlZEJ5LFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHByb3BzLnJlYWRPbmx5LFxuICB9KTtcblxuICBjb25zdCBjb250cm9sbGVkID0gaXNTaWduYWwocHJvcHMudmFsdWUpO1xuICBjb25zdCBzdHJpbmdWYWx1ZSA9IGNvbnRyb2xsZWQgPyAocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBTaWduYWw8c3RyaW5nPikudmFsdWUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGNvbnRyb2xsZWRcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogKChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gXCJcIik7XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcImlucHV0XCJdfSAke3Byb3BzLmNsYXNzTmFtZX1gIDogY2xhc3Nlc1tcImlucHV0XCJdO1xuXG4gIGNvbnN0IG9uSW5wdXQgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGNvbnRyb2xsZWQpIHtcbiAgICAgIChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIFNpZ25hbDxzdHJpbmc+KS52YWx1ZSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29udHJvbCA9XG4gICAgdmFyaWFudCA9PT0gXCJtdWx0aVwiID8gKFxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIHsuLi4oYTExeSBhcyB1bmtub3duIGFzIEpTWC5IVE1MQXR0cmlidXRlczxIVE1MVGV4dEFyZWFFbGVtZW50Pil9XG4gICAgICAgIGNsYXNzPXtjbGFzc05hbWV9XG4gICAgICAgIHRpdGxlPXtwcm9wcy50aXRsZX1cbiAgICAgICAgZGF0YS1wb2xseS1pbnB1dC12YXJpYW50PVwibXVsdGlcIlxuICAgICAgICByb3dzPXtwcm9wcy5yb3dzfVxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vQXV0b2ZvY3VzOiBvcHQtaW4gcHJvcCDigJQgY2FsbGVyIHJlcXVlc3RzIGF1dG9mb2N1cyBleHBsaWNpdGx5IChlLmcuIGZvcm0gb3BlbnMgdG8gdGhpcyBmaWVsZCkuXG4gICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxuICAgICAgICB2YWx1ZT17c3RyaW5nVmFsdWV9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICBvbklucHV0PXtvbklucHV0fVxuICAgICAgLz5cbiAgICApIDogKFxuICAgICAgPGlucHV0XG4gICAgICAgIHsuLi4oYTExeSBhcyB1bmtub3duIGFzIEpTWC5IVE1MQXR0cmlidXRlczxIVE1MSW5wdXRFbGVtZW50Pil9XG4gICAgICAgIHR5cGU9e3Byb3BzLmlucHV0VHlwZSA/PyBcInRleHRcIn1cbiAgICAgICAgY2xhc3M9e2NsYXNzTmFtZX1cbiAgICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgICBkYXRhLXBvbGx5LWlucHV0LXZhcmlhbnQ9XCJzaW5nbGVcIlxuICAgICAgICBtaW49e3Byb3BzLm1pbn1cbiAgICAgICAgbWF4PXtwcm9wcy5tYXh9XG4gICAgICAgIHN0ZXA9e3Byb3BzLnN0ZXB9XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9BdXRvZm9jdXM6IG9wdC1pbiBwcm9wIOKAlCBjYWxsZXIgcmVxdWVzdHMgYXV0b2ZvY3VzIGV4cGxpY2l0bHkgKGUuZy4gZm9ybSBvcGVucyB0byB0aGlzIGZpZWxkKS5cbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XG4gICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAvPlxuICAgICk7XG5cbiAgaWYgKCFoYXNFcnJvcikgcmV0dXJuIGNvbnRyb2w7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiZmllbGRcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWVsZD5cbiAgICAgIHtjb250cm9sfVxuICAgICAgPHNwYW4gaWQ9e2Vycm9ySWR9IHJvbGU9XCJhbGVydFwiIGNsYXNzPXtjbGFzc2VzW1wiZXJyb3JcIl19PlxuICAgICAgICB7cHJvcHMuZXJyb3J9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVG9hc3Qg4oCUIGNvbnN1bWVyLWZhY2luZyBzdXJmYWNlIGZvciB0aGUgZ2xvYmFsIGVycm9yU3RhdGUuXG4gKlxuICogUmVuZGVycyBldmVyeSBlbnRyeSBvZiB0aGUgYGVycm9yU3RhdGVgIHNpZ25hbCBpbnRvIGEgdmlld3BvcnQgbW91bnRlZFxuICogaW5zaWRlIE92ZXJsYXlSb290LiBgYXJpYS1saXZlYCBpcyBwb2xpdGUgZm9yIGluZm8vd2FybmluZyBhbmRcbiAqIGFzc2VydGl2ZSBmb3IgZXJyb3Igc2V2ZXJpdHkuIEVhY2ggaXRlbSBhdXRvLWRpc21pc3NlcyBhZnRlclxuICogYGF1dG9EaXNtaXNzTXNgIHVubGVzcyB0aGUgdXNlciBob3ZlcnMgdGhlIHZpZXdwb3J0LiBDbGlja2luZyBhXG4gKiB0b2FzdCBvciBpdHMgY2xvc2UgYnV0dG9uIHJlbW92ZXMgdGhhdCBzaW5nbGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGNsZWFyRXJyb3IsIHR5cGUgRXJyb3JFbnRyeSwgZXJyb3JTdGF0ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdFZpZXdwb3J0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzTXM/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZXdwb3J0KHByb3BzOiBUb2FzdFZpZXdwb3J0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBhdXRvRGlzbWlzc01zID0gcHJvcHMuYXV0b0Rpc21pc3NNcyA/PyA1MDAwO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcGF1c2VkLCBzZXRQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlbnRyaWVzID0gZXJyb3JTdGF0ZS52YWx1ZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGF1c2VkIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgaGVhZCA9IGVudHJpZXNbMF07XG4gICAgaWYgKCFoZWFkKSByZXR1cm47XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckVycm9yKGhlYWQuaWQpO1xuICAgIH0sIGF1dG9EaXNtaXNzTXMpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3BhdXNlZCwgZW50cmllcywgYXV0b0Rpc21pc3NNc10pO1xuXG4gIGlmICghcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogdmlld3BvcnQgcGF1c2VzIGF1dG8tZGlzbWlzcyBvbiBob3ZlcjsgaXQgaXMgYSBjb250YWluZXIsIG5vdCBhbiBpbnRlcmFjdGl2ZSBjb250cm9sIGl0c2VsZi5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz17YCR7Y2xhc3Nlc1tcInZpZXdwb3J0XCJdfSAke3Byb3BzLmNsYXNzTmFtZSA/PyBcIlwifWAudHJpbSgpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2FzdC12aWV3cG9ydFxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRQYXVzZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldFBhdXNlZChmYWxzZSl9XG4gICAgPlxuICAgICAge2VudHJpZXMubWFwKChlbnRyeSkgPT4gKFxuICAgICAgICA8VG9hc3RJdGVtIGtleT17ZW50cnkuaWR9IGVudHJ5PXtlbnRyeX0gLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBUb2FzdEl0ZW0oeyBlbnRyeSB9OiB7IGVudHJ5OiBFcnJvckVudHJ5IH0pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IGxpdmVuZXNzID0gZW50cnkuc2V2ZXJpdHkgPT09IFwiZXJyb3JcIiA/IFwiYXNzZXJ0aXZlXCIgOiBcInBvbGl0ZVwiO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZCkgdmFyKC0tcG9sbHktc3BhY2UtbGcpXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcIml0ZW1cIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvYXN0LWl0ZW1cbiAgICAgIGRhdGEtc2V2ZXJpdHk9e2VudHJ5LnNldmVyaXR5fVxuICAgICAgcm9sZT17ZW50cnkuc2V2ZXJpdHkgPT09IFwiZXJyb3JcIiA/IFwiYWxlcnRcIiA6IFwic3RhdHVzXCJ9XG4gICAgICBhcmlhLWxpdmU9e2xpdmVuZXNzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWVzc2FnZVwiXX0+e2VudHJ5Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtcG9sbHktdG9hc3QtY2xvc2VcbiAgICAgICAgb25DbGljaz17KCkgPT4gY2xlYXJFcnJvcihlbnRyeS5pZCl9XG4gICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCJcbiAgICAgID5cbiAgICAgICAgw5dcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvYXN0ID0geyBWaWV3cG9ydCB9O1xuIiwKICAgICIvKipcbiAqIFRvZ2dsZSDigJQgc3dpdGNoLXJvbGUgY2hlY2tib3guXG4gKlxuICogQSB2aXN1YWxseS1oaWRkZW4gPGlucHV0IHJvbGU9XCJzd2l0Y2hcIj4gcGFpcmVkIHdpdGggYSBzdHlsZWQgdHJhY2tcbiAqIGFuZCB0aHVtYiBpbnNpZGUgYSA8bGFiZWw+LiBQYXNzaXZlOiB0aGUgY2FsbGVyIGRyaXZlcyBgY2hlY2tlZGAgYW5kXG4gKiBoYW5kbGVzIHN0YXRlIGNoYW5nZXMgdmlhIHRoZSBhY3Rpb24gcmVnaXN0cnkgKHdyYXAgdGhlIFRvZ2dsZSBpbiBhXG4gKiA8bGFiZWwgZGF0YS1hY3Rpb249XCIuLi5cIj4gb3IgYmluZCBhIHBhcmVudCBmb3JtJ3Mgc3VibWl0KS4gYTExeVxuICogYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIG5hdGl2ZSBpbnB1dDsgdGhlIGxhYmVsIHdyYXBzIHNvIGNsaWNrc1xuICogYW55d2hlcmUgaW4gdGhlIGNvbnRyb2wgdG9nZ2xlIHRoZSBpbnB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvZ2dsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZVByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGUocHJvcHM6IFRvZ2dsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIG5hbWUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widG9nZ2xlXCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktdG9nZ2xlPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgcm9sZT1cInN3aXRjaFwiXG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGFyaWEtY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPXtjaGVja2VkID8gYCR7Y2xhc3Nlc1tcInRyYWNrXCJdfSAke2NsYXNzZXNbXCJ0cmFja0NoZWNrZWRcIl19YCA6IGNsYXNzZXNbXCJ0cmFja1wiXX0+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9e2NoZWNrZWQgPyBgJHtjbGFzc2VzW1widGh1bWJcIl19ICR7Y2xhc3Nlc1tcInRodW1iQ2hlY2tlZFwiXX1gIDogY2xhc3Nlc1tcInRodW1iXCJdfVxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLy8gU3RhdGUgcHJpbWl0aXZlcyB3aXRoIG9wdGlvbmFsIHN5bmMgYW5kIHBlcnNpc3RlbmNlXG5cbmltcG9ydCB7IGVmZmVjdCwgdHlwZSBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUJ1cyB9IGZyb20gXCIuL21lc3NhZ2UtYnVzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlQWRhcHRlciwgdHlwZSBTdG9yYWdlQWRhcHRlciB9IGZyb20gXCIuL3N0b3JhZ2UtYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlU3luY0FkYXB0ZXIsIHR5cGUgU3luY0FkYXB0ZXIgfSBmcm9tIFwiLi9zeW5jLWFkYXB0ZXJcIjtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIHByb21pc2UgZm9yIGh5ZHJhdGlvbiBjb250cm9sXG4gKi9cbnR5cGUgU2lnbmFsV2l0aExvYWRlZDxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBhbmQgLnZlcmlmeSBwcm9wZXJ0aWVzIGZvciB2ZXJpZmljYXRpb24gdHJhY2tpbmdcbiAqL1xudHlwZSBTaWduYWxXaXRoVmVyaWZ5PFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeTogVCB9O1xuXG50eXBlIFN0YXRlRW50cnk8VD4gPSB7XG4gIHNpZ25hbDogU2lnbmFsPFQ+O1xuICBjbG9jazogbnVtYmVyOyAvLyBMYW1wb3J0IGNsb2NrIGZvciBjYXVzYWwgb3JkZXJpbmdcbiAgbG9hZGVkOiBQcm9taXNlPHZvaWQ+O1xuICB1cGRhdGluZzogYm9vbGVhbjtcbn07XG5cbnR5cGUgU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IHtcbiAgLy8gTGVnYWN5IE1lc3NhZ2VCdXMgc3VwcG9ydCAoZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIHYyLjApXG4gIGJ1cz86IE1lc3NhZ2VCdXM7XG5cbiAgLy8gTmV3IGFkYXB0ZXIgc3lzdGVtIChyZWNvbW1lbmRlZClcbiAgc3RvcmFnZT86IFN0b3JhZ2VBZGFwdGVyOyAvLyBDdXN0b20gc3RvcmFnZSBhZGFwdGVyXG4gIHN5bmM/OiBTeW5jQWRhcHRlcjsgLy8gQ3VzdG9tIHN5bmMgYWRhcHRlclxuXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgZGVib3VuY2VNcz86IG51bWJlcjsgLy8gRGVib3VuY2Ugc3RvcmFnZSB3cml0ZXNcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUOyAvLyBSdW50aW1lIHR5cGUgdmFsaWRhdGlvblxuICB2ZXJpZnk/OiBib29sZWFuOyAvLyBFbmFibGUgdmVyaWZpY2F0aW9uIHRyYWNraW5nIChjcmVhdGVzIHBsYWluIG9iamVjdCBtaXJyb3IpXG59O1xuXG5jb25zdCBzdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFN0YXRlRW50cnk8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogU2hhcmVkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBBTkQgcGVyc2lzdGVkIHRvIHN0b3JhZ2VcbiAqXG4gKiBVc2VzIExhbXBvcnQgY2xvY2sgZm9yIGNvbmZsaWN0IHJlc29sdXRpb24uIFN0YXRlIGlzIGF1dG9tYXRpY2FsbHk6XG4gKiAtIExvYWRlZCBmcm9tIGNocm9tZS5zdG9yYWdlIG9uIGluaXRpYWxpemF0aW9uXG4gKiAtIFN5bmNlZCB0byBvdGhlciBjb250ZXh0cyB2aWEgYnJvYWRjYXN0IG1lc3NhZ2VzXG4gKiAtIFBlcnNpc3RlZCB0byBjaHJvbWUuc3RvcmFnZSBvbiBldmVyeSBjaGFuZ2VcbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHMgKHVzZSBjb250ZW50IHNjcmlwdCBzdGF0ZSBpbnN0ZWFkKVxuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZSAoZS5nLiwgXCJhcHAtc2V0dGluZ3NcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlIGlmIG5vdGhpbmcgaXMgaW4gc3RvcmFnZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChidXMsIGRlYm91bmNlTXMpXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgdGhhdCBzdGF5cyBpbiBzeW5jIGFjcm9zcyBhbGwgY29udGV4dHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRGVmaW5lIG9uY2UsIHVzZSBldmVyeXdoZXJlXG4gKiBjb25zdCBzZXR0aW5ncyA9ICRzaGFyZWRTdGF0ZShcInNldHRpbmdzXCIsIHsgdGhlbWU6IFwiZGFya1wiIH0pXG4gKlxuICogLy8gQ2hhbmdlcyBhdXRvbWF0aWNhbGx5IHN5bmNcbiAqIHNldHRpbmdzLnZhbHVlID0geyB0aGVtZTogXCJsaWdodFwiIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNoYXJlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeT86IFQgfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIFN5bmNlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgYnV0IE5PVCBwZXJzaXN0ZWRcbiAqXG4gKiBTdGF0ZSBpcyBicm9hZGNhc3QgdG8gYWxsIGNvbnRleHRzIGluIHJlYWwtdGltZSBidXQgcmVzZXRzIG9uIGV4dGVuc2lvbiByZWxvYWQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgc3luY2VkIGFjcm9zcyBjb250ZXh0cyAoYnV0IG5vdCBwZXJzaXN0ZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFRlbXBvcmFyeSBzaGFyZWQgc3RhdGVcbiAqIGNvbnN0IGFjdGl2ZVRhYklkID0gJHN5bmNlZFN0YXRlKFwiYWN0aXZlLXRhYlwiLCBudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3luY2VkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4ge1xuICByZXR1cm4gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogZmFsc2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBzdGF0ZTogcGVyc2lzdGVkIHRvIHN0b3JhZ2UgYnV0IE5PVCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzXG4gKlxuICogRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0YXRlLCBwZXJzaXN0ZWQgaW5kZXBlbmRlbnRseS5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgKHVzZSBwcmVmaXggbGlrZSBcInBvcHVwOnN0YXRlXCIgdG8gYXZvaWQgY29sbGlzaW9ucylcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBwZXJzaXN0ZWQgdG8gc3RvcmFnZSAoYnV0IG5vdCBzeW5jZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBwZXJzaXN0ZWQgc3RhdGVcbiAqIGNvbnN0IHBvcHVwU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJwb3B1cDpsYXN0LXBhbmVsXCIsIFwiaG9tZVwiKVxuICogY29uc3QgZGV2dG9vbHNTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcImRldnRvb2xzOmV4cGFuZGVkXCIsIHRydWUpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRwZXJzaXN0ZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogZmFsc2UsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogTG9jYWwgc3RhdGU6IG5vdCBzeW5jZWQsIG5vdCBwZXJzaXN0ZWQgKGxpa2UgcmVndWxhciBQcmVhY3Qgc2lnbmFsKVxuICpcbiAqIFNpbXBsZSByZWFjdGl2ZSBzdGF0ZSB0aGF0IGxpdmVzIG9ubHkgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cbiAqIFJlc2V0cyBvbiByZWxvYWQgb3IgY29udGV4dCByZXN0YXJ0LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYWxsIGNvbnRleHRzIChpbmNsdWRpbmcgcGFnZSBzY3JpcHRzKVxuICpcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgKGxvY2FsIG9ubHkpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIExvY2FsIFVJIHN0YXRlXG4gKiBjb25zdCBpc0xvYWRpbmcgPSAkc3RhdGUoZmFsc2UpXG4gKiBjb25zdCBlcnJvciA9ICRzdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3RhdGU8VD4oaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIHNpZ25hbChpbml0aWFsVmFsdWUpO1xufVxuXG4vKiogU2VydmVyLXNpZGUgYXV0aG9yaXRhdGl2ZSBzdGF0ZSwga2V5ZWQgZm9yIHN0YWJsZSBpZGVudGl0eSBhY3Jvc3MgdGhlXG4gKiAgcHJvY2Vzcy4gVW5saWtlIHRoZSBicm93c2VyIHByaW1pdGl2ZXMgaXQgZG9lcyBOT1Qgc3luYyBhY3Jvc3MgY29udGV4dHMgb3JcbiAqICBwZXJzaXN0IHRvIGNocm9tZS5zdG9yYWdlIOKAlCB0aGUgc2VydmVyIGhvbGRzIHRoZSBjYW5vbmljYWwgcmVwbGljYSBhbmQgaXNcbiAqICB0aGUgYWx3YXlzLW9uIHBlZXI7IGNvbm5lY3RlZCBjbGllbnRzIHJlY2VpdmUgZGVyaXZlZCB1cGRhdGVzIHRocm91Z2ggdGhlXG4gKiAgRWx5c2lhIGBwb2xseSgpYCBwbHVnaW4ncyBlZmZlY3QvYnJvYWRjYXN0IGxheWVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhpc1xuICogIHNpZ25hbCBkaXJlY3RseS4gVXNlZCBpbnNpZGUgYHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IC4uLiB9IH0gfSlgIGFuZFxuICogIHJlYWQgb24gdGhlIHJlcXVlc3QgY29udGV4dCBhcyBgcG9sbHlTdGF0ZS5zZXJ2ZXIuPGtleT4udmFsdWVgLiAqL1xuY29uc3Qgc2VydmVyU3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogUmVhY3RpdmUgc2VydmVyLW9ubHkgc3RhdGUuIFRoZSBmaXJzdCBjYWxsIGZvciBhIGBrZXlgIGNyZWF0ZXMgdGhlIHNpZ25hbDtcbiAqIGxhdGVyIGNhbGxzIHdpdGggdGhlIHNhbWUgYGtleWAgcmV0dXJuIHRoYXQgc2FtZSBzaWduYWwsIHNvIGEgbW9kdWxlIHRoYXRcbiAqIGRlY2xhcmVzIGl0cyBzZXJ2ZXIgc3RhdGUgb25jZSBnZXRzIGEgc3RhYmxlIHJlZmVyZW5jZSBldmVyeXdoZXJlIGl0IGlzXG4gKiByZWFkLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBzZXJ2ZXIgc3RhdGUgKGUuZy4gXCJkYlwiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIFZhbHVlIGhlbGQgdW50aWwgdGhlIHNlcnZlciBtdXRhdGVzIGl0XG4gKiBAcmV0dXJucyBBIHJlYWN0aXZlIHNpZ25hbCBob2xkaW5nIHRoZSBhdXRob3JpdGF0aXZlIHNlcnZlciB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyAkc2VydmVyU3RhdGUgfSBmcm9tIFwiQGZhaXJmb3gvcG9sbHlcIjtcbiAqXG4gKiBjb25zdCBkYiA9IHsgdG9kb3M6IHNpZ25hbChbXSksIG5leHRJZDogMSB9O1xuICogcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgZGI6ICRzZXJ2ZXJTdGF0ZShcImRiXCIsIGRiKSB9IH0gfSk7XG4gKiAvLyBpbiBhIGhhbmRsZXI6IGN0eC5wb2xseVN0YXRlLnNlcnZlci5kYi52YWx1ZS50b2Rvcy52YWx1ZSA9IFsuLi5dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzZXJ2ZXJTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICAvLyBUaGUgcmVnaXN0cnkgZXJhc2VzIFQgKGl0IHN0b3JlcyBTaWduYWw8dW5rbm93bj4pOyB0aGUga2V5IGlzIHRoZVxuICAvLyBjYWxsZXIncyBjb250cmFjdCB0aGF0IHRoZSBzdG9yZWQgc2lnbmFsIGNhcnJpZXMgdGhlaXIgVC5cbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3RpbmcgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuICBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LnNldChrZXksIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbnR5cGUgSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0gU3RhdGVPcHRpb25zPFQ+ICYge1xuICBlbmFibGVTeW5jOiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBzeW5jIChhdm9pZCBjb2xsaXNpb24gd2l0aCBzeW5jPzogU3luY0FkYXB0ZXIpXG4gIGVuYWJsZVBlcnNpc3Q6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHBlcnNpc3RlbmNlXG59O1xuXG4vLyBEZWVwIGVxdWFsaXR5IGNoZWNrIHRvIHByZXZlbnQgcmVkdW5kYW50IHVwZGF0ZXNcbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICAhZGVlcEVxdWFsKFxuICAgICAgICAoYSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLFxuICAgICAgICAoYiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzdG9yYWdlIGFuZCBzeW5jIGFkYXB0ZXJzIHdpdGggdGhyZWUtdGllciBwcmlvcml0eTpcbiAqIDEuIEV4cGxpY2l0IGFkYXB0ZXJzIGZyb20gb3B0aW9ucyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqIDIuIE1lc3NhZ2VCdXMgYWRhcHRlcnMgKGxlZ2FjeSwgZGVwcmVjYXRlZClcbiAqIDMuIEF1dG8tZGV0ZWN0ZWQgYWRhcHRlcnMgKGRlZmF1bHQgYmVoYXZpb3IpXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGFwdGVycyhvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9ucyk6IHtcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIgfCBudWxsO1xuICBzeW5jOiBTeW5jQWRhcHRlciB8IG51bGw7XG59IHtcbiAgLy8gUHJpb3JpdHkgMTogRXhwbGljaXQgYWRhcHRlcnMgKHBhcnRpYWwgb3IgZnVsbClcbiAgaWYgKG9wdGlvbnMuc3RvcmFnZSB8fCBvcHRpb25zLnN5bmMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5zdG9yYWdlIHx8IChvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCksXG4gICAgICBzeW5jOiBvcHRpb25zLnN5bmMgfHwgKG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMjogTWVzc2FnZUJ1cyAobGVnYWN5IHN1cHBvcnQpXG4gIC8vIE1lc3NhZ2VCdXMgZG9lc24ndCBwcm92aWRlIHN5bmMgYWRhcHRlciwgb25seSBDaHJvbWUgc3RvcmFnZVxuICBpZiAob3B0aW9ucy5idXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5idXMuYWRhcHRlcnMuc3RvcmFnZSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAzOiBBdXRvLWRldGVjdCBiYXNlZCBvbiBlbmFibGVTeW5jIGFuZCBlbmFibGVQZXJzaXN0IGZsYWdzXG4gIHJldHVybiB7XG4gICAgc3RvcmFnZTogb3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwsXG4gICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQsIG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zPFQ+KTogU2lnbmFsPFQ+IHtcbiAgLy8gUmV0dXJuIGV4aXN0aW5nIHNpZ25hbCBpZiBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgaWYgKHN0YXRlUmVnaXN0cnkuaGFzKGtleSkpIHtcbiAgICByZXR1cm4gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICB9XG5cbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG5cbiAgLy8gQ3JlYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgcmVxdWVzdGVkXG4gIGlmIChvcHRpb25zLnZlcmlmeSkge1xuICAgIC8vIENyZWF0ZSBwbGFpbiBvYmplY3QgbWlycm9yIGZvciB2ZXJpZmljYXRpb25cbiAgICBjb25zdCBtaXJyb3IgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGluaXRpYWxWYWx1ZSkpIGFzIHVua25vd24gYXMgVDtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPikudmVyaWZ5ID0gbWlycm9yO1xuICB9XG5cbiAgY29uc3QgZW50cnk6IFN0YXRlRW50cnk8VD4gPSB7XG4gICAgc2lnbmFsOiBzaWcsXG4gICAgY2xvY2s6IDAsXG4gICAgbG9hZGVkOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICB1cGRhdGluZzogZmFsc2UsXG4gIH07XG5cbiAgLy8gUmVzb2x2ZSBhZGFwdGVycyAoZXhwbGljaXQsIE1lc3NhZ2VCdXMsIG9yIGF1dG8tZGV0ZWN0KVxuICBjb25zdCBhZGFwdGVycyA9IHJlc29sdmVBZGFwdGVycyhvcHRpb25zKTtcblxuICAvLyBMb2FkIGZyb20gc3RvcmFnZSBpZiBwZXJzaXN0IGlzIGVuYWJsZWRcbiAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgZW50cnkubG9hZGVkID0gbG9hZEZyb21TdG9yYWdlKGtleSwgc2lnLCBlbnRyeSwgYWRhcHRlcnMuc3RvcmFnZSwgb3B0aW9ucy52YWxpZGF0b3IpO1xuICB9XG5cbiAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgaW5pdGlhbCBsb2FkXG4gIGVudHJ5LmxvYWRlZC50aGVuKCgpID0+IHtcbiAgICBsZXQgZGVib3VuY2VUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZSA9IHNpZy52YWx1ZTtcbiAgICBsZXQgaXNGaXJzdFJ1biA9IHRydWU7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogU3luYyBlZmZlY3QgcmVxdWlyZXMgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHN0YXRlIGNoYW5nZSBzY2VuYXJpb3NcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVhZCB0aGUgc2lnbmFsIEZJUlNULCBiZWZvcmUgYW55IGVhcmx5IHJldHVybiBjYW4gaGFwcGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWFjdCByZS1jb2xsZWN0cyBhbiBlZmZlY3QncyBkZXBlbmRlbmNpZXMgb24gZXZlcnkgcnVuLCBzbyBhIHJ1biB0aGF0XG4gICAgICAvLyByZXR1cm5zIHdpdGhvdXQgdG91Y2hpbmcgYHNpZy52YWx1ZWAgdW5zdWJzY3JpYmVzIHRoZSBlZmZlY3QgZm9yIGdvb2QuXG4gICAgICAvLyBUaGUgcnVuIGFuIGluY29taW5nIHN5bmMgbWVzc2FnZSB0cmlnZ2VycyBpcyBleGFjdGx5IHN1Y2ggYSBydW4uXG4gICAgICBjb25zdCB2YWx1ZSA9IHNpZy52YWx1ZTtcblxuICAgICAgLy8gU2tpcCBmaXJzdCBydW4gKGVmZmVjdCBmaXJlcyBpbW1lZGlhdGVseSBvbiByZWdpc3RyYXRpb24pXG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpc0ZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gaW5jb21pbmcgbWVzc2FnZSBpcyBiZWluZyBhcHBsaWVkLiBBZG9wdCBpdCBhcyB0aGUgYmFzZWxpbmUg4oCUIHRoaXNcbiAgICAgIC8vIGNvbnRleHQgbm93IGhvbGRzIGl0LCBzbyB0aGUgbmV4dCBsb2NhbCBjaGFuZ2UgaXMgYSBjaGFuZ2UgYWdhaW5zdCBpdCDigJRcbiAgICAgIC8vIGFuZCBkbyBub3QgYnJvYWRjYXN0LCB3aGljaCB3b3VsZCBlY2hvIGl0IGJhY2sgdG8gdGhlIHNlbmRlci5cbiAgICAgIGlmIChlbnRyeS51cGRhdGluZykge1xuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIGlmIChkZWVwRXF1YWwodmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiBlbmFibGVkXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5U2lnbmFsID0gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPjtcbiAgICAgICAgaWYgKHZlcmlmeVNpZ25hbC52ZXJpZnkpIHtcbiAgICAgICAgICAvLyBub3NlbWdyZXA6IGphdmFzY3JpcHQubGFuZy5zZWN1cml0eS5pbnNlY3VyZS1vYmplY3QtYXNzaWduLmluc2VjdXJlLW9iamVjdC1hc3NpZ24g4oCUIGludGVybmFsIG1pcnJvcjsgdmFsdWUgaXMgYSBkZWVwIEpTT04gY2xvbmUsIG5vdCBhcmJpdHJhcnkgZXh0ZXJuYWwgaW5wdXQuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih2ZXJpZnlTaWduYWwudmVyaWZ5LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBjbG9jayBtb25vdG9uaWNhbGx5XG4gICAgICBlbnRyeS5jbG9jaysrO1xuXG4gICAgICBjb25zdCBkb1VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgLy8gUGVyc2lzdCB0byBzdG9yYWdlXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgZW50cnkuY2xvY2ssIGFkYXB0ZXJzLnN0b3JhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG90aGVyIGNvbnRleHRzXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVN5bmMgJiYgYWRhcHRlcnMuc3luYykge1xuICAgICAgICAgIGJyb2FkY2FzdFVwZGF0ZShrZXksIHZhbHVlLCBlbnRyeS5jbG9jaywgYWRhcHRlcnMuc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIERlYm91bmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMuZGVib3VuY2VNcykge1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChkb1VwZGF0ZSwgb3B0aW9ucy5kZWJvdW5jZU1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgdXBkYXRlcyBmcm9tIG90aGVyIGNvbnRleHRzIChvbmx5IGlmIHN5bmMgZW5hYmxlZClcbiAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgLy8gQ29ubmVjdCBpZiBuZWVkZWQgKHNvbWUgYWRhcHRlcnMgcmVxdWlyZSBleHBsaWNpdCBjb25uZWN0aW9uKVxuICAgIGlmIChhZGFwdGVycy5zeW5jLmNvbm5lY3QpIHtcbiAgICAgIGFkYXB0ZXJzLnN5bmMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHN5bmMgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGFkYXB0ZXJzLnN5bmMub25NZXNzYWdlPFQ+KChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5rZXkgIT09IGtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvbGRDbG9jayA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICAvLyBMYW1wb3J0IGNsb2NrIHJ1bGU6IEFsd2F5cyB1cGRhdGUgdG8gbWF4KGxvY2FsLCByZWNlaXZlZClcbiAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIGNhdXNhbCBvcmRlcmluZyBldmVuIHdoZW4gcmVqZWN0aW5nIHVwZGF0ZXNcbiAgICAgIGVudHJ5LmNsb2NrID0gTWF0aC5tYXgoZW50cnkuY2xvY2ssIG1lc3NhZ2UuY2xvY2spO1xuXG4gICAgICAvLyBPbmx5IGFjY2VwdCB2YWx1ZSB1cGRhdGVzIGlmIHJlY2VpdmVkIGNsb2NrIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBvbGQgbG9jYWwgY2xvY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IGFwcGx5IGNhdXNhbGx5IG5ld2VyIHVwZGF0ZXNcbiAgICAgIGlmIChtZXNzYWdlLmNsb2NrID4gb2xkQ2xvY2spIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5jb21pbmcgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRvciAmJiAhb3B0aW9ucy52YWxpZGF0b3IobWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBSZWNlaXZlZCBpbnZhbGlkIHZhbHVlIGZyb20gc3luYyAoY2xvY2s6ICR7bWVzc2FnZS5jbG9ja30pYCxcbiAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgcmVkdW5kYW50IHVwZGF0ZXMgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICAgIGlmIChkZWVwRXF1YWwoZW50cnkuc2lnbmFsLnZhbHVlLCBtZXNzYWdlLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5VXBkYXRlKGVudHJ5LCBtZXNzYWdlLnZhbHVlIGFzIHVua25vd24gYXMgVCwgbWVzc2FnZS5jbG9jayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0ZVJlZ2lzdHJ5LnNldChrZXksIGVudHJ5IGFzIHVua25vd24gYXMgU3RhdGVFbnRyeTx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIEJhY2tmaWxsIGtleXMgYWRkZWQgdG8gdGhlIHN0YXRlIHNoYXBlIHNpbmNlIGEgdmFsdWUgd2FzIHBlcnNpc3RlZC5cbiAqXG4gKiBTdG9yZWQgcGxhaW4gb2JqZWN0cyBhcmUgc2hhbGxvdy1tZXJnZWQgb3ZlciB0aGUgY3VycmVudCBkZWZhdWx0cyBzbyB0aGF0IGFcbiAqIGZpZWxkIGFkZGVkIGluIGEgbGF0ZXIgcmVsZWFzZSByZWh5ZHJhdGVzIHRvIGl0cyBkZWZhdWx0IHJhdGhlciB0aGFuXG4gKiBgdW5kZWZpbmVkYC4gUHJpbWl0aXZlcyBhbmQgYXJyYXlzIGFyZSByZXBsYWNlZCB3aG9sZXNhbGUg4oCUIG1lcmdpbmcgdGhvc2VcbiAqIHdvdWxkIGNvcnJ1cHQgdGhlbS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlV2l0aERlZmF1bHRzPFQ+KGRlZmF1bHRzOiBULCBzdG9yZWQ6IHVua25vd24pOiBUIHtcbiAgLy8gUGVyc2lzdGVkIHZhbHVlcyBhcmUgdHJ1c3RlZCB0byBiZSB0aGUgVCB0aGlzIGtleSB3YXMgcmVnaXN0ZXJlZCB3aXRoO1xuICAvLyBzY2hlbWEgZHJpZnQgaXMgaGFuZGxlZCBieSB0aGUgbWVyZ2UsIG5vdCBieSBydW50aW1lIHZhbGlkYXRpb24uXG4gIGlmIChpc1BsYWluT2JqZWN0KGRlZmF1bHRzKSAmJiBpc1BsYWluT2JqZWN0KHN0b3JlZCkpIHtcbiAgICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4uc3RvcmVkIH0gYXMgdW5rbm93biBhcyBUO1xuICB9XG4gIHJldHVybiBzdG9yZWQgYXMgdW5rbm93biBhcyBUO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRnJvbVN0b3JhZ2U8VD4oXG4gIGtleTogc3RyaW5nLFxuICBzaWc6IFNpZ25hbDxUPixcbiAgZW50cnk6IFN0YXRlRW50cnk8VD4sXG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyLFxuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFRcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UuZ2V0KFtrZXksIGAke2tleX06Y2xvY2tgXSk7XG5cbiAgICBpZiAocmVzdWx0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2lnIHN0aWxsIGhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIGhlcmUsIHNvIGl0IGlzIHRoZSBkZWZhdWx0IGJhc2VcbiAgICAgIC8vIGZvciBiYWNrZmlsbGluZyBrZXlzIHRoZSBwZXJzaXN0ZWQgYmxvYiBwcmVkYXRlcy5cbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gcmVjb25jaWxlV2l0aERlZmF1bHRzKHNpZy5wZWVrKCksIHJlc3VsdFtrZXldKTtcblxuICAgICAgLy8gVmFsaWRhdGUgc3RvcmVkIHZhbHVlIGlmIHZhbGlkYXRvciBwcm92aWRlZFxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBpZiAodmFsaWRhdG9yKHN0b3JlZFZhbHVlKSkge1xuICAgICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFN0b3JlZCB2YWx1ZSBmYWlsZWQgdmFsaWRhdGlvbiwgdXNpbmcgaW5pdGlhbCB2YWx1ZWAsXG4gICAgICAgICAgICBzdG9yZWRWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0W2Ake2tleX06Y2xvY2tgXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRyeS5jbG9jayA9IHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gbG9hZCBzdGF0ZSBmcm9tIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJzaXN0VG9TdG9yYWdlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlLnNldCh7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgICBbYCR7a2V5fTpjbG9ja2BdOiBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIHBlcnNpc3Qgc3RhdGUgdG8gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJyb2FkY2FzdFVwZGF0ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN5bmM6IFN5bmNBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3luYy5icm9hZGNhc3Qoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGJyb2FkY2FzdCBzdGF0ZSB1cGRhdGU6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVVwZGF0ZTxUPihlbnRyeTogU3RhdGVFbnRyeTxUPiwgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIpOiB2b2lkIHtcbiAgZW50cnkudXBkYXRpbmcgPSB0cnVlO1xuICBlbnRyeS5zaWduYWwudmFsdWUgPSB2YWx1ZTtcbiAgZW50cnkuY2xvY2sgPSBjbG9jaztcbiAgZW50cnkudXBkYXRpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgc3RhdGUgYnkga2V5ICh1c2VmdWwgZm9yIHJldHJpZXZpbmcgc3RhdGUgd2l0aG91dCByZS1jcmVhdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRlQnlLZXk8VD4oa2V5OiBzdHJpbmcpOiBTaWduYWw8VD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIHJldHVybiBlbnRyeT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENsZWFyIHN0YXRlIHJlZ2lzdHJ5ICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclN0YXRlUmVnaXN0cnkoKTogdm9pZCB7XG4gIHN0YXRlUmVnaXN0cnkuY2xlYXIoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdGF0ZSBvd25lZCBieSB0aGUgY29tcG9uZW50IGdhbGxlcnkuXG4gKlxuICogVGhlIGdhbGxlcnkgaXMgYSBzdGFuZGFsb25lIGRldiBzdXJmYWNlIHdpdGggbm8gc2VydmVyIHN0YXRlLCBzbyB0aGVzZVxuICogc2lnbmFscyBzdGF5IG1vZHVsZS1sb2NhbCDigJQgdGhleSBuZXZlciBqb2luIGEgc3luY2VkIHN0b3JlIGJ1bmRsZS4gQWN0aW9uXG4gKiBoYW5kbGVycyAoYWN0aW9ucy50cykgcmVhY2ggdGhlbSBieSBpbXBvcnQsIHRoZSB3YXkgZWFsJ3Mgc2hvd2Nhc2UgZG9lcy5cbiAqIGByZXNldEdhbGxlcnlTdG9yZXMoKWAgZXhpc3RzIHNvIHRoZSBicm93c2VyL3Zpc3VhbCB0ZXN0IGNhbiBpc29sYXRlIHJ1bnMuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRm9ybSwgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7ICRzdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9zdGF0ZS50c1wiO1xuXG5leHBvcnQgdHlwZSBHYWxsZXJ5VGhlbWUgPSBcInN5c3RlbVwiIHwgXCJsaWdodFwiIHwgXCJkYXJrXCI7XG5cbi8qKiBUaGUgZ2FsbGVyeSdzIEFjdGlvbkZvcm0gYmluZHMgdG8gYW4gZW1wdHkgYnVuZGxlIOKAlCBubyBzdG9yZSBpcyB0b3VjaGVkLiAqL1xuZXhwb3J0IHR5cGUgR2FsbGVyeVN0b3JlcyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqIFRoZW1lIG92ZXJyaWRlLCBhcHBsaWVkIHRvIHRoZSBwYW5lbCBhcyBgZGF0YS1wb2xseS10aGVtZWAuIGBzeXN0ZW1gIG9taXRzXG4gKiAgdGhlIGF0dHJpYnV0ZSBhbmQgbGV0cyBgcHJlZmVycy1jb2xvci1zY2hlbWVgIGRlY2lkZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRoZW1lID0gJHN0YXRlPEdhbGxlcnlUaGVtZT4oXCJzeXN0ZW1cIik7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxNb2RhbD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlNb2RhbE9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8RHJvcGRvd24+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RHJvcGRvd25PcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0U2luZ2xlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgbXVsdGktc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0TXVsdGkgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBjbGVhcmFibGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gU3RhcnRzIGVtcHR5XG4gKiAgc28gdGhlIFwiQW55IOKAplwiIGNsZWFyIG9wdGlvbiBpcyB0aGUgYWN0aXZlIHJvdy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbi8qKiBUaGUgbGl2ZSwgc2lnbmFsLWJvdW5kIDxDaGVja2JveD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDaGVja2VkID0gJHN0YXRlPGJvb2xlYW4+KHRydWUpO1xuLyoqIFRoZSBjb250cm9sbGVkIDxUZXh0SW5wdXQ+IHNwZWNpbWVuIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGV4dCA9ICRzdGF0ZTxzdHJpbmc+KFwiQ29udHJvbGxlZCB2YWx1ZVwiKTtcbi8qKiBMYXN0IHZhbHVlIGNvbW1pdHRlZCBieSB0aGUgPEFjdGlvbklucHV0PiAvIDxBY3Rpb25TZWxlY3Q+IHNwZWNpbWVucy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNvbW1pdHRlZCA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuLyoqIEFjdGl2ZSB0YWIgaWQgZm9yIHRoZSA8VGFicz4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUYWIgPSAkc3RhdGU8c3RyaW5nPihcIm92ZXJ2aWV3XCIpO1xuLyoqIE5hbWUgb2YgdGhlIGxhc3QgZmlsZSBwaWNrZWQgYnkgdGhlIDxGaWxlSW5wdXQ+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RmlsZU5hbWUgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcblxuLyoqXG4gKiBUaGUgZm9ybSBiZWhpbmQgdGhlIDxBY3Rpb25Gb3JtPiBzcGVjaW1lbi4gYGNyZWF0ZUZvcm1gIHJlcXVpcmVzIGBiaW5kU3RvcmVzYFxuICogYmVmb3JlIGEgc3VibWl0IGNhbiBydW47IGNsaWVudC50c3ggYmluZHMgaXQgdG8gdGhlIGVtcHR5IGdhbGxlcnkgYnVuZGxlIGF0XG4gKiBib290LiBJdHMgYC5hY3Rpb25zYCBhcmUgc3ByZWFkIGludG8gdGhlIHJlZ2lzdHJ5IChzZWUgYWN0aW9ucy50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBnYWxsZXJ5Rm9ybSA9IGNyZWF0ZUZvcm08eyBmdWxsTmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH0sIEdhbGxlcnlTdG9yZXM+KHtcbiAgbmFtZTogXCJnYWxsZXJ5LWZvcm1cIixcbiAgaW5pdGlhbFZhbHVlczogeyBmdWxsTmFtZTogXCJcIiwgZW1haWw6IFwiXCIgfSxcbiAgb25TdWJtaXQ6ICh7IHZhbHVlcyB9KSA9PiB7XG4gICAgc2V0RXJyb3IoXG4gICAgICBgQWN0aW9uRm9ybSBzdWJtaXR0ZWQg4oCUIG5hbWUgXCIke3ZhbHVlcy5mdWxsTmFtZSB8fCBcIihlbXB0eSlcIn1cIiwgYCArXG4gICAgICAgIGBlbWFpbCBcIiR7dmFsdWVzLmVtYWlsIHx8IFwiKGVtcHR5KVwifVwiLmAsXG4gICAgICB7IHNldmVyaXR5OiBcImluZm9cIiB9XG4gICAgKTtcbiAgfSxcbn0pO1xuXG4vKiogUmVzZXQgZXZlcnkgZ2FsbGVyeSBzaWduYWwgdG8gaXRzIGluaXRpYWwgdmFsdWUg4oCUIGZvciB0ZXN0IGlzb2xhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEdhbGxlcnlTdG9yZXMoKTogdm9pZCB7XG4gICRnYWxsZXJ5VGhlbWUudmFsdWUgPSBcInN5c3RlbVwiO1xuICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeURyb3Bkb3duT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdE11bHRpLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLnZhbHVlID0gbmV3IFNldCgpO1xuICAkZ2FsbGVyeUNoZWNrZWQudmFsdWUgPSB0cnVlO1xuICAkZ2FsbGVyeVRleHQudmFsdWUgPSBcIkNvbnRyb2xsZWQgdmFsdWVcIjtcbiAgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSBcIuKAlFwiO1xuICAkZ2FsbGVyeVRhYi52YWx1ZSA9IFwib3ZlcnZpZXdcIjtcbiAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IFwi4oCUXCI7XG4gIGdhbGxlcnlGb3JtLmNsb3NlKCk7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9ucyBmb3IgdGhlIGdhbGxlcnkncyBpbnRlcmFjdGl2ZSBzcGVjaW1lbnMuIEV2ZXJ5IGhhbmRsZXIgZHJpdmVzIGFcbiAqIG1vZHVsZS1sb2NhbCBzaWduYWwgKHN0b3Jlcy50cykgb3IgYSBwb2xseSBvdmVybGF5IHByaW1pdGl2ZSDigJQgbm9uZSB0b3VjaGVzIGFcbiAqIHN0b3JlIGJ1bmRsZSwgc28gdGhlIGdhbGxlcnkgc3RheXMgYSBzZWxmLWNvbnRhaW5lZCBkZXYgc3VyZmFjZS4gU3ByZWFkaW5nXG4gKiBgZ2FsbGVyeUZvcm0uYWN0aW9uc2AgYWRkcyB0aGUgYXV0by1yZWdpc3RlcmVkIGBnYWxsZXJ5LWZvcm06e29wZW4sY2xvc2UsXG4gKiBzdWJtaXR9YCBoYW5kbGVycy4gY2xpZW50LnRzeCB3aXJlcyB0aGlzIHJlZ2lzdHJ5IGludG8gdGhlIGRvY3VtZW50IHZpYVxuICogYGluc3RhbGxFdmVudERlbGVnYXRpb25gLCBleGFjdGx5IGFzIGEgcmVhbCBjb25zdW1lciBhcHAgd291bGQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSwgRXJyb3JTZXZlcml0eSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRoZW1lLFxuICB0eXBlIEdhbGxlcnlTdG9yZXMsXG4gIHR5cGUgR2FsbGVyeVRoZW1lLFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbmNvbnN0IFRIRU1FUzogcmVhZG9ubHkgR2FsbGVyeVRoZW1lW10gPSBbXCJzeXN0ZW1cIiwgXCJsaWdodFwiLCBcImRhcmtcIl07XG5jb25zdCBTRVZFUklUSUVTOiByZWFkb25seSBFcnJvclNldmVyaXR5W10gPSBbXCJpbmZvXCIsIFwid2FybmluZ1wiLCBcImVycm9yXCJdO1xuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9BQ1RJT05TOiBBY3Rpb25SZWdpc3RyeTxHYWxsZXJ5U3RvcmVzPiA9IHtcbiAgLi4uZ2FsbGVyeUZvcm0uYWN0aW9ucyxcblxuICBcImdhbGxlcnk6c2V0LXRoZW1lXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gZGF0YVtcInRoZW1lXCJdO1xuICAgIGlmICh0aGVtZSA9PT0gXCJzeXN0ZW1cIiB8fCB0aGVtZSA9PT0gXCJsaWdodFwiIHx8IHRoZW1lID09PSBcImRhcmtcIikge1xuICAgICAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IHRoZW1lO1xuICAgIH1cbiAgfSxcblxuICBcImdhbGxlcnk6c2V0LXRhYlwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBpZCA9IGRhdGFbXCJpZFwiXTtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeVRhYi52YWx1ZSA9IGlkO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTptb2RhbC1vcGVuXCI6ICgpID0+IHtcbiAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IHRydWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbW1pdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFbXCJ2YWx1ZVwiXTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IHZhbHVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTp0b2FzdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBzZXZlcml0eSA9IFNFVkVSSVRJRVMuZmluZCgocykgPT4gcyA9PT0gZGF0YVtcInNldmVyaXR5XCJdKSA/PyBcImluZm9cIjtcbiAgICBzZXRFcnJvcihgVGhpcyBpcyBhICR7c2V2ZXJpdHl9IHRvYXN0IOKAlCBjbGljayBpdCBvciB3YWl0IGZvciBpdCB0byBkaXNtaXNzLmAsIHtcbiAgICAgIHNldmVyaXR5LFxuICAgIH0pO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb25maXJtXCI6IGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGRhbmdlciA9IGRhdGFbXCJkYW5nZXJcIl0gPT09IFwidHJ1ZVwiO1xuICAgIGNvbnN0IG9rID0gYXdhaXQgY29uZmlybSh7XG4gICAgICB0aXRsZTogZGFuZ2VyID8gXCJEZWxldGUgdGhpcyBpdGVtP1wiIDogXCJTYXZlIHlvdXIgY2hhbmdlcz9cIixcbiAgICAgIGJvZHk6IGRhbmdlclxuICAgICAgICA/IFwiVGhpcyBjYW5ub3QgYmUgdW5kb25lLiBUaGUgaXRlbSB3aWxsIGJlIHBlcm1hbmVudGx5IHJlbW92ZWQuXCJcbiAgICAgICAgOiBcIllvdXIgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXCIsXG4gICAgICBkYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IGRhbmdlciA/IFwiRGVsZXRlXCIgOiBcIlNhdmVcIixcbiAgICB9KTtcbiAgICBzZXRFcnJvcihgQ29uZmlybURpYWxvZyByZXNvbHZlZCAke1N0cmluZyhvayl9LmAsIHsgc2V2ZXJpdHk6IG9rID8gXCJpbmZvXCIgOiBcIndhcm5pbmdcIiB9KTtcbiAgfSxcbn07XG5cbi8qKiBUaGUgdGhlbWUgY3ljbGUsIGV4cG9zZWQgc28gdGhlIHBhbmVsIGNhbiByZW5kZXIgb25lIGJ1dHRvbiBwZXIgb3B0aW9uLiAqL1xuZXhwb3J0IHsgVEhFTUVTIH07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgY2F0YWxvZ3VlIOKAlCBvbmUgc2VjdGlvbiBwZXIgcG9sbHktdWkgcHJpbWl0aXZlLCBlYWNoIHJlbmRlcmluZ1xuICogdGhlIGNvbmZpZ3VyYXRpb25zIHdvcnRoIHNlZWluZy4gQWRhcHRlZCBmcm9tIGVhbCdzIHNob3djYXNlICh3aGljaCBjb25zdW1lc1xuICogdGhpcyB2ZXJ5IGxpYnJhcnkpLCByZXBvaW50ZWQgYXQgdGhlIGxvY2FsIHNvdXJjZSBzbyB0aGUgZ2FsbGVyeSByZW5kZXJzIHRoZVxuICogcHJpbWl0aXZlcyBleGFjdGx5IGFzIHRoZXkgc2hpcC5cbiAqXG4gKiBFdmVyeSBzZWN0aW9uIGNhcnJpZXMgYSBgY29tcG9uZW50YCBuYW1pbmcgdGhlIHBvbGx5LXVpIGV4cG9ydCBpdCBjb3ZlcnM7XG4gKiByZWdpc3RyeS1jb3ZlcmFnZS50cyBhc3NlcnRzIHRoYXQgZXZlcnkgY29tcG9uZW50IGluIHJlZ2lzdHJ5LmdlbmVyYXRlZC50c1xuICogaGFzIGEgc2VjdGlvbiBoZXJlLCBzbyBhIG5ldyBwcmltaXRpdmUgY2FuJ3QgbGFuZCB3aXRob3V0IGEgc3BlY2ltZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uRm9ybSxcbiAgQWN0aW9uSW5wdXQsXG4gIEFjdGlvblNlbGVjdCxcbiAgQmFkZ2UsXG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2hlY2tib3gsXG4gIENsdXN0ZXIsXG4gIENvZGUsXG4gIENvbGxhcHNpYmxlLFxuICBEcm9wZG93bixcbiAgRmlsZUlucHV0LFxuICBIdG1sLFxuICBMYXlvdXQsXG4gIExpbmssXG4gIE1vZGFsLFxuICBPdXRwdXQsXG4gIFNlbGVjdCxcbiAgU2tlbGV0b24sXG4gIFN1cmZhY2UsXG4gIFRhYnMsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVG9nZ2xlLFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNoZWNrZWQsXG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeURyb3Bkb3duT3BlbixcbiAgJGdhbGxlcnlGaWxlTmFtZSxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLFxuICAkZ2FsbGVyeVNlbGVjdE11bHRpLFxuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZSxcbiAgJGdhbGxlcnlUYWIsXG4gICRnYWxsZXJ5VGV4dCxcbiAgZ2FsbGVyeUZvcm0sXG59IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG4vKipcbiAqIE9uZSBjYXRhbG9ndWVkIGV4YW1wbGU6IGEgc3RhZ2UgaG9sZGluZyBsaXZlIGNvbXBvbmVudChzKSBhbmQgYSBjYXB0aW9uXG4gKiBuYW1pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb24gc2hvdy4gYHdpZGVgIHNwYW5zIGV2ZXJ5IGdyaWQgY29sdW1uIGZvclxuICogc3BlY2ltZW5zIHRoYXQgbmVlZCB0aGUgcm9vbSAobGF5b3V0cywgZm9ybXMsIGNhcmRzKS5cbiAqL1xuZnVuY3Rpb24gU3BlY2ltZW4ocHJvcHM6IHsgY2FwdGlvbjogc3RyaW5nOyB3aWRlPzogYm9vbGVhbjsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInN1bmtlblwiXG4gICAgICByYWRpdXM9XCJtZFwiXG4gICAgICBib3JkZXI9XCJkZWZhdWx0XCJcbiAgICAgIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgY2xhc3NOYW1lPXtwcm9wcy53aWRlID8gXCJnYWxsZXJ5LXNwZWNpbWVuIGdhbGxlcnktc3BlY2ltZW4tLXdpZGVcIiA6IFwiZ2FsbGVyeS1zcGVjaW1lblwifVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnYWxsZXJ5LXN0YWdlXCI+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8VGV4dCBzaXplPVwieHNcIiB0b25lPVwibXV0ZWRcIiBjbGFzc05hbWU9XCJnYWxsZXJ5LWNvZGVcIj5cbiAgICAgICAgICB7cHJvcHMuY2FwdGlvbn1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG4vKiogQSBuZXV0cmFsIGZpbGxlciBibG9jayBmb3IgdGhlIGxheW91dCBzcGVjaW1lbnMuICovXG5mdW5jdGlvbiBCb3gocHJvcHM6IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSB2YXJpYW50PVwicmFpc2VkXCIgcmFkaXVzPVwic21cIiBib3JkZXI9XCJkZWZhdWx0XCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgPFRleHQgc2l6ZT1cInNtXCI+e3Byb3BzLmNoaWxkcmVufTwvVGV4dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmNvbnN0IFNUQVI6IEpTWC5FbGVtZW50ID0gKFxuICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImdhbGxlcnktaWNvblwiPlxuICAgIOKYhVxuICA8L3NwYW4+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhbGxlcnlTZWN0aW9uIHtcbiAgLyoqIEFuY2hvciBpZCBmb3IgdGhlIGluLXBhZ2UgbmF2LiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogRGlzcGxheSBoZWFkaW5nLiAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogVGhlIHBvbGx5LXVpIGV4cG9ydCB0aGlzIHNlY3Rpb24gY292ZXJzIChtYXRjaGVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5KS4gKi9cbiAgY29tcG9uZW50OiBzdHJpbmc7XG4gIC8qKiBPbmUtbGluZSBkZXNjcmlwdGlvbi4gKi9cbiAgc3VtbWFyeTogc3RyaW5nO1xuICByZW5kZXI6ICgpID0+IEpTWC5FbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9TRUNUSU9OUzogcmVhZG9ubHkgR2FsbGVyeVNlY3Rpb25bXSA9IFtcbiAge1xuICAgIGlkOiBcImJhZGdlXCIsXG4gICAgdGl0bGU6IFwiQmFkZ2VcIixcbiAgICBjb21wb25lbnQ6IFwiQmFkZ2VcIixcbiAgICBzdW1tYXJ5OiBcIlNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC4gT25lIHZhcmlhbnQgcGVyIHNlbWFudGljIHRvbmUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcImRlZmF1bHRcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8QmFkZ2UgdmFyaWFudD17dn0+e3Z9PC9CYWRnZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJidXR0b25cIixcbiAgICB0aXRsZTogXCJCdXR0b25cIixcbiAgICBjb21wb25lbnQ6IFwiQnV0dG9uXCIsXG4gICAgc3VtbWFyeTogXCJJbnRlcmFjdGl2ZSBjb250cm9sLiBUaWVyIHNldHMgaW1wb3J0YW5jZSwgY29sb3Igb3ZlcmxheXMgbWVhbmluZywgc2l6ZSBzZXRzIHNjYWxlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0aWVyOiBwcmltYXJ5IC8gc2Vjb25kYXJ5IC8gdGVydGlhcnlcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJQcmltYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIlNlY29uZGFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIlRlcnRpYXJ5XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb2xvcjogZGVmYXVsdCAvIGluZm8gLyBzdWNjZXNzIC8gd2FybmluZyAvIGRhbmdlclwiPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkZWZhdWx0XCIgbGFiZWw9XCJEZWZhdWx0XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiSW5mb1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInN1Y2Nlc3NcIiBsYWJlbD1cIlN1Y2Nlc3NcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJ3YXJuaW5nXCIgbGFiZWw9XCJXYXJuaW5nXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGFuZ2VyXCIgbGFiZWw9XCJEYW5nZXJcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHNtYWxsIC8gbm9ybWFsIC8gbGFyZ2VcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGxhYmVsPVwiU21hbGxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cIm5vcm1hbFwiIGxhYmVsPVwiTm9ybWFsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJsYXJnZVwiIGxhYmVsPVwiTGFyZ2VcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpY29uICsgbGFiZWxcIj5cbiAgICAgICAgICA8QnV0dG9uIGljb249e1NUQVJ9IGxhYmVsPVwiV2l0aCBpY29uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaXJjbGUgKGljb24tb25seSBuZWVkcyBhcmlhLWxhYmVsKVwiPlxuICAgICAgICAgIDxCdXR0b24gY2lyY2xlIGFyaWEtbGFiZWw9XCJTdGFyXCIgbGFiZWw9e1NUQVJ9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHJlZiDigJQgcmVuZGVycyBhbiA8YT5cIj5cbiAgICAgICAgICA8QnV0dG9uIGhyZWY9XCIjYnV0dG9uXCIgdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiTGluayBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZ1bGxXaWR0aFwiIHdpZGU+XG4gICAgICAgICAgPEJ1dHRvbiBmdWxsV2lkdGggdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZ1bGwtd2lkdGggYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0XCIsXG4gICAgdGl0bGU6IFwiVGV4dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0XCIsXG4gICAgc3VtbWFyeTogXCJUeXBvZ3JhcGhpYyBwcmltaXRpdmUg4oCUIHRvbmUsIHNpemUsIHdlaWdodCwgaXRhbGljLCBzdHJpa2V0aHJvdWdoLCBhbmQgbGVhZGluZy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidG9uZTogZGVmYXVsdCAvIG11dGVkIC8gZGFuZ2VyIC8gd2FybmluZyAvIHN1Y2Nlc3NcIj5cbiAgICAgICAgICA8VGV4dCB0b25lPVwiZGVmYXVsdFwiPkRlZmF1bHQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+TXV0ZWQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRhbmdlclwiPkRhbmdlcjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwid2FybmluZ1wiPldhcm5pbmc8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cInN1Y2Nlc3NcIj5TdWNjZXNzPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHhzIC8gc20gLyBtZCAvIGxnIC8geGxcIj5cbiAgICAgICAgICB7KFtcInhzXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwieGxcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgPFRleHQga2V5PXtzfSBzaXplPXtzfT5cbiAgICAgICAgICAgICAge3N9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwid2VpZ2h0OiBub3JtYWwgLyBtZWRpdW0gLyBib2xkXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwibm9ybWFsXCI+Tm9ybWFsPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPk1lZGl1bTwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Qm9sZDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpdGFsaWMgLyBzdHJpa2V0aHJvdWdoXCI+XG4gICAgICAgICAgPFRleHQgaXRhbGljPkl0YWxpYyBlbXBoYXNpczwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHJpa2V0aHJvdWdoPlN0cnVjayB0aHJvdWdoPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nbGVhZGluZz1cImxvb3NlXCIg4oCUIG11bHRpLWxpbmUgYm9keSBjb3B5JyB3aWRlPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIGxlYWRpbmc9XCJsb29zZVwiPlxuICAgICAgICAgICAgQSBwYXJhZ3JhcGggcmVuZGVyZWQgd2l0aCBsb29zZSBsZWFkaW5nLiBQb2xseSdzIFRleHQgcHJpbWl0aXZlIGJhY2tzIGV2ZXJ5IHNwYW4sXG4gICAgICAgICAgICBwYXJhZ3JhcGgsIGxhYmVsLCBhbmQgY2FwdGlvbiBzbyBjb25zdW1lcnMgbmV2ZXIgcmVhY2ggZm9yIGEgcmF3IHN0eWxlIGF0dHJpYnV0ZSB0byBzZXRcbiAgICAgICAgICAgIHRvbmUsIHNpemUsIHdlaWdodCwgb3IgbGluZSBoZWlnaHQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvZGVcIixcbiAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvZGVcIixcbiAgICBzdW1tYXJ5OiBcIk1vbm9zcGFjZSBjb2RlIOKAlCBpbmxpbmUgYnkgZGVmYXVsdCwgb3IgYSB3cmFwcGVkIGJsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFJ1biA8Q29kZT5wb2xseSBnYWxsZXJ5PC9Db2RlPiB0byBvcGVuIHRoaXMgcGFnZS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYmxvY2tcIiB3aWRlPlxuICAgICAgICAgIDxDb2RlIGJsb2NrPnsnY29uc3QgZ2FsbGVyeSA9IHtcXG4gIHNlcnZlZDogXCJieSBwb2xseVwiLFxcbn07J308L0NvZGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGlua1wiLFxuICAgIHRpdGxlOiBcIkxpbmtcIixcbiAgICBjb21wb25lbnQ6IFwiTGlua1wiLFxuICAgIHN1bW1hcnk6IFwiQW5jaG9yIHByaW1pdGl2ZSDigJQgdW5kZXJsaW5lIGJ5IGRlZmF1bHQsIHdpdGggZXh0ZXJuYWwsIHN1YnRsZSwgYW5kIGRvd25sb2FkIG1vZGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCI+SW4tcGFnZSBsaW5rPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImV4dGVybmFsIOKAlCBuZXcgdGFiLCByZWw9bm9vcGVuZXJcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiIGV4dGVybmFsPlxuICAgICAgICAgICAgRXh0ZXJuYWwgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdWJ0bGUg4oCUIHVuZGVybGluZSBvbiBob3ZlciBvbmx5XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCIgc3VidGxlPlxuICAgICAgICAgICAgU3VidGxlIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZG93bmxvYWRcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiZGF0YTp0ZXh0L3BsYWluLGdhbGxlcnlcIiBkb3dubG9hZD1cImdhbGxlcnkudHh0XCI+XG4gICAgICAgICAgICBEb3dubG9hZCBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInN1cmZhY2VcIixcbiAgICB0aXRsZTogXCJTdXJmYWNlXCIsXG4gICAgY29tcG9uZW50OiBcIlN1cmZhY2VcIixcbiAgICBzdW1tYXJ5OiBcIk93bnMgdmlzdWFsIGNocm9tZSDigJQgYmFja2dyb3VuZCwgYm9yZGVyLCByYWRpdXMsIHNoYWRvdywgcG9zaXRpb25pbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInBsYWluXCIsIFwicmFpc2VkXCIsIFwic3Vua2VuXCIsIFwiYnViYmxlXCIsIFwiY2hpcFwiLCBcImNhbGxvdXRcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U3VyZmFjZSB2YXJpYW50PXt2fSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiPnt2fTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ6IFwiZmxvYXRpbmdcIiAvIFwic3RpY2t5LWJhclwiIHBpbiB0byB0aGUgdmlld3BvcnQg4oCUIG9taXR0ZWQgaGVyZSc+XG4gICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBQb3NpdGlvbmFsIHZhcmlhbnRzIGFyZSBwcmV2aWV3ZWQgaW4gY29udGV4dCwgbm90IGluIGEgZ3JpZCBjZWxsLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJyYWRpdXM6IG5vbmUgLyBzbSAvIG1kIC8gbGcgLyBmdWxsXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwiZnVsbFwiXSBhcyBjb25zdCkubWFwKChyKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZVxuICAgICAgICAgICAgICBrZXk9e3J9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgICAgICAgICBib3JkZXI9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgcmFkaXVzPXtyfVxuICAgICAgICAgICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3J9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJvcmRlcjogbm9uZSAvIGRlZmF1bHQgLyBzdHJvbmdcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJkZWZhdWx0XCIsIFwic3Ryb25nXCJdIGFzIGNvbnN0KS5tYXAoKGIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlIGtleT17Yn0gYm9yZGVyPXtifSByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e2J9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNoYWRvdzogc20gLyBtZCAvIGxnXCI+XG4gICAgICAgICAgeyhbXCJzbVwiLCBcIm1kXCIsIFwibGdcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2VcbiAgICAgICAgICAgICAga2V5PXtzfVxuICAgICAgICAgICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgICAgICAgICAgc2hhZG93PXtzfVxuICAgICAgICAgICAgICByYWRpdXM9XCJtZFwiXG4gICAgICAgICAgICAgIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57c308L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2FyZFwiLFxuICAgIHRpdGxlOiBcIkNhcmRcIixcbiAgICBjb21wb25lbnQ6IFwiQ2FyZFwiLFxuICAgIHN1bW1hcnk6IFwiQ29tcG91bmQgb2YgU3VyZmFjZXMg4oCUIGEgcmFpc2VkIFJvb3Qgd3JhcHBpbmcgSGVhZGVyLCBCb2R5LCBhbmQgRm9vdGVyIHNsb3RzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJDYXJkLlJvb3QgPiBIZWFkZXIgLyBCb2R5IC8gRm9vdGVyXCIgd2lkZT5cbiAgICAgICAgPENhcmQuUm9vdCBwYWRkaW5nPVwiMFwiPlxuICAgICAgICAgIDxDYXJkLkhlYWRlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Q2FyZCBoZWFkZXI8L1RleHQ+XG4gICAgICAgICAgPC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICA8Q2FyZC5Cb2R5IHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICBUaGUgYm9keSBzbG90IGNhcnJpZXMgdGhlIG1haW4gY29udGVudC4gRWFjaCBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBpdFxuICAgICAgICAgICAgICBjYW4gYmUgcmV0aW50ZWQgb3IgcmVwYWRkZWQgd2l0aG91dCByZWFjaGluZyBwYXN0IHRoZSBwcmltaXRpdmUuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9DYXJkLkJvZHk+XG4gICAgICAgICAgPENhcmQuRm9vdGVyIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZvb3RlciBhY3Rpb25cIiAvPlxuICAgICAgICAgIDwvQ2FyZC5Gb290ZXI+XG4gICAgICAgIDwvQ2FyZC5Sb290PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2tlbGV0b25cIixcbiAgICB0aXRsZTogXCJTa2VsZXRvblwiLFxuICAgIGNvbXBvbmVudDogXCJTa2VsZXRvblwiLFxuICAgIHN1bW1hcnk6IFwiU2hpbW1lcmluZyBwbGFjZWhvbGRlciBmb3IgbG9hZGluZyBzdGF0ZXMuIEFuaW1hdGlvbiBob25vdXJzIHJlZHVjZWQtbW90aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJ0ZXh0XCIsIFwicmVjdFwiLCBcImNpcmNsZVwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PXt2fSAvPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImN1c3RvbSB3aWR0aCArIGhlaWdodFwiPlxuICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwicmVjdFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD17NjR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3V0cHV0XCIsXG4gICAgdGl0bGU6IFwiT3V0cHV0XCIsXG4gICAgY29tcG9uZW50OiBcIk91dHB1dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIk1vbm9zcGFjZSBvdXRwdXQgcmVnaW9uIGZvciBjb21tYW5kIHJlc3VsdHMgb3IgbG9ncyDigJQgd3JhcHMsIG9yIHNjcm9sbHMgaG9yaXpvbnRhbGx5LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0IOKAlCB3cmFwc1wiIHdpZGU+XG4gICAgICAgICAgPE91dHB1dD5wb2xseSBnYWxsZXJ5IOKGkiBzZXJ2aW5nIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6NDMyMTwvT3V0cHV0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNjcm9sbCDigJQgc2luZ2xlIGxvbmcgbGluZSBzY3JvbGxzIGluc3RlYWQgb2Ygd3JhcHBpbmdcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQgc2Nyb2xsPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiQgcG9sbHkgZ2FsbGVyeSAtLWJ1aWxkIC4vZGlzdC9nYWxsZXJ5ICAgIyBvbmUgbG9uZyBsaW5lIHRoYXQgc2Nyb2xscyBob3Jpem9udGFsbHkgcmF0aGVyIHRoYW4gd3JhcHBpbmcgb250byB0aGUgbmV4dCByb3dcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvT3V0cHV0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImh0bWxcIixcbiAgICB0aXRsZTogXCJIdG1sXCIsXG4gICAgY29tcG9uZW50OiBcIkh0bWxcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgYSB0cnVzdGVkIEhUTUwgc3RyaW5nLiBUaGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIOKAlCBuZXZlciBwYXNzIHVzZXIgaW5wdXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImh0bWw9e3RydXN0ZWQgc3RyaW5nfVwiIHdpZGU+XG4gICAgICAgIDxIdG1sIGh0bWw9XCI8c3Ryb25nPkJvbGQ8L3N0cm9uZz4sIDxlbT5pdGFsaWM8L2VtPiwgYW5kIGEgPGNvZGU+Y29kZSBzcGFuPC9jb2RlPiBmcm9tIGEgdHJ1c3RlZCBtYXJrdXAgc3RyaW5nLlwiIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2xsYXBzaWJsZVwiLFxuICAgIHRpdGxlOiBcIkNvbGxhcHNpYmxlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvbGxhcHNpYmxlXCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgPGRldGFpbHM+LzxzdW1tYXJ5PiBkaXNjbG9zdXJlIOKAlCBrZXlib2FyZCBhbmQgc2NyZWVuLXJlYWRlciBiZWhhdmlvdXIgZnJlZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xvc2VkIGJ5IGRlZmF1bHRcIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZSBzdW1tYXJ5PVwiU2hvdyBtb3JlIGRldGFpbFwiPlxuICAgICAgICAgICAgPFRleHQ+VGhpcyBjb250ZW50IGlzIHJldmVhbGVkIHdoZW4gdGhlIGRpc2Nsb3N1cmUgaXMgb3BlbmVkLjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHRPcGVuXCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIk9wZW4gZnJvbSB0aGUgc3RhcnRcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29sbGFwc2libGUgcmVuZGVycyBleHBhbmRlZCBvbiBmaXJzdCBwYWludC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlZGl0YWJsZSBmaWVsZCBpbiB0aGUgc3VtbWFyeSDigJQgU3BhY2UvRW50ZXIgbm8gbG9uZ2VyIGNvbGxhcHNlIGl0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgICAgIHN1bW1hcnk9e1xuICAgICAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJnYWxsZXJ5LWNvbGxhcHNpYmxlLXN1bW1hcnlcIiBwbGFjZWhvbGRlcj1cIlR5cGUgYSBzcGFjZSBoZXJl4oCmXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dD5UaGUgaGVhZGVyIGd1YXJkIGNhbmNlbHMgdGhlIGRpc2Nsb3N1cmUgdG9nZ2xlIGZvciB0ZXh0LWVudHJ5IGZpZWxkcy48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsYXlvdXRcIixcbiAgICB0aXRsZTogXCJMYXlvdXRcIixcbiAgICBjb21wb25lbnQ6IFwiTGF5b3V0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiVGhlIGdyaWQgcHJpbWl0aXZlLiBQcm9wcyBtYXAgdG8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzIOKAlCBubyBoYW5kLXdyaXR0ZW4gZmxleCBvciBncmlkLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2NvbHVtbnM9XCIxZnIgMWZyIDFmclwiJyB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiYXV0byAxZnIgYXV0b1wiJyB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8Qm94PmF1dG88L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PmF1dG88L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdGFja09uTW9iaWxlIOKAlCBjb2xsYXBzZXMgdG8gb25lIGNvbHVtbiDiiaQ2NDBweFwiIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIHN0YWNrT25Nb2JpbGU+XG4gICAgICAgICAgICA8Qm94PlNpZGUgYnkgc2lkZSwgdGhlbiBzdGFja2VkPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlNpZGUgYnkgc2lkZSwgdGhlbiBzdGFja2VkPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2x1c3RlclwiLFxuICAgIHRpdGxlOiBcIkNsdXN0ZXJcIixcbiAgICBjb21wb25lbnQ6IFwiQ2x1c3RlclwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIldyYXBwaW5nIHJvdyBvZiB2YXJpYWJsZS13aWR0aCBpdGVtcyDigJQgY2hpcHMsIHRhZ3MsIGJ1dHRvbiBncm91cHMuIFJlZmxvd3MgYXMgc3BhY2UgcnVucyBvdXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImdhcCDigJQgaXRlbXMgd3JhcCBvbnRvIG5ldyByb3dzXCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAge1tcIkdyb2Nlcmllc1wiLCBcIkVycmFuZHNcIiwgXCJIb21lXCIsIFwiR2FyZGVuXCIsIFwiRmluYW5jZVwiLCBcIlRyYXZlbFwiLCBcIkhlYWx0aFwiLCBcIkFkbWluXCJdLm1hcChcbiAgICAgICAgICAgICh0YWcpID0+IChcbiAgICAgICAgICAgICAgPEJhZGdlIGtleT17dGFnfSB2YXJpYW50PVwiaW5mb1wiPlxuICAgICAgICAgICAgICAgIHt0YWd9XG4gICAgICAgICAgICAgIDwvQmFkZ2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGFic1wiLFxuICAgIHRpdGxlOiBcIlRhYnNcIixcbiAgICBjb21wb25lbnQ6IFwiVGFic1wiLFxuICAgIHN1bW1hcnk6IFwiSG9yaXpvbnRhbCBuYXYgd2l0aCBhbiBhY3RpdmUtdGFiIGFjY2VudC4gRGlzcGF0Y2hlcyBhbiBhY3Rpb24gcGVyIHRhYi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW50ZXJhY3RpdmUg4oCUIG9uZSB0YWIgZGlzYWJsZWRcIiB3aWRlPlxuICAgICAgICA8VGFic1xuICAgICAgICAgIHRhYnM9e1tcbiAgICAgICAgICAgIHsgaWQ6IFwib3ZlcnZpZXdcIiwgbGFiZWw6IFwiT3ZlcnZpZXdcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJhY3Rpdml0eVwiLCBsYWJlbDogXCJBY3Rpdml0eVwiIH0sXG4gICAgICAgICAgICB7IGlkOiBcInNldHRpbmdzXCIsIGxhYmVsOiBcIlNldHRpbmdzXCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYXJjaGl2ZWRcIiwgbGFiZWw6IFwiQXJjaGl2ZWRcIiwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIGFjdGl2ZVRhYj17JGdhbGxlcnlUYWIudmFsdWV9XG4gICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGFiXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiR2FsbGVyeSB0YWJzXCJcbiAgICAgICAgLz5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNoZWNrYm94XCIsXG4gICAgdGl0bGU6IFwiQ2hlY2tib3hcIixcbiAgICBjb21wb25lbnQ6IFwiQ2hlY2tib3hcIixcbiAgICBzdW1tYXJ5OiBcIk5hdGl2ZSBjaGVja2JveCBpbiBhIGxhYmVsLiBBIHBsYWluIGJvb2xlYW4gaXMgY29udHJvbGxlZDsgYSBTaWduYWwgYmluZHMgaXRzZWxmLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ1bmNoZWNrZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJVbmNoZWNrZWRcIiBjaGVja2VkPXtmYWxzZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiQ2hlY2tlZFwiIGNoZWNrZWQ9e3RydWV9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZD17c2lnbmFsfSDigJQgY2xpY2sgdG8gdG9nZ2xlXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiQm91bmQgdG8gYSBzaWduYWxcIiBjaGVja2VkPXskZ2FsbGVyeUNoZWNrZWR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidG9nZ2xlXCIsXG4gICAgdGl0bGU6IFwiVG9nZ2xlXCIsXG4gICAgY29tcG9uZW50OiBcIlRvZ2dsZVwiLFxuICAgIHN1bW1hcnk6IFwiU3dpdGNoLXJvbGUgY2hlY2tib3guIFBhc3NpdmUg4oCUIHRoZSBjYWxsZXIgZHJpdmVzIHRoZSBjaGVja2VkIHN0YXRlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvZmZcIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiT2ZmXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib25cIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiT25cIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIkRpc2FibGVkXCIgY2hlY2tlZD17dHJ1ZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0LWlucHV0XCIsXG4gICAgdGl0bGU6IFwiVGV4dElucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIlRleHRJbnB1dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQuIEEgcGxhaW4gc3RyaW5nIGlzIHVuY29udHJvbGxlZDsgYSBTaWduYWwgaXMgY29udHJvbGxlZC4gXCIgK1xuICAgICAgXCJpbnB1dFR5cGUgcGlja3MgdGhlIG5hdGl2ZSBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbjsgZXJyb3IgcmVuZGVycyBhIGxpbmtlZCBtZXNzYWdlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJzaW5nbGVcIiB3aXRoIHBsYWNlaG9sZGVyJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLXNpbmdsZVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBoZXJl4oCmXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJtdWx0aVwiJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLW11bHRpXCIgdmFyaWFudD1cIm11bHRpXCIgcm93cz17M30gcGxhY2Vob2xkZXI9XCJNdWx0aXBsZSBsaW5lc+KAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJlbWFpbFwiJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWVtYWlsXCIgaW5wdXRUeXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImFkYUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJudW1iZXJcIiB3aXRoIG1pbi9tYXgvc3RlcCc+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1udW1iZXJcIiBpbnB1dFR5cGU9XCJudW1iZXJcIiBtaW49ezB9IG1heD17MTB9IHN0ZXA9ezF9IHZhbHVlPVwiNVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZXJyb3Ig4oCUIGxpbmtlZCBtZXNzYWdlLCBtYXJrcyBpbnZhbGlkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lcnJvclwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgZXJyb3I9XCJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbnZhbGlkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1pbnZhbGlkXCIgdmFsdWU9XCJub3QtYW4tZW1haWxcIiBpbnZhbGlkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWRpc2FibGVkXCIgdmFsdWU9XCJEaXNhYmxlZFwiIGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmVhZE9ubHlcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLXJlYWRvbmx5XCIgdmFsdWU9XCJSZWFkIG9ubHlcIiByZWFkT25seSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInZhbHVlPXtzaWduYWx9IOKAlCBjb250cm9sbGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1jb250cm9sbGVkXCIgdmFsdWU9eyRnYWxsZXJ5VGV4dH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzZWxlY3RcIixcbiAgICB0aXRsZTogXCJTZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiU2VsZWN0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiRHJvcGRvd24gb2Ygb3B0aW9ucyBib3VuZCB0byBhIFNpZ25hbDxTZXQ+LiBTaW5nbGUgcmVwbGFjZXMsIG11bHRpIHRvZ2dsZXMuIFwiICtcbiAgICAgICdjbGVhcmFibGUgcHJlcGVuZHMgYW4gXCJBbnkg4oCmXCIgcm93IHNvIGFuIG9wdGlvbmFsIGZpbHRlciBoYXMgYSBwYXRoIGJhY2sgdG8gdW5zZXQuJyxcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2luZ2xlLXNlbGVjdFwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUGljayBvbmVcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RTaW5nbGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjbGVhcmFibGUg4oCUIHNpbmdsZS1zZWxlY3Qgd2l0aCBhbiDigJxBbnkg4oCm4oCdIHJvd1wiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiRmlsdGVyIGJ5XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW55IG9iamVjdFwiXG4gICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibXVsdGlTZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgc2V2ZXJhbFwiXG4gICAgICAgICAgICBtdWx0aVNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RNdWx0aX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImZpbGUtaW5wdXRcIixcbiAgICB0aXRsZTogXCJGaWxlSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiRmlsZUlucHV0XCIsXG4gICAgc3VtbWFyeTogXCJTdHlsZWQgd3JhcHBlciBvdmVyIGEgbmF0aXZlIGZpbGUgcGlja2VyLiBIYW5kcyB0aGUgY2hvc2VuIEZpbGVMaXN0IHRvIG9uRmlsZXMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uRmlsZXMg4oCUIHBpY2sgYSBmaWxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgZmlsZVwiXG4gICAgICAgICAgICBvbkZpbGVzPXsoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IGZpbGVzWzBdPy5uYW1lID8/IFwi4oCUXCI7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYWNjZXB0ICsgbXVsdGlwbGVcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkNob29zZSBpbWFnZXNcIlxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJEaXNhYmxlZFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgb25GaWxlcz17KCkgPT4ge1xuICAgICAgICAgICAgICAvKiBkaXNhYmxlZCDigJQgbmV2ZXIgaW52b2tlZCAqL1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxhc3QgcGlja2VkIGZpbGVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBwaWNrZWQ6IDxDb2RlPnskZ2FsbGVyeUZpbGVOYW1lLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZHJvcGRvd25cIixcbiAgICB0aXRsZTogXCJEcm9wZG93blwiLFxuICAgIGNvbXBvbmVudDogXCJEcm9wZG93blwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkxvdy1sZXZlbCB0cmlnZ2VyICsgcG9wb3ZlciBwbHVtYmluZy4gVGhlIHByaW1pdGl2ZSBpdHNlbGYgaGFzIG5vIGNocm9tZSDigJQgXCIgK1xuICAgICAgXCJjb25zdW1lcnMgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSB3cmFwIGl0IHdpdGggdGhlIHN0eWxlZCB0cmlnZ2VyIGFuZCBjYXJldC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidHJpZ2dlciBkcmVzc2VkIHZpYSB0cmlnZ2VyQ2xhc3NOYW1lICsgZGF0YS1vcGVuXCI+XG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17JGdhbGxlcnlEcm9wZG93bk9wZW59XG4gICAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT1cImdhbGxlcnktZHJvcGRvd24tdHJpZ2dlclwiXG4gICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8c3Bhbj5PcGVuIG1lbnU8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2FsbGVyeS1kcm9wZG93bi1jYXJldFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0PkZpcnN0IGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5TZWNvbmQgaXRlbTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PlRoaXJkIGl0ZW08L1RleHQ+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24taW5wdXRcIixcbiAgICB0aXRsZTogXCJBY3Rpb25JbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25JbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiRHVhbC1tb2RlIHZpZXcvZWRpdCBmaWVsZC4gQ2xpY2sgdG8gZWRpdDsgY29tbWl0IGRpc3BhdGNoZXMgYW4gYWN0aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3NhdmVPbj1cImJsdXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkNsaWNrIHRvIGVkaXQsIGNvbW1pdHMgb24gYmx1clwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkJsdXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJlbnRlclwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiRWRpdCBhbmQgcHJlc3MgRW50ZXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiZW50ZXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRW50ZXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJkYXRlXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCIyMDI2LTA1LTIyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGlucHV0VHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJEYXRlIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkEgbG9uZ2VyLCBtdWx0aS1saW5lIHZhbHVlXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIk11bHRpLWxpbmUgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IGNvbW1pdHRlZCB2YWx1ZVwiIHdpZGU+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBMYXN0IGNvbW1pdHRlZDogPENvZGU+eyRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLXNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIkFjdGlvblNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBzdW1tYXJ5OiBcIlNpbmdsZS1zZWxlY3QgdGhhdCBjb21taXRzIGEgcGxhaW4gc3RyaW5nIHZhbHVlIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbW1pdHMgdmlhIGFjdGlvblwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUHJpb3JpdHlcIlxuICAgICAgICAgICAgdmFsdWU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWQg4oCUIHJlbmRlcnMgYXMgc3RhdGljIHRleHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwiaGlnaFwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibG93XCIsIGxhYmVsOiBcIkxvd1wiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibWVkaXVtXCIsIGxhYmVsOiBcIk1lZGl1bVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiaGlnaFwiLCBsYWJlbDogXCJIaWdoXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWZvcm1cIixcbiAgICB0aXRsZTogXCJBY3Rpb25Gb3JtXCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvbkZvcm1cIixcbiAgICBzdW1tYXJ5OiBcIldyYXBzIGEgbmF0aXZlIGZvcm0gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4g4oCUIHN1Ym1pdCBkaXNwYXRjaGVzIHRoZSBmb3JtIGhhbmRsZXIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZvcm0gd2l0aCBUZXh0SW5wdXQgZmllbGRzICsgYSBzdWJtaXQgQnV0dG9uXCIgd2lkZT5cbiAgICAgICAgPEFjdGlvbkZvcm0gZm9ybT17Z2FsbGVyeUZvcm19IGFyaWEtbGFiZWw9XCJHYWxsZXJ5IGRlbW8gZm9ybVwiPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICA8VGV4dCBhcz1cImxhYmVsXCIgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCIgaHRtbEZvcj1cImdhbGxlcnktZm9ybS1uYW1lXCI+XG4gICAgICAgICAgICAgIEZ1bGwgbmFtZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBpZD1cImdhbGxlcnktZm9ybS1uYW1lXCIgbmFtZT1cImZ1bGxOYW1lXCIgcGxhY2Vob2xkZXI9XCJBZGEgTG92ZWxhY2VcIiAvPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tZW1haWxcIj5cbiAgICAgICAgICAgICAgRW1haWxcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tZW1haWxcIiBuYW1lPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImFkYUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiB0aWVyPVwicHJpbWFyeVwiIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiU3VibWl0XCIgLz5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9BY3Rpb25Gb3JtPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibW9kYWxcIixcbiAgICB0aXRsZTogXCJNb2RhbFwiLFxuICAgIGNvbXBvbmVudDogXCJNb2RhbFwiLFxuICAgIHN1bW1hcnk6IFwiQ29tcG91bmQgZGlhbG9nIOKAlCBmb2N1cyB0cmFwLCBFc2NhcGUgaGFuZGxpbmcsIHBvcnRhbCwgc2Nyb2xsIGxvY2suXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9wZW5zIGEgcG9ydGFsbGVkIGRpYWxvZ1wiPlxuICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5Om1vZGFsLW9wZW5cIiBsYWJlbD1cIk9wZW4gbW9kYWxcIiAvPlxuICAgICAgICA8TW9kYWwuUm9vdFxuICAgICAgICAgIHdoZW49eyRnYWxsZXJ5TW9kYWxPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVtbyBtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8TW9kYWwuQmFja2Ryb3AgLz5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxNb2RhbC5UaXRsZT5Nb2RhbCB0aXRsZTwvTW9kYWwuVGl0bGU+XG4gICAgICAgICAgICA8L01vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgIDxNb2RhbC5Cb2R5PlxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBGb2N1cyBpcyB0cmFwcGVkIGluc2lkZSB0aGUgZGlhbG9nLCBFc2NhcGUgY2xvc2VzIGl0LCB0aGUgYmFja2Ryb3AgY2xpY2sgY2xvc2VzIGl0LFxuICAgICAgICAgICAgICAgIGFuZCB0aGUgYm9keSBzY3JvbGwgaXMgbG9ja2VkIHdoaWxlIGl0IGlzIG9wZW4uXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvTW9kYWwuQm9keT5cbiAgICAgICAgICAgIDxNb2RhbC5Gb290ZXI+XG4gICAgICAgICAgICAgIDxNb2RhbC5DbG9zZT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJEb25lXCIgLz5cbiAgICAgICAgICAgICAgPC9Nb2RhbC5DbG9zZT5cbiAgICAgICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgPC9Nb2RhbC5Sb290PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29uZmlybS1kaWFsb2dcIixcbiAgICB0aXRsZTogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgY29tcG9uZW50OiBcIkNvbmZpcm1EaWFsb2dcIixcbiAgICBzdW1tYXJ5OiBcIlByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbi4gY29uZmlybSgpIHJlc29sdmVzIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbmZpcm0oKSDigJQgc3RhbmRhcmRcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiIGxhYmVsPVwiQ29uZmlybSBhbiBhY3Rpb25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbmZpcm0oeyBkYW5nZXI6IHRydWUgfSlcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpjb25maXJtXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLWRhbmdlcj1cInRydWVcIlxuICAgICAgICAgICAgbGFiZWw9XCJDb25maXJtIGEgZGVsZXRpb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidG9hc3RcIixcbiAgICB0aXRsZTogXCJUb2FzdFwiLFxuICAgIGNvbXBvbmVudDogXCJUb2FzdFwiLFxuICAgIHN1bW1hcnk6IFwiUmVuZGVycyB0aGUgZ2xvYmFsIGVycm9yU3RhdGUgc2lnbmFsLiBTZXZlcml0eSBzZXRzIHRoZSBhcmlhLWxpdmUgcG9saXRlbmVzcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicHVzaCBhIHRvYXN0IGF0IGVhY2ggc2V2ZXJpdHlcIiB3aWRlPlxuICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiaW5mb1wiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJpbmZvXCJcbiAgICAgICAgICAgIGxhYmVsPVwiSW5mbyB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwid2FybmluZ1wiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiV2FybmluZyB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cImVycm9yXCJcbiAgICAgICAgICAgIGxhYmVsPVwiRXJyb3IgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm92ZXJsYXktcm9vdFwiLFxuICAgIHRpdGxlOiBcIk92ZXJsYXlSb290XCIsXG4gICAgY29tcG9uZW50OiBcIk92ZXJsYXlSb290XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiSW5mcmFzdHJ1Y3R1cmUsIG5vdCBhIHZpc3VhbCBjb250cm9sLiBNb3VudCBpdCBvbmNlIG5lYXIgdGhlIGFwcCByb290OyBNb2RhbCwgVG9hc3QsIGFuZCBcIiArXG4gICAgICBcIkNvbmZpcm1EaWFsb2cgcG9ydGFsIGludG8gaXQuIFRoZSBnYWxsZXJ5IHNoZWxsIGFscmVhZHkgbW91bnRzIG9uZSDigJQgdGhpcyBzZWN0aW9uIGRvY3VtZW50cyBpdC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibW91bnRlZCBvbmNlIGF0IHRoZSBhcHAgcm9vdFwiIHdpZGU+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxDb2RlPntcIjxPdmVybGF5Um9vdCAvPlwifTwvQ29kZT4gcmVuZGVycyB0aGUgcG9ydGFsIHRhcmdldCB0aGUgb3ZlcmxheSBwcmltaXRpdmVzIG5lZWQuXG4gICAgICAgICAgV2l0aG91dCBpdCwgdGhlIE1vZGFsIC8gVG9hc3QgLyBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBhYm92ZSB3b3VsZCBoYXZlIG5vd2hlcmUgdG9cbiAgICAgICAgICByZW5kZXIuIEl0IGRyYXdzIG5vdGhpbmcgaXRzZWxmOyB0aGUgZ2FsbGVyeSBzaGVsbCBtb3VudHMgdGhlIHNpbmdsZSBsaXZlIGluc3RhbmNlLlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG5dO1xuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5IGFwcCByb290IOKAlCBhIHNpbmdsZSBzY3JvbGxhYmxlIHBhZ2UgY2F0YWxvZ3VpbmcgZXZlcnkgcG9sbHktdWlcbiAqIHByaW1pdGl2ZSBpbiBpdHMgY29uZmlndXJhdGlvbnMuIEFuIGluLXBhZ2UgbmF2IGp1bXBzIGJldHdlZW4gc2VjdGlvbnM7IGFcbiAqIHRoZW1lIHRvZ2dsZSBmb3JjZXMgbGlnaHQvZGFyayBvbiB0aGUgcGFuZWwgc3VidHJlZSB2aWEgYGRhdGEtcG9sbHktdGhlbWVgXG4gKiBzbyBib3RoIHBhbGV0dGVzIGNhbiBiZSBpbnNwZWN0ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgT1Mgc2V0dGluZy5cbiAqXG4gKiBUaGUgb3ZlcmxheSBob3N0cyAoT3ZlcmxheVJvb3QgLyBUb2FzdC5WaWV3cG9ydCAvIENvbmZpcm1EaWFsb2cuSG9zdCkgYXJlXG4gKiBtb3VudGVkIGhlcmUgb25jZSwgc28gdGhlIE1vZGFsLCBUb2FzdCwgYW5kIENvbmZpcm1EaWFsb2cgc3BlY2ltZW5zIGhhdmUgYVxuICogcG9ydGFsIHRhcmdldCDigJQgdGhlIHNhbWUgd2lyaW5nIGEgcmVhbCBjb25zdW1lciBhcHAgZG9lcyBhdCBpdHMgcm9vdC5cbiAqL1xuXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENsdXN0ZXIsXG4gIENvbmZpcm1EaWFsb2csXG4gIExheW91dCxcbiAgT3ZlcmxheVJvb3QsXG4gIFN1cmZhY2UsXG4gIFRleHQsXG4gIFRvYXN0LFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQgeyBUSEVNRVMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHQUxMRVJZX1NFQ1RJT05TLCB0eXBlIEdhbGxlcnlTZWN0aW9uIH0gZnJvbSBcIi4vc3BlY2ltZW5zLnRzeFwiO1xuaW1wb3J0IHsgJGdhbGxlcnlUaGVtZSB9IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG4vKiogQSBjYXBpdGFsaXNlZCBsYWJlbCBmb3IgYSB0aGVtZSBvcHRpb24uICovXG5mdW5jdGlvbiB0aGVtZUxhYmVsKHRoZW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGhlbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGVtZS5zbGljZSgxKTtcbn1cblxuLyoqIE9uZSBjYXRhbG9ndWVkIGNvbXBvbmVudDogYSBsYWJlbGxlZCBsYW5kbWFyayB3aXRoIGEgZ3JpZCBvZiBzcGVjaW1lbnMuICovXG5mdW5jdGlvbiBTZWN0aW9uKHByb3BzOiB7IHNlY3Rpb246IEdhbGxlcnlTZWN0aW9uIH0pIHtcbiAgY29uc3QgeyBzZWN0aW9uIH0gPSBwcm9wcztcbiAgY29uc3QgaGVhZGluZ0lkID0gYCR7c2VjdGlvbi5pZH0taGVhZGluZ2A7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIGFzPVwic2VjdGlvblwiXG4gICAgICBpZD17c2VjdGlvbi5pZH1cbiAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICBjbGFzc05hbWU9XCJnYWxsZXJ5LXNlY3Rpb25cIlxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkaW5nSWR9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGgyIGlkPXtoZWFkaW5nSWR9IGNsYXNzPVwiZ2FsbGVyeS1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAge3NlY3Rpb24udGl0bGV9XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxUZXh0IGFzPVwicFwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgIHtzZWN0aW9uLnN1bW1hcnl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPExheW91dFxuICAgICAgICAgIGNvbHVtbnM9XCJyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDE0cmVtKSwgMWZyKSlcIlxuICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7c2VjdGlvbi5yZW5kZXIoKX1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHYWxsZXJ5QXBwKCkge1xuICBjb25zdCB0aGVtZSA9ICRnYWxsZXJ5VGhlbWUudmFsdWU7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cImNsYW1wKHZhcigtLXBvbGx5LXNwYWNlLXNtKSwgM3Z3LCB2YXIoLS1wb2xseS1zcGFjZS14bCkpXCJcbiAgICAgIGRhdGEtZ2FsbGVyeS1wYW5lbD1cInRydWVcIlxuICAgICAgZGF0YS1wb2xseS10aGVtZT17dGhlbWUgPT09IFwic3lzdGVtXCIgPyB1bmRlZmluZWQgOiB0aGVtZX1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiPlxuICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImdhbGxlcnktdGl0bGVcIj5Qb2xseSBVSSBnYWxsZXJ5PC9oMT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIEV2ZXJ5IDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPkBmYWlyZm94L3BvbGx5L3VpPC9UZXh0PiBwcmltaXRpdmUsIGluIGl0cyBjb25maWd1cmF0aW9ucyDigJRcbiAgICAgICAgICAgIGEgcmVmZXJlbmNlIGZvciBidWlsZGluZyBwb2xseSBhcHBzLCBhbmQgYSBzaW5nbGUgc3VyZmFjZSBmb3IgYWNjZXNzaWJpbGl0eSBhbmRcbiAgICAgICAgICAgIHZpc3VhbC1yZWdyZXNzaW9uIGNoZWNrcy5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTGF5b3V0PlxuXG4gICAgICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJjYWxsb3V0XCIgcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgICBUaGVtZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAge1RIRU1FUy5tYXAoKHQpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17dH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpZXI9e3QgPT09IHRoZW1lID8gXCJwcmltYXJ5XCIgOiBcInRlcnRpYXJ5XCJ9XG4gICAgICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnNldC10aGVtZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hY3Rpb24tdGhlbWU9e3R9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3RoZW1lTGFiZWwodCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvU3VyZmFjZT5cblxuICAgICAgICA8bmF2IGFyaWEtbGFiZWw9XCJDb21wb25lbnRzXCI+XG4gICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICB7R0FMTEVSWV9TRUNUSU9OUy5tYXAoKHNlY3Rpb24pID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17c2VjdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpZXI9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgaHJlZj17YCMke3NlY3Rpb24uaWR9YH1cbiAgICAgICAgICAgICAgICBsYWJlbD17c2VjdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14bClcIj5cbiAgICAgICAgICB7R0FMTEVSWV9TRUNUSU9OUy5tYXAoKHNlY3Rpb24pID0+IChcbiAgICAgICAgICAgIDxTZWN0aW9uIGtleT17c2VjdGlvbi5pZH0gc2VjdGlvbj17c2VjdGlvbn0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0xheW91dD5cblxuICAgICAgey8qIE1vdW50ZWQgb25jZSBzbyB0aGUgb3ZlcmxheSBzcGVjaW1lbnMgaGF2ZSBhIHBvcnRhbCB0YXJnZXQuICovfVxuICAgICAgPE92ZXJsYXlSb290IC8+XG4gICAgICA8VG9hc3QuVmlld3BvcnQgLz5cbiAgICAgIDxDb25maXJtRGlhbG9nLkhvc3QgLz5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkncyBicm93c2VyIGVudHJ5IHBvaW50LiBCdW5kbGVkIGJ5IHNlcnZlci50cyAob25lIEJ1bi5idWlsZCBwYXNzKVxuICog4oCUIGl0cyB0cmFuc2l0aXZlIGAubW9kdWxlLmNzc2AgaW1wb3J0cyBwbHVzIHRoZSBnbG9iYWwgc3R5bGVzaGVldHMgYmVsb3cgY29tZVxuICogb3V0IGFzIGEgc2luZ2xlIENTUyBhcnRpZmFjdCB0aGUgc2VydmVyIHNlcnZlcyBhbG9uZ3NpZGUgdGhpcyBzY3JpcHQuXG4gKlxuICogQm9vdCBtaXJyb3JzIGEgcmVhbCBjb25zdW1lciBhcHA6IGJpbmQgdGhlIGRlbW8gZm9ybSwgaW5zdGFsbCB0aGUgZG9jdW1lbnRcbiAqIGV2ZW50IGRlbGVnYXRpb24gdGhhdCByb3V0ZXMgYGRhdGEtYWN0aW9uYCBjbGlja3Mvc3VibWl0cyBpbnRvIHRoZSBnYWxsZXJ5J3NcbiAqIGFjdGlvbiByZWdpc3RyeSwgdGhlbiByZW5kZXIuIFRoZSBvdmVybGF5IGhvc3RzIGxpdmUgaW5zaWRlIDxHYWxsZXJ5QXBwIC8+LlxuICovXG5cbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGluc3RhbGxFdmVudERlbGVnYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IEdBTExFUllfQUNUSU9OUyB9IGZyb20gXCIuL2FjdGlvbnMudHNcIjtcbmltcG9ydCB7IEdhbGxlcnlBcHAgfSBmcm9tIFwiLi9nYWxsZXJ5LWFwcC50c3hcIjtcbmltcG9ydCB7IHR5cGUgR2FsbGVyeVN0b3JlcywgZ2FsbGVyeUZvcm0gfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3NyYy9wb2xseS11aS90aGVtZS5jc3NcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3NyYy9wb2xseS11aS9zdHlsZXMuY3NzXCI7XG5pbXBvcnQgXCIuL2dhbGxlcnkuY3NzXCI7XG5cbmNvbnN0IHN0b3JlczogR2FsbGVyeVN0b3JlcyA9IHt9O1xuZ2FsbGVyeUZvcm0uYmluZFN0b3JlcygoKSA9PiBzdG9yZXMpO1xuXG5pbnN0YWxsRXZlbnREZWxlZ2F0aW9uKGFzeW5jIChkaXNwYXRjaCkgPT4ge1xuICBjb25zdCBoYW5kbGVyID0gR0FMTEVSWV9BQ1RJT05TW2Rpc3BhdGNoLmFjdGlvbl07XG4gIGlmIChoYW5kbGVyKSB7XG4gICAgYXdhaXQgaGFuZGxlcih7XG4gICAgICBzdG9yZXMsXG4gICAgICBldmVudDogZGlzcGF0Y2guZXZlbnQsXG4gICAgICBlbGVtZW50OiBkaXNwYXRjaC5lbGVtZW50LFxuICAgICAgZGF0YTogZGlzcGF0Y2guZGF0YSxcbiAgICB9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcFwiKSA/PyBkb2N1bWVudC5ib2R5O1xucmVuZGVyKDxHYWxsZXJ5QXBwIC8+LCByb290KTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxJQUFJO0FBQUosSUFB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RUFBQyxJQUFFLE1BQUssSUFBUSxNQUFOLE9BQVEsRUFBRSxFQUFDLElBQUUsSUFBRSxDQUFDLEVBQUUsS0FBRyxHQUFFLE1BQUssRUFBQyxHQUFFLEdBQUUsTUFBSSxHQUFFLEtBQUksR0FBRSxHQUFHLElBQUksR0FBRSxPQUFLLElBQUUsRUFBRSxJQUFFLElBQUUsRUFBQyxHQUFFLEdBQUUsTUFBSSxHQUFFLEtBQUcsTUFBSyxHQUFFLE9BQUssTUFBRyxFQUFFLEVBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxLQUFVLEtBQUUsR0FBRSxPQUFYLFFBQXNCLEdBQUUsT0FBUjtBQUFBLElBQVksT0FBTyxHQUFFLE1BQUksR0FBRSxJQUFJLE9BQUssTUFBSyxHQUFFLElBQUksS0FBSyxRQUFRLENBQUMsSUFBRTtBQUFBLE1BQUMsSUFBUyxNQUFOLFFBQWUsR0FBRSxPQUFSO0FBQUEsUUFBWSxPQUFPLEdBQUUsTUFBSSxHQUFFLElBQUksT0FBSyxHQUFFO0FBQUEsS0FBSSxHQUFFLEVBQUUsRUFBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsSUFBRTtBQUFBLEdBQUUsQ0FBQyxHQUFFLFFBQU0sR0FBRSxNQUFJLFNBQUssRUFBRSxLQUFLLEVBQUMsS0FBRyxDQUFDLEVBQUUsU0FBTyxLQUFHLEVBQUUsd0JBQXNCLElBQUUsRUFBRSxzQkFBb0IsR0FBRyxDQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRztBQUFBLElBQUMsU0FBUSxJQUFFLEtBQUUsRUFBRSxFQUFFO0FBQUEsTUFBUSxFQUFFLFNBQU8sTUFBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLEtBQUUsRUFBRSxNQUFNLEdBQUUsS0FBRSxFQUFFLFFBQU8sRUFBRSxFQUFDO0FBQUEsWUFBRTtBQUFBLElBQVEsRUFBRSxTQUFPLEVBQUUsTUFBSTtBQUFBO0FBQUE7QUFBRyxTQUFTLENBQUMsQ0FBQyxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxLQUFFLE1BQUcsR0FBRSxPQUFLLEdBQUUsS0FBRSxHQUFFO0FBQUEsRUFBTyxLQUFJLEtBQUUsRUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLEVBQUMsR0FBRSxLQUFFLEVBQUUsS0FBRSxJQUFFO0FBQUEsS0FBVyxLQUFFLEdBQUUsSUFBSSxRQUFmLFNBQXFCLEtBQU0sR0FBRSxPQUFOLE1BQVcsR0FBRSxHQUFFLFFBQU0sR0FBRSxHQUFFLE1BQUksSUFBRSxLQUFFLEVBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsRUFBQyxHQUFFLEtBQUUsR0FBRSxLQUFJLEdBQUUsT0FBSyxHQUFFLE9BQUssR0FBRSxRQUFNLEdBQUUsT0FBSyxFQUFFLEdBQUUsS0FBSSxNQUFLLEVBQUMsR0FBRSxHQUFFLEtBQUssR0FBRSxLQUFJLEdBQUUsT0FBSyxJQUFFLEVBQUMsSUFBUyxNQUFOLFFBQWUsTUFBTixTQUFVLEtBQUUsTUFBSSxLQUFFLENBQUMsRUFBRSxJQUFFLEdBQUUsU0FBTyxHQUFFLFFBQU0sR0FBRSxPQUFLLEtBQUUsRUFBRSxJQUFFLElBQUUsSUFBRSxFQUFDLEdBQUUsTUFBRyxHQUFFLFFBQU0sR0FBRSxNQUFJLFNBQW1CLE9BQU8sR0FBRSxRQUFyQixjQUFvQyxPQUFKLFlBQU0sS0FBRSxLQUFFLE9BQUksS0FBRSxHQUFFLGNBQWEsR0FBRSxPQUFLO0FBQUEsRUFBSSxPQUFPLEdBQUUsTUFBSSxJQUFFO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLEtBQUUsR0FBRSxRQUFPLEtBQUUsSUFBRSxLQUFFO0FBQUEsRUFBRSxLQUFJLEdBQUUsTUFBSSxJQUFJLE1BQU0sRUFBQyxHQUFFLEtBQUUsRUFBRSxLQUFFLElBQUU7QUFBQSxL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LElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxFQUFDLEdBQUUsR0FBRSxPQUFLLEdBQUUsS0FBSSxHQUFFLE9BQUssTUFBSyxHQUFFLElBQUksVUFBUSxHQUFFLEtBQUssRUFBQyxHQUFFLE9BQUksR0FBRSxNQUFJLEdBQUUsS0FBRztBQUFBLFFBQU0sT0FBTSxJQUFFO0FBQUEsUUFBQyxJQUFHLEdBQUUsTUFBSSxNQUFLLE1BQVMsTUFBTjtBQUFBLFVBQVEsSUFBRyxHQUFFLE1BQUs7QUFBQSxZQUFDLEtBQUksR0FBRSxPQUFLLEtBQUUsTUFBSSxJQUFJLE1BQU0sR0FBRSxZQUFMLEtBQWUsR0FBRTtBQUFBLGNBQWEsS0FBRSxHQUFFO0FBQUEsWUFBWSxHQUFFLEdBQUUsUUFBUSxFQUFDLEtBQUcsTUFBSyxHQUFFLE1BQUk7QUFBQSxVQUFDLEVBQUs7QUFBQSxZQUFDLEtBQUksS0FBRSxHQUFFLE9BQU87QUFBQSxjQUFLLEVBQUUsR0FBRSxHQUFFO0FBQUEsWUFBRSxFQUFFLEVBQUM7QUFBQTtBQUFBLFFBQU87QUFBQSxhQUFFLE1BQUksR0FBRSxLQUFJLEdBQUUsTUFBSSxHQUFFLEtBQUksR0FBRSxRQUFNLEVBQUUsRUFBQztBQUFBLFFBQUUsRUFBRSxJQUFJLElBQUUsSUFBRSxFQUFDO0FBQUE7QUFBQSxJQUFPO0FBQUEsTUFBTSxNQUFOLFFBQVMsR0FBRSxPQUFLLEdBQUUsT0FBSyxHQUFFLE1BQUksR0FBRSxLQUFJLEdBQUUsTUFBSSxHQUFFLE9BQUssS0FBRSxHQUFFLE1BQUksRUFBRSxHQUFFLEtBQUksSUFBRSxJQUFFLElBQUUsSUFBRSxJQUFFLElBQUUsSUFBRSxFQUFDO0FBQUEsRUFBRSxRQUFPLEtBQUUsRUFBRSxXQUFTLEdBQUUsRUFBQyxHQUFFLE1BQUksR0FBRSxNQUFTLFlBQUU7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUU7QUFBQSxFQUFDLE9BQUksR0FBRSxRQUFNLEdBQUUsSUFBSSxNQUFJLE9BQUksR0FBRSxPQUFLLEdBQUUsSUFBSSxLQUFLLENBQUM7QUFBQTtBQUFH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LENBQUMsSUFBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxJQUFFLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLElBQUcsR0FBRSxJQUFFLElBQUUsQ0FBQyxHQUFFLFFBQU0sR0FBRSxLQUFHLENBQUMsS0FBRSxHQUFFLEVBQUMsSUFBRSxHQUFPLFdBQUUsRUFBQyxHQUFFLFFBQVEsQ0FBQyxJQUFFO0FBQUEsSUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFJLEdBQUUsSUFBSSxLQUFHLEdBQUUsR0FBRyxJQUFHLEtBQUUsR0FBRSxFQUFFLElBQUUsRUFBQztBQUFBLElBQUUsT0FBSSxPQUFJLEdBQUUsTUFBSSxDQUFDLElBQUUsR0FBRSxHQUFHLEVBQUUsR0FBRSxHQUFFLElBQUksU0FBUyxDQUFDLENBQUM7QUFBQSxHQUFHLEdBQUUsR0FBRSxNQUFJLElBQUUsQ0FBQyxHQUFFLE1BQUs7QUFBQSxJQUFDLElBQUksS0FBRSxRQUFRLENBQUMsSUFBRSxJQUFFLElBQUU7QUFBQSxNQUFDLElBQUcsQ0FBQyxHQUFFLElBQUk7QUFBQSxRQUFJLE9BQU07QUFBQSxNQUFHLElBQUksS0FBRSxHQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sUUFBUSxDQUFDLElBQUU7QUFBQSxRQUFDLE9BQU8sR0FBRTtBQUFBLE9BQUk7QUFBQSxNQUFFLElBQUcsR0FBRSxNQUFNLFFBQVEsQ0FBQyxJQUFFO0FBQUEsUUFBQyxPQUFNLENBQUMsR0FBRTtBQUFBLE9BQUk7QUFBQSxRQUFFLE9BQU0sQ0FBQyxNQUFHLEdBQUUsS0FBSyxNQUFLLElBQUUsSUFBRSxFQUFDO0FBQUEsTUFBRSxJQUFJLEtBQUUsR0FBRSxJQUFJLFVBQVE7QUFBQSxNQUFFLE9BQU8sR0FBRSxLQUFLLFFBQVEsQ0FBQyxJQUFFO0FBQUEsUUFBQyxJQUFHLEdBQUUsS0FBSTtBQUFBLFVBQUMsSUFBSSxLQUFFLEdBQUUsR0FBRztBQUFBLFVBQUcsR0FBRSxLQUFHLEdBQUUsS0FBSSxHQUFFLE1BQVMsV0FBRSxPQUFJLEdBQUUsR0FBRyxPQUFLLEtBQUU7QUFBQSxRQUFHO0FBQUEsT0FBRSxHQUFFLE1BQUcsR0FBRSxLQUFLLE1BQUssSUFBRSxJQUFFLEVBQUMsS0FBRztBQUFBO0FBQUEsSUFBRyxHQUFFLE1BQUk7QUFBQSxJQUFHLE1BQVEsdUJBQUosSUFBOEIscUJBQUosT0FBRTtBQUFBLElBQXNCLEdBQUUsc0JBQW9CLFFBQVEsQ0FBQyxJQUFFLElBQUUsSUFBRTtBQUFBLE1BQUMsSUFBRyxLQUFLLEtBQUk7QUFBQSxRQUFDLElBQUksS0FBRTtBQUFBLFFBQUUsS0FBTyxXQUFFLEdBQUUsSUFBRSxJQUFFLEVBQUMsR0FBRSxLQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsTUFBRyxHQUFFLEtBQUssTUFBSyxJQUFFLElBQUUsRUFBQztBQUFBLE9BQUcsR0FBRSx3QkFBc0I7QUFBQSxFQUFDO0FBQUEsRUFBQyxPQUFPLEdBQUUsT0FBSyxHQUFFO0FBQUE7QUFBRyxTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsQ0FBQyxHQUFFLE9BQUssR0FBRSxHQUFFLEtBQUksRUFBQyxNQUFJLEdBQUUsS0FBRyxJQUFFLEdBQUUsSUFBRSxJQUFFLEdBQUUsSUFBSSxJQUFJLEtBQUssRUFBQztBQUFBO0FBQW1GLFNBQVMsRUFBQyxDQUFDLElBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxPQUFNLEVBQUMsU0FBUSxHQUFDO0FBQUEsS0FBRyxDQUFDLENBQUM7QUFBQTtBQUF1TixTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxHQUFFLEdBQUUsS0FBSSxFQUFDLE1BQUksR0FBRSxLQUFHLEdBQUUsR0FBRSxHQUFFLE1BQUksSUFBRSxHQUFFLE1BQUksS0FBRyxHQUFFO0FBQUE7QUFBRyxTQUFTLEVBQUMsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxPQUFPO0FBQUEsS0FBRyxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxRQUFRLEdBQUUsTUFBSyxLQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxPQUFPLEdBQUUsSUFBRSxJQUFFLE1BQVMsR0FBRSxNQUFSLFNBQWEsR0FBRSxLQUFHLE1BQUcsR0FBRSxJQUFJLEVBQUMsSUFBRyxHQUFFLE1BQU0sU0FBTyxHQUFFO0FBQUE7QUFBa08sU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLE1BQUksRUFBRTtBQUFBLEVBQUUsSUFBRyxDQUFDLEdBQUUsSUFBRztBQUFBLElBQUMsU0FBUSxLQUFFLEdBQUUsSUFBVyxPQUFQLFFBQVUsQ0FBQyxHQUFFLE9BQVksR0FBRSxPQUFUO0FBQUEsTUFBYSxLQUFFLEdBQUU7QUFBQSxJQUFHLElBQUksS0FBRSxHQUFFLFFBQU0sR0FBRSxNQUFJLENBQUMsR0FBRSxDQUFDO0FBQUEsSUFBRyxHQUFFLEtBQUcsTUFBSSxHQUFFLEtBQUcsTUFBSSxHQUFFO0FBQUEsRUFBSTtBQUFBLEVBQUMsT0FBTyxHQUFFO0FBQUE7QUFBRyxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxHQUFFLEtBQUUsR0FBRSxNQUFNLEtBQUc7QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFO0FBQUEsSUFBSSxJQUFHLEdBQUUsT0FBSztBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUMsR0FBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEdBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxHQUFFLE1BQUksQ0FBQztBQUFBLFFBQUUsT0FBTSxJQUFFO0FBQUEsUUFBQyxHQUFFLE1BQUksQ0FBQyxHQUFFLEdBQUUsSUFBSSxJQUFFLEdBQUUsR0FBRztBQUFBO0FBQUEsRUFBRTtBQUFBO0FBQUUsR0FBRSxNQUFJLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxLQUFFLE1BQUssTUFBRyxHQUFFLEVBQUM7QUFBQSxHQUFHLEdBQUUsS0FBRyxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxNQUFHLEdBQUUsT0FBSyxHQUFFLElBQUksUUFBTSxHQUFFLE1BQUksR0FBRSxJQUFJLE1BQUssTUFBRyxHQUFFLElBQUUsRUFBQztBQUFBLEdBQUcsR0FBRSxNQUFJLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxNQUFHLEdBQUUsRUFBQyxHQUFFLEtBQUU7QUFBQSxFQUFFLElBQUksTUFBRyxLQUFFLEdBQUUsS0FBSztBQUFBLEVBQUksT0FBSSxPQUFJLE1BQUcsR0FBRSxNQUFJLENBQUMsR0FBRSxHQUFFLE1BQUksQ0FBQyxHQUFFLEdBQUUsR0FBRyxLQUFLLFFBQVEsQ0FBQyxJQUFFO0FBQUEsSUFBQyxHQUFFLFFBQU0sR0FBRSxLQUFHLEdBQUUsTUFBSyxHQUFFLElBQUUsR0FBRSxNQUFTO0FBQUEsR0FBRSxNQUFJLEdBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxHQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxLQUFFLEtBQUksS0FBRTtBQUFBLEdBQUcsR0FBRSxTQUFPLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxNQUFHLEdBQUUsRUFBQztBQUFBLEVBQUUsSUFBSSxLQUFFLEdBQUU7QUFBQSxFQUFJLE1BQUcsR0FBRSxRQUFNLEdBQUUsSUFBSSxJQUFJLFdBQWEsR0FBRSxLQUFLLEVBQUMsTUFBWixLQUFlLE9BQUksR0FBRSwyQkFBeUIsS0FBRSxHQUFFLDBCQUF3QixJQUFHLEVBQUMsSUFBRyxHQUFFLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQyxJQUFFO0FBQUEsSUFBQyxHQUFFLE1BQUksR0FBRSxNQUFJLEdBQUUsSUFBRyxHQUFFLElBQU87QUFBQSxHQUFFLElBQUcsS0FBRSxLQUFFO0FBQUEsR0FBTSxHQUFF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V0FBRSxHQUFPLFdBQUUsR0FBRSxHQUFDO0FBQUEsTUFBRSxJQUFZLEdBQUUsTUFBTjtBQUFBLFFBQVEsR0FBRSxFQUFFLElBQUU7QUFBQSxNQUFFLEdBQUUsSUFBRTtBQUFBLE1BQUUsR0FBRSxJQUFFO0FBQUEsTUFBRSxJQUFHLEtBQUcsR0FBRTtBQUFBLFFBQUUsR0FBRSxFQUFFLEVBQUM7QUFBQSxNQUFFLE9BQU87QUFBQSxJQUFDLEVBQU0sU0FBUSxHQUFFLE1BQVAsSUFBUztBQUFBLE1BQUMsR0FBRSxJQUFFO0FBQUEsTUFBRSxJQUFZLEdBQUUsTUFBTixXQUFRO0FBQUEsUUFBQyxHQUFFLEVBQUUsSUFBRSxHQUFFO0FBQUEsUUFBRSxJQUFZLEdBQUUsTUFBTjtBQUFBLFVBQVEsR0FBRSxFQUFFLElBQUUsR0FBRTtBQUFBLFFBQUUsR0FBRSxJQUFFLEdBQUU7QUFBQSxRQUFFLEdBQUUsSUFBTztBQUFBLFFBQUUsR0FBRSxFQUFFLElBQUU7QUFBQSxRQUFFLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLE9BQU87QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFRLE1BQU4sT0FBYSxZQUFFLEdBQUU7QUFBQSxFQUFRLEtBQUssSUFBUSxNQUFOLE9BQWEsWUFBRSxHQUFFO0FBQUEsRUFBVSxLQUFLLE9BQVcsTUFBTixPQUFhLFlBQUUsR0FBRTtBQUFBO0FBQUssR0FBRSxVQUFVLFFBQU07QUFBRSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsTUFBSyxLQUFFLEtBQUs7QUFBQSxFQUFFLElBQUcsT0FBSSxNQUFZLEdBQUUsTUFBTixXQUFRO0FBQUEsSUFBQyxHQUFFLElBQUU7QUFBQSxJQUFFLEtBQUssSUFBRTtBQUFBLElBQUUsSUFBWSxPQUFKO0FBQUEsTUFBTSxHQUFFLElBQUU7QUFBQSxJQUFPO0FBQUEsU0FBRSxRQUFRLEdBQUU7QUFBQSxRQUFDLElBQUk7QUFBQSxTQUFTLEtBQUUsR0FBRSxNQUFYLFFBQWUsR0FBRSxLQUFLLEVBQUM7QUFBQSxPQUFFO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRTtBQUFBLEVBQUssSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsTUFBUSxHQUFKLElBQVUsR0FBSixPQUFFO0FBQUEsSUFBSSxJQUFZLE9BQUosV0FBTTtBQUFBLE1BQUMsR0FBRSxJQUFFO0FBQUEsTUFBRSxHQUFFLElBQU87QUFBQSxJQUFDO0FBQUEsSUFBQyxJQUFZLE9BQUosV0FBTTtBQUFBLE1BQUMsR0FBRSxJQUFFO0FBQUEsTUFBRSxHQUFFLElBQU87QUFBQSxJQUFDO0FBQUEsSUFBQyxJQUFHLE9BQUksS0FBSyxHQUFFO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLElBQVksT0FBSjtBQUFBLFFBQU0sR0FBRSxRQUFRLEdBQUU7QUFBQSxVQUFDLElBQUk7QUFBQSxXQUFTLEtBQUUsR0FBRSxNQUFYLFFBQWUsR0FBRSxLQUFLLEVBQUM7QUFBQSxTQUFFO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxZQUFVLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUU7QUFBQSxFQUFLLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUksS0FBRSxHQUFFLE9BQU0sS0FBRTtBQUFBLElBQUUsS0FBTztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUMsR0FBRSxFQUFDO0FBQUEsY0FBRTtBQUFBLE1BQVEsS0FBRTtBQUFBO0FBQUEsS0FBSSxFQUFDLE1BQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsVUFBUSxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSztBQUFBO0FBQU8sR0FBRSxVQUFVLFdBQVMsUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUssUUFBTTtBQUFBO0FBQUksR0FBRSxVQUFVLFNBQU8sUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFPLEdBQUUsVUFBVSxPQUFLLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBSSxLQUFFO0FBQUEsRUFBSyxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUU7QUFBQSxHQUFNO0FBQUE7QUFBRyxPQUFPLGVBQWUsR0FBRSxXQUFVLFNBQVEsRUFBQyxLQUFJLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsSUFBWSxPQUFKO0FBQUEsSUFBTSxHQUFFLElBQUUsS0FBSztBQUFBLEVBQUUsT0FBTyxLQUFLO0FBQUEsR0FBRyxLQUFJLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFHLE9BQUksS0FBSyxHQUFFO0FBQUEsSUFBQyxJQUFHLEtBQUU7QUFBQSxNQUFJLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEtBQUcsUUFBUSxDQUFDLElBQUU7QUFBQSxNQUFDLElBQU8sT0FBSixLQUFXLE9BQUo7QUFBQSxRQUFNLElBQUcsR0FBRSxNQUFJLElBQUU7QUFBQSxVQUFDLEdBQUUsSUFBRTtBQUFBLFVBQUUsS0FBRSxFQUFDLEdBQUUsSUFBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUM7QUFBQSxRQUFDO0FBQUE7QUFBQSxPQUFHLElBQUk7QUFBQSxJQUFFLEtBQUssSUFBRTtBQUFBLElBQUUsS0FBSztBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSSxJQUFHO0FBQUEsTUFBQyxTQUFRLEtBQUUsS0FBSyxFQUFXLE9BQUosV0FBTSxLQUFFLEdBQUU7QUFBQSxRQUFFLEdBQUUsRUFBRSxFQUFFO0FBQUEsY0FBRTtBQUFBLE1BQVEsR0FBRTtBQUFBO0FBQUEsRUFBRTtBQUFBLEVBQUUsQ0FBQztBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsT0FBTyxJQUFJLEdBQUUsSUFBRSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxTQUFRLEtBQUUsR0FBRSxFQUFXLE9BQUosV0FBTSxLQUFFLEdBQUU7QUFBQSxJQUFFLElBQUcsR0FBRSxFQUFFLE1BQUksR0FBRSxLQUFHLENBQUMsR0FBRSxFQUFFLEVBQUUsS0FBRyxHQUFFLEVBQUUsTUFBSSxHQUFFO0FBQUEsTUFBRSxPQUFNO0FBQUEsRUFBRyxPQUFNO0FBQUE7QUFBRyxTQUFTLEVBQUMsQ0FBQyxJQUFFO0FBQUEsRUFBQyxTQUFRLEtBQUUsR0FBRSxFQUFXLE9BQUosV0FBTSxLQUFFLEdBQUUsR0FBRTtBQUFBLElBQUMsSUFBSSxLQUFFLEdBQUUsRUFBRTtBQUFBLElBQUUsSUFBWSxPQUFKO0FBQUEsTUFBTSxHQUFFLElBQUU7QUFBQSxJQUFFLEdBQUUsRUFBRSxJQUFFO0FBQUEsSUFBRSxHQUFFLElBQUU7QUFBQSxJQUFHLElBQVksR0FBRSxNQUFOLFdBQVE7QUFBQSxNQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUU7QUFBQSxJQUFLO0FBQUEsRUFBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEdBQUUsR0FBRSxLQUFPO0FBQUEsRUFBRSxPQUFlLE9BQUosV0FBTTtBQUFBLElBQUMsSUFBSSxLQUFFLEdBQUU7QUFBQSxJQUFFLElBQVEsR0FBRSxNQUFQLElBQVM7QUFBQSxNQUFDLEdBQUUsRUFBRSxFQUFFLEVBQUM7QUFBQSxNQUFFLElBQVksT0FBSjtBQUFBLFFBQU0sR0FBRSxJQUFFLEdBQUU7QUFBQSxNQUFFLElBQVksR0FBRSxNQUFOO0FBQUEsUUFBUSxHQUFFLEVBQUUsSUFBRTtBQUFBLElBQUMsRUFBTTtBQUFBLFdBQUU7QUFBQSxJQUFFLEdBQUUsRUFBRSxJQUFFLEdBQUU7QUFBQSxJQUFFLElBQVksR0FBRSxNQUFOO0FBQUEsTUFBUSxHQUFFLElBQU87QUFBQSxJQUFFLEtBQUU7QUFBQSxFQUFDO0FBQUEsRUFBQyxHQUFFLElBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsR0FBRSxLQUFLLE1BQVUsU0FBQztBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBRSxLQUFFO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBUSxNQUFOLE9BQWEsWUFBRSxHQUFFO0FBQUEsRUFBUSxLQUFLLElBQVEsTUFBTixPQUFhLFlBQUUsR0FBRTtBQUFBLEVBQVUsS0FBSyxPQUFXLE1BQU4sT0FBYSxZQUFFLEdBQUU7QUFBQTtBQUFLLEdBQUUsWUFBVSxJQUFJO0FBQUUsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxPQUFNO0FBQUEsRUFBRyxLQUFRLEtBQUcsS0FBSyxNQUFiO0FBQUEsSUFBZ0IsT0FBTTtBQUFBLEVBQUcsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLEtBQUssTUFBSTtBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFFLElBQUcsS0FBSyxJQUFFLEtBQUcsQ0FBQyxHQUFFLElBQUksR0FBRTtBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRyxPQUFNO0FBQUEsRUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFO0FBQUEsRUFBRSxJQUFHO0FBQUEsSUFBQyxHQUFFLElBQUk7QUFBQSxJQUFFLEtBQUU7QUFBQSxJQUFLLElBQUksS0FBRSxLQUFLLEVBQUU7QUFBQSxJQUFFLElBQUcsS0FBRyxLQUFLLEtBQUcsS0FBSyxNQUFJLE1BQU8sS0FBSyxNQUFULEdBQVc7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsS0FBSyxLQUFHO0FBQUEsTUFBSSxLQUFLO0FBQUEsSUFBRztBQUFBLElBQUUsT0FBTSxJQUFFO0FBQUEsSUFBQyxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUssS0FBRztBQUFBLElBQUcsS0FBSztBQUFBO0FBQUEsRUFBSSxLQUFFO0FBQUEsRUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUcsT0FBTTtBQUFBO0FBQUksR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLElBQUU7QUFBQSxFQUFDLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsU0FBUSxLQUFFLEtBQUssRUFBVyxPQUFKLFdBQU0sS0FBRSxHQUFFO0FBQUEsTUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxHQUFFLFVBQVUsRUFBRSxLQUFLLE1BQUssRUFBQztBQUFBLElBQUUsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLE1BQUMsS0FBSyxLQUFHO0FBQUEsTUFBSSxTQUFRLEtBQUUsS0FBSyxFQUFXLE9BQUosV0FBTSxLQUFFLEdBQUU7QUFBQSxRQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUM7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsSUFBRSxLQUFLLElBQUc7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUUsU0FBUSxLQUFFLEtBQUssRUFBVyxPQUFKLFdBQU0sS0FBRSxHQUFFO0FBQUEsTUFBRSxHQUFFLEVBQUUsRUFBRTtBQUFBLEVBQUM7QUFBQTtBQUFHLE9BQU8sZUFBZSxHQUFFLFdB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QUUsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLE1BQUssS0FBRSxHQUFFLE1BQUssS0FBRSxVQUFVLEVBQUM7QUFBQSxFQUFFLEdBQUUsUUFBTTtBQUFBLEVBQUUsSUFBSSxLQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFJLEtBQUUsSUFBRSxLQUFFLEdBQUU7QUFBQSxJQUFJLE9BQU0sS0FBRSxHQUFFO0FBQUEsTUFBRyxJQUFHLEdBQUUsS0FBSTtBQUFBLFFBQUMsR0FBRSxJQUFJLFFBQU07QUFBQSxRQUFFO0FBQUEsTUFBSztBQUFBLElBQUMsSUFBSSxLQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFNO0FBQUEsTUFBTSxPQUFXLE9BQUosSUFBTSxJQUFPLE9BQUwsT0FBTyxLQUFHLE1BQUc7QUFBQSxLQUFHLEdBQUUsS0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsT0FBTSxDQUFDLE1BQU0sUUFBUSxHQUFFLEtBQUssS0FBRyxDQUFDLEVBQUUsR0FBRSxLQUFLO0FBQUEsS0FBRSxHQUFFLEtBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBRyxHQUFFLE9BQU07QUFBQSxRQUFDLElBQUksS0FBRSxHQUFFO0FBQUEsUUFBTSxJQUFHLEdBQUUsT0FBSyxHQUFFLElBQUksT0FBUyxHQUFFLElBQUksSUFBSSxhQUFkO0FBQUEsVUFBdUIsR0FBRSxJQUFJLElBQUksT0FBSztBQUFBLE1BQUM7QUFBQSxLQUFFLEdBQUUsS0FBRSxHQUFFLEtBQUs7QUFBQSxJQUFFLEdBQUUsS0FBSyxJQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsR0FBRTtBQUFBLE1BQUUsR0FBRSxLQUFLLElBQUk7QUFBQTtBQUFBLElBQUcsT0FBTSxDQUFDLElBQUUsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDLEdBQUUsS0FBRSxHQUFFLElBQUcsS0FBRSxHQUFFO0FBQUEsRUFBRyxP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S0FBSztBQUFBLElBQUssSUFBRyxFQUFFLE1BQUcsTUFBRyxJQUFFLEtBQUs7QUFBQSxNQUFNLE9BQU07QUFBQSxJQUFHLElBQUcsSUFBRSxLQUFLO0FBQUEsTUFBSyxPQUFNO0FBQUEsRUFBRSxFQUFLO0FBQUEsSUFBQyxJQUFHLEVBQUUsTUFBRyxJQUFFLEtBQUs7QUFBQSxNQUFNLE9BQU07QUFBQSxJQUFHLElBQUcsSUFBRSxLQUFLO0FBQUEsTUFBSyxPQUFNO0FBQUE7QUFBQSxFQUFHLFNBQVEsTUFBSztBQUFBLElBQUUsSUFBZ0IsT0FBYixjQUFnQixHQUFFLFFBQUssS0FBSyxNQUFNO0FBQUEsTUFBRyxPQUFNO0FBQUEsRUFBRyxTQUFRLE1BQUssS0FBSztBQUFBLElBQU0sSUFBRyxFQUFFLE1BQUs7QUFBQSxNQUFHLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLFNBQVMsU0FBUyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxHQUFFLElBQUUsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBRSxTQUFTLFdBQVcsQ0FBQyxJQUFFLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLEVBQUM7QUFBQSxFQUFFLEdBQUUsVUFBUTtBQUFBLEVBQUUsR0FBRSxRQUFNO0FBQUEsRUFBRSxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFPLEdBQUUsUUFBUTtBQUFBLE9BQUcsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBRSxJQUFJLEtBQWUsT0FBTyx5QkFBcEIsY0FBMEMsYUFBVyxRQUFRLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsYUFBYSxFQUFDO0FBQUEsSUFBRSxxQkFBcUIsRUFBQztBQUFBLElBQUUsR0FBRTtBQUFBLEtBQUcsS0FBRSxXQUFXLElBQUUsRUFBRSxHQUFFLEtBQUUsc0JB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LEdBQUU7QUFBQSxRQUFJLE9BQWEsR0FBRSxPQUFSLFNBQWMsR0FBRSxNQUFJLEdBQUUsS0FBSSxHQUFFLE1BQUksR0FBRSxNQUFLLEdBQUUsSUFBSSxJQUFFLEVBQUM7QUFBQTtBQUFBLEVBQUUsR0FBRSxJQUFFLElBQUUsSUFBRSxFQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsRUFBRTtBQUFRLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUEsRUFBQyxPQUFPLE9BQUksR0FBRSxPQUFLLEdBQUUsSUFBSSxRQUFNLEdBQUUsSUFBSSxJQUFJLEdBQUcsUUFBUSxRQUFRLENBQUMsSUFBRTtBQUFBLElBQWEsT0FBTyxHQUFFLE9BQXJCLGNBQTBCLEdBQUUsSUFBSTtBQUFBLEdBQUUsR0FBRSxHQUFFLElBQUksTUFBSSxRQUFhLEtBQUUsR0FBRSxDQUFDLEdBQUUsRUFBQyxHQUFHLE9BQWxCLFNBQXdCLEdBQUUsSUFBSSxRQUFNLE9BQUksR0FBRSxJQUFJLE1BQUksS0FBRyxHQUFFLElBQUksTUFBSSxNQUFHLEdBQUUsTUFBSSxPQUFNLEdBQUUsTUFBSSxHQUFFLE9BQUssR0FBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxJQUFFLElBQUUsRUFBQztBQUFBLEdBQUUsSUFBRztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsSUFBRSxJQUFFLElBQUU7QUFBQSxFQUFDLE9BQU8sTUFBRyxPQUFJLEdBQUUsTUFBSSxNQUFLLEdBQUUsTUFBSSxHQUFFLE9BQUssR0FBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxJQUFFLElBQUUsRUFBQztBQUFBLEdBQUUsR0FBRSxHQUFFLE9BQUssR0FBRSxJQUFJLFFBQU0sT0FBSSxHQUFFLE9BQUssR0FBRSxZQUFZLEdBQUUsR0FBRyxHQUFFLEdBQUUsSUFBSSxNQUFJLE1BQUcsR0FBRSxJQUFJLE1BQUksTUFBSTtBQUFBO0FBQUUsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFBO0FBQUssU0FBUyxFQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEdBQUUsTUFBSSxHQUFFLEdBQUc7QUFBQSxFQUFJLE9BQU8sTUFBRyxHQUFFLE9BQUssR0FBRSxJQUFJLEVBQUM7QUFBQTtBQUFtTixTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFLE1BQUssS0FBSyxJQUFFO0FBQUE7QUFBSyxFQUFFLFVBQVEsUUFBUSxDQUFDLElBQUU7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFO0FBQUEsRUFBSSxPQUFJLEdBQUUsTUFBSSxPQUFJLE1BQUcsR0FBRSxPQUFLLEdBQUUsSUFBSSxHQUFFLE1BQUcsS0FBRyxHQUFFLFFBQU0sR0FBRSxPQUFLLE9BQU0sTUFBRyxHQUFFLEVBQUM7QUFBQSxJQUFJLEdBQUUsWUFBVSxJQUFJLEdBQUcsTUFBSSxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsR0FBRSxLQUFJLEtBQUU7QUFBQSxFQUFXLEdBQUUsS0FBUixTQUFZLEdBQUUsSUFBRSxDQUFDLElBQUcsR0FBRSxFQUFFLEtBQUssRUFBQztBQUFBLEVBQUUsSUFBSSxLQUFFLEdBQUUsR0FBRSxHQUFHLEdBQUUsS0FBRSxPQUFHLEtBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxNQUFHLEdBQUUsUUFBTSxLQUFFLE1BQUcsR0FBRSxNQUFJLE1BQUssS0FBRSxHQUFFLEVBQUMsSUFBRSxHQUFFO0FBQUE7QUFBQSxFQUFJLEdBQUUsTUFBSTtBQUFBLEVBQUUsSUFBSSxLQUFFLEdBQUU7QUFBQSxFQUFJLEdBQUUsTUFBSTtBQUFBLEVBQUssSUFBSSxLQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBRyxDQUFDLEVBQUUsR0FBRSxLQUFJO0FBQUEsTUFBQyxJQUFHLEdBQUUsTUFBTSxLQUFJO0FBQUEsUUFBQyxJQUFJLEtBQUUsR0FBRSxNQUFNO0FBQUEsUUFBSSxHQUFFLElBQUksSUFBSSxLQUFHLEdBQUUsSUFBRSxHQUFFLElBQUksS0FBSSxHQUFFLElBQUksR0FBRztBQUFBLE1BQUM7QUFBQSxNQUFDLElBQUk7QUFBQSxNQUFFLEtBQUksR0FBRSxTQUFTLEVBQUMsS0FBSSxHQUFFLE1BQUksS0FBSSxDQUFDLEVBQUUsS0FBRSxHQUFFLEVBQUUsSUFBSTtBQUFBLFFBQUcsR0FBRSxNQUFJLElBQUUsR0FBRSxZQUFZO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRyxHQUFFLFNBQU8sS0FBRyxHQUFFLE9BQUssR0FBRSxTQUFTLEVBQUMsS0FBSSxHQUFFLE1BQUksR0FBRSxJQUFJLElBQUksR0FBRSxDQUFDLEdBQUUsR0FBRSxLQUFLLElBQUUsRUFBQztBQUFBLEdBQUcsR0FBRSxVQUFVLHVCQUFxQixRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVUsU0FBTyxRQUFRLENBQUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLElBQUMsSUFBRyxLQUFLLElBQUksS0FBSTtBQUFBLE1BQUMsSUFBSSxLQUFFLFNBQVMsY0FBYyxLQUFLLEdBQUUsS0FBRSxLQUFLLElBQUksSUFBSSxHQUFHO0FBQUEsTUFBSSxLQUFLLElBQUksSUFBSSxLQUFHLEdBQUUsS0FBSyxLQUFJLElBQUUsR0FBRSxNQUFJLEdBQUUsR0FBRztBQUFBLElBQUM7QUFBQSxJQUFDLEtBQUssTUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFDLElBQUksS0FBRSxHQUFFLE9BQUssRUFBRSxHQUFFLE1BQUssR0FBRSxRQUFRO0FBQUEsRUFBRSxPQUFPLE9BQUksR0FBRSxPQUFLLE1BQUssQ0FBQyxFQUFFLEdBQUUsTUFBSyxHQUFFLE1BQUksT0FBSyxHQUFFLFFBQVEsR0FBRSxFQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsUUFBUSxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsR0FBRSxPQUFLLEdBQUUsTUFBSSxHQUFFLEVBQUUsT0FBTyxFQUFDLEdBQUUsR0FBRSxNQUFNLGdCQUFvQixHQUFFLE1BQU0sWUFBWSxPQUExQixPQUE4QixDQUFDLEdBQUUsRUFBRTtBQUFBLElBQU0sS0FBSSxLQUFFLEdBQUUsRUFBRSxNQUFHO0FBQUEsTUFBQyxNQUFLLEdBQUUsU0FBTztBQUFBLFFBQUcsR0FBRSxJQUFJLEVBQUU7QUFBQSxNQUFFLElBQUcsR0FBRSxLQUFHLEdBQUU7QUFBQSxRQUFHO0FBQUEsTUFBTSxHQUFFLElBQUUsS0FBRSxHQUFFO0FBQUEsSUFBRTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsT0FBTyxLQUFLLGtCQUFnQixRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRTtBQUFBLEtBQVMsR0FBRTtBQUFBO0FBQVMsU0FBUyxDQUFDLENBQUMsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLE1BQUssS0FBRSxHQUFFO0FBQUEsRUFBRSxJQUFHLEdBQUUsdUJBQXFCLFFBQVEsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFLLEdBQUUsQ0FBQyxHQUFFLEdBQUUsSUFBRSxNQUFLLEdBQUUsSUFBRTtBQUFBLEtBQU0sR0FBRSxLQUFHLEdBQUUsTUFBSSxNQUFHLEdBQUUscUJBQXFCLEdBQUUsQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBRSxHQUFFLElBQVcsT0FBUCxRQUFVLENBQUMsR0FBRSxPQUFZLEdBQUUsT0FBVDtBQUFBLE1BQWEsS0FBRSxHQUFFO0FBQUEsSUFBRyxHQUFFLElBQUUsSUFBRSxHQUFFLElBQUUsRUFBQyxVQUFTLEdBQUUsWUFBVyxJQUFFLFlBQVcsQ0FBQyxHQUFFLEtBQUksRUFBQyxLQUFJLEdBQUUsSUFBRyxHQUFFLFVBQVMsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFNO0FBQUEsT0FBSSxjQUFhLEdBQUUsY0FBYSxjQUFhLFFBQVEsQ0FBQyxJQUFFLElBQUU7QUFBQSxNQUFDLEtBQUssV0FBVyxLQUFLLEVBQUMsR0FBRSxHQUFFLEVBQUUsYUFBYSxJQUFFLEVBQUM7QUFBQSxPQUFHLGFBQVksUUFBUSxDQUFDLElBQUU7QUFBQSxNQUFDLEtBQUssV0FBVyxPQUFPLEtBQUssV0FBVyxRQUFRLEVBQUMsTUFBSSxHQUFFLENBQUMsR0FBRSxHQUFFLEVBQUUsWUFBWSxFQUFDO0FBQUEsTUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsRUFBRSxHQUFFLEVBQUMsU0FBUSxHQUFFLFFBQU8sR0FBRSxHQUFFLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLElBQUUsSUFBRTtBQUFBLEVBQUMsSUFBSSxLQUFFLEVBQUUsR0FBRSxFQUFDLEtBQUksSUFBRSxHQUFFLEdBQUMsQ0FBQztBQUFBLEVBQUUsT0FBTyxHQUFFLGdCQUFjLElBQUU7QUFBQTtBQUFBLENBQUcsR0FBRSxZQUFVLElBQUksR0FBRyxNQUFJLFFBQVEsQ0FBQyxJQUFFO0FBQUEsRUFBQyxJQUFJLEtBQUUsTUFBSyxLQUFFLEdBQUUsR0FBRSxHQUFHLEdBQUUsS0FBRSxHQUFFLEVBQUUsSUFBSSxFQUFDO0FBQUEsRUFBRSxPQUFPLEdBQUUsTUFBSyxRQUFRLENBQUMsSUFBRTtBQUFBLElBQUMsSUFBSSxLQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsR0FBRSxNQUFNLGVBQWEsR0FBRSxLQUFLLEVBQUMsR0FBRSxHQUFFLElBQUUsSUFBRSxFQUFDLEtBQUcsR0FBRTtBQUFBO0FBQUEsSUFBRyxLQUFFLEdBQUUsRUFBQyxJQUFFLEdBQUU7QUFBQTtBQUFBLEdBQUksR0FBRSxVQUFVLFNBQU8sUUFBUSxDQUFDLElBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxNQUFLLEtBQUssSUFBRSxJQUFJO0FBQUEsRUFBSSxJQUFJLEtBQUUsRUFBRSxHQUFFLFFBQVE7QUFBQSxFQUFFLEdBQUUsZUFBbUIsR0FBRSxZQUFZLE9BQXBCLE9BQXdCLEdBQUUsUUFBUTtBQUFBLEVBQUUsU0FBUSxLQUFFLEdBQUUsT0FBTztBQUFBLElBQUssS0FBSyxFQUFFLElBQUksR0FBRSxLQUFHLEtBQUssSUFBRSxDQUFDLEdBQUUsR0FB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RixHQUlFLFFBSkY7QUFBQSxZQUFRLEtBQUk7QUFBQSxZQUFaLFVBQ0csaUJBQWlCLElBQUksQ0FBQyw0QkFDckIsR0FBQyxTQUFEO0FBQUEsY0FBMEI7QUFBQSxlQUFaLFFBQVEsSUFBdEIsc0JBQTRDLENBQzdDO0FBQUEsYUFISCxpQ0FJRTtBQUFBO0FBQUEsU0E5Q0osZ0NBK0NFO0FBQUEsc0JBR0YsR0FBQyxhQUFELHFDQUFhO0FBQUEsc0JBQ2IsR0FBQyxNQUFNLFVBQVAscUNBQWdCO0FBQUEsc0JBQ2hCLEdBQUMsY0FBYyxNQUFmLHFDQUFvQjtBQUFBO0FBQUEsS0ExRHRCLGdDQTJERTtBQUFBOzs7QUN2R04sSUFBTSxTQUF3QixDQUFDO0FBQy9CLFlBQVksV0FBVyxNQUFNLE1BQU07QUFFbkMsdUJBQXVCLE9BQU8sYUFBYTtBQUFBLEVBQ3pDLE1BQU0sVUFBVSxnQkFBZ0IsU0FBUztBQUFBLEVBQ3pDLElBQUksU0FBUztBQUFBLElBQ1gsTUFBTSxRQUFRO0FBQUEsTUFDWjtBQUFBLE1BQ0EsT0FBTyxTQUFTO0FBQUEsTUFDaEIsU0FBUyxTQUFTO0FBQUEsTUFDbEIsTUFBTSxTQUFTO0FBQUEsSUFDakIsQ0FBQztBQUFBLEVBQ0g7QUFBQSxDQUNEO0FBRUQsSUFBTSxPQUFPLFNBQVMsZUFBZSxLQUFLLEtBQUssU0FBUztBQUN4RCxrQkFBTyxHQUFDLFlBQUQscUNBQVksR0FBSSxJQUFJOyIsCiAgImRlYnVnSWQiOiAiOEI4MDQ1Rjc1QTI5M0MzQTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|