gen-pr 3.6.2 → 4.0.0
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/action.js +2 -5
- package/dist/cli.js +2 -33
- package/dist/main-DA3u-sLa.js +2 -0
- package/package.json +17 -16
- package/dist/main-BeZ-s37Y.js +0 -2
package/dist/cli.js
CHANGED
|
@@ -1,33 +1,2 @@
|
|
|
1
|
-
import t,{statSync as e,readdirSync as n,readFileSync as s,writeFile as i}from"node:fs";import u,{resolve as r,dirname as o,normalize as a,join as D,relative as l,extname as c,basename as h}from"node:path";import f from"node:process";import{strictEqual as d,notStrictEqual as p}from"node:assert";import{format as g,inspect as F}from"node:util";import{fileURLToPath as m}from"node:url";import{createRequire as C}from"node:module";import{g as E,l as y,D as b,d as v,e as A,f as B,h as w,i as O,b as j,a as x,n as k,m as _}from"./main-BeZ-s37Y.js";import"node:os";import"node:crypto";import"node:child_process";import"node:buffer";import"node:https";import"node:stream";import"node:http";import"node:punycode";import"node:zlib";import"node:querystring";import"node:net";import"node:tls";import"node:tty";import"node:events";const M={right:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n<e)return" ".repeat(e-n)+t;return t},center:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n>=e)return t;return" ".repeat(e-n>>1)+t}};class S{constructor(t){var e;this.width=t.width,this.wrap=null===(e=t.wrap)||void 0===e||e,this.rows=[]}span(...t){this.div(...t).span=!0}resetOutput(){this.rows=[]}div(...t){if(0===t.length&&this.div(""),this.wrap&&this.shouldApplyLayoutDSL(...t)&&"string"==typeof t[0])return this.applyLayoutDSL(t[0]);const e=t.map(t=>"string"==typeof t?this.colFromString(t):t);return this.rows.push(e),e}shouldApplyLayoutDSL(...t){return 1===t.length&&"string"==typeof t[0]&&/[\t\n]/.test(t[0])}applyLayoutDSL(t){const e=t.split("\n").map(t=>t.split("\t"));let n=0;return e.forEach(t=>{t.length>1&&P.stringWidth(t[0])>n&&(n=Math.min(Math.floor(.5*this.width),P.stringWidth(t[0])))}),e.forEach(t=>{this.div(...t.map((e,s)=>({text:e.trim(),padding:this.measurePadding(e),width:0===s&&t.length>1?n:void 0})))}),this.rows[this.rows.length-1]}colFromString(t){return{text:t,padding:this.measurePadding(t)}}measurePadding(t){const e=P.stripAnsi(t);return[0,e.match(/\s*$/)[0].length,0,e.match(/^\s*/)[0].length]}toString(){const t=[];return this.rows.forEach(e=>{this.rowToString(e,t)}),t.filter(t=>!t.hidden).map(t=>t.text).join("\n")}rowToString(t,e){return this.rasterize(t).forEach((n,s)=>{let i="";n.forEach((n,u)=>{const{width:r}=t[u],o=this.negatePadding(t[u]);let a=n;if(o>P.stringWidth(n)&&(a+=" ".repeat(o-P.stringWidth(n))),t[u].align&&"left"!==t[u].align&&this.wrap){a=(0,M[t[u].align])(a,o),P.stringWidth(a)<o&&(a+=" ".repeat((r||0)-P.stringWidth(a)-1))}const D=t[u].padding||[0,0,0,0];D[3]&&(i+=" ".repeat(D[3])),i+=$(t[u],a,"| "),i+=a,i+=$(t[u],a," |"),D[1]&&(i+=" ".repeat(D[1])),0===s&&e.length>0&&(i=this.renderInline(i,e[e.length-1]))}),e.push({text:i.replace(/ +$/,""),span:t.span})}),e}renderInline(t,e){const n=t.match(/^ */),s=n?n[0].length:0,i=e.text,u=P.stringWidth(i.trimRight());return e.span?this.wrap?s<u?t:(e.hidden=!0,i.trimRight()+" ".repeat(s-u)+t.trimLeft()):(e.hidden=!0,i+t):t}rasterize(t){const e=[],n=this.columnWidths(t);let s;return t.forEach((t,i)=>{t.width=n[i],s=this.wrap?P.wrap(t.text,this.negatePadding(t),{hard:!0}).split("\n"):t.text.split("\n"),t.border&&(s.unshift("."+"-".repeat(this.negatePadding(t)+2)+"."),s.push("'"+"-".repeat(this.negatePadding(t)+2)+"'")),t.padding&&(s.unshift(...new Array(t.padding[0]||0).fill("")),s.push(...new Array(t.padding[2]||0).fill(""))),s.forEach((t,n)=>{e[n]||e.push([]);const s=e[n];for(let t=0;t<i;t++)void 0===s[t]&&s.push("");s.push(t)})}),e}negatePadding(t){let e=t.width||0;return t.padding&&(e-=(t.padding[3]||0)+(t.padding[1]||0)),t.border&&(e-=4),e}columnWidths(t){if(!this.wrap)return t.map(t=>t.width||P.stringWidth(t.text));let e=t.length,n=this.width;const s=t.map(t=>{if(t.width)return e--,n-=t.width,t.width}),i=e?Math.floor(n/e):0;return s.map((e,n)=>void 0===e?Math.max(i,function(t){const e=t.padding||[],n=1+(e[3]||0)+(e[1]||0);if(t.border)return n+4;return n}(t[n])):e)}}function $(t,e,n){return t.border?/[.']-+[.']/.test(e)?"":0!==e.trim().length?n:" ":""}let P;const I=function({onlyFirst:t=!1}={}){return new RegExp("(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]",t?void 0:"g")}();function N(t){if("string"!=typeof t)throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(I,"")}function W(t,{ambiguousAsWide:e=!1}={}){return function(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}(t),12288===(n=t)||n>=65281&&n<=65376||n>=65504&&n<=65510||function(t){return t>=4352&&t<=4447||8986===t||8987===t||9001===t||9002===t||t>=9193&&t<=9196||9200===t||9203===t||9725===t||9726===t||9748===t||9749===t||t>=9776&&t<=9783||t>=9800&&t<=9811||9855===t||t>=9866&&t<=9871||9875===t||9889===t||9898===t||9899===t||9917===t||9918===t||9924===t||9925===t||9934===t||9940===t||9962===t||9970===t||9971===t||9973===t||9978===t||9981===t||9989===t||9994===t||9995===t||10024===t||10060===t||10062===t||t>=10067&&t<=10069||10071===t||t>=10133&&t<=10135||10160===t||10175===t||11035===t||11036===t||11088===t||11093===t||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||94192===t||94193===t||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||110589===t||110590===t||t>=110592&&t<=110882||110898===t||t>=110928&&t<=110930||110933===t||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||126980===t||127183===t||127374===t||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||127568===t||127569===t||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||127988===t||t>=127992&&t<=128062||128064===t||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||128378===t||128405===t||128406===t||128420===t||t>=128507&&t<=128591||t>=128640&&t<=128709||128716===t||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||128747===t||128748===t||t>=128756&&t<=128764||t>=128992&&t<=129003||129008===t||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}(t)||e&&function(t){return 161===t||164===t||167===t||168===t||170===t||173===t||174===t||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||198===t||208===t||215===t||216===t||t>=222&&t<=225||230===t||t>=232&&t<=234||236===t||237===t||240===t||242===t||243===t||t>=247&&t<=250||252===t||254===t||257===t||273===t||275===t||283===t||294===t||295===t||299===t||t>=305&&t<=307||312===t||t>=319&&t<=322||324===t||t>=328&&t<=331||333===t||338===t||339===t||358===t||359===t||363===t||462===t||464===t||466===t||468===t||470===t||472===t||474===t||476===t||593===t||609===t||708===t||711===t||t>=713&&t<=715||717===t||720===t||t>=728&&t<=731||733===t||735===t||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||1025===t||t>=1040&&t<=1103||1105===t||8208===t||t>=8211&&t<=8214||8216===t||8217===t||8220===t||8221===t||t>=8224&&t<=8226||t>=8228&&t<=8231||8240===t||8242===t||8243===t||8245===t||8251===t||8254===t||8308===t||8319===t||t>=8321&&t<=8324||8364===t||8451===t||8453===t||8457===t||8467===t||8470===t||8481===t||8482===t||8486===t||8491===t||8531===t||8532===t||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||8585===t||t>=8592&&t<=8601||8632===t||8633===t||8658===t||8660===t||8679===t||8704===t||8706===t||8707===t||8711===t||8712===t||8715===t||8719===t||8721===t||8725===t||8730===t||t>=8733&&t<=8736||8739===t||8741===t||t>=8743&&t<=8748||8750===t||t>=8756&&t<=8759||8764===t||8765===t||8776===t||8780===t||8786===t||8800===t||8801===t||t>=8804&&t<=8807||8810===t||8811===t||8814===t||8815===t||8834===t||8835===t||8838===t||8839===t||8853===t||8857===t||8869===t||8895===t||8978===t||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||9632===t||9633===t||t>=9635&&t<=9641||9650===t||9651===t||9654===t||9655===t||9660===t||9661===t||9664===t||9665===t||t>=9670&&t<=9672||9675===t||t>=9678&&t<=9681||t>=9698&&t<=9701||9711===t||9733===t||9734===t||9737===t||9742===t||9743===t||9756===t||9758===t||9792===t||9794===t||9824===t||9825===t||t>=9827&&t<=9829||t>=9831&&t<=9834||9836===t||9837===t||9839===t||9886===t||9887===t||9919===t||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||9955===t||9960===t||9961===t||t>=9963&&t<=9969||9972===t||t>=9974&&t<=9977||9979===t||9980===t||9982===t||9983===t||10045===t||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||65533===t||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||127375===t||127376===t||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}(t)?2:1;var n}var L=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;const z=new Intl.Segmenter,H=/^\p{Default_Ignorable_Code_Point}$/u;function R(t,e={}){if("string"!=typeof t||0===t.length)return 0;const{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:s=!1}=e;if(s||(t=N(t)),0===t.length)return 0;let i=0;const u={ambiguousAsWide:!n};for(const{segment:e}of z.segment(t)){const t=e.codePointAt(0);t<=31||t>=127&&t<=159||(t>=8203&&t<=8207||65279===t||t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65056&&t<=65071||t>=55296&&t<=57343||t>=65024&&t<=65039||H.test(e)||(L().test(e)?i+=2:i+=W(t,u)))}return i}const T=(t=0)=>e=>`[${e+t}m`,U=(t=0)=>e=>`[${38+t};5;${e}m`,G=(t=0)=>(e,n,s)=>`[${38+t};2;${e};${n};${s}m`,q={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(q.modifier);Object.keys(q.color),Object.keys(q.bgColor);const V=function(){const t=new Map;for(const[e,n]of Object.entries(q)){for(const[e,s]of Object.entries(n))q[e]={open:`[${s[0]}m`,close:`[${s[1]}m`},n[e]=q[e],t.set(s[0],s[1]);Object.defineProperty(q,e,{value:n,enumerable:!1})}return Object.defineProperty(q,"codes",{value:t,enumerable:!1}),q.color.close="[39m",q.bgColor.close="[49m",q.color.ansi=T(),q.color.ansi256=U(),q.color.ansi16m=G(),q.bgColor.ansi=T(10),q.bgColor.ansi256=U(10),q.bgColor.ansi16m=G(10),Object.defineProperties(q,{rgbToAnsi256:{value:(t,e,n)=>t===e&&e===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(e/255*5)+Math.round(n/255*5),enumerable:!1},hexToRgb:{value:t=>{const e=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!e)return[0,0,0];let[n]=e;3===n.length&&(n=[...n].map(t=>t+t).join(""));const s=Number.parseInt(n,16);return[s>>16&255,s>>8&255,255&s]},enumerable:!1},hexToAnsi256:{value:t=>q.rgbToAnsi256(...q.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value:t=>{if(t<8)return 30+t;if(t<16)return t-8+90;let e,n,s;if(t>=232)e=(10*(t-232)+8)/255,n=e,s=e;else{const i=(t-=16)%36;e=Math.floor(t/36)/5,n=Math.floor(i/6)/5,s=i%6/5}const i=2*Math.max(e,n,s);if(0===i)return 30;let u=30+(Math.round(s)<<2|Math.round(n)<<1|Math.round(e));return 2===i&&(u+=60),u},enumerable:!1},rgbToAnsi:{value:(t,e,n)=>q.ansi256ToAnsi(q.rgbToAnsi256(t,e,n)),enumerable:!1},hexToAnsi:{value:t=>q.ansi256ToAnsi(q.hexToAnsi256(t)),enumerable:!1}}),q}(),Y=new Set(["",""]),K="]8;;",J=t=>`${Y.values().next().value}[${t}m`,Q=t=>`${Y.values().next().value}${K}${t}`,Z=(t,e,n)=>{const s=[...e];let i=!1,u=!1,r=R(N(t.at(-1)));for(const[e,o]of s.entries()){const a=R(o);if(r+a<=n?t[t.length-1]+=o:(t.push(o),r=0),Y.has(o)){i=!0;u=s.slice(e+1,e+1+4).join("")===K}i?u?""===o&&(i=!1,u=!1):"m"===o&&(i=!1):(r+=a,r===n&&e<s.length-1&&(t.push(""),r=0))}!r&&t.at(-1).length>0&&t.length>1&&(t[t.length-2]+=t.pop())},X=(t,e,n={})=>{if(!1!==n.trim&&""===t.trim())return"";let s,i,u="";const r=(t=>t.split(" ").map(t=>R(t)))(t);let o=[""];for(const[s,i]of t.split(" ").entries()){!1!==n.trim&&(o[o.length-1]=o.at(-1).trimStart());let t=R(o.at(-1));if(0!==s&&(t>=e&&(!1===n.wordWrap||!1===n.trim)&&(o.push(""),t=0),(t>0||!1===n.trim)&&(o[o.length-1]+=" ",t++)),n.hard&&r[s]>e){const n=e-t,u=1+Math.floor((r[s]-n-1)/e);Math.floor((r[s]-1)/e)<u&&o.push(""),Z(o,i,e);continue}if(t+r[s]>e&&t>0&&r[s]>0){if(!1===n.wordWrap&&t<e){Z(o,i,e);continue}o.push("")}t+r[s]>e&&!1===n.wordWrap?Z(o,i,e):o[o.length-1]+=i}!1!==n.trim&&(o=o.map(t=>(t=>{const e=t.split(" ");let n=e.length;for(;n>0&&!(R(e[n-1])>0);)n--;return n===e.length?t:e.slice(0,n).join(" ")+e.slice(n).join("")})(t)));const a=o.join("\n"),D=[...a];let l=0;for(const[t,e]of D.entries()){if(u+=e,Y.has(e)){const{groups:t}=new RegExp(`(?:\\[(?<code>\\d+)m|\\${K}(?<uri>.*))`).exec(a.slice(l))||{groups:{}};if(void 0!==t.code){const e=Number.parseFloat(t.code);s=39===e?void 0:e}else void 0!==t.uri&&(i=0===t.uri.length?void 0:t.uri)}const n=V.codes.get(Number(s));"\n"===D[t+1]?(i&&(u+=Q("")),s&&n&&(u+=J(n))):"\n"===e&&(s&&n&&(u+=J(s)),i&&(u+=Q(i))),l+=e.length}return u};function tt(t,e,n){return String(t).normalize().replaceAll("\r\n","\n").split("\n").map(t=>X(t,e,n)).join("\n")}
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright (c) 2016, Contributors
|
|
5
|
-
* SPDX-License-Identifier: ISC
|
|
6
|
-
*/
|
|
7
|
-
function et(t){if(t!==t.toLowerCase()&&t!==t.toUpperCase()||(t=t.toLowerCase()),-1===t.indexOf("-")&&-1===t.indexOf("_"))return t;{let e="",n=!1;const s=t.match(/^-+/);for(let i=s?s[0].length:0;i<t.length;i++){let s=t.charAt(i);n&&(n=!1,s=s.toUpperCase()),0===i||"-"!==s&&"_"!==s?"-"!==s&&"_"!==s&&(e+=s):n=!0}return e}}function nt(t,e){const n=t.toLowerCase();e=e||"-";let s="";for(let i=0;i<t.length;i++){const u=n.charAt(i),r=t.charAt(i);s+=u!==r&&i>0?`${e}${n.charAt(i)}`:r}return s}function st(t){return null!=t&&("number"==typeof t||(!!/^0x[0-9a-f]+$/i.test(t)||!/^0[^.]/.test(t)&&/^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(t)))}
|
|
8
|
-
/**
|
|
9
|
-
* @license
|
|
10
|
-
* Copyright (c) 2016, Contributors
|
|
11
|
-
* SPDX-License-Identifier: ISC
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* @license
|
|
15
|
-
* Copyright (c) 2016, Contributors
|
|
16
|
-
* SPDX-License-Identifier: ISC
|
|
17
|
-
*/
|
|
18
|
-
var it;
|
|
19
|
-
/**
|
|
20
|
-
* @license
|
|
21
|
-
* Copyright (c) 2016, Contributors
|
|
22
|
-
* SPDX-License-Identifier: ISC
|
|
23
|
-
*/
|
|
24
|
-
let ut;!function(t){t.BOOLEAN="boolean",t.STRING="string",t.NUMBER="number",t.ARRAY="array"}(it||(it={}));function rt(t){return void 0!==t?t+1:1}function ot(t){return"__proto__"===t?"___proto___":t}
|
|
25
|
-
/**
|
|
26
|
-
* @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
|
|
27
|
-
*
|
|
28
|
-
* @license
|
|
29
|
-
* Copyright (c) 2016, Contributors
|
|
30
|
-
* SPDX-License-Identifier: ISC
|
|
31
|
-
*/
|
|
32
|
-
var at,Dt,lt;const ct=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):20,ht=null!==(Dt=null===(at=null===process||void 0===process?void 0:process.versions)||void 0===at?void 0:at.node)&&void 0!==Dt?Dt:null===(lt=null===process||void 0===process?void 0:process.version)||void 0===lt?void 0:lt.slice(1);if(ht){if(Number(ht.match(/^([^.]+)/)[1])<ct)throw Error(`yargs parser supports a minimum Node.js version of ${ct}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const ft=process?process.env:{},dt=C?C(import.meta.url):void 0,pt=new class{constructor(t){ut=t}parse(t,e){const n=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},e),s=function(t){if(Array.isArray(t))return t.map(t=>"string"!=typeof t?t+"":t);t=t.trim();let e=0,n=null,s=null,i=null;const u=[];for(let r=0;r<t.length;r++)n=s,s=t.charAt(r)," "!==s||i?(s===i?i=null:"'"!==s&&'"'!==s||i||(i=s),u[e]||(u[e]=""),u[e]+=s):" "!==n&&e++;return u}(t),i="string"==typeof t,u=function(t){const e=[],n=Object.create(null);let s=!0;Object.keys(t).forEach(function(n){e.push([].concat(t[n],n))});for(;s;){s=!1;for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){if(e[t].filter(function(t){return-1!==e[n].indexOf(t)}).length){e[t]=e[t].concat(e[n]),e.splice(n,1),s=!0;break}}}return e.forEach(function(t){const e=(t=t.filter(function(t,e,n){return n.indexOf(t)===e})).pop();void 0!==e&&"string"==typeof e&&(n[e]=t)}),n}(Object.assign(Object.create(null),n.alias)),r=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},n.configuration),o=Object.assign(Object.create(null),n.default),a=n.configObjects||[],D=n.envPrefix,l=r["populate--"],c=l?"--":"_",h=Object.create(null),f=Object.create(null),d=n.__||ut.format,p={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},g=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,F=new RegExp("^--"+r["negation-prefix"]+"(.+)");[].concat(n.array||[]).filter(Boolean).forEach(function(t){const e="object"==typeof t?t.key:t,n=Object.keys(t).map(function(t){return{boolean:"bools",string:"strings",number:"numbers"}[t]}).filter(Boolean).pop();n&&(p[n][e]=!0),p.arrays[e]=!0,p.keys.push(e)}),[].concat(n.boolean||[]).filter(Boolean).forEach(function(t){p.bools[t]=!0,p.keys.push(t)}),[].concat(n.string||[]).filter(Boolean).forEach(function(t){p.strings[t]=!0,p.keys.push(t)}),[].concat(n.number||[]).filter(Boolean).forEach(function(t){p.numbers[t]=!0,p.keys.push(t)}),[].concat(n.count||[]).filter(Boolean).forEach(function(t){p.counts[t]=!0,p.keys.push(t)}),[].concat(n.normalize||[]).filter(Boolean).forEach(function(t){p.normalize[t]=!0,p.keys.push(t)}),"object"==typeof n.narg&&Object.entries(n.narg).forEach(([t,e])=>{"number"==typeof e&&(p.nargs[t]=e,p.keys.push(t))}),"object"==typeof n.coerce&&Object.entries(n.coerce).forEach(([t,e])=>{"function"==typeof e&&(p.coercions[t]=e,p.keys.push(t))}),void 0!==n.config&&(Array.isArray(n.config)||"string"==typeof n.config?[].concat(n.config).filter(Boolean).forEach(function(t){p.configs[t]=!0}):"object"==typeof n.config&&Object.entries(n.config).forEach(([t,e])=>{"boolean"!=typeof e&&"function"!=typeof e||(p.configs[t]=e)})),function(...t){t.forEach(function(t){Object.keys(t||{}).forEach(function(t){p.aliases[t]||(p.aliases[t]=[].concat(u[t]||[]),p.aliases[t].concat(t).forEach(function(e){if(/-/.test(e)&&r["camel-case-expansion"]){const n=et(e);n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].concat(t).forEach(function(e){if(e.length>1&&/[A-Z]/.test(e)&&r["camel-case-expansion"]){const n=nt(e,"-");n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].forEach(function(e){p.aliases[e]=[t].concat(p.aliases[t].filter(function(t){return e!==t}))}))})})}(n.key,u,n.default,p.arrays),Object.keys(o).forEach(function(t){(p.aliases[t]||[]).forEach(function(e){o[e]=o[t]})});let m=null;Object.keys(p.counts).find(t=>$(t,p.arrays)?(m=Error(d("Invalid configuration: %s, opts.count excludes opts.array.",t)),!0):!!$(t,p.nargs)&&(m=Error(d("Invalid configuration: %s, opts.count excludes opts.narg.",t)),!0));let C=[];const E=Object.assign(Object.create(null),{_:[]}),y={};for(let t=0;t<s.length;t++){const e=s[t],n=e.replace(/^-{3,}/,"---");let i,u,o,a,D,l;if("--"!==e&&/^-/.test(e)&&I(e))b(e);else{if(n.match(/^---+(=|$)/)){b(e);continue}if(e.match(/^--.+=/)||!r["short-option-groups"]&&e.match(/^-.+=/))a=e.match(/^--?([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&($(a[1],p.arrays)?t=A(t,a[1],s,a[2]):!1!==$(a[1],p.nargs)?t=v(t,a[1],s,a[2]):B(a[1],a[2],!0));else if(e.match(F)&&r["boolean-negation"])a=e.match(F),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],B(u,!!$(u,p.arrays)&&[!1]));else if(e.match(/^--.+/)||!r["short-option-groups"]&&e.match(/^-[^-]+/))a=e.match(/^--?(.+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],$(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||D.match(/^-/)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)));else if(e.match(/^-.\..+=/))a=e.match(/^-([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&B(a[1],a[2]);else if(e.match(/^-.\..+/)&&!e.match(g))D=s[t+1],a=e.match(/^-(.\..+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],void 0===D||D.match(/^-/)||$(u,p.bools)||$(u,p.counts)?B(u,N(u)):(B(u,D),t++));else if(e.match(/^-[^-]+/)&&!e.match(g)){o=e.slice(1,-1).split(""),i=!1;for(let n=0;n<o.length;n++){if(D=e.slice(n+2),o[n+1]&&"="===o[n+1]){l=e.slice(n+3),u=o[n],$(u,p.arrays)?t=A(t,u,s,l):!1!==$(u,p.nargs)?t=v(t,u,s,l):B(u,l),i=!0;break}if("-"!==D){if(/[A-Za-z]/.test(o[n])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(D)&&!1===$(D,p.bools)){B(o[n],D),i=!0;break}if(o[n+1]&&o[n+1].match(/\W/)){B(o[n],D),i=!0;break}B(o[n],N(o[n]))}else B(o[n],D)}u=e.slice(-1)[0],i||"-"===u||($(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||/^(-|--)[^-]/.test(D)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)))}else if(e.match(/^-[0-9]$/)&&e.match(g)&&$(e.slice(1),p.bools))u=e.slice(1),B(u,N(u));else{if("--"===e){C=s.slice(t+1);break}if(r["halt-at-non-option"]){C=s.slice(t);break}b(e)}}}function b(t){const e=j("_",t);"string"!=typeof e&&"number"!=typeof e||E._.push(e)}function v(t,e,n,s){let i,u=$(e,p.nargs);if(u="number"!=typeof u||isNaN(u)?1:u,0===u)return W(s)||(m=Error(d("Argument unexpected for: %s",e))),B(e,N(e)),t;let o=W(s)?0:1;if(r["nargs-eats-options"])n.length-(t+1)+o<u&&(m=Error(d("Not enough arguments following: %s",e))),o=u;else{for(i=t+1;i<n.length&&(!n[i].match(/^-[^0-9]/)||n[i].match(g)||I(n[i]));i++)o++;o<u&&(m=Error(d("Not enough arguments following: %s",e)))}let a=Math.min(o,u);for(!W(s)&&a>0&&(B(e,s),a--),i=t+1;i<a+t+1;i++)B(e,n[i]);return t+a}function A(t,e,n,s){let u=[],a=s||n[t+1];const D=$(e,p.nargs);if($(e,p.bools)&&!/^(true|false)$/.test(a))u.push(!0);else if(W(a)||W(s)&&/^-/.test(a)&&!g.test(a)&&!I(a)){if(void 0!==o[e]){const t=o[e];u=Array.isArray(t)?t:[t]}}else{W(s)||u.push(O(e,s,!0));for(let s=t+1;s<n.length&&!(!r["greedy-arrays"]&&u.length>0||D&&"number"==typeof D&&u.length>=D)&&(a=n[s],!/^-/.test(a)||g.test(a)||I(a));s++)t=s,u.push(O(e,a,i))}return"number"==typeof D&&(D&&u.length<D||isNaN(D)&&0===u.length)&&(m=Error(d("Not enough arguments following: %s",e))),B(e,u),t}function B(t,e,n=i){if(/-/.test(t)&&r["camel-case-expansion"]){const e=t.split(".").map(function(t){return et(t)}).join(".");w(t,e)}const s=O(t,e,n),u=t.split(".");if(S(E,u,s),p.aliases[t]&&p.aliases[t].forEach(function(t){const e=t.split(".");S(E,e,s)}),u.length>1&&r["dot-notation"]&&(p.aliases[u[0]]||[]).forEach(function(e){let n=e.split(".");const i=[].concat(u);i.shift(),n=n.concat(i),(p.aliases[t]||[]).includes(n.join("."))||S(E,n,s)}),$(t,p.normalize)&&!$(t,p.arrays)){[t].concat(p.aliases[t]||[]).forEach(function(t){Object.defineProperty(y,t,{enumerable:!0,get:()=>e,set(t){e="string"==typeof t?ut.normalize(t):t}})})}}function w(t,e){p.aliases[t]&&p.aliases[t].length||(p.aliases[t]=[e],h[e]=!0),p.aliases[e]&&p.aliases[e].length||w(e,t)}function O(t,e,n){n&&(e=function(t){return"string"!=typeof t||"'"!==t[0]&&'"'!==t[0]||t[t.length-1]!==t[0]?t:t.substring(1,t.length-1)}(e)),($(t,p.bools)||$(t,p.counts))&&"string"==typeof e&&(e="true"===e);let s=Array.isArray(e)?e.map(function(e){return j(t,e)}):j(t,e);return $(t,p.counts)&&(W(s)||"boolean"==typeof s)&&(s=rt()),$(t,p.normalize)&&$(t,p.arrays)&&(s=Array.isArray(e)?e.map(t=>ut.normalize(t)):ut.normalize(e)),s}function j(t,e){if(!r["parse-positional-numbers"]&&"_"===t)return e;if(!$(t,p.strings)&&!$(t,p.bools)&&!Array.isArray(e)){(st(e)&&r["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${e}`)))||!W(e)&&$(t,p.numbers))&&(e=Number(e))}return e}function x(t,e){Object.keys(t).forEach(function(n){const s=t[n],i=e?e+"."+n:n;"object"==typeof s&&null!==s&&!Array.isArray(s)&&r["dot-notation"]?x(s,i):(!M(E,i.split("."))||$(i,p.arrays)&&r["combine-arrays"])&&B(i,s)})}function k(t,e){if(void 0===D)return;const n="string"==typeof D?D:"",s=ut.env();Object.keys(s).forEach(function(i){if(""===n||0===i.lastIndexOf(n,0)){const u=i.split("__").map(function(t,e){return 0===e&&(t=t.substring(n.length)),et(t)});(e&&p.configs[u.join(".")]||!e)&&!M(t,u)&&B(u.join("."),s[i])}})}function _(t,e,n,s=!1){Object.keys(n).forEach(function(i){M(t,i.split("."))||(S(t,i.split("."),n[i]),s&&(f[i]=!0),(e[i]||[]).forEach(function(e){M(t,e.split("."))||S(t,e.split("."),n[i])}))})}function M(t,e){let n=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){n=n[t]||{}});const s=e[e.length-1];return"object"==typeof n&&s in n}function S(t,e,n){let s=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){t=ot(t),"object"==typeof s&&void 0===s[t]&&(s[t]={}),"object"!=typeof s[t]||Array.isArray(s[t])?(Array.isArray(s[t])?s[t].push({}):s[t]=[s[t],{}],s=s[t][s[t].length-1]):s=s[t]});const i=ot(e[e.length-1]),u=$(e.join("."),p.arrays),o=Array.isArray(n);let a=r["duplicate-arguments-array"];!a&&$(i,p.nargs)&&(a=!0,(!W(s[i])&&1===p.nargs[i]||Array.isArray(s[i])&&s[i].length===p.nargs[i])&&(s[i]=void 0)),n===rt()?s[i]=rt(s[i]):Array.isArray(s[i])?a&&u&&o?s[i]=r["flatten-duplicate-arrays"]?s[i].concat(n):(Array.isArray(s[i][0])?s[i]:[s[i]]).concat([n]):a||Boolean(u)!==Boolean(o)?s[i]=s[i].concat([n]):s[i]=n:void 0===s[i]&&u?s[i]=o?n:[n]:!a||void 0===s[i]||$(i,p.counts)||$(i,p.bools)?s[i]=n:s[i]=[s[i],n]}function $(t,e){const n=[].concat(p.aliases[t]||[],t),s=Object.keys(e),i=n.find(t=>s.includes(t));return!!i&&e[i]}function P(t){const e=Object.keys(p);return[].concat(e.map(t=>p[t])).some(function(e){return Array.isArray(e)?e.includes(t):e[t]})}function I(t){return r["unknown-options-as-args"]&&function(t){if(t=t.replace(/^-{3,}/,"--"),t.match(g))return!1;if(function(t){if(t.match(g)||!t.match(/^-[^-]+/))return!1;let e,n=!0;const s=t.slice(1).split("");for(let i=0;i<s.length;i++){if(e=t.slice(i+2),!P(s[i])){n=!1;break}if(s[i+1]&&"="===s[i+1]||"-"===e||/[A-Za-z]/.test(s[i])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(e)||s[i+1]&&s[i+1].match(/\W/))break}return n}(t))return!1;return!function(t,...e){return[].concat(...e).some(function(e){const n=t.match(e);return n&&P(n[1])})}(t,/^-+([^=]+?)=[\s\S]*$/,F,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(t)}function N(t){return $(t,p.bools)||$(t,p.counts)||!(`${t}`in o)?(e=function(t){let e=it.BOOLEAN;return $(t,p.strings)?e=it.STRING:$(t,p.numbers)?e=it.NUMBER:$(t,p.bools)?e=it.BOOLEAN:$(t,p.arrays)&&(e=it.ARRAY),e}(t),{[it.BOOLEAN]:!0,[it.STRING]:"",[it.NUMBER]:void 0,[it.ARRAY]:[]}[e]):o[t];var e}function W(t){return void 0===t}return k(E,!0),k(E,!1),function(t){const e=Object.create(null);_(e,p.aliases,o),Object.keys(p.configs).forEach(function(n){const s=t[n]||e[n];if(s)try{let t=null;const e=ut.resolve(ut.cwd(),s),i=p.configs[n];if("function"==typeof i){try{t=i(e)}catch(e){t=e}if(t instanceof Error)return void(m=t)}else t=ut.require(e);x(t)}catch(e){"PermissionDenied"===e.name?m=e:t[n]&&(m=Error(d("Invalid JSON config file: %s",s)))}})}(E),void 0!==a&&a.forEach(function(t){x(t)}),_(E,p.aliases,o,!0),function(t){let e;const n=new Set;Object.keys(t).forEach(function(s){if(!n.has(s)&&(e=$(s,p.coercions),"function"==typeof e))try{const i=j(s,e(t[s]));[].concat(p.aliases[s]||[],s).forEach(e=>{n.add(e),t[e]=i})}catch(t){m=t}})}(E),r["set-placeholder-key"]&&function(t){p.keys.forEach(e=>{~e.indexOf(".")||void 0===t[e]&&(t[e]=void 0)})}(E),Object.keys(p.counts).forEach(function(t){M(E,t.split("."))||B(t,0)}),l&&C.length&&(E[c]=[]),C.forEach(function(t){E[c].push(t)}),r["camel-case-expansion"]&&r["strip-dashed"]&&Object.keys(E).filter(t=>"--"!==t&&t.includes("-")).forEach(t=>{delete E[t]}),r["strip-aliased"]&&[].concat(...Object.keys(u).map(t=>u[t])).forEach(t=>{r["camel-case-expansion"]&&t.includes("-")&&delete E[t.split(".").map(t=>et(t)).join(".")],delete E[t]}),{aliases:Object.assign({},p.aliases),argv:Object.assign(y,E),configuration:r,defaulted:Object.assign({},f),error:m,newAliases:Object.assign({},h)}}}({cwd:process.cwd,env:()=>ft,format:g,normalize:a,resolve:r,require:t=>{if(void 0!==dt)return dt(t);if(t.match(/\.json$/))return JSON.parse(s(t,"utf8"));throw Error("only .json config files are supported in ESM")}}),gt=function(t,e){return pt.parse(t.slice(),e).argv};function Ft(){return process.versions.electron&&!process.defaultApp?0:1}gt.detailed=function(t,e){return pt.parse(t.slice(),e)},gt.camelCase=et,gt.decamelize=nt,gt.looksLikeNumber=st;var mt={fs:{readFileSync:s,writeFile:i},format:g,resolve:r,exists:t=>{try{return e(t).isFile()}catch(t){return!1}}};let Ct;class Et{constructor(t){t=t||{},this.directory=t.directory||"./locales",this.updateFiles="boolean"!=typeof t.updateFiles||t.updateFiles,this.locale=t.locale||"en",this.fallbackToLanguage="boolean"!=typeof t.fallbackToLanguage||t.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...t){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const e=t.shift();let n=function(){};return"function"==typeof t[t.length-1]&&(n=t.pop()),n=n||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]=e,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:n})):n(),Ct.format.apply(Ct.format,[this.cache[this.locale][e]||e].concat(t))}__n(){const t=Array.prototype.slice.call(arguments),e=t.shift(),n=t.shift(),s=t.shift();let i=function(){};"function"==typeof t[t.length-1]&&(i=t.pop()),this.cache[this.locale]||this._readLocaleFile();let u=1===s?e:n;if(this.cache[this.locale][e]){u=this.cache[this.locale][e][1===s?"one":"other"]}!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]={one:e,other:n},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:i})):i();const r=[u];return~u.indexOf("%d")&&r.push(s),Ct.format.apply(Ct.format,r.concat(t))}setLocale(t){this.locale=t}getLocale(){return this.locale}updateLocale(t){this.cache[this.locale]||this._readLocaleFile();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this.cache[this.locale][e]=t[e])}_taggedLiteral(t,...e){let n="";return t.forEach(function(t,s){const i=e[s+1];n+=t,void 0!==i&&(n+="%s")}),this.__.apply(this,[n].concat([].slice.call(e,1)))}_enqueueWrite(t){this.writeQueue.push(t),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const t=this,e=this.writeQueue[0],n=e.directory,s=e.locale,i=e.cb,u=this._resolveLocaleFile(n,s),r=JSON.stringify(this.cache[s],null,2);Ct.fs.writeFile(u,r,"utf-8",function(e){t.writeQueue.shift(),t.writeQueue.length>0&&t._processWriteQueue(),i(e)})}_readLocaleFile(){let t={};const e=this._resolveLocaleFile(this.directory,this.locale);try{Ct.fs.readFileSync&&(t=JSON.parse(Ct.fs.readFileSync(e,"utf-8")))}catch(n){if(n instanceof SyntaxError&&(n.message="syntax error in "+e),"ENOENT"!==n.code)throw n;t={}}this.cache[this.locale]=t}_resolveLocaleFile(t,e){let n=Ct.resolve(t,"./",e+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(n)&&~e.lastIndexOf("_")){const s=Ct.resolve(t,"./",e.split("_")[0]+".json");this._fileExistsSync(s)&&(n=s)}return n}_fileExistsSync(t){return Ct.exists(t)}}var yt,bt;var vt=E(bt?yt:(bt=1,yt=function(t){if(void 0===t&&(t=2),t>=Error.stackTraceLimit)throw new TypeError("getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `"+t+"` and Error.stackTraceLimit was: `"+Error.stackTraceLimit+"`");var e=Error.prepareStackTrace;Error.prepareStackTrace=function(t,e){return e};var n=(new Error).stack;if(Error.prepareStackTrace=e,null!==n&&"object"==typeof n)return n[t]?n[t].getFileName():void 0}));const At=m(import.meta.url),Bt=At.substring(0,At.lastIndexOf("node_modules")),wt=C(import.meta.url);var Ot,jt={assert:{notStrictEqual:p,strictEqual:d},cliui:function(t){return function(t,e){return P=e,new S({width:(null==t?void 0:t.width)||("object"==typeof process&&process.stdout&&process.stdout.columns?process.stdout.columns:80),wrap:null==t?void 0:t.wrap})}(t,{stringWidth:R,stripAnsi:N,wrap:tt})},findUp:function(t,s){let i,u=r(".",t);for(e(u).isDirectory()||(u=o(u));;){if(i=s(u,n(u)),i)return r(u,i);if(u=o(i=u),i===u)break}},getEnv:t=>process.env[t],inspect:F,getProcessArgvBin:function(){return process.argv[Ft()]},mainFilename:Bt||process.cwd(),Parser:gt,path:{basename:h,dirname:o,extname:c,relative:l,resolve:r,join:D},process:{argv:()=>process.argv,cwd:process.cwd,emitWarning:(t,e)=>process.emitWarning(t,e),execPath:()=>process.execPath,exit:t=>{process.exit(t)},nextTick:process.nextTick,stdColumns:void 0!==process.stdout.columns?process.stdout.columns:null},readFileSync:s,readdirSync:n,require:wt,getCallerFile:()=>{const t=vt(3);return t.match(/^file:\/\//)?m(t):t},stringWidth:R,y18n:(Ot={directory:r(At,"../../../locales"),updateFiles:!1},function(t,e){Ct=e;const n=new Et(t);return{__:n.__.bind(n),__n:n.__n.bind(n),setLocale:n.setLocale.bind(n),getLocale:n.getLocale.bind(n),updateLocale:n.updateLocale.bind(n),locale:n.locale}}(Ot,mt))};function xt(t,e,n,s){n.assert.notStrictEqual(t,e,s)}function kt(t,e){e.assert.strictEqual(typeof t,"string")}function _t(t){return Object.keys(t)}function Mt(t){return!!t&&!!t.then&&"function"==typeof t.then}class St extends Error{constructor(t){super(t||"yargs error"),this.name="YError",Error.captureStackTrace&&Error.captureStackTrace(this,St)}}function $t(t){const e=t.replace(/\s{2,}/g," ").split(/\s+(?![^[]*]|[^<]*>)/),n=/\.*[\][<>]/g,s=e.shift();if(!s)throw new Error(`No command found in: ${t}`);const i={cmd:s.replace(n,""),demanded:[],optional:[]};return e.forEach((t,s)=>{let u=!1;t=t.replace(/\s/g,""),/\.+[\]>]/.test(t)&&s===e.length-1&&(u=!0),/^\[/.test(t)?i.optional.push({cmd:t.replace(n,"").split("|"),variadic:u}):i.demanded.push({cmd:t.replace(n,"").split("|"),variadic:u})}),i}const Pt=["first","second","third","fourth","fifth","sixth"];function It(t,e,n){try{let s=0;const[i,u,r]="object"==typeof t?[{demanded:[],optional:[]},t,e]:[$t(`cmd ${t}`),e,n],o=[].slice.call(u);for(;o.length&&void 0===o[o.length-1];)o.pop();const a=r||o.length;if(a<i.demanded.length)throw new St(`Not enough arguments provided. Expected ${i.demanded.length} but received ${o.length}.`);const D=i.demanded.length+i.optional.length;if(a>D)throw new St(`Too many arguments provided. Expected max ${D} but received ${a}.`);i.demanded.forEach(t=>{const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1}),i.optional.forEach(t=>{if(0===o.length)return;const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1})}catch(t){console.warn(t.stack)}}function Nt(t){return Array.isArray(t)?"array":null===t?"null":typeof t}function Wt(t,e,n){throw new St(`Invalid ${Pt[n]||"manyith"} argument. Expected ${e.join(" or ")} but received ${t}.`)}class Lt{constructor(t){this.globalMiddleware=[],this.frozens=[],this.yargs=t}addMiddleware(t,e,n=!0,s=!1){if(It("<array|function> [boolean] [boolean] [boolean]",[t,e,n],arguments.length),Array.isArray(t)){for(let s=0;s<t.length;s++){if("function"!=typeof t[s])throw Error("middleware must be a function");const i=t[s];i.applyBeforeValidation=e,i.global=n}Array.prototype.push.apply(this.globalMiddleware,t)}else if("function"==typeof t){const i=t;i.applyBeforeValidation=e,i.global=n,i.mutates=s,this.globalMiddleware.push(t)}return this.yargs}addCoerceMiddleware(t,e){const n=this.yargs.getAliases();return this.globalMiddleware=this.globalMiddleware.filter(t=>{const s=[...n[e]||[],e];return!t.option||!s.includes(t.option)}),t.option=e,this.addMiddleware(t,!0,!0,!0)}getMiddleware(){return this.globalMiddleware}freeze(){this.frozens.push([...this.globalMiddleware])}unfreeze(){const t=this.frozens.pop();void 0!==t&&(this.globalMiddleware=t)}reset(){this.globalMiddleware=this.globalMiddleware.filter(t=>t.global)}}function zt(t,e,n,s){return n.reduce((t,n)=>{if(n.applyBeforeValidation!==s)return t;if(n.mutates){if(n.applied)return t;n.applied=!0}if(Mt(t))return t.then(t=>Promise.all([t,n(t,e)])).then(([t,e])=>Object.assign(t,e));{const s=n(t,e);return Mt(s)?s.then(e=>Object.assign(t,e)):Object.assign(t,s)}},t)}function Ht(t,e,n=t=>{throw t}){try{const n="function"==typeof t?t():t;return Mt(n)?n.then(t=>e(t)):e(n)}catch(t){return n(t)}}const Rt=/(^\*)|(^\$0)/;class Tt{constructor(t,e,n,s){this.requireCache=new Set,this.handlers={},this.aliasMap={},this.frozens=[],this.shim=s,this.usage=t,this.globalMiddleware=n,this.validation=e}addDirectory(t,e,n,s){s=s||{},this.requireCache.add(n);const i=this.shim.path.resolve(this.shim.path.dirname(n),t),u=this.shim.readdirSync(i,{recursive:!!s.recurse});Array.isArray(s.extensions)||(s.extensions=["js"]);const r="function"==typeof s.visit?s.visit:t=>t;for(const t of u){const n=t.toString();if(s.exclude){let t=!1;if(t="function"==typeof s.exclude?s.exclude(n):s.exclude.test(n),t)continue}if(s.include){let t=!1;if(t="function"==typeof s.include?s.include(n):s.include.test(n),!t)continue}let u=!1;for(const t of s.extensions)n.endsWith(t)&&(u=!0);if(u){const t=this.shim.path.join(i,n),s=e(t),u=Object.create(null,Object.getOwnPropertyDescriptors({...s}));if(r(u,t,n)){if(this.requireCache.has(t))continue;this.requireCache.add(t),u.command||(u.command=this.shim.path.basename(t,this.shim.path.extname(t))),this.addHandler(u)}}}}addHandler(t,e,n,s,i,u){let r=[];const o=function(t){return t?t.map(t=>(t.applyBeforeValidation=!1,t)):[]}(i);if(s=s||(()=>{}),Array.isArray(t))if(function(t){return t.every(t=>"string"==typeof t)}(t))[t,...r]=t;else for(const e of t)this.addHandler(e);else{if(function(t){return"object"==typeof t&&!Array.isArray(t)}(t)){let e=Array.isArray(t.command)||"string"==typeof t.command?t.command:null;if(null===e)throw new Error(`No command name given for module: ${this.shim.inspect(t)}`);return t.aliases&&(e=[].concat(e).concat(t.aliases)),void this.addHandler(e,this.extractDesc(t),t.builder,t.handler,t.middlewares,t.deprecated)}if(Ut(n))return void this.addHandler([t].concat(r),e,n.builder,n.handler,n.middlewares,n.deprecated)}if("string"==typeof t){const i=$t(t);r=r.map(t=>$t(t).cmd);let a=!1;const D=[i.cmd].concat(r).filter(t=>!Rt.test(t)||(a=!0,!1));0===D.length&&a&&D.push("$0"),a&&(i.cmd=D[0],r=D.slice(1),t=t.replace(Rt,i.cmd)),r.forEach(t=>{this.aliasMap[t]=i.cmd}),!1!==e&&this.usage.command(t,e,a,r,u),this.handlers[i.cmd]={original:t,description:e,handler:s,builder:n||{},middlewares:o,deprecated:u,demanded:i.demanded,optional:i.optional},a&&(this.defaultCommand=this.handlers[i.cmd])}}getCommandHandlers(){return this.handlers}getCommands(){return Object.keys(this.handlers).concat(Object.keys(this.aliasMap))}hasDefaultCommand(){return!!this.defaultCommand}runCommand(t,e,n,s,i,u){const r=this.handlers[t]||this.handlers[this.aliasMap[t]]||this.defaultCommand,o=e.getInternalMethods().getContext(),a=o.commands.slice(),D=!t;t&&(o.commands.push(t),o.fullCommands.push(r.original));const l=this.applyBuilderUpdateUsageAndParse(D,r,e,n.aliases,a,s,i,u);return Mt(l)?l.then(t=>this.applyMiddlewareAndGetResult(D,r,t.innerArgv,o,i,t.aliases,e)):this.applyMiddlewareAndGetResult(D,r,l.innerArgv,o,i,l.aliases,e)}applyBuilderUpdateUsageAndParse(t,e,n,s,i,u,r,o){const a=e.builder;let D=n;if(Gt(a)){n.getInternalMethods().getUsageInstance().freeze();const l=a(n.getInternalMethods().reset(s),o);if(Mt(l))return l.then(s=>{var o;return D=(o=s)&&"function"==typeof o.getInternalMethods?s:n,this.parseAndUpdateUsage(t,e,D,i,u,r)})}else(function(t){return"object"==typeof t})(a)&&(n.getInternalMethods().getUsageInstance().freeze(),D=n.getInternalMethods().reset(s),Object.keys(e.builder).forEach(t=>{D.option(t,a[t])}));return this.parseAndUpdateUsage(t,e,D,i,u,r)}parseAndUpdateUsage(t,e,n,s,i,u){t&&n.getInternalMethods().getUsageInstance().unfreeze(!0),this.shouldUpdateUsage(n)&&n.getInternalMethods().getUsageInstance().usage(this.usageFromParentCommandsCommandHandler(s,e),e.description);const r=n.getInternalMethods().runYargsParserAndExecuteCommands(null,void 0,!0,i,u);return Mt(r)?r.then(t=>({aliases:n.parsed.aliases,innerArgv:t})):{aliases:n.parsed.aliases,innerArgv:r}}shouldUpdateUsage(t){return!t.getInternalMethods().getUsageInstance().getUsageDisabled()&&0===t.getInternalMethods().getUsageInstance().getUsage().length}usageFromParentCommandsCommandHandler(t,e){const n=Rt.test(e.original)?e.original.replace(Rt,"").trim():e.original,s=t.filter(t=>!Rt.test(t));return s.push(n),`$0 ${s.join(" ")}`}handleValidationAndGetResult(t,e,n,s,i,u,r,o){if(!u.getInternalMethods().getHasOutput()){const e=u.getInternalMethods().runValidation(i,o,u.parsed.error,t);n=Ht(n,t=>(e(t),t))}if(e.handler&&!u.getInternalMethods().getHasOutput()){u.getInternalMethods().setHasOutput();const s=!!u.getOptions().configuration["populate--"];u.getInternalMethods().postProcess(n,s,!1,!1),n=Ht(n=zt(n,u,r,!1),t=>{const n=e.handler(t);return Mt(n)?n.then(()=>t):t}),t||u.getInternalMethods().getUsageInstance().cacheHelpMessage(),Mt(n)&&!u.getInternalMethods().hasParseCallback()&&n.catch(t=>{try{u.getInternalMethods().getUsageInstance().fail(null,t)}catch(t){}})}return t||(s.commands.pop(),s.fullCommands.pop()),n}applyMiddlewareAndGetResult(t,e,n,s,i,u,r){let o={};if(i)return n;r.getInternalMethods().getHasOutput()||(o=this.populatePositionals(e,n,s,r));const a=this.globalMiddleware.getMiddleware().slice(0).concat(e.middlewares),D=zt(n,r,a,!0);return Mt(D)?D.then(n=>this.handleValidationAndGetResult(t,e,n,s,u,r,a,o)):this.handleValidationAndGetResult(t,e,D,s,u,r,a,o)}populatePositionals(t,e,n,s){e._=e._.slice(n.commands.length);const i=t.demanded.slice(0),u=t.optional.slice(0),r={};for(this.validation.positionalCount(i.length,e._.length);i.length;){const t=i.shift();this.populatePositional(t,e,r)}for(;u.length;){const t=u.shift();this.populatePositional(t,e,r)}return e._=n.commands.concat(e._.map(t=>""+t)),this.postProcessPositionals(e,r,this.cmdToParseOptions(t.original),s),r}populatePositional(t,e,n){const s=t.cmd[0];t.variadic?n[s]=e._.splice(0).map(String):e._.length&&(n[s]=[String(e._.shift())])}cmdToParseOptions(t){const e={array:[],default:{},alias:{},demand:{}},n=$t(t);return n.demanded.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s,e.demand[n]=!0}),n.optional.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s}),e}postProcessPositionals(t,e,n,s){const i=Object.assign({},s.getOptions());i.default=Object.assign(n.default,i.default);for(const t of Object.keys(n.alias))i.alias[t]=(i.alias[t]||[]).concat(n.alias[t]);i.array=i.array.concat(n.array),i.config={};const u=[];if(Object.keys(e).forEach(t=>{e[t].map(e=>{i.configuration["unknown-options-as-args"]&&(i.key[t]=!0),u.push(`--${t}`),u.push(e)})}),!u.length)return;const r=Object.assign({},i.configuration,{"populate--":!1}),o=this.shim.Parser.detailed(u,Object.assign({},i,{configuration:r}));if(o.error)s.getInternalMethods().getUsageInstance().fail(o.error.message,o.error);else{const n=Object.keys(e);Object.keys(e).forEach(t=>{n.push(...o.aliases[t])}),Object.keys(o.argv).forEach(i=>{n.includes(i)&&(e[i]||(e[i]=o.argv[i]),!this.isInConfigs(s,i)&&!this.isDefaulted(s,i)&&Object.prototype.hasOwnProperty.call(t,i)&&Object.prototype.hasOwnProperty.call(o.argv,i)&&(Array.isArray(t[i])||Array.isArray(o.argv[i]))?t[i]=[].concat(t[i],o.argv[i]):t[i]=o.argv[i])})}}isDefaulted(t,e){const{default:n}=t.getOptions();return Object.prototype.hasOwnProperty.call(n,e)||Object.prototype.hasOwnProperty.call(n,this.shim.Parser.camelCase(e))}isInConfigs(t,e){const{configObjects:n}=t.getOptions();return n.some(t=>Object.prototype.hasOwnProperty.call(t,e))||n.some(t=>Object.prototype.hasOwnProperty.call(t,this.shim.Parser.camelCase(e)))}runDefaultBuilderOn(t){if(!this.defaultCommand)return;if(this.shouldUpdateUsage(t)){const e=Rt.test(this.defaultCommand.original)?this.defaultCommand.original:this.defaultCommand.original.replace(/^[^[\]<>]*/,"$0 ");t.getInternalMethods().getUsageInstance().usage(e,this.defaultCommand.description)}const e=this.defaultCommand.builder;if(Gt(e))return e(t,!0);Ut(e)||Object.keys(e).forEach(n=>{t.option(n,e[n])})}extractDesc({describe:t,description:e,desc:n}){for(const s of[t,e,n]){if("string"==typeof s||!1===s)return s;xt(s,!0,this.shim)}return!1}freeze(){this.frozens.push({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand})}unfreeze(){const t=this.frozens.pop();xt(t,void 0,this.shim),({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand}=t)}reset(){return this.handlers={},this.aliasMap={},this.defaultCommand=void 0,this.requireCache=new Set,this}}function Ut(t){return"object"==typeof t&&!!t.builder&&"function"==typeof t.handler}function Gt(t){return"function"==typeof t}function qt(t={},e=()=>!0){const n={};return _t(t).forEach(s=>{e(s,t[s])&&(n[s]=t[s])}),n}function Vt(t){"undefined"!=typeof process&&[process.stdout,process.stderr].forEach(e=>{const n=e;n._handle&&n.isTTY&&"function"==typeof n._handle.setBlocking&&n._handle.setBlocking(t)})}function Yt(t){return"boolean"==typeof t}function Kt(t,e){const n=e.y18n.__,s={},i=[];s.failFn=function(t){i.push(t)};let u=null,r=null,o=!0;s.showHelpOnFail=function(e=!0,n){const[i,a]="string"==typeof e?[!0,e]:[e,n];return t.getInternalMethods().isGlobalContext()&&(r=a),u=a,o=i,s};let a=!1;s.fail=function(e,n){const D=t.getInternalMethods().getLoggerInstance();if(!i.length){if(t.getExitProcess()&&Vt(!0),!a){a=!0,o&&(t.showHelp("error"),D.error()),(e||n)&&D.error(e||n);const s=u||r;s&&((e||n)&&D.error(""),D.error(s))}if(n=n||new St(e),t.getExitProcess())return t.exit(1);if(t.getInternalMethods().hasParseCallback())return t.exit(1,n);throw n}for(let t=i.length-1;t>=0;--t){const u=i[t];if(Yt(u)){if(n)throw n;if(e)throw Error(e)}else u(e,n,s)}};let D=[],l=!1;s.usage=(t,e)=>null===t?(l=!0,D=[],s):(l=!1,D.push([t,e||""]),s),s.getUsage=()=>D,s.getUsageDisabled=()=>l,s.getPositionalGroupName=()=>n("Positionals:");let c=[];s.example=(t,e)=>{c.push([t,e||""])};let h=[];s.command=function(t,e,n,s,i=!1){n&&(h=h.map(t=>(t[2]=!1,t))),h.push([t,e||"",n,s,i])},s.getCommands=()=>h;let f={};s.describe=function(t,e){Array.isArray(t)?t.forEach(t=>{s.describe(t,e)}):"object"==typeof t?Object.keys(t).forEach(e=>{s.describe(e,t[e])}):f[t]=e},s.getDescriptions=()=>f;let d=[];s.epilog=t=>{d.push(t)};let p,g=!1;s.wrap=t=>{g=!0,p=t},s.getWrap=()=>e.getEnv("YARGS_DISABLE_WRAP")?null:(g||(p=function(){const t=80;return e.process.stdColumns?Math.min(t,e.process.stdColumns):t}(),g=!0),p);const F="__yargsString__:";function m(t,n,s){let i=0;return Array.isArray(t)||(t=Object.values(t).map(t=>[t])),t.forEach(t=>{i=Math.max(e.stringWidth(s?`${s} ${Zt(t[0])}`:Zt(t[0]))+Qt(t[0]),i)}),n&&(i=Math.min(i,parseInt((.5*n).toString(),10))),i}let C;function E(e){return t.getOptions().hiddenOptions.indexOf(e)<0||t.parsed.argv[t.getOptions().showHiddenOpt]}function y(t,e){let s=`[${n("default:")} `;if(void 0===t&&!e)return null;if(e)s+=e;else switch(typeof t){case"string":s+=`"${t}"`;break;case"object":s+=JSON.stringify(t);break;default:s+=t}return`${s}]`}s.deferY18nLookup=t=>F+t,s.help=function(){if(C)return C;!function(){const e=t.getDemandedOptions(),n=t.getOptions();(Object.keys(n.alias)||[]).forEach(i=>{n.alias[i].forEach(u=>{f[u]&&s.describe(i,f[u]),u in e&&t.demandOption(i,e[u]),n.boolean.includes(u)&&t.boolean(i),n.count.includes(u)&&t.count(i),n.string.includes(u)&&t.string(i),n.normalize.includes(u)&&t.normalize(i),n.array.includes(u)&&t.array(i),n.number.includes(u)&&t.number(i)})})}();const i=t.customScriptName?t.$0:e.path.basename(t.$0),u=t.getDemandedOptions(),r=t.getDemandedCommands(),o=t.getDeprecatedOptions(),a=t.getGroups(),p=t.getOptions();let g=[];g=g.concat(Object.keys(f)),g=g.concat(Object.keys(u)),g=g.concat(Object.keys(r)),g=g.concat(Object.keys(p.default)),g=g.filter(E),g=Object.keys(g.reduce((t,e)=>("_"!==e&&(t[e]=!0),t),{}));const b=s.getWrap(),v=e.cliui({width:b,wrap:!!b});if(!l)if(D.length)D.forEach(t=>{v.div({text:`${t[0].replace(/\$0/g,i)}`}),t[1]&&v.div({text:`${t[1]}`,padding:[1,0,0,0]})}),v.div();else if(h.length){let t=null;t=r._?`${i} <${n("command")}>\n`:`${i} [${n("command")}]\n`,v.div(`${t}`)}if(h.length>1||1===h.length&&!h[0][2]){v.div(n("Commands:"));const e=t.getInternalMethods().getContext(),s=e.commands.length?`${e.commands.join(" ")} `:"";!0===t.getInternalMethods().getParserConfiguration()["sort-commands"]&&(h=h.sort((t,e)=>t[0].localeCompare(e[0])));const u=i?`${i} `:"";h.forEach(t=>{const e=`${u}${s}${t[0].replace(/^\$0 ?/,"")}`;v.span({text:e,padding:[0,2,0,2],width:m(h,b,`${i}${s}`)+4},{text:t[1]});const r=[];t[2]&&r.push(`[${n("default")}]`),t[3]&&t[3].length&&r.push(`[${n("aliases:")} ${t[3].join(", ")}]`),t[4]&&("string"==typeof t[4]?r.push(`[${n("deprecated: %s",t[4])}]`):r.push(`[${n("deprecated")}]`)),r.length?v.div({text:r.join(" "),padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}const A=(Object.keys(p.alias)||[]).concat(Object.keys(t.parsed.newAliases)||[]);g=g.filter(e=>!t.parsed.newAliases[e]&&A.every(t=>-1===(p.alias[t]||[]).indexOf(e)));const B=n("Options:");a[B]||(a[B]=[]),function(t,e,n,s){let i=[],u=null;Object.keys(n).forEach(t=>{i=i.concat(n[t])}),t.forEach(t=>{u=[t].concat(e[t]),u.some(t=>-1!==i.indexOf(t))||n[s].push(t)})}(g,p.alias,a,B);const w=t=>/^--/.test(Zt(t)),O=Object.keys(a).filter(t=>a[t].length>0).map(t=>({groupName:t,normalizedKeys:a[t].filter(E).map(t=>{if(A.includes(t))return t;for(let e,n=0;void 0!==(e=A[n]);n++)if((p.alias[e]||[]).includes(t))return e;return t})})).filter(({normalizedKeys:t})=>t.length>0).map(({groupName:t,normalizedKeys:e})=>{const n=e.reduce((e,n)=>(e[n]=[n].concat(p.alias[n]||[]).map(e=>t===s.getPositionalGroupName()?e:(/^[0-9]$/.test(e)?p.boolean.includes(n)?"-":"--":e.length>1?"--":"-")+e).sort((t,e)=>w(t)===w(e)?0:w(t)?1:-1).join(", "),e),{});return{groupName:t,normalizedKeys:e,switches:n}});if(O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).some(({normalizedKeys:t,switches:e})=>!t.every(t=>w(e[t])))&&O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).forEach(({normalizedKeys:t,switches:e})=>{t.forEach(t=>{var n,s;w(e[t])&&(e[t]=(n=e[t],s=4,Jt(n)?{text:n.text,indentation:n.indentation+s}:{text:n,indentation:s}))})}),O.forEach(({groupName:e,normalizedKeys:i,switches:r})=>{v.div(e),i.forEach(e=>{const i=r[e];let a=f[e]||"",D=null;a.includes(F)&&(a=n(a.substring(16))),p.boolean.includes(e)&&(D=`[${n("boolean")}]`),p.count.includes(e)&&(D=`[${n("count")}]`),p.string.includes(e)&&(D=`[${n("string")}]`),p.normalize.includes(e)&&(D=`[${n("string")}]`),p.array.includes(e)&&(D=`[${n("array")}]`),p.number.includes(e)&&(D=`[${n("number")}]`);const l=[e in o?(c=o[e],"string"==typeof c?`[${n("deprecated: %s",c)}]`:`[${n("deprecated")}]`):null,D,e in u?`[${n("required")}]`:null,p.choices&&p.choices[e]?`[${n("choices:")} ${s.stringifiedValues(p.choices[e])}]`:null,y(p.default[e],p.defaultDescription[e])].filter(Boolean).join(" ");var c;v.span({text:Zt(i),padding:[0,2,0,2+Qt(i)],width:m(r,b)+4},a);const h=!0===t.getInternalMethods().getUsageConfiguration()["hide-types"];l&&!h?v.div({text:l,padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}),c.length&&(v.div(n("Examples:")),c.forEach(t=>{t[0]=t[0].replace(/\$0/g,i)}),c.forEach(t=>{""===t[1]?v.div({text:t[0],padding:[0,2,0,2]}):v.div({text:t[0],padding:[0,2,0,2],width:m(c,b)+4},{text:t[1]})}),v.div()),d.length>0){const t=d.map(t=>t.replace(/\$0/g,i)).join("\n");v.div(`${t}\n`)}return v.toString().replace(/\s*$/,"")},s.cacheHelpMessage=function(){C=this.help()},s.clearCachedHelpMessage=function(){C=void 0},s.hasCachedHelpMessage=function(){return!!C},s.showHelp=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(s.help())},s.functionDescription=t=>["(",t.name?e.Parser.decamelize(t.name,"-"):n("generated-value"),")"].join(""),s.stringifiedValues=function(t,e){let n="";const s=e||", ",i=[].concat(t);return t&&i.length?(i.forEach(t=>{n.length&&(n+=s),n+=JSON.stringify(t)}),n):n};let b=null;s.version=t=>{b=t},s.showVersion=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(b)},s.reset=function(t){return u=null,a=!1,D=[],l=!1,d=[],c=[],h=[],f=qt(f,e=>!t[e]),s};const v=[];return s.freeze=function(){v.push({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f})},s.unfreeze=function(t=!1){const e=v.pop();e&&(t?(f={...e.descriptions,...f},h=[...e.commands,...h],D=[...e.usages,...D],c=[...e.examples,...c],d=[...e.epilogs,...d]):({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f}=e))},s}function Jt(t){return"object"==typeof t}function Qt(t){return Jt(t)?t.indentation:0}function Zt(t){return Jt(t)?t.text:t}class Xt{constructor(t,e,n,s){var i,u,r;this.yargs=t,this.usage=e,this.command=n,this.shim=s,this.completionKey="get-yargs-completions",this.aliases=null,this.customCompletionFunction=null,this.indexAfterLastReset=0,this.zshShell=null!==(r=(null===(i=this.shim.getEnv("SHELL"))||void 0===i?void 0:i.includes("zsh"))||(null===(u=this.shim.getEnv("ZSH_NAME"))||void 0===u?void 0:u.includes("zsh")))&&void 0!==r&&r}defaultCompletion(t,e,n,s){const i=this.command.getCommandHandlers();for(let e=0,n=t.length;e<n;++e)if(i[t[e]]&&i[t[e]].builder){const n=i[t[e]].builder;if(Gt(n)){this.indexAfterLastReset=e+1;const t=this.yargs.getInternalMethods().reset();return n(t,!0),t.argv}}const u=[];this.commandCompletions(u,t,n),this.optionCompletions(u,t,e,n),this.choicesFromOptionsCompletions(u,t,e,n),this.choicesFromPositionalsCompletions(u,t,e,n),s(null,u)}commandCompletions(t,e,n){const s=this.yargs.getInternalMethods().getContext().commands;n.match(/^-/)||s[s.length-1]===n||this.previousArgHasChoices(e)||this.usage.getCommands().forEach(n=>{const s=$t(n[0]).cmd;if(-1===e.indexOf(s))if(this.zshShell){const e=n[1]||"";t.push(s.replace(/:/g,"\\:")+":"+e)}else t.push(s)})}optionCompletions(t,e,n,s){if((s.match(/^-/)||""===s&&0===t.length)&&!this.previousArgHasChoices(e)){const n=this.yargs.getOptions(),i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[];Object.keys(n.key).forEach(u=>{const r=!!n.configuration["boolean-negation"]&&n.boolean.includes(u);i.includes(u)||n.hiddenOptions.includes(u)||this.argsContainKey(e,u,r)||this.completeOptionKey(u,t,s,r&&!!n.default[u])})}}choicesFromOptionsCompletions(t,e,n,s){if(this.previousArgHasChoices(e)){const n=this.getPreviousArgChoices(e);n&&n.length>0&&t.push(...n.map(t=>t.replace(/:/g,"\\:")))}}choicesFromPositionalsCompletions(t,e,n,s){if(""===s&&t.length>0&&this.previousArgHasChoices(e))return;const i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[],u=Math.max(this.indexAfterLastReset,this.yargs.getInternalMethods().getContext().commands.length+1),r=i[n._.length-u-1];if(!r)return;const o=this.yargs.getOptions().choices[r]||[];for(const e of o)e.startsWith(s)&&t.push(e.replace(/:/g,"\\:"))}getPreviousArgChoices(t){if(t.length<1)return;let e=t[t.length-1],n="";if(!e.startsWith("-")&&t.length>1&&(n=e,e=t[t.length-2]),!e.startsWith("-"))return;const s=e.replace(/^-+/,""),i=this.yargs.getOptions(),u=[s,...this.yargs.getAliases()[s]||[]];let r;for(const t of u)if(Object.prototype.hasOwnProperty.call(i.key,t)&&Array.isArray(i.choices[t])){r=i.choices[t];break}return r?r.filter(t=>!n||t.startsWith(n)):void 0}previousArgHasChoices(t){const e=this.getPreviousArgChoices(t);return void 0!==e&&e.length>0}argsContainKey(t,e,n){const s=e=>-1!==t.indexOf((/^[^0-9]$/.test(e)?"-":"--")+e);if(s(e))return!0;if(n&&s(`no-${e}`))return!0;if(this.aliases)for(const t of this.aliases[e])if(s(t))return!0;return!1}completeOptionKey(t,e,n,s){var i,u,r,o;let a=t;if(this.zshShell){const e=this.usage.getDescriptions(),n=null===(u=null===(i=null==this?void 0:this.aliases)||void 0===i?void 0:i[t])||void 0===u?void 0:u.find(t=>{const n=e[t];return"string"==typeof n&&n.length>0}),s=n?e[n]:void 0,D=null!==(o=null!==(r=e[t])&&void 0!==r?r:s)&&void 0!==o?o:"";a=`${t.replace(/:/g,"\\:")}:${D.replace("__yargsString__:","").replace(/(\r\n|\n|\r)/gm," ")}`}const D=!/^--/.test(n)&&(t=>/^[^0-9]$/.test(t))(t)?"-":"--";e.push(D+a),s&&e.push(D+"no-"+a)}customCompletion(t,e,n,s){if(xt(this.customCompletionFunction,null,this.shim),this.customCompletionFunction.length<3){const t=this.customCompletionFunction(n,e);return Mt(t)?t.then(t=>{this.shim.process.nextTick(()=>{s(null,t)})}).catch(t=>{this.shim.process.nextTick(()=>{s(t,void 0)})}):s(null,t)}return function(t){return t.length>3}(this.customCompletionFunction)?this.customCompletionFunction(n,e,(i=s)=>this.defaultCompletion(t,e,n,i),t=>{s(null,t)}):this.customCompletionFunction(n,e,t=>{s(null,t)})}getCompletion(t,e){const n=t.length?t[t.length-1]:"",s=this.yargs.parse(t,!0),i=this.customCompletionFunction?s=>this.customCompletion(t,s,n,e):s=>this.defaultCompletion(t,s,n,e);return Mt(s)?s.then(i):i(s)}generateCompletionScript(t,e){let n=this.zshShell?'#compdef {{app_name}}\n###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc\n# or {{app_path}} {{completion_command}} >> ~/.zprofile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local reply\n local si=$IFS\n IFS=$\'\n\' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "${words[@]}"))\n IFS=$si\n if [[ ${#reply} -gt 0 ]]; then\n _describe \'values\' reply\n else\n _default\n fi\n}\nif [[ "\'${zsh_eval_context[-1]}" == "loadautofunc" ]]; then\n _{{app_name}}_yargs_completions "$@"\nelse\n compdef _{{app_name}}_yargs_completions {{app_name}}\nfi\n###-end-{{app_name}}-completions-###\n':'###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc\n# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local cur_word args type_list\n\n cur_word="${COMP_WORDS[COMP_CWORD]}"\n args=("${COMP_WORDS[@]}")\n\n # ask yargs to generate completions.\n # see https://stackoverflow.com/a/40944195/7080036 for the spaces-handling awk\n mapfile -t type_list < <({{app_path}} --get-yargs-completions "${args[@]}")\n mapfile -t COMPREPLY < <(compgen -W "$( printf \'%q \' "${type_list[@]}" )" -- "${cur_word}" |\n awk \'/ / { print "\\""$0"\\"" } /^[^ ]+$/ { print $0 }\')\n\n # if no match was found, fall back to filename completion\n if [ ${#COMPREPLY[@]} -eq 0 ]; then\n COMPREPLY=()\n fi\n\n return 0\n}\ncomplete -o bashdefault -o default -F _{{app_name}}_yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n';const s=this.shim.path.basename(t);return t.match(/\.js$/)&&(t=`./${t}`),n=n.replace(/{{app_name}}/g,s),n=n.replace(/{{completion_command}}/g,e),n.replace(/{{app_path}}/g,t)}registerFunction(t){this.customCompletionFunction=t}setParsed(t){this.aliases=t.aliases}}function te(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;const n=[];let s,i;for(s=0;s<=e.length;s++)n[s]=[s];for(i=0;i<=t.length;i++)n[0][i]=i;for(s=1;s<=e.length;s++)for(i=1;i<=t.length;i++)e.charAt(s-1)===t.charAt(i-1)?n[s][i]=n[s-1][i-1]:s>1&&i>1&&e.charAt(s-2)===t.charAt(i-1)&&e.charAt(s-1)===t.charAt(i-2)?n[s][i]=n[s-2][i-2]+1:n[s][i]=Math.min(n[s-1][i-1]+1,Math.min(n[s][i-1]+1,n[s-1][i]+1));return n[e.length][t.length]}const ee=["$0","--","_"];let ne,se=[];function ie(t,e,n,s){ne=s;let i={};if(Object.prototype.hasOwnProperty.call(t,"extends")){if("string"!=typeof t.extends)return i;const u=/\.json|\..*rc$/.test(t.extends);let r=null;if(u)r=function(t,e){return ne.path.resolve(t,e)}(e,t.extends);else try{r=import.meta.resolve(t.extends)}catch(e){return t}!function(t){if(se.indexOf(t)>-1)throw new St(`Circular extended configurations: '${t}'.`)}(r),se.push(r),i=u?JSON.parse(ne.readFileSync(r,"utf8")):s.require(t.extends),delete t.extends,i=ie(i,ne.path.dirname(r),n,ne)}return se=[],n?ue(i,t):Object.assign({},i,t)}function ue(t,e){const n={};function s(t){return t&&"object"==typeof t&&!Array.isArray(t)}Object.assign(n,t);for(const i of Object.keys(e))s(e[i])&&s(n[i])?n[i]=ue(t[i],e[i]):n[i]=e[i];return n}var re,oe,ae,De,le,ce,he,fe,de,pe,ge,Fe,me,Ce,Ee,ye,be,ve,Ae,Be,we,Oe,je,xe,ke,_e,Me,Se,$e,Pe,Ie,Ne,We,Le,ze,He=function(t,e,n,s,i){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?i.call(t,n):i?i.value=n:e.set(t,n),n},Re=function(t,e,n,s){if("a"===n&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?s:"a"===n?s.call(t):s?s.value:e.get(t)};const Te=Symbol("copyDoubleDash"),Ue=Symbol("copyDoubleDash"),Ge=Symbol("deleteFromParserHintObject"),qe=Symbol("emitWarning"),Ve=Symbol("freeze"),Ye=Symbol("getDollarZero"),Ke=Symbol("getParserConfiguration"),Je=Symbol("getUsageConfiguration"),Qe=Symbol("guessLocale"),Ze=Symbol("guessVersion"),Xe=Symbol("parsePositionalNumbers"),tn=Symbol("pkgUp"),en=Symbol("populateParserHintArray"),nn=Symbol("populateParserHintSingleValueDictionary"),sn=Symbol("populateParserHintArrayDictionary"),un=Symbol("populateParserHintDictionary"),rn=Symbol("sanitizeKey"),on=Symbol("setKey"),an=Symbol("unfreeze"),Dn=Symbol("validateAsync"),ln=Symbol("getCommandInstance"),cn=Symbol("getContext"),hn=Symbol("getHasOutput"),fn=Symbol("getLoggerInstance"),dn=Symbol("getParseContext"),pn=Symbol("getUsageInstance"),gn=Symbol("getValidationInstance"),Fn=Symbol("hasParseCallback"),mn=Symbol("isGlobalContext"),Cn=Symbol("postProcess"),En=Symbol("rebase"),yn=Symbol("reset"),bn=Symbol("runYargsParserAndExecuteCommands"),vn=Symbol("runValidation"),An=Symbol("setHasOutput"),Bn=Symbol("kTrackManuallySetKeys");class wn{constructor(t=[],e,n,s){this.customScriptName=!1,this.parsed=!1,re.set(this,void 0),oe.set(this,void 0),ae.set(this,{commands:[],fullCommands:[]}),De.set(this,null),le.set(this,null),ce.set(this,"show-hidden"),he.set(this,null),fe.set(this,!0),de.set(this,{}),pe.set(this,!0),ge.set(this,[]),Fe.set(this,void 0),me.set(this,{}),Ce.set(this,!1),Ee.set(this,null),ye.set(this,!0),be.set(this,void 0),ve.set(this,""),Ae.set(this,void 0),Be.set(this,void 0),we.set(this,{}),Oe.set(this,null),je.set(this,null),xe.set(this,{}),ke.set(this,{}),_e.set(this,void 0),Me.set(this,!1),Se.set(this,void 0),$e.set(this,!1),Pe.set(this,!1),Ie.set(this,!1),Ne.set(this,void 0),We.set(this,{}),Le.set(this,null),ze.set(this,void 0),He(this,Se,s,"f"),He(this,_e,t,"f"),He(this,oe,e,"f"),He(this,Be,n,"f"),He(this,Fe,new Lt(this),"f"),this.$0=this[Ye](),this[yn](),He(this,re,Re(this,re,"f"),"f"),He(this,Ne,Re(this,Ne,"f"),"f"),He(this,ze,Re(this,ze,"f"),"f"),He(this,Ae,Re(this,Ae,"f"),"f"),Re(this,Ae,"f").showHiddenOpt=Re(this,ce,"f"),He(this,be,this[Ue](),"f"),Re(this,Se,"f").y18n.setLocale("en_US")}addHelpOpt(t,e){return It("[string|boolean] [string]",[t,e],arguments.length),Re(this,Ee,"f")&&(this[Ge](Re(this,Ee,"f")),He(this,Ee,null,"f")),!1===t&&void 0===e||(He(this,Ee,"string"==typeof t?t:"help","f"),this.boolean(Re(this,Ee,"f")),this.describe(Re(this,Ee,"f"),e||Re(this,Ne,"f").deferY18nLookup("Show help"))),this}help(t,e){return this.addHelpOpt(t,e)}addShowHiddenOpt(t,e){if(It("[string|boolean] [string]",[t,e],arguments.length),!1===t&&void 0===e)return this;const n="string"==typeof t?t:Re(this,ce,"f");return this.boolean(n),this.describe(n,e||Re(this,Ne,"f").deferY18nLookup("Show hidden options")),Re(this,Ae,"f").showHiddenOpt=n,this}showHidden(t,e){return this.addShowHiddenOpt(t,e)}alias(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.alias.bind(this),"alias",t,e),this}array(t){return It("<array|string>",[t],arguments.length),this[en]("array",t),this[Bn](t),this}boolean(t){return It("<array|string>",[t],arguments.length),this[en]("boolean",t),this[Bn](t),this}check(t,e){return It("<function> [boolean]",[t,e],arguments.length),this.middleware((e,n)=>Ht(()=>t(e,n.getOptions()),n=>(n?("string"==typeof n||n instanceof Error)&&Re(this,Ne,"f").fail(n.toString(),n):Re(this,Ne,"f").fail(Re(this,Se,"f").y18n.__("Argument check failed: %s",t.toString())),e),t=>(Re(this,Ne,"f").fail(t.message?t.message:t.toString(),t),e)),!1,e),this}choices(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.choices.bind(this),"choices",t,e),this}coerce(t,e){if(It("<object|string|array> [function]",[t,e],arguments.length),Array.isArray(t)){if(!e)throw new St("coerce callback must be provided");for(const n of t)this.coerce(n,e);return this}if("object"==typeof t){for(const e of Object.keys(t))this.coerce(e,t[e]);return this}if(!e)throw new St("coerce callback must be provided");const n=t;return Re(this,Ae,"f").key[n]=!0,Re(this,Fe,"f").addCoerceMiddleware((t,s)=>{var i;const u=null!==(i=s.getAliases()[n])&&void 0!==i?i:[],r=[n,...u].filter(e=>Object.prototype.hasOwnProperty.call(t,e));return 0===r.length?t:Ht(()=>e(t[r[0]]),e=>(r.forEach(n=>{t[n]=e}),t),t=>{throw new St(t.message)})},n),this}conflicts(t,e){return It("<string|object> [string|array]",[t,e],arguments.length),Re(this,ze,"f").conflicts(t,e),this}config(t="config",e,n){return It("[object|string] [string|function] [function]",[t,e,n],arguments.length),"object"!=typeof t||Array.isArray(t)?("function"==typeof e&&(n=e,e=void 0),this.describe(t,e||Re(this,Ne,"f").deferY18nLookup("Path to JSON config file")),(Array.isArray(t)?t:[t]).forEach(t=>{Re(this,Ae,"f").config[t]=n||!0}),this):(t=ie(t,Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(t),this)}completion(t,e,n){return It("[string] [string|boolean|function] [function]",[t,e,n],arguments.length),"function"==typeof e&&(n=e,e=void 0),He(this,le,t||Re(this,le,"f")||"completion","f"),e||!1===e||(e="generate completion script"),this.command(Re(this,le,"f"),e),n&&Re(this,De,"f").registerFunction(n),this}command(t,e,n,s,i,u){return It("<string|array|object> [string|boolean] [function|object] [function] [array] [boolean|string]",[t,e,n,s,i,u],arguments.length),Re(this,re,"f").addHandler(t,e,n,s,i,u),this}commands(t,e,n,s,i,u){return this.command(t,e,n,s,i,u)}commandDir(t,e){It("<string> [object]",[t,e],arguments.length);const n=Re(this,Be,"f")||Re(this,Se,"f").require;return Re(this,re,"f").addDirectory(t,n,Re(this,Se,"f").getCallerFile(),e),this}count(t){return It("<array|string>",[t],arguments.length),this[en]("count",t),this[Bn](t),this}default(t,e,n){return It("<object|string|array> [*] [string]",[t,e,n],arguments.length),n&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]=n),"function"==typeof e&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]||(Re(this,Ae,"f").defaultDescription[t]=Re(this,Ne,"f").functionDescription(e)),e=e.call()),this[nn](this.default.bind(this),"default",t,e),this}defaults(t,e,n){return this.default(t,e,n)}demandCommand(t=1,e,n,s){return It("[number] [number|string] [string|null|undefined] [string|null|undefined]",[t,e,n,s],arguments.length),"number"!=typeof e&&(n=e,e=1/0),this.global("_",!1),Re(this,Ae,"f").demandedCommands._={min:t,max:e,minMsg:n,maxMsg:s},this}demand(t,e,n){return Array.isArray(e)?(e.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}),e=1/0):"number"!=typeof e&&(n=e,e=1/0),"number"==typeof t?(xt(n,!0,Re(this,Se,"f")),this.demandCommand(t,e,n,n)):Array.isArray(t)?t.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}):"string"==typeof n?this.demandOption(t,n):!0!==n&&void 0!==n||this.demandOption(t),this}demandOption(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[nn](this.demandOption.bind(this),"demandedOptions",t,e),this}deprecateOption(t,e){return It("<string> [string|boolean]",[t,e],arguments.length),Re(this,Ae,"f").deprecatedOptions[t]=e,this}describe(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[on](t,!0),Re(this,Ne,"f").describe(t,e),this}detectLocale(t){return It("<boolean>",[t],arguments.length),He(this,fe,t,"f"),this}env(t){return It("[string|boolean]",[t],arguments.length),!1===t?delete Re(this,Ae,"f").envPrefix:Re(this,Ae,"f").envPrefix=t||"",this}epilogue(t){return It("<string>",[t],arguments.length),Re(this,Ne,"f").epilog(t),this}epilog(t){return this.epilogue(t)}example(t,e){return It("<string|array> [string]",[t,e],arguments.length),Array.isArray(t)?t.forEach(t=>this.example(...t)):Re(this,Ne,"f").example(t,e),this}exit(t,e){He(this,Ce,!0,"f"),He(this,he,e,"f"),Re(this,pe,"f")&&Re(this,Se,"f").process.exit(t)}exitProcess(t=!0){return It("[boolean]",[t],arguments.length),He(this,pe,t,"f"),this}fail(t){if(It("<function|boolean>",[t],arguments.length),"boolean"==typeof t&&!1!==t)throw new St("Invalid first argument. Expected function or boolean 'false'");return Re(this,Ne,"f").failFn(t),this}getAliases(){return this.parsed?this.parsed.aliases:{}}async getCompletion(t,e){return It("<array> [function]",[t,e],arguments.length),e?Re(this,De,"f").getCompletion(t,e):new Promise((e,n)=>{Re(this,De,"f").getCompletion(t,(t,s)=>{t?n(t):e(s)})})}getDemandedOptions(){return It([],0),Re(this,Ae,"f").demandedOptions}getDemandedCommands(){return It([],0),Re(this,Ae,"f").demandedCommands}getDeprecatedOptions(){return It([],0),Re(this,Ae,"f").deprecatedOptions}getDetectLocale(){return Re(this,fe,"f")}getExitProcess(){return Re(this,pe,"f")}getGroups(){return Object.assign({},Re(this,me,"f"),Re(this,ke,"f"))}getHelp(){if(He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const t=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}const t=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}return Promise.resolve(Re(this,Ne,"f").help())}getOptions(){return Re(this,Ae,"f")}getStrict(){return Re(this,$e,"f")}getStrictCommands(){return Re(this,Pe,"f")}getStrictOptions(){return Re(this,Ie,"f")}global(t,e){return It("<string|array> [boolean]",[t,e],arguments.length),t=[].concat(t),!1!==e?Re(this,Ae,"f").local=Re(this,Ae,"f").local.filter(e=>-1===t.indexOf(e)):t.forEach(t=>{Re(this,Ae,"f").local.includes(t)||Re(this,Ae,"f").local.push(t)}),this}group(t,e){It("<string|array> <string>",[t,e],arguments.length);const n=Re(this,ke,"f")[e]||Re(this,me,"f")[e];Re(this,ke,"f")[e]&&delete Re(this,ke,"f")[e];const s={};return Re(this,me,"f")[e]=(n||[]).concat(t).filter(t=>!s[t]&&(s[t]=!0)),this}hide(t){return It("<string>",[t],arguments.length),Re(this,Ae,"f").hiddenOptions.push(t),this}implies(t,e){return It("<string|object> [number|string|array]",[t,e],arguments.length),Re(this,ze,"f").implies(t,e),this}locale(t){return It("[string]",[t],arguments.length),void 0===t?(this[Qe](),Re(this,Se,"f").y18n.getLocale()):(He(this,fe,!1,"f"),Re(this,Se,"f").y18n.setLocale(t),this)}middleware(t,e,n){return Re(this,Fe,"f").addMiddleware(t,!!e,n)}nargs(t,e){return It("<string|object|array> [number]",[t,e],arguments.length),this[nn](this.nargs.bind(this),"narg",t,e),this}normalize(t){return It("<array|string>",[t],arguments.length),this[en]("normalize",t),this}number(t){return It("<array|string>",[t],arguments.length),this[en]("number",t),this[Bn](t),this}option(t,e){if(It("<string|object> [object]",[t,e],arguments.length),"object"==typeof t)Object.keys(t).forEach(e=>{this.options(e,t[e])});else{"object"!=typeof e&&(e={}),this[Bn](t),!Re(this,Le,"f")||"version"!==t&&"version"!==(null==e?void 0:e.alias)||this[qe](['"version" is a reserved word.',"Please do one of the following:",'- Disable version with `yargs.version(false)` if using "version" as an option',"- Use the built-in `yargs.version` method instead (if applicable)","- Use a different option key","https://yargs.js.org/docs/#api-reference-version"].join("\n"),void 0,"versionWarning"),Re(this,Ae,"f").key[t]=!0,e.alias&&this.alias(t,e.alias);const n=e.deprecate||e.deprecated;n&&this.deprecateOption(t,n);const s=e.demand||e.required||e.require;s&&this.demand(t,s),e.demandOption&&this.demandOption(t,"string"==typeof e.demandOption?e.demandOption:void 0),e.conflicts&&this.conflicts(t,e.conflicts),"default"in e&&this.default(t,e.default),void 0!==e.implies&&this.implies(t,e.implies),void 0!==e.nargs&&this.nargs(t,e.nargs),e.config&&this.config(t,e.configParser),e.normalize&&this.normalize(t),e.choices&&this.choices(t,e.choices),e.coerce&&this.coerce(t,e.coerce),e.group&&this.group(t,e.group),(e.boolean||"boolean"===e.type)&&(this.boolean(t),e.alias&&this.boolean(e.alias)),(e.array||"array"===e.type)&&(this.array(t),e.alias&&this.array(e.alias)),(e.number||"number"===e.type)&&(this.number(t),e.alias&&this.number(e.alias)),(e.string||"string"===e.type)&&(this.string(t),e.alias&&this.string(e.alias)),(e.count||"count"===e.type)&&this.count(t),"boolean"==typeof e.global&&this.global(t,e.global),e.defaultDescription&&(Re(this,Ae,"f").defaultDescription[t]=e.defaultDescription),e.skipValidation&&this.skipValidation(t);const i=e.describe||e.description||e.desc,u=Re(this,Ne,"f").getDescriptions();Object.prototype.hasOwnProperty.call(u,t)&&"string"!=typeof i||this.describe(t,i),e.hidden&&this.hide(t),e.requiresArg&&this.requiresArg(t)}return this}options(t,e){return this.option(t,e)}parse(t,e,n){It("[string|array] [function|boolean|object] [function]",[t,e,n],arguments.length),this[Ve](),void 0===t&&(t=Re(this,_e,"f")),"object"==typeof e&&(He(this,je,e,"f"),e=n),"function"==typeof e&&(He(this,Oe,e,"f"),e=!1),e||He(this,_e,t,"f"),Re(this,Oe,"f")&&He(this,pe,!1,"f");const s=this[bn](t,!!e),i=this.parsed;return Re(this,De,"f").setParsed(this.parsed),Mt(s)?s.then(t=>(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),t,Re(this,ve,"f")),t)).catch(t=>{throw Re(this,Oe,"f")&&Re(this,Oe,"f")(t,this.parsed.argv,Re(this,ve,"f")),t}).finally(()=>{this[an](),this.parsed=i}):(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),s,Re(this,ve,"f")),this[an](),this.parsed=i,s)}parseAsync(t,e,n){const s=this.parse(t,e,n);return Mt(s)?s:Promise.resolve(s)}parseSync(t,e,n){const s=this.parse(t,e,n);if(Mt(s))throw new St(".parseSync() must not be used with asynchronous builders, handlers, or middleware");return s}parserConfiguration(t){return It("<object>",[t],arguments.length),He(this,we,t,"f"),this}pkgConf(t,e){It("<string> [string]",[t,e],arguments.length);let n=null;const s=this[tn](e||Re(this,oe,"f"));return s[t]&&"object"==typeof s[t]&&(n=ie(s[t],e||Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(n)),this}positional(t,e){It("<string> <object>",[t,e],arguments.length);const n=["default","defaultDescription","implies","normalize","choices","conflicts","coerce","type","describe","desc","description","alias"];e=qt(e,(t,e)=>!("type"===t&&!["string","number","boolean"].includes(e))&&n.includes(t));const s=Re(this,ae,"f").fullCommands[Re(this,ae,"f").fullCommands.length-1],i=s?Re(this,re,"f").cmdToParseOptions(s):{array:[],alias:{},default:{},demand:{}};return _t(i).forEach(n=>{const s=i[n];Array.isArray(s)?-1!==s.indexOf(t)&&(e[n]=!0):s[t]&&!(n in e)&&(e[n]=s[t])}),this.group(t,Re(this,Ne,"f").getPositionalGroupName()),this.option(t,e)}recommendCommands(t=!0){return It("[boolean]",[t],arguments.length),He(this,Me,t,"f"),this}required(t,e,n){return this.demand(t,e,n)}require(t,e,n){return this.demand(t,e,n)}requiresArg(t){return It("<array|string|object> [number]",[t],arguments.length),"string"==typeof t&&Re(this,Ae,"f").narg[t]||this[nn](this.requiresArg.bind(this),"narg",t,NaN),this}showCompletionScript(t,e){return It("[string] [string]",[t,e],arguments.length),t=t||this.$0,Re(this,be,"f").log(Re(this,De,"f").generateCompletionScript(t,e||Re(this,le,"f")||"completion")),this}showHelp(t){if(It("[string|function]",[t],arguments.length),He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const e=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}const e=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}return Re(this,Ne,"f").showHelp(t),this}scriptName(t){return this.customScriptName=!0,this.$0=t,this}showHelpOnFail(t,e){return It("[boolean|string] [string]",[t,e],arguments.length),Re(this,Ne,"f").showHelpOnFail(t,e),this}showVersion(t){return It("[string|function]",[t],arguments.length),Re(this,Ne,"f").showVersion(t),this}skipValidation(t){return It("<array|string>",[t],arguments.length),this[en]("skipValidation",t),this}strict(t){return It("[boolean]",[t],arguments.length),He(this,$e,!1!==t,"f"),this}strictCommands(t){return It("[boolean]",[t],arguments.length),He(this,Pe,!1!==t,"f"),this}strictOptions(t){return It("[boolean]",[t],arguments.length),He(this,Ie,!1!==t,"f"),this}string(t){return It("<array|string>",[t],arguments.length),this[en]("string",t),this[Bn](t),this}terminalWidth(){return It([],0),Re(this,Se,"f").process.stdColumns}updateLocale(t){return this.updateStrings(t)}updateStrings(t){return It("<object>",[t],arguments.length),He(this,fe,!1,"f"),Re(this,Se,"f").y18n.updateLocale(t),this}usage(t,e,n,s){if(It("<string|null|undefined> [string|boolean] [function|object] [function]",[t,e,n,s],arguments.length),void 0!==e){if(xt(t,null,Re(this,Se,"f")),(t||"").match(/^\$0( |$)/))return this.command(t,e,n,s);throw new St(".usage() description must start with $0 if being used as alias for .command()")}return Re(this,Ne,"f").usage(t),this}usageConfiguration(t){return It("<object>",[t],arguments.length),He(this,We,t,"f"),this}version(t,e,n){const s="version";if(It("[boolean|string] [string] [string]",[t,e,n],arguments.length),Re(this,Le,"f")&&(this[Ge](Re(this,Le,"f")),Re(this,Ne,"f").version(void 0),He(this,Le,null,"f")),0===arguments.length)n=this[Ze](),t=s;else if(1===arguments.length){if(!1===t)return this;n=t,t=s}else 2===arguments.length&&(n=e,e=void 0);return He(this,Le,"string"==typeof t?t:s,"f"),e=e||Re(this,Ne,"f").deferY18nLookup("Show version number"),Re(this,Ne,"f").version(n||void 0),this.boolean(Re(this,Le,"f")),this.describe(Re(this,Le,"f"),e),this}wrap(t){return It("<number|null|undefined>",[t],arguments.length),Re(this,Ne,"f").wrap(t),this}[(re=new WeakMap,oe=new WeakMap,ae=new WeakMap,De=new WeakMap,le=new WeakMap,ce=new WeakMap,he=new WeakMap,fe=new WeakMap,de=new WeakMap,pe=new WeakMap,ge=new WeakMap,Fe=new WeakMap,me=new WeakMap,Ce=new WeakMap,Ee=new WeakMap,ye=new WeakMap,be=new WeakMap,ve=new WeakMap,Ae=new WeakMap,Be=new WeakMap,we=new WeakMap,Oe=new WeakMap,je=new WeakMap,xe=new WeakMap,ke=new WeakMap,_e=new WeakMap,Me=new WeakMap,Se=new WeakMap,$e=new WeakMap,Pe=new WeakMap,Ie=new WeakMap,Ne=new WeakMap,We=new WeakMap,Le=new WeakMap,ze=new WeakMap,Te)](t){if(!t._||!t["--"])return t;t._.push.apply(t._,t["--"]);try{delete t["--"]}catch(t){}return t}[Ue](){return{log:(...t)=>{this[Fn]()||console.log(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")},error:(...t)=>{this[Fn]()||console.error(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")}}}[Ge](t){_t(Re(this,Ae,"f")).forEach(e=>{if("configObjects"===e)return;const n=Re(this,Ae,"f")[e];Array.isArray(n)?n.includes(t)&&n.splice(n.indexOf(t),1):"object"==typeof n&&delete n[t]}),delete Re(this,Ne,"f").getDescriptions()[t]}[qe](t,e,n){Re(this,de,"f")[n]||(Re(this,Se,"f").process.emitWarning(t,e),Re(this,de,"f")[n]=!0)}[Ve](){Re(this,ge,"f").push({options:Re(this,Ae,"f"),configObjects:Re(this,Ae,"f").configObjects.slice(0),exitProcess:Re(this,pe,"f"),groups:Re(this,me,"f"),strict:Re(this,$e,"f"),strictCommands:Re(this,Pe,"f"),strictOptions:Re(this,Ie,"f"),completionCommand:Re(this,le,"f"),output:Re(this,ve,"f"),exitError:Re(this,he,"f"),hasOutput:Re(this,Ce,"f"),parsed:this.parsed,parseFn:Re(this,Oe,"f"),parseContext:Re(this,je,"f")}),Re(this,Ne,"f").freeze(),Re(this,ze,"f").freeze(),Re(this,re,"f").freeze(),Re(this,Fe,"f").freeze()}[Ye](){let t,e="";return t=/\b(node|iojs|electron)(\.exe)?$/.test(Re(this,Se,"f").process.argv()[0])?Re(this,Se,"f").process.argv().slice(1,2):Re(this,Se,"f").process.argv().slice(0,1),e=t.map(t=>{const e=this[En](Re(this,oe,"f"),t);return t.match(/^(\/|([a-zA-Z]:)?\\)/)&&e.length<t.length?e:t}).join(" ").trim(),Re(this,Se,"f").getEnv("_")&&Re(this,Se,"f").getProcessArgvBin()===Re(this,Se,"f").getEnv("_")&&(e=Re(this,Se,"f").getEnv("_").replace(`${Re(this,Se,"f").path.dirname(Re(this,Se,"f").process.execPath())}/`,"")),e}[Ke](){return Re(this,we,"f")}[Je](){return Re(this,We,"f")}[Qe](){if(!Re(this,fe,"f"))return;const t=Re(this,Se,"f").getEnv("LC_ALL")||Re(this,Se,"f").getEnv("LC_MESSAGES")||Re(this,Se,"f").getEnv("LANG")||Re(this,Se,"f").getEnv("LANGUAGE")||"en_US";this.locale(t.replace(/[.:].*/,""))}[Ze](){return this[tn]().version||"unknown"}[Xe](t){const e=t["--"]?t["--"]:t._;for(let t,n=0;void 0!==(t=e[n]);n++)Re(this,Se,"f").Parser.looksLikeNumber(t)&&Number.isSafeInteger(Math.floor(parseFloat(`${t}`)))&&(e[n]=Number(t));return t}[tn](t){const e=t||"*";if(Re(this,xe,"f")[e])return Re(this,xe,"f")[e];let n={};try{let e=t||Re(this,Se,"f").mainFilename;Re(this,Se,"f").path.extname(e)&&(e=Re(this,Se,"f").path.dirname(e));const s=Re(this,Se,"f").findUp(e,(t,e)=>e.includes("package.json")?"package.json":void 0);xt(s,void 0,Re(this,Se,"f")),n=JSON.parse(Re(this,Se,"f").readFileSync(s,"utf8"))}catch(t){}return Re(this,xe,"f")[e]=n||{},Re(this,xe,"f")[e]}[en](t,e){(e=[].concat(e)).forEach(e=>{e=this[rn](e),Re(this,Ae,"f")[t].push(e)})}[nn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=n})}[sn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=(Re(this,Ae,"f")[t][e]||[]).concat(n)})}[un](t,e,n,s,i){if(Array.isArray(n))n.forEach(e=>{t(e,s)});else if((t=>"object"==typeof t)(n))for(const e of _t(n))t(e,n[e]);else i(e,this[rn](n),s)}[rn](t){return"__proto__"===t?"___proto___":t}[on](t,e){return this[nn](this[on].bind(this),"key",t,e),this}[an](){var t,e,n,s,i,u,r,o,a,D,l,c;const h=Re(this,ge,"f").pop();let f;xt(h,void 0,Re(this,Se,"f")),t=this,e=this,n=this,s=this,i=this,u=this,r=this,o=this,a=this,D=this,l=this,c=this,({options:{set value(e){He(t,Ae,e,"f")}}.value,configObjects:f,exitProcess:{set value(t){He(e,pe,t,"f")}}.value,groups:{set value(t){He(n,me,t,"f")}}.value,output:{set value(t){He(s,ve,t,"f")}}.value,exitError:{set value(t){He(i,he,t,"f")}}.value,hasOutput:{set value(t){He(u,Ce,t,"f")}}.value,parsed:this.parsed,strict:{set value(t){He(r,$e,t,"f")}}.value,strictCommands:{set value(t){He(o,Pe,t,"f")}}.value,strictOptions:{set value(t){He(a,Ie,t,"f")}}.value,completionCommand:{set value(t){He(D,le,t,"f")}}.value,parseFn:{set value(t){He(l,Oe,t,"f")}}.value,parseContext:{set value(t){He(c,je,t,"f")}}.value}=h),Re(this,Ae,"f").configObjects=f,Re(this,Ne,"f").unfreeze(),Re(this,ze,"f").unfreeze(),Re(this,re,"f").unfreeze(),Re(this,Fe,"f").unfreeze()}[Dn](t,e){return Ht(e,e=>(t(e),e))}getInternalMethods(){return{getCommandInstance:this[ln].bind(this),getContext:this[cn].bind(this),getHasOutput:this[hn].bind(this),getLoggerInstance:this[fn].bind(this),getParseContext:this[dn].bind(this),getParserConfiguration:this[Ke].bind(this),getUsageConfiguration:this[Je].bind(this),getUsageInstance:this[pn].bind(this),getValidationInstance:this[gn].bind(this),hasParseCallback:this[Fn].bind(this),isGlobalContext:this[mn].bind(this),postProcess:this[Cn].bind(this),reset:this[yn].bind(this),runValidation:this[vn].bind(this),runYargsParserAndExecuteCommands:this[bn].bind(this),setHasOutput:this[An].bind(this)}}[ln](){return Re(this,re,"f")}[cn](){return Re(this,ae,"f")}[hn](){return Re(this,Ce,"f")}[fn](){return Re(this,be,"f")}[dn](){return Re(this,je,"f")||{}}[pn](){return Re(this,Ne,"f")}[gn](){return Re(this,ze,"f")}[Fn](){return!!Re(this,Oe,"f")}[mn](){return Re(this,ye,"f")}[Cn](t,e,n,s){if(n)return t;if(Mt(t))return t;e||(t=this[Te](t));return(this[Ke]()["parse-positional-numbers"]||void 0===this[Ke]()["parse-positional-numbers"])&&(t=this[Xe](t)),s&&(t=zt(t,this,Re(this,Fe,"f").getMiddleware(),!1)),t}[yn](t={}){He(this,Ae,Re(this,Ae,"f")||{},"f");const e={};e.local=Re(this,Ae,"f").local||[],e.configObjects=Re(this,Ae,"f").configObjects||[];const n={};e.local.forEach(e=>{n[e]=!0,(t[e]||[]).forEach(t=>{n[t]=!0})}),Object.assign(Re(this,ke,"f"),Object.keys(Re(this,me,"f")).reduce((t,e)=>{const s=Re(this,me,"f")[e].filter(t=>!(t in n));return s.length>0&&(t[e]=s),t},{})),He(this,me,{},"f");return["array","boolean","string","skipValidation","count","normalize","number","hiddenOptions"].forEach(t=>{e[t]=(Re(this,Ae,"f")[t]||[]).filter(t=>!n[t])}),["narg","key","alias","default","defaultDescription","config","choices","demandedOptions","demandedCommands","deprecatedOptions"].forEach(t=>{e[t]=qt(Re(this,Ae,"f")[t],t=>!n[t])}),e.envPrefix=Re(this,Ae,"f").envPrefix,He(this,Ae,e,"f"),He(this,Ne,Re(this,Ne,"f")?Re(this,Ne,"f").reset(n):Kt(this,Re(this,Se,"f")),"f"),He(this,ze,Re(this,ze,"f")?Re(this,ze,"f").reset(n):function(t,e,n){const s=n.y18n.__,i=n.y18n.__n,u={nonOptionCount:function(n){const s=t.getDemandedCommands(),u=n._.length+(n["--"]?n["--"].length:0)-t.getInternalMethods().getContext().commands.length;s._&&(u<s._.min||u>s._.max)&&(u<s._.min?void 0!==s._.minMsg?e.fail(s._.minMsg?s._.minMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.min.toString()):null):e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",u,u.toString(),s._.min.toString())):u>s._.max&&(void 0!==s._.maxMsg?e.fail(s._.maxMsg?s._.maxMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.max.toString()):null):e.fail(i("Too many non-option arguments: got %s, maximum of %s","Too many non-option arguments: got %s, maximum of %s",u,u.toString(),s._.max.toString()))))},positionalCount:function(t,n){n<t&&e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",n,n+"",t+""))},requiredArguments:function(t,n){let s=null;for(const e of Object.keys(n))Object.prototype.hasOwnProperty.call(t,e)&&void 0!==t[e]||(s=s||{},s[e]=n[e]);if(s){const t=[];for(const e of Object.keys(s)){const n=s[e];n&&t.indexOf(n)<0&&t.push(n)}const n=t.length?`\n${t.join("\n")}`:"";e.fail(i("Missing required argument: %s","Missing required arguments: %s",Object.keys(s).length,Object.keys(s).join(", ")+n))}},unknownArguments:function(n,s,r,o,a=!0){var D;const l=t.getInternalMethods().getCommandInstance().getCommands(),c=[],h=t.getInternalMethods().getContext();if(Object.keys(n).forEach(e=>{ee.includes(e)||Object.prototype.hasOwnProperty.call(r,e)||Object.prototype.hasOwnProperty.call(t.getInternalMethods().getParseContext(),e)||u.isValidAndSomeAliasIsNotNew(e,s)||c.push(e)}),a&&(h.commands.length>0||l.length>0||o)&&n._.slice(h.commands.length).forEach(t=>{l.includes(""+t)||c.push(""+t)}),a){const e=(null===(D=t.getDemandedCommands()._)||void 0===D?void 0:D.max)||0,s=h.commands.length+e;s<n._.length&&n._.slice(s).forEach(t=>{t=String(t),h.commands.includes(t)||c.includes(t)||c.push(t)})}c.length&&e.fail(i("Unknown argument: %s","Unknown arguments: %s",c.length,c.map(t=>t.trim()?t:`"${t}"`).join(", ")))},unknownCommands:function(n){const s=t.getInternalMethods().getCommandInstance().getCommands(),u=[],r=t.getInternalMethods().getContext();return(r.commands.length>0||s.length>0)&&n._.slice(r.commands.length).forEach(t=>{s.includes(""+t)||u.push(""+t)}),u.length>0&&(e.fail(i("Unknown command: %s","Unknown commands: %s",u.length,u.join(", "))),!0)},isValidAndSomeAliasIsNotNew:function(e,n){if(!Object.prototype.hasOwnProperty.call(n,e))return!1;const s=t.parsed.newAliases;return[e,...n[e]].some(t=>!Object.prototype.hasOwnProperty.call(s,t)||!s[e])},limitedChoices:function(n){const i=t.getOptions(),u={};if(!Object.keys(i.choices).length)return;Object.keys(n).forEach(t=>{-1===ee.indexOf(t)&&Object.prototype.hasOwnProperty.call(i.choices,t)&&[].concat(n[t]).forEach(e=>{-1===i.choices[t].indexOf(e)&&void 0!==e&&(u[t]=(u[t]||[]).concat(e))})});const r=Object.keys(u);if(!r.length)return;let o=s("Invalid values:");r.forEach(t=>{o+=`\n ${s("Argument: %s, Given: %s, Choices: %s",t,e.stringifiedValues(u[t]),e.stringifiedValues(i.choices[t]))}`}),e.fail(o)}};let r={};function o(t,e){const n=Number(e);return"number"==typeof(e=isNaN(n)?e:n)?e=t._.length>=e:e.match(/^--no-.+/)?(e=e.match(/^--no-(.+)/)[1],e=!Object.prototype.hasOwnProperty.call(t,e)):e=Object.prototype.hasOwnProperty.call(t,e),e}u.implies=function(e,s){It("<string|object> [array|number|string]",[e,s],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.implies(t,e[t])}):(t.global(e),r[e]||(r[e]=[]),Array.isArray(s)?s.forEach(t=>u.implies(e,t)):(xt(s,void 0,n),r[e].push(s)))},u.getImplied=function(){return r},u.implications=function(t){const n=[];if(Object.keys(r).forEach(e=>{const s=e;(r[e]||[]).forEach(e=>{let i=s;const u=e;i=o(t,i),e=o(t,e),i&&!e&&n.push(` ${s} -> ${u}`)})}),n.length){let t=`${s("Implications failed:")}\n`;n.forEach(e=>{t+=e}),e.fail(t)}};let a={};u.conflicts=function(e,n){It("<string|object> [array|string]",[e,n],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.conflicts(t,e[t])}):(t.global(e),a[e]||(a[e]=[]),Array.isArray(n)?n.forEach(t=>u.conflicts(e,t)):a[e].push(n))},u.getConflicting=()=>a,u.conflicting=function(i){Object.keys(i).forEach(t=>{a[t]&&a[t].forEach(n=>{n&&void 0!==i[t]&&void 0!==i[n]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,n))})}),t.getInternalMethods().getParserConfiguration()["strip-dashed"]&&Object.keys(a).forEach(t=>{a[t].forEach(u=>{u&&void 0!==i[n.Parser.camelCase(t)]&&void 0!==i[n.Parser.camelCase(u)]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,u))})})},u.recommendCommands=function(t,n){n=n.sort((t,e)=>e.length-t.length);let i=null,u=1/0;for(let e,s=0;void 0!==(e=n[s]);s++){const n=te(t,e);n<=3&&n<u&&(u=n,i=e)}i&&e.fail(s("Did you mean %s?",i))},u.reset=function(t){return r=qt(r,e=>!t[e]),a=qt(a,e=>!t[e]),u};const D=[];return u.freeze=function(){D.push({implied:r,conflicting:a})},u.unfreeze=function(){const t=D.pop();xt(t,void 0,n),({implied:r,conflicting:a}=t)},u}(this,Re(this,Ne,"f"),Re(this,Se,"f")),"f"),He(this,re,Re(this,re,"f")?Re(this,re,"f").reset():function(t,e,n,s){return new Tt(t,e,n,s)}(Re(this,Ne,"f"),Re(this,ze,"f"),Re(this,Fe,"f"),Re(this,Se,"f")),"f"),Re(this,De,"f")||He(this,De,function(t,e,n,s){return new Xt(t,e,n,s)}(this,Re(this,Ne,"f"),Re(this,re,"f"),Re(this,Se,"f")),"f"),Re(this,Fe,"f").reset(),He(this,le,null,"f"),He(this,ve,"","f"),He(this,he,null,"f"),He(this,Ce,!1,"f"),this.parsed=!1,this}[En](t,e){return Re(this,Se,"f").path.relative(t,e)}[bn](t,e,n,s=0,i=!1){var u,r,o,a;let D=!!n||i;t=t||Re(this,_e,"f"),Re(this,Ae,"f").__=Re(this,Se,"f").y18n.__,Re(this,Ae,"f").configuration=this[Ke]();const l=!!Re(this,Ae,"f").configuration["populate--"],c=Object.assign({},Re(this,Ae,"f").configuration,{"populate--":!0}),h=Re(this,Se,"f").Parser.detailed(t,Object.assign({},Re(this,Ae,"f"),{configuration:{"parse-positional-numbers":!1,...c}})),f=Object.assign(h.argv,Re(this,je,"f"));let d;const p=h.aliases;let g=!1,F=!1;Object.keys(f).forEach(t=>{t===Re(this,Ee,"f")&&f[t]?g=!0:t===Re(this,Le,"f")&&f[t]&&(F=!0)}),f.$0=this.$0,this.parsed=h,0===s&&Re(this,Ne,"f").clearCachedHelpMessage();try{if(this[Qe](),e)return this[Cn](f,l,!!n,!1);if(Re(this,Ee,"f")){[Re(this,Ee,"f")].concat(p[Re(this,Ee,"f")]||[]).filter(t=>t.length>1).includes(""+f._[f._.length-1])&&(f._.pop(),g=!0)}He(this,ye,!1,"f");const c=Re(this,re,"f").getCommands(),m=!!(null===(u=Re(this,De,"f"))||void 0===u?void 0:u.completionKey)&&[null===(r=Re(this,De,"f"))||void 0===r?void 0:r.completionKey,...null!==(a=this.getAliases()[null===(o=Re(this,De,"f"))||void 0===o?void 0:o.completionKey])&&void 0!==a?a:[]].some(t=>Object.prototype.hasOwnProperty.call(f,t)),C=g||m||i;if(f._.length){if(c.length){let t;for(let e,u=s||0;void 0!==f._[u];u++){if(e=String(f._[u]),c.includes(e)&&e!==Re(this,le,"f")){const t=Re(this,re,"f").runCommand(e,this,h,u+1,i,g||F||i);return this[Cn](t,l,!!n,!1)}if(!t&&e!==Re(this,le,"f")){t=e;break}}!Re(this,re,"f").hasDefaultCommand()&&Re(this,Me,"f")&&t&&!C&&Re(this,ze,"f").recommendCommands(t,c)}Re(this,le,"f")&&f._.includes(Re(this,le,"f"))&&!m&&(Re(this,pe,"f")&&Vt(!0),this.showCompletionScript(),this.exit(0))}if(Re(this,re,"f").hasDefaultCommand()&&!C){const t=Re(this,re,"f").runCommand(null,this,h,0,i,g||F||i);return this[Cn](t,l,!!n,!1)}if(m){Re(this,pe,"f")&&Vt(!0);const e=(t=[].concat(t)).slice(t.indexOf(`--${Re(this,De,"f").completionKey}`)+1);return Re(this,De,"f").getCompletion(e,(t,e)=>{if(t)throw new St(t.message);(e||[]).forEach(t=>{Re(this,be,"f").log(t)}),this.exit(0)}),this[Cn](f,!l,!!n,!1)}if(Re(this,Ce,"f")||(g?(Re(this,pe,"f")&&Vt(!0),D=!0,this.showHelp(t=>{Re(this,be,"f").log(t),this.exit(0)})):F&&(Re(this,pe,"f")&&Vt(!0),D=!0,Re(this,Ne,"f").showVersion("log"),this.exit(0))),!D&&Re(this,Ae,"f").skipValidation.length>0&&(D=Object.keys(f).some(t=>Re(this,Ae,"f").skipValidation.indexOf(t)>=0&&!0===f[t])),!D){if(h.error)throw new St(h.error.message);if(!m){const t=this[vn](p,{},h.error);n||(d=zt(f,this,Re(this,Fe,"f").getMiddleware(),!0)),d=this[Dn](t,null!=d?d:f),Mt(d)&&!n&&(d=d.then(()=>zt(f,this,Re(this,Fe,"f").getMiddleware(),!1)))}}}catch(t){if(!(t instanceof St))throw t;Re(this,Ne,"f").fail(t.message,t)}return this[Cn](null!=d?d:f,l,!!n,!0)}[vn](t,e,n,s){const i={...this.getDemandedOptions()};return u=>{if(n)throw new St(n.message);Re(this,ze,"f").nonOptionCount(u),Re(this,ze,"f").requiredArguments(u,i);let r=!1;Re(this,Pe,"f")&&(r=Re(this,ze,"f").unknownCommands(u)),Re(this,$e,"f")&&!r?Re(this,ze,"f").unknownArguments(u,t,e,!!s):Re(this,Ie,"f")&&Re(this,ze,"f").unknownArguments(u,t,{},!1,!1),Re(this,ze,"f").limitedChoices(u),Re(this,ze,"f").implications(u),Re(this,ze,"f").conflicting(u)}}[An](){He(this,Ce,!0,"f")}[Bn](t){if("string"==typeof t)Re(this,Ae,"f").key[t]=!0;else for(const e of t)Re(this,Ae,"f").key[e]=!0}}const On=(jn=jt,(t=[],e=jn.process.cwd(),n)=>{const s=new wn(t,e,n,jn);return Object.defineProperty(s,"argv",{get:()=>s.parse(),enumerable:!0}),s.help(),s.version(),s});var jn;const xn=await On(function(t){return t.slice(Ft()+1)}(f.argv)).config(y()).option("issue-number",{alias:"i",description:"GitHub issue number to process",type:"number",demandOption:!0}).option("planning-model",{alias:"m",description:"LLM for planning code changes. Must use llmlite format: provider/model (e.g., openai/gpt-4.1, azure/gpt-4.1, gemini/gemini-2.5-pro, anthropic/claude-4-sonnet-latest, bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0, vertex/gemini-2.5-pro, xai/grok-4)",type:"string"}).option("two-staged-planning",{alias:"p",description:"Enable two-staged planning: first select relevant files, then generate detailed implementation plans (increases LLM cost but improves code quality)",type:"boolean",default:!0}).option("reasoning-effort",{alias:"e",description:"Constrains effort on reasoning for planning models. Supported values are low, medium, and high.",type:"string",choices:["low","medium","high"]}).option("coding-tool",{alias:"c",description:"Coding tool to use for making changes",type:"string",choices:["aider","claude-code","codex-cli","gemini-cli"],default:b}).option("aider-extra-args",{alias:"a",description:'Additional arguments to pass to Aider ("--yes-always --no-check-update --no-show-release-notes" is always applied)',type:"string",default:v}).option("claude-code-extra-args",{description:'Additional arguments to pass to Claude Code ("--dangerously-skip-permissions" is always applied, "--print" is applied only in CI)',type:"string",default:A}).option("codex-extra-args",{description:"Additional arguments to pass to Codex CLI (nothing is always applied)",type:"string",default:B}).option("gemini-extra-args",{description:'Additional arguments to pass to Gemini CLI ("--yolo" is always applied)',type:"string",default:w}).option("repomix-extra-args",{alias:"r",description:"Additional arguments for repomix when generating context",type:"string",default:O}).option("test-command",{alias:"t",description:"Command to run after the coding tool applies changes. If it fails, the assistant will try to fix it.",type:"string"}).option("max-test-attempts",{description:"Maximum number of attempts to fix test failures",type:"number",default:j}).option("dry-run",{alias:"d",description:"Run without making actual changes (no branch creation, no PR)",type:"boolean",default:!1}).option("remove-pattern",{description:"RegExp pattern to remove from issue and PR descriptions",type:"string"}).option("no-branch",{alias:"n",description:"Do not create a new branch, commit changes directly to the base branch",type:"boolean",default:!1}).option("node-runtime",{description:"Node.js runtime to use for running tools",type:"string",choices:["node","bun","npx","bunx"],default:x}).option("working-dir",{alias:"w",description:"Working directory path for commands",type:"string"}).version(function(){let e=import.meta.dir||u.dirname(new URL(import.meta.url).pathname);for(;!t.existsSync(u.join(e,"package.json"));)e=u.dirname(e);return JSON.parse(t.readFileSync(u.join(e,"package.json"),"utf8")).version}()).help().argv;xn["working-dir"]&&(f.chdir(xn["working-dir"]),console.info(`Changed working directory to: ${f.cwd()}`));const kn=k(xn["node-runtime"]);await _({aiderExtraArgs:xn["aider-extra-args"],claudeCodeExtraArgs:xn["claude-code-extra-args"],codexExtraArgs:xn["codex-extra-args"],geminiExtraArgs:xn["gemini-extra-args"],codingTool:xn["coding-tool"],dryRun:xn["dry-run"],noBranch:xn["no-branch"],nodeRuntime:kn,twoStagePlanning:xn["two-staged-planning"],issueNumber:xn["issue-number"],maxTestAttempts:xn["max-test-attempts"],planningModel:xn["planning-model"],reasoningEffort:xn["reasoning-effort"],repomixExtraArgs:xn["repomix-extra-args"],testCommand:xn["test-command"],removePattern:xn["remove-pattern"]});
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvY2xpdWkvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9sb29rdXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dyYXAtYW5zaS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3N0cmluZy11dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci10eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9saWIvdG9rZW5pemUtYXJnLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvcHJvY2Vzcy1hcmd2LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vYnVpbGQvbGliL3BsYXRmb3JtLXNoaW1zL25vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2xpYi9wbGF0Zm9ybS1zaGltcy9lc20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9lc2NhbGFkZS9zeW5jL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdHlwaW5ncy9jb21tb24tdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2lzLXByb21pc2UuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3llcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvcGFyc2UtY29tbWFuZC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvYXJnc2VydC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvbWlkZGxld2FyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21tYW5kLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi95YXJncy1mYWN0b3J5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9vYmotZmlsdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9zZXQtYmxvY2tpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3VzYWdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLXRlbXBsYXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbGV2ZW5zaHRlaW4uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3ZhbGlkYXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2FwcGx5LWV4dGVuZHMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXgubWpzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmV4cG9ydCBjbGFzcyBVSSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMud2lkdGggPSBvcHRzLndpZHRoO1xuICAgICAgICB0aGlzLndyYXAgPSAoX2EgPSBvcHRzLndyYXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBzcGFuKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHRoaXMuZGl2KC4uLmFyZ3MpO1xuICAgICAgICBjb2xzLnNwYW4gPSB0cnVlO1xuICAgIH1cbiAgICByZXNldE91dHB1dCgpIHtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIGRpdiguLi5hcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXYoJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyYXAgJiYgdGhpcy5zaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TGF5b3V0RFNMKGFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHMgPSBhcmdzLm1hcChhcmcgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sRnJvbVN0cmluZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm93cy5wdXNoKGNvbHMpO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG4gICAgc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAvW1xcdFxcbl0vLnRlc3QoYXJnc1swXSk7XG4gICAgfVxuICAgIGFwcGx5TGF5b3V0RFNMKHN0cikge1xuICAgICAgICBjb25zdCByb3dzID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAocm93ID0+IHJvdy5zcGxpdCgnXFx0JykpO1xuICAgICAgICBsZXQgbGVmdENvbHVtbldpZHRoID0gMDtcbiAgICAgICAgLy8gc2ltcGxlIGhldXJpc3RpYyBmb3IgbGF5b3V0LCBtYWtlIHN1cmUgdGhlXG4gICAgICAgIC8vIHNlY29uZCBjb2x1bW4gbGluZXMgdXAgYWxvbmcgdGhlIGxlZnQtaGFuZC5cbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgdGhlIGZpcnN0IGNvbHVtbiB0byB0YWtlIHVwIG1vcmVcbiAgICAgICAgLy8gdGhhbiA1MCUgb2YgdGhlIHNjcmVlbi5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMSAmJiBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSA+IGxlZnRDb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIGxlZnRDb2x1bW5XaWR0aCA9IE1hdGgubWluKE1hdGguZmxvb3IodGhpcy53aWR0aCAqIDAuNSksIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgdGFibGU6XG4gICAgICAgIC8vICByZXBsYWNpbmcgJyAnIHdpdGggcGFkZGluZyBjYWxjdWxhdGlvbnMuXG4gICAgICAgIC8vICB1c2luZyB0aGUgYWxnb3JpdGhtaWNhbGx5IGdlbmVyYXRlZCB3aWR0aC5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXYoLi4uY29sdW1ucy5tYXAoKHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiByLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyhyKSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChpID09PSAwICYmIGNvbHVtbnMubGVuZ3RoID4gMSkgPyBsZWZ0Q29sdW1uV2lkdGggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGNvbEZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcodGV4dClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbWVhc3VyZVBhZGRpbmcoc3RyKSB7XG4gICAgICAgIC8vIG1lYXN1cmUgcGFkZGluZyB3aXRob3V0IGFuc2kgZXNjYXBlIGNvZGVzXG4gICAgICAgIGNvbnN0IG5vQW5zaSA9IG1peGluLnN0cmlwQW5zaShzdHIpO1xuICAgICAgICByZXR1cm4gWzAsIG5vQW5zaS5tYXRjaCgvXFxzKiQvKVswXS5sZW5ndGgsIDAsIG5vQW5zaS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGhdO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93VG9TdHJpbmcocm93LCBsaW5lcyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBkb24ndCBkaXNwbGF5IGFueSBsaW5lcyB3aXRoIHRoZVxuICAgICAgICAvLyBoaWRkZW4gZmxhZyBzZXQuXG4gICAgICAgIHJldHVybiBsaW5lc1xuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+ICFsaW5lLmhpZGRlbilcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRleHQpXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJvd1RvU3RyaW5nKHJvdywgbGluZXMpIHtcbiAgICAgICAgdGhpcy5yYXN0ZXJpemUocm93KS5mb3JFYWNoKChycm93LCByKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgICAgICBycm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHJvd1tjXTsgLy8gdGhlIHdpZHRoIHdpdGggcGFkZGluZy5cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwV2lkdGggPSB0aGlzLm5lZ2F0ZVBhZGRpbmcocm93W2NdKTsgLy8gdGhlIHdpZHRoIHdpdGhvdXQgcGFkZGluZy5cbiAgICAgICAgICAgICAgICBsZXQgdHMgPSBjb2w7IC8vIHRlbXBvcmFyeSBzdHJpbmcgdXNlZCBkdXJpbmcgYWxpZ25tZW50L3BhZGRpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHdyYXBXaWR0aCA+IG1peGluLnN0cmluZ1dpZHRoKGNvbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCh3cmFwV2lkdGggLSBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWxpZ24gdGhlIHN0cmluZyB3aXRoaW4gaXRzIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBpZiAocm93W2NdLmFsaWduICYmIHJvd1tjXS5hbGlnbiAhPT0gJ2xlZnQnICYmIHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbiA9IGFsaWduW3Jvd1tjXS5hbGlnbl07XG4gICAgICAgICAgICAgICAgICAgIHRzID0gZm4odHMsIHdyYXBXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaXhpbi5zdHJpbmdXaWR0aCh0cykgPCB3cmFwV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQoKHdpZHRoIHx8IDApIC0gbWl4aW4uc3RyaW5nV2lkdGgodHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXBwbHkgYm9yZGVyIGFuZCBwYWRkaW5nIHRvIHN0cmluZy5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcm93W2NdLnBhZGRpbmcgfHwgWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW2xlZnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbbGVmdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICd8ICcpO1xuICAgICAgICAgICAgICAgIHN0ciArPSB0cztcbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICcgfCcpO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW3JpZ2h0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW3JpZ2h0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHByaW9yIHJvdyBpcyBzcGFuLCB0cnkgdG8gcmVuZGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgcm93IG9uIHRoZSBwcmlvciBsaW5lLlxuICAgICAgICAgICAgICAgIGlmIChyID09PSAwICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gdGhpcy5yZW5kZXJJbmxpbmUoc3RyLCBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS5cbiAgICAgICAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0ci5yZXBsYWNlKC8gKyQvLCAnJyksXG4gICAgICAgICAgICAgICAgc3Bhbjogcm93LnNwYW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgZnVsbCAnc291cmNlJyBjYW4gcmVuZGVyIGluXG4gICAgLy8gdGhlIHRhcmdldCBsaW5lLCBkbyBzby5cbiAgICByZW5kZXJJbmxpbmUoc291cmNlLCBwcmV2aW91c0xpbmUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzb3VyY2UubWF0Y2goL14gKi8pO1xuICAgICAgICBjb25zdCBsZWFkaW5nV2hpdGVzcGFjZSA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcHJldmlvdXNMaW5lLnRleHQ7XG4gICAgICAgIGNvbnN0IHRhcmdldFRleHRXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHRhcmdldC50cmltUmlnaHQoKSk7XG4gICAgICAgIGlmICghcHJldmlvdXNMaW5lLnNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgbm90IGFwcGx5aW5nIHdyYXBwaW5nIGxvZ2ljLFxuICAgICAgICAvLyBqdXN0IGFsd2F5cyBhcHBlbmQgdG8gdGhlIHNwYW4uXG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgKyBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlIDwgdGFyZ2V0VGV4dFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnRyaW1SaWdodCgpICsgJyAnLnJlcGVhdChsZWFkaW5nV2hpdGVzcGFjZSAtIHRhcmdldFRleHRXaWR0aCkgKyBzb3VyY2UudHJpbUxlZnQoKTtcbiAgICB9XG4gICAgcmFzdGVyaXplKHJvdykge1xuICAgICAgICBjb25zdCBycm93cyA9IFtdO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSB0aGlzLmNvbHVtbldpZHRocyhyb3cpO1xuICAgICAgICBsZXQgd3JhcHBlZDtcbiAgICAgICAgLy8gd29yZCB3cmFwIGFsbCBjb2x1bW5zLCBhbmQgY3JlYXRlXG4gICAgICAgIC8vIGEgZGF0YS1zdHJ1Y3R1cmUgdGhhdCBpcyBlYXN5IHRvIHJhc3Rlcml6ZS5cbiAgICAgICAgcm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgLy8gbGVhdmUgcm9vbSBmb3IgbGVmdCBhbmQgcmlnaHQgcGFkZGluZy5cbiAgICAgICAgICAgIGNvbC53aWR0aCA9IHdpZHRoc1tjXTtcbiAgICAgICAgICAgIGlmICh0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gbWl4aW4ud3JhcChjb2wudGV4dCwgdGhpcy5uZWdhdGVQYWRkaW5nKGNvbCksIHsgaGFyZDogdHJ1ZSB9KS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gY29sLnRleHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoJy4nICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgJy4nKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goXCInXCIgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgdG9wIGFuZCBib3R0b20gcGFkZGluZy5cbiAgICAgICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbdG9wXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1tib3R0b21dIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZWQuZm9yRWFjaCgoc3RyLCByKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycm93c1tyXSkge1xuICAgICAgICAgICAgICAgICAgICBycm93cy5wdXNoKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcnJvdyA9IHJyb3dzW3JdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycm93W2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJyb3cucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcnJvdy5wdXNoKHN0cik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBycm93cztcbiAgICB9XG4gICAgbmVnYXRlUGFkZGluZyhjb2wpIHtcbiAgICAgICAgbGV0IHdyYXBXaWR0aCA9IGNvbC53aWR0aCB8fCAwO1xuICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSAoY29sLnBhZGRpbmdbbGVmdF0gfHwgMCkgKyAoY29sLnBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcFdpZHRoO1xuICAgIH1cbiAgICBjb2x1bW5XaWR0aHMocm93KSB7XG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGggfHwgbWl4aW4uc3RyaW5nV2lkdGgoY29sLnRleHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVuc2V0ID0gcm93Lmxlbmd0aDtcbiAgICAgICAgbGV0IHJlbWFpbmluZ1dpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgLy8gY29sdW1uIHdpZHRocyBjYW4gYmUgc2V0IGluIGNvbmZpZy5cbiAgICAgICAgY29uc3Qgd2lkdGhzID0gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC53aWR0aCkge1xuICAgICAgICAgICAgICAgIHVuc2V0LS07XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gY29sLndpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW55IHVuc2V0IHdpZHRocyBzaG91bGQgYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgY29uc3QgdW5zZXRXaWR0aCA9IHVuc2V0ID8gTWF0aC5mbG9vcihyZW1haW5pbmdXaWR0aCAvIHVuc2V0KSA6IDA7XG4gICAgICAgIHJldHVybiB3aWR0aHMubWFwKCh3LCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAodyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHVuc2V0V2lkdGgsIF9taW5XaWR0aChyb3dbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRCb3JkZXIoY29sLCB0cywgc3R5bGUpIHtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICBpZiAoL1suJ10tK1suJ10vLnRlc3QodHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRzLnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyAgJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuLy8gY2FsY3VsYXRlcyB0aGUgbWluaW11bSB3aWR0aCBvZlxuLy8gYSBjb2x1bW4sIGJhc2VkIG9uIHBhZGRpbmcgcHJlZmVyZW5jZXMuXG5mdW5jdGlvbiBfbWluV2lkdGgoY29sKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbC5wYWRkaW5nIHx8IFtdO1xuICAgIGNvbnN0IG1pbldpZHRoID0gMSArIChwYWRkaW5nW2xlZnRdIHx8IDApICsgKHBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIHJldHVybiBtaW5XaWR0aCArIDQ7XG4gICAgfVxuICAgIHJldHVybiBtaW5XaWR0aDtcbn1cbmZ1bmN0aW9uIGdldFdpbmRvd1dpZHRoKCkge1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDU6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZXhwb3J0IGZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cbiIsImltcG9ydCBhbnNpUmVnZXggZnJvbSAnYW5zaS1yZWdleCc7XG5cbmNvbnN0IHJlZ2V4ID0gYW5zaVJlZ2V4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwQW5zaShzdHJpbmcpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYCk7XG5cdH1cblxuXHQvLyBFdmVuIHRob3VnaCB0aGUgcmVnZXggaXMgZ2xvYmFsLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBgLmxhc3RJbmRleGBcblx0Ly8gYmVjYXVzZSB1bmxpa2UgYC5leGVjKClgIGFuZCBgLnRlc3QoKWAsIGAucmVwbGFjZSgpYCBkb2VzIGl0IGF1dG9tYXRpY2FsbHlcblx0Ly8gYW5kIGRvaW5nIGl0IG1hbnVhbGx5IGhhcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5zaVJlZ2V4KHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkge1xuXHQvLyBWYWxpZCBzdHJpbmcgdGVybWluYXRvciBzZXF1ZW5jZXMgYXJlIEJFTCwgRVNDXFwsIGFuZCAweDljXG5cdGNvbnN0IFNUID0gJyg/OlxcXFx1MDAwN3xcXFxcdTAwMUJcXFxcdTAwNUN8XFxcXHUwMDlDKSc7XG5cblx0Ly8gT1NDIHNlcXVlbmNlcyBvbmx5OiBFU0MgXSAuLi4gU1QgKG5vbi1ncmVlZHkgdW50aWwgdGhlIGZpcnN0IFNUKVxuXHRjb25zdCBvc2MgPSBgKD86XFxcXHUwMDFCXFxcXF1bXFxcXHNcXFxcU10qPyR7U1R9KWA7XG5cblx0Ly8gQ1NJIGFuZCByZWxhdGVkOiBFU0MvQzEsIG9wdGlvbmFsIGludGVybWVkaWF0ZXMsIG9wdGlvbmFsIHBhcmFtcyAoc3VwcG9ydHMgOyBhbmQgOikgdGhlbiBmaW5hbCBieXRlXG5cdGNvbnN0IGNzaSA9ICdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86XFxcXGR7MSw0fSg/Ols7Ol1cXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1ucS11eT0+PH5dJztcblxuXHRjb25zdCBwYXR0ZXJuID0gYCR7b3NjfXwke2NzaX1gO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59XG4iLCJpbXBvcnQge2dldENhdGVnb3J5LCBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZX0gZnJvbSAnLi9sb29rdXAuanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShjb2RlUG9pbnQpIHtcblx0aWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2RlUG9pbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBjb2RlIHBvaW50LCBnb3QgXFxgJHt0eXBlb2YgY29kZVBvaW50fVxcYC5gKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGhUeXBlKGNvZGVQb2ludCkge1xuXHR2YWxpZGF0ZShjb2RlUG9pbnQpO1xuXG5cdHJldHVybiBnZXRDYXRlZ29yeShjb2RlUG9pbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGgoY29kZVBvaW50LCB7YW1iaWd1b3VzQXNXaWRlID0gZmFsc2V9ID0ge30pIHtcblx0dmFsaWRhdGUoY29kZVBvaW50KTtcblxuXHRpZiAoXG5cdFx0aXNGdWxsV2lkdGgoY29kZVBvaW50KVxuXHRcdHx8IGlzV2lkZShjb2RlUG9pbnQpXG5cdFx0fHwgKGFtYmlndW91c0FzV2lkZSAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKVxuXHQpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdHJldHVybiAxO1xufVxuXG4vLyBQcml2YXRlIGV4cG9ydHMgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnRcbmV4cG9ydCB7aXNGdWxsV2lkdGggYXMgX2lzRnVsbFdpZHRoLCBpc1dpZGUgYXMgX2lzV2lkZX0gZnJvbSAnLi9sb29rdXAuanMnO1xuIiwiLy8gR2VuZXJhdGVkIGNvZGUuXG5cbmZ1bmN0aW9uIGlzQW1iaWd1b3VzKHgpIHtcblx0cmV0dXJuIHggPT09IDB4QTFcblx0XHR8fCB4ID09PSAweEE0XG5cdFx0fHwgeCA9PT0gMHhBN1xuXHRcdHx8IHggPT09IDB4QThcblx0XHR8fCB4ID09PSAweEFBXG5cdFx0fHwgeCA9PT0gMHhBRFxuXHRcdHx8IHggPT09IDB4QUVcblx0XHR8fCB4ID49IDB4QjAgJiYgeCA8PSAweEI0XG5cdFx0fHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQVxuXHRcdHx8IHggPj0gMHhCQyAmJiB4IDw9IDB4QkZcblx0XHR8fCB4ID09PSAweEM2XG5cdFx0fHwgeCA9PT0gMHhEMFxuXHRcdHx8IHggPT09IDB4RDdcblx0XHR8fCB4ID09PSAweEQ4XG5cdFx0fHwgeCA+PSAweERFICYmIHggPD0gMHhFMVxuXHRcdHx8IHggPT09IDB4RTZcblx0XHR8fCB4ID49IDB4RTggJiYgeCA8PSAweEVBXG5cdFx0fHwgeCA9PT0gMHhFQ1xuXHRcdHx8IHggPT09IDB4RURcblx0XHR8fCB4ID09PSAweEYwXG5cdFx0fHwgeCA9PT0gMHhGMlxuXHRcdHx8IHggPT09IDB4RjNcblx0XHR8fCB4ID49IDB4RjcgJiYgeCA8PSAweEZBXG5cdFx0fHwgeCA9PT0gMHhGQ1xuXHRcdHx8IHggPT09IDB4RkVcblx0XHR8fCB4ID09PSAweDEwMVxuXHRcdHx8IHggPT09IDB4MTExXG5cdFx0fHwgeCA9PT0gMHgxMTNcblx0XHR8fCB4ID09PSAweDExQlxuXHRcdHx8IHggPT09IDB4MTI2XG5cdFx0fHwgeCA9PT0gMHgxMjdcblx0XHR8fCB4ID09PSAweDEyQlxuXHRcdHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzM1xuXHRcdHx8IHggPT09IDB4MTM4XG5cdFx0fHwgeCA+PSAweDEzRiAmJiB4IDw9IDB4MTQyXG5cdFx0fHwgeCA9PT0gMHgxNDRcblx0XHR8fCB4ID49IDB4MTQ4ICYmIHggPD0gMHgxNEJcblx0XHR8fCB4ID09PSAweDE0RFxuXHRcdHx8IHggPT09IDB4MTUyXG5cdFx0fHwgeCA9PT0gMHgxNTNcblx0XHR8fCB4ID09PSAweDE2NlxuXHRcdHx8IHggPT09IDB4MTY3XG5cdFx0fHwgeCA9PT0gMHgxNkJcblx0XHR8fCB4ID09PSAweDFDRVxuXHRcdHx8IHggPT09IDB4MUQwXG5cdFx0fHwgeCA9PT0gMHgxRDJcblx0XHR8fCB4ID09PSAweDFENFxuXHRcdHx8IHggPT09IDB4MUQ2XG5cdFx0fHwgeCA9PT0gMHgxRDhcblx0XHR8fCB4ID09PSAweDFEQVxuXHRcdHx8IHggPT09IDB4MURDXG5cdFx0fHwgeCA9PT0gMHgyNTFcblx0XHR8fCB4ID09PSAweDI2MVxuXHRcdHx8IHggPT09IDB4MkM0XG5cdFx0fHwgeCA9PT0gMHgyQzdcblx0XHR8fCB4ID49IDB4MkM5ICYmIHggPD0gMHgyQ0Jcblx0XHR8fCB4ID09PSAweDJDRFxuXHRcdHx8IHggPT09IDB4MkQwXG5cdFx0fHwgeCA+PSAweDJEOCAmJiB4IDw9IDB4MkRCXG5cdFx0fHwgeCA9PT0gMHgyRERcblx0XHR8fCB4ID09PSAweDJERlxuXHRcdHx8IHggPj0gMHgzMDAgJiYgeCA8PSAweDM2RlxuXHRcdHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMVxuXHRcdHx8IHggPj0gMHgzQTMgJiYgeCA8PSAweDNBOVxuXHRcdHx8IHggPj0gMHgzQjEgJiYgeCA8PSAweDNDMVxuXHRcdHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOVxuXHRcdHx8IHggPT09IDB4NDAxXG5cdFx0fHwgeCA+PSAweDQxMCAmJiB4IDw9IDB4NDRGXG5cdFx0fHwgeCA9PT0gMHg0NTFcblx0XHR8fCB4ID09PSAweDIwMTBcblx0XHR8fCB4ID49IDB4MjAxMyAmJiB4IDw9IDB4MjAxNlxuXHRcdHx8IHggPT09IDB4MjAxOFxuXHRcdHx8IHggPT09IDB4MjAxOVxuXHRcdHx8IHggPT09IDB4MjAxQ1xuXHRcdHx8IHggPT09IDB4MjAxRFxuXHRcdHx8IHggPj0gMHgyMDIwICYmIHggPD0gMHgyMDIyXG5cdFx0fHwgeCA+PSAweDIwMjQgJiYgeCA8PSAweDIwMjdcblx0XHR8fCB4ID09PSAweDIwMzBcblx0XHR8fCB4ID09PSAweDIwMzJcblx0XHR8fCB4ID09PSAweDIwMzNcblx0XHR8fCB4ID09PSAweDIwMzVcblx0XHR8fCB4ID09PSAweDIwM0Jcblx0XHR8fCB4ID09PSAweDIwM0Vcblx0XHR8fCB4ID09PSAweDIwNzRcblx0XHR8fCB4ID09PSAweDIwN0Zcblx0XHR8fCB4ID49IDB4MjA4MSAmJiB4IDw9IDB4MjA4NFxuXHRcdHx8IHggPT09IDB4MjBBQ1xuXHRcdHx8IHggPT09IDB4MjEwM1xuXHRcdHx8IHggPT09IDB4MjEwNVxuXHRcdHx8IHggPT09IDB4MjEwOVxuXHRcdHx8IHggPT09IDB4MjExM1xuXHRcdHx8IHggPT09IDB4MjExNlxuXHRcdHx8IHggPT09IDB4MjEyMVxuXHRcdHx8IHggPT09IDB4MjEyMlxuXHRcdHx8IHggPT09IDB4MjEyNlxuXHRcdHx8IHggPT09IDB4MjEyQlxuXHRcdHx8IHggPT09IDB4MjE1M1xuXHRcdHx8IHggPT09IDB4MjE1NFxuXHRcdHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFXG5cdFx0fHwgeCA+PSAweDIxNjAgJiYgeCA8PSAweDIxNkJcblx0XHR8fCB4ID49IDB4MjE3MCAmJiB4IDw9IDB4MjE3OVxuXHRcdHx8IHggPT09IDB4MjE4OVxuXHRcdHx8IHggPj0gMHgyMTkwICYmIHggPD0gMHgyMTk5XG5cdFx0fHwgeCA9PT0gMHgyMUI4XG5cdFx0fHwgeCA9PT0gMHgyMUI5XG5cdFx0fHwgeCA9PT0gMHgyMUQyXG5cdFx0fHwgeCA9PT0gMHgyMUQ0XG5cdFx0fHwgeCA9PT0gMHgyMUU3XG5cdFx0fHwgeCA9PT0gMHgyMjAwXG5cdFx0fHwgeCA9PT0gMHgyMjAyXG5cdFx0fHwgeCA9PT0gMHgyMjAzXG5cdFx0fHwgeCA9PT0gMHgyMjA3XG5cdFx0fHwgeCA9PT0gMHgyMjA4XG5cdFx0fHwgeCA9PT0gMHgyMjBCXG5cdFx0fHwgeCA9PT0gMHgyMjBGXG5cdFx0fHwgeCA9PT0gMHgyMjExXG5cdFx0fHwgeCA9PT0gMHgyMjE1XG5cdFx0fHwgeCA9PT0gMHgyMjFBXG5cdFx0fHwgeCA+PSAweDIyMUQgJiYgeCA8PSAweDIyMjBcblx0XHR8fCB4ID09PSAweDIyMjNcblx0XHR8fCB4ID09PSAweDIyMjVcblx0XHR8fCB4ID49IDB4MjIyNyAmJiB4IDw9IDB4MjIyQ1xuXHRcdHx8IHggPT09IDB4MjIyRVxuXHRcdHx8IHggPj0gMHgyMjM0ICYmIHggPD0gMHgyMjM3XG5cdFx0fHwgeCA9PT0gMHgyMjNDXG5cdFx0fHwgeCA9PT0gMHgyMjNEXG5cdFx0fHwgeCA9PT0gMHgyMjQ4XG5cdFx0fHwgeCA9PT0gMHgyMjRDXG5cdFx0fHwgeCA9PT0gMHgyMjUyXG5cdFx0fHwgeCA9PT0gMHgyMjYwXG5cdFx0fHwgeCA9PT0gMHgyMjYxXG5cdFx0fHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjdcblx0XHR8fCB4ID09PSAweDIyNkFcblx0XHR8fCB4ID09PSAweDIyNkJcblx0XHR8fCB4ID09PSAweDIyNkVcblx0XHR8fCB4ID09PSAweDIyNkZcblx0XHR8fCB4ID09PSAweDIyODJcblx0XHR8fCB4ID09PSAweDIyODNcblx0XHR8fCB4ID09PSAweDIyODZcblx0XHR8fCB4ID09PSAweDIyODdcblx0XHR8fCB4ID09PSAweDIyOTVcblx0XHR8fCB4ID09PSAweDIyOTlcblx0XHR8fCB4ID09PSAweDIyQTVcblx0XHR8fCB4ID09PSAweDIyQkZcblx0XHR8fCB4ID09PSAweDIzMTJcblx0XHR8fCB4ID49IDB4MjQ2MCAmJiB4IDw9IDB4MjRFOVxuXHRcdHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCXG5cdFx0fHwgeCA+PSAweDI1NTAgJiYgeCA8PSAweDI1NzNcblx0XHR8fCB4ID49IDB4MjU4MCAmJiB4IDw9IDB4MjU4RlxuXHRcdHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1XG5cdFx0fHwgeCA9PT0gMHgyNUEwXG5cdFx0fHwgeCA9PT0gMHgyNUExXG5cdFx0fHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTlcblx0XHR8fCB4ID09PSAweDI1QjJcblx0XHR8fCB4ID09PSAweDI1QjNcblx0XHR8fCB4ID09PSAweDI1QjZcblx0XHR8fCB4ID09PSAweDI1Qjdcblx0XHR8fCB4ID09PSAweDI1QkNcblx0XHR8fCB4ID09PSAweDI1QkRcblx0XHR8fCB4ID09PSAweDI1QzBcblx0XHR8fCB4ID09PSAweDI1QzFcblx0XHR8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOFxuXHRcdHx8IHggPT09IDB4MjVDQlxuXHRcdHx8IHggPj0gMHgyNUNFICYmIHggPD0gMHgyNUQxXG5cdFx0fHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTVcblx0XHR8fCB4ID09PSAweDI1RUZcblx0XHR8fCB4ID09PSAweDI2MDVcblx0XHR8fCB4ID09PSAweDI2MDZcblx0XHR8fCB4ID09PSAweDI2MDlcblx0XHR8fCB4ID09PSAweDI2MEVcblx0XHR8fCB4ID09PSAweDI2MEZcblx0XHR8fCB4ID09PSAweDI2MUNcblx0XHR8fCB4ID09PSAweDI2MUVcblx0XHR8fCB4ID09PSAweDI2NDBcblx0XHR8fCB4ID09PSAweDI2NDJcblx0XHR8fCB4ID09PSAweDI2NjBcblx0XHR8fCB4ID09PSAweDI2NjFcblx0XHR8fCB4ID49IDB4MjY2MyAmJiB4IDw9IDB4MjY2NVxuXHRcdHx8IHggPj0gMHgyNjY3ICYmIHggPD0gMHgyNjZBXG5cdFx0fHwgeCA9PT0gMHgyNjZDXG5cdFx0fHwgeCA9PT0gMHgyNjZEXG5cdFx0fHwgeCA9PT0gMHgyNjZGXG5cdFx0fHwgeCA9PT0gMHgyNjlFXG5cdFx0fHwgeCA9PT0gMHgyNjlGXG5cdFx0fHwgeCA9PT0gMHgyNkJGXG5cdFx0fHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0Rcblx0XHR8fCB4ID49IDB4MjZDRiAmJiB4IDw9IDB4MjZEM1xuXHRcdHx8IHggPj0gMHgyNkQ1ICYmIHggPD0gMHgyNkUxXG5cdFx0fHwgeCA9PT0gMHgyNkUzXG5cdFx0fHwgeCA9PT0gMHgyNkU4XG5cdFx0fHwgeCA9PT0gMHgyNkU5XG5cdFx0fHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjFcblx0XHR8fCB4ID09PSAweDI2RjRcblx0XHR8fCB4ID49IDB4MjZGNiAmJiB4IDw9IDB4MjZGOVxuXHRcdHx8IHggPT09IDB4MjZGQlxuXHRcdHx8IHggPT09IDB4MjZGQ1xuXHRcdHx8IHggPT09IDB4MjZGRVxuXHRcdHx8IHggPT09IDB4MjZGRlxuXHRcdHx8IHggPT09IDB4MjczRFxuXHRcdHx8IHggPj0gMHgyNzc2ICYmIHggPD0gMHgyNzdGXG5cdFx0fHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTlcblx0XHR8fCB4ID49IDB4MzI0OCAmJiB4IDw9IDB4MzI0RlxuXHRcdHx8IHggPj0gMHhFMDAwICYmIHggPD0gMHhGOEZGXG5cdFx0fHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEZcblx0XHR8fCB4ID09PSAweEZGRkRcblx0XHR8fCB4ID49IDB4MUYxMDAgJiYgeCA8PSAweDFGMTBBXG5cdFx0fHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRFxuXHRcdHx8IHggPj0gMHgxRjEzMCAmJiB4IDw9IDB4MUYxNjlcblx0XHR8fCB4ID49IDB4MUYxNzAgJiYgeCA8PSAweDFGMThEXG5cdFx0fHwgeCA9PT0gMHgxRjE4RlxuXHRcdHx8IHggPT09IDB4MUYxOTBcblx0XHR8fCB4ID49IDB4MUYxOUIgJiYgeCA8PSAweDFGMUFDXG5cdFx0fHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRlxuXHRcdHx8IHggPj0gMHhGMDAwMCAmJiB4IDw9IDB4RkZGRkRcblx0XHR8fCB4ID49IDB4MTAwMDAwICYmIHggPD0gMHgxMEZGRkQ7XG59XG5cbmZ1bmN0aW9uIGlzRnVsbFdpZHRoKHgpIHtcblx0cmV0dXJuIHggPT09IDB4MzAwMFxuXHRcdHx8IHggPj0gMHhGRjAxICYmIHggPD0gMHhGRjYwXG5cdFx0fHwgeCA+PSAweEZGRTAgJiYgeCA8PSAweEZGRTY7XG59XG5cbmZ1bmN0aW9uIGlzV2lkZSh4KSB7XG5cdHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RlxuXHRcdHx8IHggPT09IDB4MjMxQVxuXHRcdHx8IHggPT09IDB4MjMxQlxuXHRcdHx8IHggPT09IDB4MjMyOVxuXHRcdHx8IHggPT09IDB4MjMyQVxuXHRcdHx8IHggPj0gMHgyM0U5ICYmIHggPD0gMHgyM0VDXG5cdFx0fHwgeCA9PT0gMHgyM0YwXG5cdFx0fHwgeCA9PT0gMHgyM0YzXG5cdFx0fHwgeCA9PT0gMHgyNUZEXG5cdFx0fHwgeCA9PT0gMHgyNUZFXG5cdFx0fHwgeCA9PT0gMHgyNjE0XG5cdFx0fHwgeCA9PT0gMHgyNjE1XG5cdFx0fHwgeCA+PSAweDI2MzAgJiYgeCA8PSAweDI2Mzdcblx0XHR8fCB4ID49IDB4MjY0OCAmJiB4IDw9IDB4MjY1M1xuXHRcdHx8IHggPT09IDB4MjY3RlxuXHRcdHx8IHggPj0gMHgyNjhBICYmIHggPD0gMHgyNjhGXG5cdFx0fHwgeCA9PT0gMHgyNjkzXG5cdFx0fHwgeCA9PT0gMHgyNkExXG5cdFx0fHwgeCA9PT0gMHgyNkFBXG5cdFx0fHwgeCA9PT0gMHgyNkFCXG5cdFx0fHwgeCA9PT0gMHgyNkJEXG5cdFx0fHwgeCA9PT0gMHgyNkJFXG5cdFx0fHwgeCA9PT0gMHgyNkM0XG5cdFx0fHwgeCA9PT0gMHgyNkM1XG5cdFx0fHwgeCA9PT0gMHgyNkNFXG5cdFx0fHwgeCA9PT0gMHgyNkQ0XG5cdFx0fHwgeCA9PT0gMHgyNkVBXG5cdFx0fHwgeCA9PT0gMHgyNkYyXG5cdFx0fHwgeCA9PT0gMHgyNkYzXG5cdFx0fHwgeCA9PT0gMHgyNkY1XG5cdFx0fHwgeCA9PT0gMHgyNkZBXG5cdFx0fHwgeCA9PT0gMHgyNkZEXG5cdFx0fHwgeCA9PT0gMHgyNzA1XG5cdFx0fHwgeCA9PT0gMHgyNzBBXG5cdFx0fHwgeCA9PT0gMHgyNzBCXG5cdFx0fHwgeCA9PT0gMHgyNzI4XG5cdFx0fHwgeCA9PT0gMHgyNzRDXG5cdFx0fHwgeCA9PT0gMHgyNzRFXG5cdFx0fHwgeCA+PSAweDI3NTMgJiYgeCA8PSAweDI3NTVcblx0XHR8fCB4ID09PSAweDI3NTdcblx0XHR8fCB4ID49IDB4Mjc5NSAmJiB4IDw9IDB4Mjc5N1xuXHRcdHx8IHggPT09IDB4MjdCMFxuXHRcdHx8IHggPT09IDB4MjdCRlxuXHRcdHx8IHggPT09IDB4MkIxQlxuXHRcdHx8IHggPT09IDB4MkIxQ1xuXHRcdHx8IHggPT09IDB4MkI1MFxuXHRcdHx8IHggPT09IDB4MkI1NVxuXHRcdHx8IHggPj0gMHgyRTgwICYmIHggPD0gMHgyRTk5XG5cdFx0fHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjNcblx0XHR8fCB4ID49IDB4MkYwMCAmJiB4IDw9IDB4MkZENVxuXHRcdHx8IHggPj0gMHgyRkYwICYmIHggPD0gMHgyRkZGXG5cdFx0fHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0Vcblx0XHR8fCB4ID49IDB4MzA0MSAmJiB4IDw9IDB4MzA5NlxuXHRcdHx8IHggPj0gMHgzMDk5ICYmIHggPD0gMHgzMEZGXG5cdFx0fHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkZcblx0XHR8fCB4ID49IDB4MzEzMSAmJiB4IDw9IDB4MzE4RVxuXHRcdHx8IHggPj0gMHgzMTkwICYmIHggPD0gMHgzMUU1XG5cdFx0fHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUVcblx0XHR8fCB4ID49IDB4MzIyMCAmJiB4IDw9IDB4MzI0N1xuXHRcdHx8IHggPj0gMHgzMjUwICYmIHggPD0gMHhBNDhDXG5cdFx0fHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzZcblx0XHR8fCB4ID49IDB4QTk2MCAmJiB4IDw9IDB4QTk3Q1xuXHRcdHx8IHggPj0gMHhBQzAwICYmIHggPD0gMHhEN0EzXG5cdFx0fHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkZcblx0XHR8fCB4ID49IDB4RkUxMCAmJiB4IDw9IDB4RkUxOVxuXHRcdHx8IHggPj0gMHhGRTMwICYmIHggPD0gMHhGRTUyXG5cdFx0fHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjZcblx0XHR8fCB4ID49IDB4RkU2OCAmJiB4IDw9IDB4RkU2QlxuXHRcdHx8IHggPj0gMHgxNkZFMCAmJiB4IDw9IDB4MTZGRTRcblx0XHR8fCB4ID09PSAweDE2RkYwXG5cdFx0fHwgeCA9PT0gMHgxNkZGMVxuXHRcdHx8IHggPj0gMHgxNzAwMCAmJiB4IDw9IDB4MTg3Rjdcblx0XHR8fCB4ID49IDB4MTg4MDAgJiYgeCA8PSAweDE4Q0Q1XG5cdFx0fHwgeCA+PSAweDE4Q0ZGICYmIHggPD0gMHgxOEQwOFxuXHRcdHx8IHggPj0gMHgxQUZGMCAmJiB4IDw9IDB4MUFGRjNcblx0XHR8fCB4ID49IDB4MUFGRjUgJiYgeCA8PSAweDFBRkZCXG5cdFx0fHwgeCA9PT0gMHgxQUZGRFxuXHRcdHx8IHggPT09IDB4MUFGRkVcblx0XHR8fCB4ID49IDB4MUIwMDAgJiYgeCA8PSAweDFCMTIyXG5cdFx0fHwgeCA9PT0gMHgxQjEzMlxuXHRcdHx8IHggPj0gMHgxQjE1MCAmJiB4IDw9IDB4MUIxNTJcblx0XHR8fCB4ID09PSAweDFCMTU1XG5cdFx0fHwgeCA+PSAweDFCMTY0ICYmIHggPD0gMHgxQjE2N1xuXHRcdHx8IHggPj0gMHgxQjE3MCAmJiB4IDw9IDB4MUIyRkJcblx0XHR8fCB4ID49IDB4MUQzMDAgJiYgeCA8PSAweDFEMzU2XG5cdFx0fHwgeCA+PSAweDFEMzYwICYmIHggPD0gMHgxRDM3NlxuXHRcdHx8IHggPT09IDB4MUYwMDRcblx0XHR8fCB4ID09PSAweDFGMENGXG5cdFx0fHwgeCA9PT0gMHgxRjE4RVxuXHRcdHx8IHggPj0gMHgxRjE5MSAmJiB4IDw9IDB4MUYxOUFcblx0XHR8fCB4ID49IDB4MUYyMDAgJiYgeCA8PSAweDFGMjAyXG5cdFx0fHwgeCA+PSAweDFGMjEwICYmIHggPD0gMHgxRjIzQlxuXHRcdHx8IHggPj0gMHgxRjI0MCAmJiB4IDw9IDB4MUYyNDhcblx0XHR8fCB4ID09PSAweDFGMjUwXG5cdFx0fHwgeCA9PT0gMHgxRjI1MVxuXHRcdHx8IHggPj0gMHgxRjI2MCAmJiB4IDw9IDB4MUYyNjVcblx0XHR8fCB4ID49IDB4MUYzMDAgJiYgeCA8PSAweDFGMzIwXG5cdFx0fHwgeCA+PSAweDFGMzJEICYmIHggPD0gMHgxRjMzNVxuXHRcdHx8IHggPj0gMHgxRjMzNyAmJiB4IDw9IDB4MUYzN0Ncblx0XHR8fCB4ID49IDB4MUYzN0UgJiYgeCA8PSAweDFGMzkzXG5cdFx0fHwgeCA+PSAweDFGM0EwICYmIHggPD0gMHgxRjNDQVxuXHRcdHx8IHggPj0gMHgxRjNDRiAmJiB4IDw9IDB4MUYzRDNcblx0XHR8fCB4ID49IDB4MUYzRTAgJiYgeCA8PSAweDFGM0YwXG5cdFx0fHwgeCA9PT0gMHgxRjNGNFxuXHRcdHx8IHggPj0gMHgxRjNGOCAmJiB4IDw9IDB4MUY0M0Vcblx0XHR8fCB4ID09PSAweDFGNDQwXG5cdFx0fHwgeCA+PSAweDFGNDQyICYmIHggPD0gMHgxRjRGQ1xuXHRcdHx8IHggPj0gMHgxRjRGRiAmJiB4IDw9IDB4MUY1M0Rcblx0XHR8fCB4ID49IDB4MUY1NEIgJiYgeCA8PSAweDFGNTRFXG5cdFx0fHwgeCA+PSAweDFGNTUwICYmIHggPD0gMHgxRjU2N1xuXHRcdHx8IHggPT09IDB4MUY1N0Fcblx0XHR8fCB4ID09PSAweDFGNTk1XG5cdFx0fHwgeCA9PT0gMHgxRjU5NlxuXHRcdHx8IHggPT09IDB4MUY1QTRcblx0XHR8fCB4ID49IDB4MUY1RkIgJiYgeCA8PSAweDFGNjRGXG5cdFx0fHwgeCA+PSAweDFGNjgwICYmIHggPD0gMHgxRjZDNVxuXHRcdHx8IHggPT09IDB4MUY2Q0Ncblx0XHR8fCB4ID49IDB4MUY2RDAgJiYgeCA8PSAweDFGNkQyXG5cdFx0fHwgeCA+PSAweDFGNkQ1ICYmIHggPD0gMHgxRjZEN1xuXHRcdHx8IHggPj0gMHgxRjZEQyAmJiB4IDw9IDB4MUY2REZcblx0XHR8fCB4ID09PSAweDFGNkVCXG5cdFx0fHwgeCA9PT0gMHgxRjZFQ1xuXHRcdHx8IHggPj0gMHgxRjZGNCAmJiB4IDw9IDB4MUY2RkNcblx0XHR8fCB4ID49IDB4MUY3RTAgJiYgeCA8PSAweDFGN0VCXG5cdFx0fHwgeCA9PT0gMHgxRjdGMFxuXHRcdHx8IHggPj0gMHgxRjkwQyAmJiB4IDw9IDB4MUY5M0Fcblx0XHR8fCB4ID49IDB4MUY5M0MgJiYgeCA8PSAweDFGOTQ1XG5cdFx0fHwgeCA+PSAweDFGOTQ3ICYmIHggPD0gMHgxRjlGRlxuXHRcdHx8IHggPj0gMHgxRkE3MCAmJiB4IDw9IDB4MUZBN0Ncblx0XHR8fCB4ID49IDB4MUZBODAgJiYgeCA8PSAweDFGQTg5XG5cdFx0fHwgeCA+PSAweDFGQThGICYmIHggPD0gMHgxRkFDNlxuXHRcdHx8IHggPj0gMHgxRkFDRSAmJiB4IDw9IDB4MUZBRENcblx0XHR8fCB4ID49IDB4MUZBREYgJiYgeCA8PSAweDFGQUU5XG5cdFx0fHwgeCA+PSAweDFGQUYwICYmIHggPD0gMHgxRkFGOFxuXHRcdHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkRcblx0XHR8fCB4ID49IDB4MzAwMDAgJiYgeCA8PSAweDNGRkZEO1xufVxuXG5mdW5jdGlvbiBnZXRDYXRlZ29yeSh4KSB7XG5cdGlmIChpc0FtYmlndW91cyh4KSkgcmV0dXJuICdhbWJpZ3VvdXMnO1xuXG5cdGlmIChpc0Z1bGxXaWR0aCh4KSkgcmV0dXJuICdmdWxsd2lkdGgnO1xuXG5cdGlmIChcblx0XHR4ID09PSAweDIwQTlcblx0XHR8fCB4ID49IDB4RkY2MSAmJiB4IDw9IDB4RkZCRVxuXHRcdHx8IHggPj0gMHhGRkMyICYmIHggPD0gMHhGRkM3XG5cdFx0fHwgeCA+PSAweEZGQ0EgJiYgeCA8PSAweEZGQ0Zcblx0XHR8fCB4ID49IDB4RkZEMiAmJiB4IDw9IDB4RkZEN1xuXHRcdHx8IHggPj0gMHhGRkRBICYmIHggPD0gMHhGRkRDXG5cdFx0fHwgeCA+PSAweEZGRTggJiYgeCA8PSAweEZGRUVcblx0KSB7XG5cdFx0cmV0dXJuICdoYWxmd2lkdGgnO1xuXHR9XG5cblx0aWYgKFxuXHRcdHggPj0gMHgyMCAmJiB4IDw9IDB4N0Vcblx0XHR8fCB4ID09PSAweEEyXG5cdFx0fHwgeCA9PT0gMHhBM1xuXHRcdHx8IHggPT09IDB4QTVcblx0XHR8fCB4ID09PSAweEE2XG5cdFx0fHwgeCA9PT0gMHhBQ1xuXHRcdHx8IHggPT09IDB4QUZcblx0XHR8fCB4ID49IDB4MjdFNiAmJiB4IDw9IDB4MjdFRFxuXHRcdHx8IHggPT09IDB4Mjk4NVxuXHRcdHx8IHggPT09IDB4Mjk4NlxuXHQpIHtcblx0XHRyZXR1cm4gJ25hcnJvdyc7XG5cdH1cblxuXHRpZiAoaXNXaWRlKHgpKSByZXR1cm4gJ3dpZGUnO1xuXG5cdHJldHVybiAnbmV1dHJhbCc7XG59XG5cbmV4cG9ydCB7aXNBbWJpZ3VvdXMsIGlzRnVsbFdpZHRoLCBpc1dpZGUsIGdldENhdGVnb3J5fTtcbiIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcblx0Ly8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG5cdHJldHVybiAvWyMqMC05XVxcdUZFMEY/XFx1MjBFM3xbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyXFx1MjY5NC1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTdcXHUyNkFBXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM4XFx1MjZDRlxcdTI2RDFcXHUyNkU5XFx1MjZGMC1cXHUyNkY1XFx1MjZGN1xcdTI2RjhcXHUyNkZBXFx1MjcwMlxcdTI3MDhcXHUyNzA5XFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjczM1xcdTI3MzRcXHUyNzQ0XFx1Mjc0N1xcdTI3NTdcXHUyNzYzXFx1MjdBMVxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjU1XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV1cXHVGRTBGP3xbXFx1MjYxRFxcdTI3MENcXHUyNzBEXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT98W1xcdTI3MEFcXHUyNzBCXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyM0U5LVxcdTIzRUNcXHUyM0YwXFx1MjNGM1xcdTI1RkRcXHUyNjkzXFx1MjZBMVxcdTI2QUJcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGRFxcdTI3MDVcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCNTBdfFxcdTI2RDNcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RENBNSk/fFxcdTI2RjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdTI3NjRcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHVEODNEXFx1REQyNXxcXHVEODNFXFx1REU3OSkpP3xcXHVEODNDKD86W1xcdURDMDRcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REUwMlxcdURFMzdcXHVERjIxXFx1REYyNC1cXHVERjJDXFx1REYzNlxcdURGN0RcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUVcXHVERjlGXFx1REZDRFxcdURGQ0VcXHVERkQ0LVxcdURGREZcXHVERkY1XFx1REZGN11cXHVGRTBGP3xbXFx1REY4NVxcdURGQzJcXHVERkM3XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERkM0XFx1REZDQV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REZDQlxcdURGQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY0M1xcdURGNDUtXFx1REY0QVxcdURGNEMtXFx1REY3Q1xcdURGN0UtXFx1REY4NFxcdURGODYtXFx1REY5M1xcdURGQTAtXFx1REZDMVxcdURGQzVcXHVERkM2XFx1REZDOFxcdURGQzlcXHVERkNGLVxcdURGRDNcXHVERkUwLVxcdURGRjBcXHVERkY4LVxcdURGRkZdfFxcdURERTZcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdfFxcdURERTdcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERFOFxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGNDQoPzpcXHUyMDBEXFx1RDgzRFxcdURGRUIpP3xcXHVERjRCKD86XFx1MjAwRFxcdUQ4M0RcXHVERkU5KT98XFx1REZDMyg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT98XFx1REZGM1xcdUZFMEY/KD86XFx1MjAwRCg/OlxcdTI2QTdcXHVGRTBGP3xcXHVEODNDXFx1REYwOCkpP3xcXHVERkY0KD86XFx1MjAwRFxcdTI2MjBcXHVGRTBGP3xcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyXFx1REI0MCg/OlxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGKT8pfFxcdUQ4M0QoPzpbXFx1REMzRlxcdURDRkRcXHVERDQ5XFx1REQ0QVxcdURENkZcXHVERDcwXFx1REQ3M1xcdURENzYtXFx1REQ3OVxcdUREODdcXHVERDhBLVxcdUREOERcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQVxcdURFQ0JcXHVERUNELVxcdURFQ0ZcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVGMFxcdURFRjNdXFx1RkUwRj98W1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDOEZcXHVEQzkxXFx1RENBQVxcdUREN0FcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDNkUtXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0XFx1REVCNV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQ3NFxcdUREOTBdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpP3xbXFx1REMwMC1cXHVEQzA3XFx1REMwOS1cXHVEQzE0XFx1REMxNi1cXHVEQzI1XFx1REMyNy1cXHVEQzNBXFx1REMzQy1cXHVEQzNFXFx1REM0MFxcdURDNDRcXHVEQzQ1XFx1REM1MS1cXHVEQzY1XFx1REM2QVxcdURDNzktXFx1REM3QlxcdURDN0QtXFx1REM4MFxcdURDODRcXHVEQzg4LVxcdURDOEVcXHVEQzkwXFx1REM5Mi1cXHVEQ0E5XFx1RENBQi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1RERBNFxcdURERkItXFx1REUyRFxcdURFMkYtXFx1REUzNFxcdURFMzctXFx1REU0MVxcdURFNDNcXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ4XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzA4KD86XFx1MjAwRFxcdTJCMUIpP3xcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMyNig/OlxcdTIwMEQoPzpcXHUyQjFCfFxcdUQ4M0RcXHVERDI1KSk/fFxcdURDM0IoPzpcXHUyMDBEXFx1Mjc0NFxcdUZFMEY/KT98XFx1REM0MVxcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEREU4XFx1RkUwRj8pP3xcXHVEQzY4KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjh8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV1cXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREMURcXHVERUVGXVxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVERDFEXFx1REVFRl1cXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpPykpP3xcXHVEQzY5KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1tcXHVEQzY4XFx1REM2OV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT98XFx1REM2OVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPykpfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVERDc1KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/fFxcdURFNDIoPzpcXHUyMDBEW1xcdTIxOTRcXHUyMTk1XVxcdUZFMEY/KT98XFx1REVCNig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENEXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREREVcXHVERERGXSg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQwRFxcdUREMEVcXHVERDEwLVxcdUREMTdcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OC1cXHVEREI0XFx1RERCN1xcdUREQkFcXHVEREJDLVxcdUREQ0NcXHVEREQwXFx1RERFMC1cXHVEREZGXFx1REU3MC1cXHVERTdDXFx1REU4MC1cXHVERThBXFx1REU4RS1cXHVERUMyXFx1REVDNlxcdURFQzhcXHVERUNELVxcdURFRENcXHVERURGLVxcdURFRUFcXHVERUVGXXxcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1REREMVxcdTIwMERcXHVEODNFXFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/fFxcdURERDIoPzpcXHUyMDBEXFx1RDgzRVxcdURERDIpPykpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkMtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1REVFRlxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1REVFRlxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNcXHVERTcwXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXFx1REU3MF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNcXHVERTcwXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURFRjEoPzpcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSk/fFxcdURGRkMoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKT98XFx1REZGRCg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pP3xcXHVERkZFKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSk/fFxcdURGRkYoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRV0pPykpPykvZztcbn07XG4iLCJpbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IHtlYXN0QXNpYW5XaWR0aH0gZnJvbSAnZ2V0LWVhc3QtYXNpYW4td2lkdGgnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuXG5jb25zdCBzZWdtZW50ZXIgPSBuZXcgSW50bC5TZWdtZW50ZXIoKTtcblxuY29uc3QgZGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludFJlZ2V4ID0gL15cXHB7RGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludH0kL3U7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cmluZywgb3B0aW9ucyA9IHt9KSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCB7XG5cdFx0YW1iaWd1b3VzSXNOYXJyb3cgPSB0cnVlLFxuXHRcdGNvdW50QW5zaUVzY2FwZUNvZGVzID0gZmFsc2UsXG5cdH0gPSBvcHRpb25zO1xuXG5cdGlmICghY291bnRBbnNpRXNjYXBlQ29kZXMpIHtcblx0XHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblx0fVxuXG5cdGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRsZXQgd2lkdGggPSAwO1xuXHRjb25zdCBlYXN0QXNpYW5XaWR0aE9wdGlvbnMgPSB7YW1iaWd1b3VzQXNXaWRlOiAhYW1iaWd1b3VzSXNOYXJyb3d9O1xuXG5cdGZvciAoY29uc3Qge3NlZ21lbnQ6IGNoYXJhY3Rlcn0gb2Ygc2VnbWVudGVyLnNlZ21lbnQoc3RyaW5nKSkge1xuXHRcdGNvbnN0IGNvZGVQb2ludCA9IGNoYXJhY3Rlci5jb2RlUG9pbnRBdCgwKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZVBvaW50IDw9IDB4MUYgfHwgKGNvZGVQb2ludCA+PSAweDdGICYmIGNvZGVQb2ludCA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIHplcm8td2lkdGggY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgyMF8wQiAmJiBjb2RlUG9pbnQgPD0gMHgyMF8wRikgLy8gWmVyby13aWR0aCBzcGFjZSwgbm9uLWpvaW5lciwgam9pbmVyLCBsZWZ0LXRvLXJpZ2h0IG1hcmssIHJpZ2h0LXRvLWxlZnQgbWFya1xuXHRcdFx0fHwgY29kZVBvaW50ID09PSAweEZFX0ZGIC8vIFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2Vcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgzXzAwICYmIGNvZGVQb2ludCA8PSAweDNfNkYpIC8vIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc1xuXHRcdFx0fHwgKGNvZGVQb2ludCA+PSAweDFBX0IwICYmIGNvZGVQb2ludCA8PSAweDFBX0ZGKSAvLyBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZXh0ZW5kZWRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgxRF9DMCAmJiBjb2RlUG9pbnQgPD0gMHgxRF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIHN1cHBsZW1lbnRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgyMF9EMCAmJiBjb2RlUG9pbnQgPD0gMHgyMF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXG5cdFx0XHR8fCAoY29kZVBvaW50ID49IDB4RkVfMjAgJiYgY29kZVBvaW50IDw9IDB4RkVfMkYpIC8vIENvbWJpbmluZyBoYWxmIG1hcmtzXG5cdFx0KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgc3Vycm9nYXRlIHBhaXJzXG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweEQ4XzAwICYmIGNvZGVQb2ludCA8PSAweERGX0ZGKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgdmFyaWF0aW9uIHNlbGVjdG9yc1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHhGRV8wMCAmJiBjb2RlUG9pbnQgPD0gMHhGRV8wRikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gVGhpcyBjb3ZlcnMgc29tZSBvZiB0aGUgYWJvdmUgY2FzZXMsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZW0gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG5cdFx0aWYgKGRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleC50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFRPRE86IFVzZSBgL1xccHtSR0lfRW1vaml9L3ZgIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMjAuXG5cdFx0aWYgKGVtb2ppUmVnZXgoKS50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR3aWR0aCArPSBlYXN0QXNpYW5XaWR0aChjb2RlUG9pbnQsIGVhc3RBc2lhbldpZHRoT3B0aW9ucyk7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59XG4iLCJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiB7XG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdFx0XHRcdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRcdFx0XHRpZiAocmVkID09PSBncmVlbiAmJiBncmVlbiA9PT0gYmx1ZSkge1xuXHRcdFx0XHRcdGlmIChyZWQgPCA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMTY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlZCA+IDI0OCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDIzMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHJlZCAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxNlxuXHRcdFx0XHRcdCsgKDM2ICogTWF0aC5yb3VuZChyZWQgLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrICg2ICogTWF0aC5yb3VuZChncmVlbiAvIDI1NSAqIDUpKVxuXHRcdFx0XHRcdCsgTWF0aC5yb3VuZChibHVlIC8gMjU1ICogNSk7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb1JnYjoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoZXMgPSAvW2EtZlxcZF17Nn18W2EtZlxcZF17M30vaS5leGVjKGhleC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IFtjb2xvclN0cmluZ10gPSBtYXRjaGVzO1xuXG5cdFx0XHRcdGlmIChjb2xvclN0cmluZy5sZW5ndGggPT09IDMpIHtcblx0XHRcdFx0XHRjb2xvclN0cmluZyA9IFsuLi5jb2xvclN0cmluZ10ubWFwKGNoYXJhY3RlciA9PiBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXIpLmpvaW4oJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW50ZWdlciA9IE51bWJlci5wYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDE2KSAmIDB4RkYsXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gOCkgJiAweEZGLFxuXHRcdFx0XHRcdGludGVnZXIgJiAweEZGLFxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tYml0d2lzZSAqL1xuXHRcdFx0XHRdO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uc3R5bGVzLmhleFRvUmdiKGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRhbnNpMjU2VG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogY29kZSA9PiB7XG5cdFx0XHRcdGlmIChjb2RlIDwgOCkge1xuXHRcdFx0XHRcdHJldHVybiAzMCArIGNvZGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY29kZSA8IDE2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDkwICsgKGNvZGUgLSA4KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCByZWQ7XG5cdFx0XHRcdGxldCBncmVlbjtcblx0XHRcdFx0bGV0IGJsdWU7XG5cblx0XHRcdFx0aWYgKGNvZGUgPj0gMjMyKSB7XG5cdFx0XHRcdFx0cmVkID0gKCgoY29kZSAtIDIzMikgKiAxMCkgKyA4KSAvIDI1NTtcblx0XHRcdFx0XHRncmVlbiA9IHJlZDtcblx0XHRcdFx0XHRibHVlID0gcmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvZGUgLT0gMTY7XG5cblx0XHRcdFx0XHRjb25zdCByZW1haW5kZXIgPSBjb2RlICUgMzY7XG5cblx0XHRcdFx0XHRyZWQgPSBNYXRoLmZsb29yKGNvZGUgLyAzNikgLyA1O1xuXHRcdFx0XHRcdGdyZWVuID0gTWF0aC5mbG9vcihyZW1haW5kZXIgLyA2KSAvIDU7XG5cdFx0XHRcdFx0Ymx1ZSA9IChyZW1haW5kZXIgJSA2KSAvIDU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IE1hdGgubWF4KHJlZCwgZ3JlZW4sIGJsdWUpICogMjtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gMzA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gMzAgKyAoKE1hdGgucm91bmQoYmx1ZSkgPDwgMikgfCAoTWF0aC5yb3VuZChncmVlbikgPDwgMSkgfCBNYXRoLnJvdW5kKHJlZCkpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gMikge1xuXHRcdFx0XHRcdHJlc3VsdCArPSA2MDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRyZ2JUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLnJnYlRvQW5zaTI1NihyZWQsIGdyZWVuLCBibHVlKSksXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaToge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMuYW5zaTI1NlRvQW5zaShzdHlsZXMuaGV4VG9BbnNpMjU2KGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0fSk7XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuY29uc3QgYW5zaVN0eWxlcyA9IGFzc2VtYmxlU3R5bGVzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGFuc2lTdHlsZXM7XG4iLCJpbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSc7XG5pbXBvcnQgYW5zaVN0eWxlcyBmcm9tICdhbnNpLXN0eWxlcyc7XG5cbmNvbnN0IEVTQ0FQRVMgPSBuZXcgU2V0KFtcblx0J1xcdTAwMUInLFxuXHQnXFx1MDA5QicsXG5dKTtcblxuY29uc3QgRU5EX0NPREUgPSAzOTtcbmNvbnN0IEFOU0lfRVNDQVBFX0JFTEwgPSAnXFx1MDAwNyc7XG5jb25zdCBBTlNJX0NTSSA9ICdbJztcbmNvbnN0IEFOU0lfT1NDID0gJ10nO1xuY29uc3QgQU5TSV9TR1JfVEVSTUlOQVRPUiA9ICdtJztcbmNvbnN0IEFOU0lfRVNDQVBFX0xJTksgPSBgJHtBTlNJX09TQ304OztgO1xuXG5jb25zdCB3cmFwQW5zaUNvZGUgPSBjb2RlID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9DU0l9JHtjb2RlfSR7QU5TSV9TR1JfVEVSTUlOQVRPUn1gO1xuY29uc3Qgd3JhcEFuc2lIeXBlcmxpbmsgPSB1cmwgPT4gYCR7RVNDQVBFUy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9JHtBTlNJX0VTQ0FQRV9MSU5LfSR7dXJsfSR7QU5TSV9FU0NBUEVfQkVMTH1gO1xuXG4vLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB3b3JkcyBzcGxpdCBvbiAnICcsIGlnbm9yaW5nXG4vLyB0aGUgZXh0cmEgY2hhcmFjdGVycyBhZGRlZCBieSBhbnNpIGVzY2FwZSBjb2Rlc1xuY29uc3Qgd29yZExlbmd0aHMgPSBzdHJpbmcgPT4gc3RyaW5nLnNwbGl0KCcgJykubWFwKGNoYXJhY3RlciA9PiBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpKTtcblxuLy8gV3JhcCBhIGxvbmcgd29yZCBhY3Jvc3MgbXVsdGlwbGUgcm93c1xuLy8gQW5zaSBlc2NhcGUgY29kZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgbGVuZ3RoXG5jb25zdCB3cmFwV29yZCA9IChyb3dzLCB3b3JkLCBjb2x1bW5zKSA9PiB7XG5cdGNvbnN0IGNoYXJhY3RlcnMgPSBbLi4ud29yZF07XG5cblx0bGV0IGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdGxldCBpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0bGV0IHZpc2libGUgPSBzdHJpbmdXaWR0aChzdHJpcEFuc2kocm93cy5hdCgtMSkpKTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBjaGFyYWN0ZXJzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IGNoYXJhY3Rlckxlbmd0aCA9IHN0cmluZ1dpZHRoKGNoYXJhY3Rlcik7XG5cblx0XHRpZiAodmlzaWJsZSArIGNoYXJhY3Rlckxlbmd0aCA8PSBjb2x1bW5zKSB7XG5cdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gY2hhcmFjdGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyb3dzLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRpc0luc2lkZUVzY2FwZSA9IHRydWU7XG5cblx0XHRcdGNvbnN0IGFuc2lFc2NhcGVMaW5rQ2FuZGlkYXRlID0gY2hhcmFjdGVycy5zbGljZShpbmRleCArIDEsIGluZGV4ICsgMSArIEFOU0lfRVNDQVBFX0xJTksubGVuZ3RoKS5qb2luKCcnKTtcblx0XHRcdGlzSW5zaWRlTGlua0VzY2FwZSA9IGFuc2lFc2NhcGVMaW5rQ2FuZGlkYXRlID09PSBBTlNJX0VTQ0FQRV9MSU5LO1xuXHRcdH1cblxuXHRcdGlmIChpc0luc2lkZUVzY2FwZSkge1xuXHRcdFx0aWYgKGlzSW5zaWRlTGlua0VzY2FwZSkge1xuXHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSBBTlNJX0VTQ0FQRV9CRUxMKSB7XG5cdFx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IEFOU0lfU0dSX1RFUk1JTkFUT1IpIHtcblx0XHRcdFx0aXNJbnNpZGVFc2NhcGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmlzaWJsZSArPSBjaGFyYWN0ZXJMZW5ndGg7XG5cblx0XHRpZiAodmlzaWJsZSA9PT0gY29sdW1ucyAmJiBpbmRleCA8IGNoYXJhY3RlcnMubGVuZ3RoIC0gMSkge1xuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdHZpc2libGUgPSAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGFzdCByb3cgd2UgY29weSBvdmVyIGlzIG9ubHlcblx0Ly8gYW5zaSBlc2NhcGUgY2hhcmFjdGVycywgaGFuZGxlIHRoaXMgZWRnZS1jYXNlXG5cdGlmICghdmlzaWJsZSAmJiByb3dzLmF0KC0xKS5sZW5ndGggPiAwICYmIHJvd3MubGVuZ3RoID4gMSkge1xuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAyXSArPSByb3dzLnBvcCgpO1xuXHR9XG59O1xuXG4vLyBUcmltcyBzcGFjZXMgZnJvbSBhIHN0cmluZyBpZ25vcmluZyBpbnZpc2libGUgc2VxdWVuY2VzXG5jb25zdCBzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0ID0gc3RyaW5nID0+IHtcblx0Y29uc3Qgd29yZHMgPSBzdHJpbmcuc3BsaXQoJyAnKTtcblx0bGV0IGxhc3QgPSB3b3Jkcy5sZW5ndGg7XG5cblx0d2hpbGUgKGxhc3QgPiAwKSB7XG5cdFx0aWYgKHN0cmluZ1dpZHRoKHdvcmRzW2xhc3QgLSAxXSkgPiAwKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsYXN0LS07XG5cdH1cblxuXHRpZiAobGFzdCA9PT0gd29yZHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fVxuXG5cdHJldHVybiB3b3Jkcy5zbGljZSgwLCBsYXN0KS5qb2luKCcgJykgKyB3b3Jkcy5zbGljZShsYXN0KS5qb2luKCcnKTtcbn07XG5cbi8vIFRoZSB3cmFwLWFuc2kgbW9kdWxlIGNhbiBiZSBpbnZva2VkIGluIGVpdGhlciAnaGFyZCcgb3IgJ3NvZnQnIHdyYXAgbW9kZS5cbi8vXG4vLyAnaGFyZCcgd2lsbCBuZXZlciBhbGxvdyBhIHN0cmluZyB0byB0YWtlIHVwIG1vcmUgdGhhbiBjb2x1bW5zIGNoYXJhY3RlcnMuXG4vL1xuLy8gJ3NvZnQnIGFsbG93cyBsb25nIHdvcmRzIHRvIGV4cGFuZCBwYXN0IHRoZSBjb2x1bW4gbGVuZ3RoLlxuY29uc3QgZXhlYyA9IChzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSAmJiBzdHJpbmcudHJpbSgpID09PSAnJykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdGxldCByZXR1cm5WYWx1ZSA9ICcnO1xuXHRsZXQgZXNjYXBlQ29kZTtcblx0bGV0IGVzY2FwZVVybDtcblxuXHRjb25zdCBsZW5ndGhzID0gd29yZExlbmd0aHMoc3RyaW5nKTtcblx0bGV0IHJvd3MgPSBbJyddO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCB3b3JkXSBvZiBzdHJpbmcuc3BsaXQoJyAnKS5lbnRyaWVzKCkpIHtcblx0XHRpZiAob3B0aW9ucy50cmltICE9PSBmYWxzZSkge1xuXHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdID0gcm93cy5hdCgtMSkudHJpbVN0YXJ0KCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJvd0xlbmd0aCA9IHN0cmluZ1dpZHRoKHJvd3MuYXQoLTEpKTtcblxuXHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0aWYgKHJvd0xlbmd0aCA+PSBjb2x1bW5zICYmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSB8fCBvcHRpb25zLnRyaW0gPT09IGZhbHNlKSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBzdGFydCB3aXRoIGEgbmV3IHdvcmQgYnV0IHRoZSBjdXJyZW50IHJvdyBsZW5ndGggZXF1YWxzIHRoZSBsZW5ndGggb2YgdGhlIGNvbHVtbnMsIGFkZCBhIG5ldyByb3dcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdFx0cm93TGVuZ3RoID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJvd0xlbmd0aCA+IDAgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkge1xuXHRcdFx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gJyAnO1xuXHRcdFx0XHRyb3dMZW5ndGgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJbiAnaGFyZCcgd3JhcCBtb2RlLCB0aGUgbGVuZ3RoIG9mIGEgbGluZSBpcyBuZXZlciBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0ICdjb2x1bW5zJ1xuXHRcdGlmIChvcHRpb25zLmhhcmQgJiYgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCByZW1haW5pbmdDb2x1bW5zID0gKGNvbHVtbnMgLSByb3dMZW5ndGgpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSA9IDEgKyBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIHJlbWFpbmluZ0NvbHVtbnMgLSAxKSAvIGNvbHVtbnMpO1xuXHRcdFx0Y29uc3QgYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA9IE1hdGguZmxvb3IoKGxlbmd0aHNbaW5kZXhdIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGlmIChicmVha3NTdGFydGluZ05leHRMaW5lIDwgYnJlYWtzU3RhcnRpbmdUaGlzTGluZSkge1xuXHRcdFx0XHRyb3dzLnB1c2goJycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChyb3dMZW5ndGggKyBsZW5ndGhzW2luZGV4XSA+IGNvbHVtbnMgJiYgcm93TGVuZ3RoID4gMCAmJiBsZW5ndGhzW2luZGV4XSA+IDApIHtcblx0XHRcdGlmIChvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSAmJiByb3dMZW5ndGggPCBjb2x1bW5zKSB7XG5cdFx0XHRcdHdyYXBXb3JkKHJvd3MsIHdvcmQsIGNvbHVtbnMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIG9wdGlvbnMud29yZFdyYXAgPT09IGZhbHNlKSB7XG5cdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSArPSB3b3JkO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRyb3dzID0gcm93cy5tYXAocm93ID0+IHN0cmluZ1Zpc2libGVUcmltU3BhY2VzUmlnaHQocm93KSk7XG5cdH1cblxuXHRjb25zdCBwcmVTdHJpbmcgPSByb3dzLmpvaW4oJ1xcbicpO1xuXHRjb25zdCBwcmUgPSBbLi4ucHJlU3RyaW5nXTtcblxuXHQvLyBXZSBuZWVkIHRvIGtlZXAgYSBzZXBhcmF0ZSBpbmRleCBhcyBgU3RyaW5nI3NsaWNlKClgIHdvcmtzIG9uIFVuaWNvZGUgY29kZSB1bml0cywgd2hpbGUgYHByZWAgaXMgYW4gYXJyYXkgb2YgY29kZXBvaW50cy5cblx0bGV0IHByZVN0cmluZ0luZGV4ID0gMDtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgY2hhcmFjdGVyXSBvZiBwcmUuZW50cmllcygpKSB7XG5cdFx0cmV0dXJuVmFsdWUgKz0gY2hhcmFjdGVyO1xuXG5cdFx0aWYgKEVTQ0FQRVMuaGFzKGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnN0IHtncm91cHN9ID0gbmV3IFJlZ0V4cChgKD86XFxcXCR7QU5TSV9DU0l9KD88Y29kZT5cXFxcZCspbXxcXFxcJHtBTlNJX0VTQ0FQRV9MSU5LfSg/PHVyaT4uKikke0FOU0lfRVNDQVBFX0JFTEx9KWApLmV4ZWMocHJlU3RyaW5nLnNsaWNlKHByZVN0cmluZ0luZGV4KSkgfHwge2dyb3Vwczoge319O1xuXHRcdFx0aWYgKGdyb3Vwcy5jb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgY29kZSA9IE51bWJlci5wYXJzZUZsb2F0KGdyb3Vwcy5jb2RlKTtcblx0XHRcdFx0ZXNjYXBlQ29kZSA9IGNvZGUgPT09IEVORF9DT0RFID8gdW5kZWZpbmVkIDogY29kZTtcblx0XHRcdH0gZWxzZSBpZiAoZ3JvdXBzLnVyaSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVzY2FwZVVybCA9IGdyb3Vwcy51cmkubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogZ3JvdXBzLnVyaTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjb2RlID0gYW5zaVN0eWxlcy5jb2Rlcy5nZXQoTnVtYmVyKGVzY2FwZUNvZGUpKTtcblxuXHRcdGlmIChwcmVbaW5kZXggKyAxXSA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVVcmwpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lIeXBlcmxpbmsoJycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShjb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ1xcbicpIHtcblx0XHRcdGlmIChlc2NhcGVDb2RlICYmIGNvZGUpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgKz0gd3JhcEFuc2lDb2RlKGVzY2FwZUNvZGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKGVzY2FwZVVybCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cHJlU3RyaW5nSW5kZXggKz0gY2hhcmFjdGVyLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbi8vIEZvciBlYWNoIG5ld2xpbmUsIGludm9rZSB0aGUgbWV0aG9kIHNlcGFyYXRlbHlcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXBBbnNpKHN0cmluZywgY29sdW1ucywgb3B0aW9ucykge1xuXHRyZXR1cm4gU3RyaW5nKHN0cmluZylcblx0XHQubm9ybWFsaXplKClcblx0XHQucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAobGluZSA9PiBleGVjKGxpbmUsIGNvbHVtbnMsIG9wdGlvbnMpKVxuXHRcdC5qb2luKCdcXG4nKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2Uoc3RyKSB7XG4gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGFzIGNhbWVsIGNhc2UsIGUuZy4sIGZvb0Jhci5cbiAgICAvLyBieSBlbnN1cmluZyB0aGF0IHRoZSBzdHJpbmcgaXNuJ3QgYWxyZWFkeSBtaXhlZCBjYXNlOlxuICAgIGNvbnN0IGlzQ2FtZWxDYXNlID0gc3RyICE9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiBzdHIgIT09IHN0ci50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghaXNDYW1lbENhc2UpIHtcbiAgICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChzdHIuaW5kZXhPZignLScpID09PSAtMSAmJiBzdHIuaW5kZXhPZignXycpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IGNhbWVsY2FzZSA9ICcnO1xuICAgICAgICBsZXQgbmV4dENoclVwcGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdIeXBoZW5zID0gc3RyLm1hdGNoKC9eLSsvKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxlYWRpbmdIeXBoZW5zID8gbGVhZGluZ0h5cGhlbnNbMF0ubGVuZ3RoIDogMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGNociA9IHN0ci5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAobmV4dENoclVwcGVyKSB7XG4gICAgICAgICAgICAgICAgbmV4dENoclVwcGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY2hyID0gY2hyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSAhPT0gMCAmJiAoY2hyID09PSAnLScgfHwgY2hyID09PSAnXycpKSB7XG4gICAgICAgICAgICAgICAgbmV4dENoclVwcGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNociAhPT0gJy0nICYmIGNociAhPT0gJ18nKSB7XG4gICAgICAgICAgICAgICAgY2FtZWxjYXNlICs9IGNocjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FtZWxjYXNlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWNhbWVsaXplKHN0ciwgam9pblN0cmluZykge1xuICAgIGNvbnN0IGxvd2VyY2FzZSA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGpvaW5TdHJpbmcgPSBqb2luU3RyaW5nIHx8ICctJztcbiAgICBsZXQgbm90Q2FtZWxjYXNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hyTG93ZXIgPSBsb3dlcmNhc2UuY2hhckF0KGkpO1xuICAgICAgICBjb25zdCBjaHJTdHJpbmcgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICBpZiAoY2hyTG93ZXIgIT09IGNoclN0cmluZyAmJiBpID4gMCkge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGAke2pvaW5TdHJpbmd9JHtsb3dlcmNhc2UuY2hhckF0KGkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub3RDYW1lbGNhc2UgKz0gY2hyU3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3RDYW1lbGNhc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gbG9va3NMaWtlTnVtYmVyKHgpIHtcbiAgICBpZiAoeCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBpZiBsb2FkZWQgZnJvbSBjb25maWcsIG1heSBhbHJlYWR5IGJlIGEgbnVtYmVyLlxuICAgIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGhleGFkZWNpbWFsLlxuICAgIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoeCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGRvbid0IHRyZWF0IDAxMjMgYXMgYSBudW1iZXI7IGFzIGl0IGRyb3BzIHRoZSBsZWFkaW5nICcwJy5cbiAgICBpZiAoL14wW14uXS8udGVzdCh4KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvXlstXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoeCk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG5leHBvcnQgdmFyIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5O1xuKGZ1bmN0aW9uIChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSkge1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQk9PTEVBTlwiXSA9IFwiYm9vbGVhblwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiU1RSSU5HXCJdID0gXCJzdHJpbmdcIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIk5VTUJFUlwiXSA9IFwibnVtYmVyXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJBUlJBWVwiXSA9IFwiYXJyYXlcIjtcbn0pKERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IHx8IChEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSA9IHt9KSk7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItYXJyb3ctY2FsbGJhY2sgKi9cbmltcG9ydCB7IHRva2VuaXplQXJnU3RyaW5nIH0gZnJvbSAnLi90b2tlbml6ZS1hcmctc3RyaW5nLmpzJztcbmltcG9ydCB7IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IH0gZnJvbSAnLi95YXJncy1wYXJzZXItdHlwZXMuanMnO1xuaW1wb3J0IHsgY2FtZWxDYXNlLCBkZWNhbWVsaXplLCBsb29rc0xpa2VOdW1iZXIgfSBmcm9tICcuL3N0cmluZy11dGlscy5qcyc7XG5sZXQgbWl4aW47XG5leHBvcnQgY2xhc3MgWWFyZ3NQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKF9taXhpbikge1xuICAgICAgICBtaXhpbiA9IF9taXhpbjtcbiAgICB9XG4gICAgcGFyc2UoYXJnc0lucHV0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGFsaWFzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhcnJheTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYm9vbGVhbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWdPYmplY3RzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb2VyY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvdW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlbnZQcmVmaXg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5hcmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RyaW5nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBudW1iZXI6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF9fOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBrZXk6IHVuZGVmaW5lZFxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICAgICAgLy8gYWxsb3cgYSBzdHJpbmcgYXJndW1lbnQgdG8gYmUgcGFzc2VkIGluIHJhdGhlclxuICAgICAgICAvLyB0aGFuIGFuIGFyZ3YgYXJyYXkuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0b2tlbml6ZUFyZ1N0cmluZyhhcmdzSW5wdXQpO1xuICAgICAgICAvLyB0b2tlbml6ZUFyZ1N0cmluZyBhZGRzIGV4dHJhIHF1b3RlcyB0byBhcmdzIGlmIGFyZ3NJbnB1dCBpcyBhIHN0cmluZ1xuICAgICAgICAvLyBvbmx5IHN0cmlwIHRob3NlIGV4dHJhIHF1b3RlcyBpbiBwcm9jZXNzVmFsdWUgaWYgYXJnc0lucHV0IGlzIGEgc3RyaW5nXG4gICAgICAgIGNvbnN0IGlucHV0SXNTdHJpbmcgPSB0eXBlb2YgYXJnc0lucHV0ID09PSAnc3RyaW5nJztcbiAgICAgICAgLy8gYWxpYXNlcyBtaWdodCBoYXZlIHRyYW5zaXRpdmUgcmVsYXRpb25zaGlwcywgbm9ybWFsaXplIHRoaXMuXG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBjb21iaW5lQWxpYXNlcyhPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIG9wdHMuYWxpYXMpKTtcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgJ2Jvb2xlYW4tbmVnYXRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdjb21iaW5lLWFycmF5cyc6IGZhbHNlLFxuICAgICAgICAgICAgJ2RvdC1ub3RhdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnZHVwbGljYXRlLWFyZ3VtZW50cy1hcnJheSc6IHRydWUsXG4gICAgICAgICAgICAnZmxhdHRlbi1kdXBsaWNhdGUtYXJyYXlzJzogdHJ1ZSxcbiAgICAgICAgICAgICdncmVlZHktYXJyYXlzJzogdHJ1ZSxcbiAgICAgICAgICAgICdoYWx0LWF0LW5vbi1vcHRpb24nOiBmYWxzZSxcbiAgICAgICAgICAgICduYXJncy1lYXRzLW9wdGlvbnMnOiBmYWxzZSxcbiAgICAgICAgICAgICduZWdhdGlvbi1wcmVmaXgnOiAnbm8tJyxcbiAgICAgICAgICAgICdwYXJzZS1udW1iZXJzJzogdHJ1ZSxcbiAgICAgICAgICAgICdwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnOiB0cnVlLFxuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiBmYWxzZSxcbiAgICAgICAgICAgICdzZXQtcGxhY2Vob2xkZXIta2V5JzogZmFsc2UsXG4gICAgICAgICAgICAnc2hvcnQtb3B0aW9uLWdyb3Vwcyc6IHRydWUsXG4gICAgICAgICAgICAnc3RyaXAtYWxpYXNlZCc6IGZhbHNlLFxuICAgICAgICAgICAgJ3N0cmlwLWRhc2hlZCc6IGZhbHNlLFxuICAgICAgICAgICAgJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJzogZmFsc2VcbiAgICAgICAgfSwgb3B0cy5jb25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksIG9wdHMuZGVmYXVsdCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ09iamVjdHMgPSBvcHRzLmNvbmZpZ09iamVjdHMgfHwgW107XG4gICAgICAgIGNvbnN0IGVudlByZWZpeCA9IG9wdHMuZW52UHJlZml4O1xuICAgICAgICBjb25zdCBub3RGbGFnc09wdGlvbiA9IGNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3Qgbm90RmxhZ3NBcmd2ID0gbm90RmxhZ3NPcHRpb24gPyAnLS0nIDogJ18nO1xuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgLy8gYWxsb3cgYSBpMThuIGhhbmRsZXIgdG8gYmUgcGFzc2VkIGluLCBkZWZhdWx0IHRvIGEgZmFrZSBvbmUgKHV0aWwuZm9ybWF0KS5cbiAgICAgICAgY29uc3QgX18gPSBvcHRzLl9fIHx8IG1peGluLmZvcm1hdDtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSB7XG4gICAgICAgICAgICBhbGlhc2VzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgYXJyYXlzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgYm9vbHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBzdHJpbmdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbnVtYmVyczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGNvdW50czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGNvbmZpZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBuYXJnczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGNvZXJjaW9uczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5lZ2F0aXZlID0gL14tKFswLTldKyhcXC5bMC05XSspP3xcXC5bMC05XSspJC87XG4gICAgICAgIGNvbnN0IG5lZ2F0ZWRCb29sZWFuID0gbmV3IFJlZ0V4cCgnXi0tJyArIGNvbmZpZ3VyYXRpb25bJ25lZ2F0aW9uLXByZWZpeCddICsgJyguKyknKTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuYXJyYXkgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gb3B0LmtleSA6IG9wdDtcbiAgICAgICAgICAgIC8vIGFzc2lnbiB0byBmbGFnc1tib29sc3xzdHJpbmdzfG51bWJlcnNdXG4gICAgICAgICAgICBjb25zdCBhc3NpZ25tZW50ID0gT2JqZWN0LmtleXMob3B0KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5RmxhZ0tleXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJvb2xlYW46ICdib29scycsXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZzogJ3N0cmluZ3MnLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXI6ICdudW1iZXJzJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5RmxhZ0tleXNba2V5XTtcbiAgICAgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5wb3AoKTtcbiAgICAgICAgICAgIC8vIGFzc2lnbiBrZXkgdG8gYmUgY29lcmNlZFxuICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBmbGFnc1thc3NpZ25tZW50XVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsYWdzLmFycmF5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuYm9vbGVhbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MuYm9vbHNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLnN0cmluZyB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3Muc3RyaW5nc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMubnVtYmVyIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5udW1iZXJzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5jb3VudCB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MuY291bnRzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5ub3JtYWxpemUgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLm5vcm1hbGl6ZVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLm5hcmcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLm5hcmcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLm5hcmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmNvZXJjZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG9wdHMuY29lcmNlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvZXJjaW9uc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLmNvbmZpZykgfHwgdHlwZW9mIG9wdHMuY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQob3B0cy5jb25maWcpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY29uZmlnc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvbmZpZykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgbG9va3VwIHRhYmxlIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IGFsbFxuICAgICAgICAvLyBjb21iaW5hdGlvbnMgb2YgYWxpYXNlczoge2Y6IFsnZm9vJ10sIGZvbzogWydmJ119XG4gICAgICAgIGV4dGVuZEFsaWFzZXMob3B0cy5rZXksIGFsaWFzZXMsIG9wdHMuZGVmYXVsdCwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgLy8gYXBwbHkgZGVmYXVsdCB2YWx1ZXMgdG8gYWxsIGFsaWFzZXMuXG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbYWxpYXNdID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgY2hlY2tDb25maWd1cmF0aW9uKCk7XG4gICAgICAgIGxldCBub3RGbGFncyA9IFtdO1xuICAgICAgICBjb25zdCBhcmd2ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7IF86IFtdIH0pO1xuICAgICAgICAvLyBUT0RPKGJjb2UpOiBmb3IgdGhlIGZpcnN0IHBhc3MgYXQgcmVtb3Zpbmcgb2JqZWN0IHByb3RvdHlwZSAgd2UgZGlkbid0XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgcHJvdG90eXBlcyBmcm9tIG9iamVjdHMgcmV0dXJuZWQgYnkgdGhpcyBBUEksIHdlIG1pZ2h0IHdhbnRcbiAgICAgICAgLy8gdG8gZ3JhZHVhbGx5IG1vdmUgdG93YXJkcyBkb2luZyBzby5cbiAgICAgICAgY29uc3QgYXJndlJldHVybiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRBcmcgPSBhcmcucmVwbGFjZSgvXi17Myx9LywgJy0tLScpO1xuICAgICAgICAgICAgbGV0IGJyb2tlbjtcbiAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICBsZXQgbGV0dGVycztcbiAgICAgICAgICAgIGxldCBtO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICAvLyBhbnkgdW5rbm93biBvcHRpb24gKGV4Y2VwdCBmb3IgZW5kLW9mLW9wdGlvbnMsIFwiLS1cIilcbiAgICAgICAgICAgIGlmIChhcmcgIT09ICctLScgJiYgL14tLy50ZXN0KGFyZykgJiYgaXNVbmtub3duT3B0aW9uQXNBcmcoYXJnKSkge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICAgICAgLy8gLS0tLCAtLS09LCAtLS0tLCBldGMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0cnVuY2F0ZWRBcmcubWF0Y2goL14tLS0rKD18JCkvKSkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMgd2l0aG91dCBrZXkgbmFtZSBhcmUgaW52YWxpZC5cbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIC0tIHNlcGFyYXRlZCBieSA9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rPS8pIHx8ICghY29uZmlndXJhdGlvblsnc2hvcnQtb3B0aW9uLWdyb3VwcyddICYmIGFyZy5tYXRjaCgvXi0uKz0vKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2luZyBbXFxzXFxTXSBpbnN0ZWFkIG9mIC4gYmVjYXVzZSBqcyBkb2Vzbid0IHN1cHBvcnQgdGhlXG4gICAgICAgICAgICAgICAgLy8gJ2RvdGFsbCcgcmVnZXggbW9kaWZpZXIuIFNlZTpcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMDY4MzA4LzEzMjE2XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyhbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgLy8gYXJyYXlzIGZvcm1hdCA9ICctLWY9YSBiIGMnXG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIG1bMV0sIGFyZ3MsIG1bMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhtWzFdLCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXJncyBmb3JtYXQgPSAnLS1mPW1vbmtleSB3YXNoaW5nIGNhdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBtWzFdLCBhcmdzLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbikgJiYgY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaChuZWdhdGVkQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykgPyBbZmFsc2VdIDogZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAtLSBzZXBhcmF0ZWQgYnkgc3BhY2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLS4rLykgfHwgKCFjb25maWd1cmF0aW9uWydzaG9ydC1vcHRpb24tZ3JvdXBzJ10gJiYgYXJnLm1hdGNoKC9eLVteLV0rLykpKSB7XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0tPyguKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IGZvcm1hdCA9ICctLWZvbyBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctLWZvbyBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0cnV0aHkgZXZlbiBpZjogZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghbmV4dC5tYXRjaCgvXi0vKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkb3Qtbm90YXRpb24gZmxhZyBzZXBhcmF0ZWQgYnkgJz0nLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKz0vKSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKFtePV0rKT0oW1xcc1xcU10qKSQvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXJnKG1bMV0sIG1bMl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBkb3Qtbm90YXRpb24gZmxhZyBzZXBhcmF0ZWQgYnkgc3BhY2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tLlxcLi4rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgbSA9IGFyZy5tYXRjaCgvXi0oLlxcLi4rKS8pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICFuZXh0Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2goL14tW14tXSsvKSAmJiAhYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIGxldHRlcnMgPSBhcmcuc2xpY2UoMSwgLTEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBicm9rZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldHRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZy5zbGljZShqICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZy5zbGljZShqICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBsZXR0ZXJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBmb3JtYXQgPSAnLWY9YSBiIGMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdEFycmF5KGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctZj1tb25rZXkgd2FzaGluZyBjYXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbGV0dGVyIGlzIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyIGFuZCBuZXh0IHZhbHVlIGlzIGEgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC9eLT9cXGQrKFxcLlxcZCopPyhlLT9cXGQrKT8kLy50ZXN0KG5leHQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMobmV4dCwgZmxhZ3MuYm9vbHMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBkZWZhdWx0VmFsdWUobGV0dGVyc1tqXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGtleSA9IGFyZy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKCFicm9rZW4gJiYga2V5ICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IGZvcm1hdCA9ICctZiBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hcmdzIGZvcm1hdCA9ICctZiBhIGIgYydcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0cnV0aHkgZXZlbiBpZjogZmxhZ3MubmFyZ3Nba2V5XSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVhdE5hcmdzKGksIGtleSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkICYmICghL14oLXwtLSlbXi1dLy50ZXN0KG5leHQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5tYXRjaChuZWdhdGl2ZSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVswLTldJC8pICYmXG4gICAgICAgICAgICAgICAgYXJnLm1hdGNoKG5lZ2F0aXZlKSAmJlxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhhcmcuc2xpY2UoMSksIGZsYWdzLmJvb2xzKSkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmdsZS1kaWdpdCBib29sZWFuIGFsaWFzLCBlLmc6IHhhcmdzIC0wXG4gICAgICAgICAgICAgICAga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uWydoYWx0LWF0LW5vbi1vcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hQb3NpdGlvbmFsKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3JkZXIgb2YgcHJlY2VkZW5jZTpcbiAgICAgICAgLy8gMS4gY29tbWFuZCBsaW5lIGFyZ1xuICAgICAgICAvLyAyLiB2YWx1ZSBmcm9tIGVudiB2YXJcbiAgICAgICAgLy8gMy4gdmFsdWUgZnJvbSBjb25maWcgZmlsZVxuICAgICAgICAvLyA0LiB2YWx1ZSBmcm9tIGNvbmZpZyBvYmplY3RzXG4gICAgICAgIC8vIDUuIGNvbmZpZ3VyZWQgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgdHJ1ZSk7IC8vIHNwZWNpYWwgY2FzZTogY2hlY2sgZW52IHZhcnMgdGhhdCBwb2ludCB0byBjb25maWcgZmlsZVxuICAgICAgICBhcHBseUVudlZhcnMoYXJndiwgZmFsc2UpO1xuICAgICAgICBzZXRDb25maWcoYXJndik7XG4gICAgICAgIHNldENvbmZpZ09iamVjdHMoKTtcbiAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoYXJndiwgZmxhZ3MuYWxpYXNlcywgZGVmYXVsdHMsIHRydWUpO1xuICAgICAgICBhcHBseUNvZXJjaW9ucyhhcmd2KTtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3NldC1wbGFjZWhvbGRlci1rZXknXSlcbiAgICAgICAgICAgIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KTtcbiAgICAgICAgLy8gZm9yIGFueSBjb3VudHMgZWl0aGVyIG5vdCBpbiBhcmdzIG9yIHdpdGhvdXQgYW4gZXhwbGljaXQgZGVmYXVsdCwgc2V0IHRvIDBcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vICctLScgZGVmYXVsdHMgdG8gdW5kZWZpbmVkLlxuICAgICAgICBpZiAobm90RmxhZ3NPcHRpb24gJiYgbm90RmxhZ3MubGVuZ3RoKVxuICAgICAgICAgICAgYXJndltub3RGbGFnc0FyZ3ZdID0gW107XG4gICAgICAgIG5vdEZsYWdzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgYXJndltub3RGbGFnc0FyZ3ZdLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddICYmIGNvbmZpZ3VyYXRpb25bJ3N0cmlwLWRhc2hlZCddKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJy0tJyAmJiBrZXkuaW5jbHVkZXMoJy0nKSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnc3RyaXAtYWxpYXNlZCddKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBbXS5jb25jYXQoLi4uT2JqZWN0LmtleXMoYWxpYXNlcykubWFwKGsgPT4gYWxpYXNlc1trXSkpLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddICYmIGFsaWFzLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFyZ3ZbYWxpYXMuc3BsaXQoJy4nKS5tYXAocHJvcCA9PiBjYW1lbENhc2UocHJvcCkpLmpvaW4oJy4nKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2FsaWFzXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFB1c2ggYXJndW1lbnQgaW50byBwb3NpdGlvbmFsIGFycmF5LCBhcHBseWluZyBudW1lcmljIGNvZXJjaW9uOlxuICAgICAgICBmdW5jdGlvbiBwdXNoUG9zaXRpb25hbChhcmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlQ29lcmNlZE51bWJlciA9IG1heWJlQ29lcmNlTnVtYmVyKCdfJywgYXJnKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF5YmVDb2VyY2VkTnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5wdXNoKG1heWJlQ29lcmNlZE51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaG93IG1hbnkgYXJndW1lbnRzIHNob3VsZCB3ZSBjb25zdW1lLCBiYXNlZFxuICAgICAgICAvLyBvbiB0aGUgbmFyZ3Mgb3B0aW9uP1xuICAgICAgICBmdW5jdGlvbiBlYXROYXJncyhpLCBrZXksIGFyZ3MsIGFyZ0FmdGVyRXF1YWxTaWduKSB7XG4gICAgICAgICAgICBsZXQgaWk7XG4gICAgICAgICAgICBsZXQgdG9FYXQgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncyk7XG4gICAgICAgICAgICAvLyBOYU4gaGFzIGEgc3BlY2lhbCBtZWFuaW5nIGZvciB0aGUgYXJyYXkgdHlwZSwgaW5kaWNhdGluZyB0aGF0IG9uZSBvclxuICAgICAgICAgICAgLy8gbW9yZSB2YWx1ZXMgYXJlIGV4cGVjdGVkLlxuICAgICAgICAgICAgdG9FYXQgPSB0eXBlb2YgdG9FYXQgIT09ICdudW1iZXInIHx8IGlzTmFOKHRvRWF0KSA/IDEgOiB0b0VhdDtcbiAgICAgICAgICAgIGlmICh0b0VhdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0FyZ3VtZW50IHVuZXhwZWN0ZWQgZm9yOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYXZhaWxhYmxlID0gaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pID8gMCA6IDE7XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnbmFyZ3MtZWF0cy1vcHRpb25zJ10pIHtcbiAgICAgICAgICAgICAgICAvLyBjbGFzc2ljIGJlaGF2aW9yLCB5YXJncyBlYXRzIHBvc2l0aW9uYWwgYW5kIGRhc2ggYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIChpICsgMSkgKyBhdmFpbGFibGUgPCB0b0VhdCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IHRvRWF0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbmFyZ3Mgd2lsbCBub3QgY29uc3VtZSBmbGFnIGFyZ3VtZW50cywgZS5nLiwgLWFiYywgLS1mb28sXG4gICAgICAgICAgICAgICAgLy8gYW5kIHRlcm1pbmF0ZXMgd2hlbiBvbmUgaXMgb2JzZXJ2ZWQuXG4gICAgICAgICAgICAgICAgZm9yIChpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJnc1tpaV0ubWF0Y2goL14tW14wLTldLykgfHwgYXJnc1tpaV0ubWF0Y2gobmVnYXRpdmUpIHx8IGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZ3NbaWldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSsrO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSA8IHRvRWF0KVxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdOb3QgZW5vdWdoIGFyZ3VtZW50cyBmb2xsb3dpbmc6ICVzJywga2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY29uc3VtZWQgPSBNYXRoLm1pbihhdmFpbGFibGUsIHRvRWF0KTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pICYmIGNvbnN1bWVkID4gMCkge1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ0FmdGVyRXF1YWxTaWduKTtcbiAgICAgICAgICAgICAgICBjb25zdW1lZC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpaSA9IGkgKyAxOyBpaSA8IChjb25zdW1lZCArIGkgKyAxKTsgaWkrKykge1xuICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NbaWldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoaSArIGNvbnN1bWVkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhbiBvcHRpb24gaXMgYW4gYXJyYXksIGVhdCBhbGwgbm9uLWh5cGhlbmF0ZWQgYXJndW1lbnRzXG4gICAgICAgIC8vIGZvbGxvd2luZyBpdC4uLiBZVU0hXG4gICAgICAgIC8vIGUuZy4sIC0tZm9vIGFwcGxlIGJhbmFuYSBjYXQgYmVjb21lcyBbXCJhcHBsZVwiLCBcImJhbmFuYVwiLCBcImNhdFwiXVxuICAgICAgICBmdW5jdGlvbiBlYXRBcnJheShpLCBrZXksIGFyZ3MsIGFyZ0FmdGVyRXF1YWxTaWduKSB7XG4gICAgICAgICAgICBsZXQgYXJnc1RvU2V0ID0gW107XG4gICAgICAgICAgICBsZXQgbmV4dCA9IGFyZ0FmdGVyRXF1YWxTaWduIHx8IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgLy8gSWYgYm90aCBhcnJheSBhbmQgbmFyZ3MgYXJlIGNvbmZpZ3VyZWQsIGVuZm9yY2UgdGhlIG5hcmdzIGNvdW50OlxuICAgICAgICAgICAgY29uc3QgbmFyZ3NDb3VudCA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKTtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiYgISgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2godHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1VuZGVmaW5lZChuZXh0KSB8fFxuICAgICAgICAgICAgICAgIChpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikgJiYgL14tLy50ZXN0KG5leHQpICYmICFuZWdhdGl2ZS50ZXN0KG5leHQpICYmICFpc1Vua25vd25PcHRpb25Bc0FyZyhuZXh0KSkpIHtcbiAgICAgICAgICAgICAgICAvLyBmb3Iga2V5cyB3aXRob3V0IHZhbHVlID09PiBhcmdzVG9TZXQgcmVtYWlucyBhbiBlbXB0eSBbXVxuICAgICAgICAgICAgICAgIC8vIHNldCB1c2VyIGRlZmF1bHQgdmFsdWUsIGlmIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmVmFsID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0ID0gQXJyYXkuaXNBcnJheShkZWZWYWwpID8gZGVmVmFsIDogW2RlZlZhbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmFsdWUgaW4gLS1vcHRpb249dmFsdWUgaXMgZWF0ZW4gYXMgaXNcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBhcmdBZnRlckVxdWFsU2lnbiwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFyZ3MubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoIWNvbmZpZ3VyYXRpb25bJ2dyZWVkeS1hcnJheXMnXSAmJiBhcmdzVG9TZXQubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChuYXJnc0NvdW50ICYmIHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiBhcmdzVG9TZXQubGVuZ3RoID49IG5hcmdzQ291bnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmdzW2lpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgaSA9IGlpO1xuICAgICAgICAgICAgICAgICAgICBhcmdzVG9TZXQucHVzaChwcm9jZXNzVmFsdWUoa2V5LCBuZXh0LCBpbnB1dElzU3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgYm90aCBhcnJheSBhbmQgbmFyZ3MgYXJlIGNvbmZpZ3VyZWQsIGNyZWF0ZSBhbiBlcnJvciBpZiBsZXNzIHRoYW5cbiAgICAgICAgICAgIC8vIG5hcmdzIHBvc2l0aW9uYWxzIHdlcmUgZm91bmQuIE5hTiBoYXMgc3BlY2lhbCBtZWFuaW5nLCBpbmRpY2F0aW5nXG4gICAgICAgICAgICAvLyB0aGF0IGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyByZXF1aXJlZCAobW9yZSBhcmUgb2theSkuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5hcmdzQ291bnQgPT09ICdudW1iZXInICYmICgobmFyZ3NDb3VudCAmJiBhcmdzVG9TZXQubGVuZ3RoIDwgbmFyZ3NDb3VudCkgfHxcbiAgICAgICAgICAgICAgICAoaXNOYU4obmFyZ3NDb3VudCkgJiYgYXJnc1RvU2V0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1RvU2V0KTtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldEFyZyhrZXksIHZhbCwgc2hvdWxkU3RyaXBRdW90ZXMgPSBpbnB1dElzU3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoLy0vLnRlc3Qoa2V5KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXMgPSBrZXkuc3BsaXQoJy4nKS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZShwcm9wKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgYWRkTmV3QWxpYXMoa2V5LCBhbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShrZXksIHZhbCwgc2hvdWxkU3RyaXBRdW90ZXMpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRLZXkgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHNldEtleShhcmd2LCBzcGxpdEtleSwgdmFsdWUpO1xuICAgICAgICAgICAgLy8gaGFuZGxlIHBvcHVsYXRpbmcgYWxpYXNlcyBvZiB0aGUgZnVsbCBrZXlcbiAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIHBvcHVsYXRpbmcgYWxpYXNlcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZG90LW5vdGF0aW9uIGtleVxuICAgICAgICAgICAgaWYgKHNwbGl0S2V5Lmxlbmd0aCA+IDEgJiYgY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgKGZsYWdzLmFsaWFzZXNbc3BsaXRLZXlbMF1dIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXlQcm9wZXJ0aWVzID0geC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAvLyBleHBhbmQgYWxpYXMgd2l0aCBuZXN0ZWQgb2JqZWN0cyBpbiBrZXlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IFtdLmNvbmNhdChzcGxpdEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGEuc2hpZnQoKTsgLy8gbnVrZSB0aGUgb2xkIGtleS5cbiAgICAgICAgICAgICAgICAgICAga2V5UHJvcGVydGllcyA9IGtleVByb3BlcnRpZXMuY29uY2F0KGEpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwb3B1bGF0ZSBhbGlhcyBvbmx5IGlmIGlzIG5vdCBhbHJlYWR5IGFuIGFsaWFzIG9mIHRoZSBmdWxsIGtleVxuICAgICAgICAgICAgICAgICAgICAvLyAoYWxyZWFkeSBwb3B1bGF0ZWQgYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSkuaW5jbHVkZXMoa2V5UHJvcGVydGllcy5qb2luKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkoYXJndiwga2V5UHJvcGVydGllcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbm9ybWFsaXplIGdldHRlciBhbmQgc2V0dGVyIHdoZW4ga2V5IGlzIGluICdub3JtYWxpemUnIGJ1dCBpc24ndCBhbiBhcnJheVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5vcm1hbGl6ZSkgJiYgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSk7XG4gICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFyZ3ZSZXR1cm4sIGtleSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBtaXhpbi5ub3JtYWxpemUodmFsdWUpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFkZE5ld0FsaWFzKGtleSwgYWxpYXMpIHtcbiAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNba2V5XSAmJiBmbGFncy5hbGlhc2VzW2tleV0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFthbGlhc107XG4gICAgICAgICAgICAgICAgbmV3QWxpYXNlc1thbGlhc10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoZmxhZ3MuYWxpYXNlc1thbGlhc10gJiYgZmxhZ3MuYWxpYXNlc1thbGlhc10ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIGFkZE5ld0FsaWFzKGFsaWFzLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZShrZXksIHZhbCwgc2hvdWxkU3RyaXBRdW90ZXMpIHtcbiAgICAgICAgICAgIC8vIHN0cmluZ3MgbWF5IGJlIHF1b3RlZCwgY2xlYW4gdGhpcyB1cCBhcyB3ZSBhc3NpZ24gdmFsdWVzLlxuICAgICAgICAgICAgaWYgKHNob3VsZFN0cmlwUXVvdGVzKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gc3RyaXBRdW90ZXModmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBwYXJzaW5nIGJvb2xlYW4gYXJndW1lbnRzIC0tZm9vPXRydWUgLS1iYXIgZmFsc2UuXG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpIHx8IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICAgICAgICAgICAgPyB2YWwubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBtYXliZUNvZXJjZU51bWJlcihrZXksIHYpOyB9KVxuICAgICAgICAgICAgICAgIDogbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWwpO1xuICAgICAgICAgICAgLy8gaW5jcmVtZW50IGEgY291bnQgZ2l2ZW4gYXMgYXJnIChlaXRoZXIgbm8gdmFsdWUgb3IgdmFsdWUgcGFyc2VkIGFzIGJvb2xlYW4pXG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSAmJiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaW5jcmVtZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbm9ybWFsaXplZCB2YWx1ZSB3aGVuIGtleSBpcyBpbiAnbm9ybWFsaXplJyBhbmQgaW4gJ2FycmF5cydcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ub3JtYWxpemUpICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbC5tYXAoKHZhbCkgPT4geyByZXR1cm4gbWl4aW4ubm9ybWFsaXplKHZhbCk7IH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtaXhpbi5ub3JtYWxpemUodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYXliZUNvZXJjZU51bWJlcihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddICYmIGtleSA9PT0gJ18nKVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykgJiYgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRDb2VyY2VOdW1iZXIgPSBsb29rc0xpa2VOdW1iZXIodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ3BhcnNlLW51bWJlcnMnXSAmJiAoTnVtYmVyLmlzU2FmZUludGVnZXIoTWF0aC5mbG9vcihwYXJzZUZsb2F0KGAke3ZhbHVlfWApKSkpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRDb2VyY2VOdW1iZXIgfHwgKCFpc1VuZGVmaW5lZCh2YWx1ZSkgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IGFyZ3MgZnJvbSBjb25maWcuanNvbiBmaWxlLCB0aGlzIHNob3VsZCBiZVxuICAgICAgICAvLyBhcHBsaWVkIGxhc3Qgc28gdGhhdCBkZWZhdWx0cyBjYW4gYmUgYXBwbGllZC5cbiAgICAgICAgZnVuY3Rpb24gc2V0Q29uZmlnKGFyZ3YpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0xvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAvLyBleHBhbmQgZGVmYXVsdHMvYWxpYXNlcywgaW4tY2FzZSBhbnkgaGFwcGVuIHRvIHJlZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZy5qc29uIGZpbGUuXG4gICAgICAgICAgICBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhjb25maWdMb29rdXAsIGZsYWdzLmFsaWFzZXMsIGRlZmF1bHRzKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvbmZpZ3MpLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ0tleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBhcmd2W2NvbmZpZ0tleV0gfHwgY29uZmlnTG9va3VwW2NvbmZpZ0tleV07XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1BhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25maWcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb25maWdQYXRoID0gbWl4aW4ucmVzb2x2ZShtaXhpbi5jd2QoKSwgY29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlQ29uZmlnID0gZmxhZ3MuY29uZmlnc1tjb25maWdLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhyZXNvbHZlZENvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBjb25maWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBtaXhpbi5yZXF1aXJlKHJlc29sdmVkQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbm8gd2lsbCByZWNlaXZlIGEgUGVybWlzc2lvbkRlbmllZCBlcnJvciBpZiBhbiBhdHRlbXB0IGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWRlIHRvIGxvYWQgY29uZmlnIHdpdGhvdXQgdGhlIC0tYWxsb3ctcmVhZCBmbGFnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Lm5hbWUgPT09ICdQZXJtaXNzaW9uRGVuaWVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndltjb25maWdLZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgSlNPTiBjb25maWcgZmlsZTogJXMnLCBjb25maWdQYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgYXJncyBmcm9tIGNvbmZpZyBvYmplY3QuXG4gICAgICAgIC8vIGl0IHJlY3Vyc2l2ZWx5IGNoZWNrcyBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgZnVuY3Rpb24gc2V0Q29uZmlnT2JqZWN0KGNvbmZpZywgcHJldikge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmV2ID8gcHJldiArICcuJyArIGtleSA6IGtleTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYW4gaW5uZXIgb2JqZWN0IGFuZCB3ZSBoYXZlIGRvdC1ub3RhdGlvblxuICAgICAgICAgICAgICAgIC8vIGVuYWJsZWQsIHRyZWF0IGlubmVyIG9iamVjdHMgaW4gY29uZmlnIHRoZSBzYW1lIGFzXG4gICAgICAgICAgICAgICAgLy8gaGVhdmlseSBuZXN0ZWQgZG90IG5vdGF0aW9ucyAoZm9vLmJhci5hcHBsZSkuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgYnV0IG5vdCBhbiBhcnJheSwgY2hlY2sgbmVzdGVkIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0dGluZyBhcmd1bWVudHMgdmlhIENMSSB0YWtlcyBwcmVjZWRlbmNlIG92ZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIHdpdGhpbiB0aGUgY29uZmlnIGZpbGUuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzS2V5KGFyZ3YsIGZ1bGxLZXkuc3BsaXQoJy4nKSkgfHwgKGNoZWNrQWxsQWxpYXNlcyhmdWxsS2V5LCBmbGFncy5hcnJheXMpICYmIGNvbmZpZ3VyYXRpb25bJ2NvbWJpbmUtYXJyYXlzJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoZnVsbEtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IGFsbCBjb25maWcgb2JqZWN0cyBwYXNzZWQgaW4gb3B0c1xuICAgICAgICBmdW5jdGlvbiBzZXRDb25maWdPYmplY3RzKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPYmplY3RzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZ09iamVjdChjb25maWdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RW52VmFycyhhcmd2LCBjb25maWdPbmx5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudlByZWZpeCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gdHlwZW9mIGVudlByZWZpeCA9PT0gJ3N0cmluZycgPyBlbnZQcmVmaXggOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IG1peGluLmVudigpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnZWYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyB8fCBlbnZWYXIubGFzdEluZGV4T2YocHJlZml4LCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBnZXQgYXJyYXkgb2YgbmVzdGVkIGtleXMgYW5kIGNvbnZlcnQgdGhlbSB0byBjYW1lbCBjYXNlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBlbnZWYXIuc3BsaXQoJ19fJykubWFwKGZ1bmN0aW9uIChrZXksIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2Uoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGNvbmZpZ09ubHkgJiYgZmxhZ3MuY29uZmlnc1trZXlzLmpvaW4oJy4nKV0pIHx8ICFjb25maWdPbmx5KSAmJiAhaGFzS2V5KGFyZ3YsIGtleXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5cy5qb2luKCcuJyksIGVudltlbnZWYXJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5Q29lcmNpb25zKGFyZ3YpIHtcbiAgICAgICAgICAgIGxldCBjb2VyY2U7XG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBsaWVkLmhhcyhrZXkpKSB7IC8vIElmIHdlIGhhdmVuJ3QgYWxyZWFkeSBjb2VyY2VkIHRoaXMgb3B0aW9uIHZpYSBvbmUgb2YgaXRzIGFsaWFzZXNcbiAgICAgICAgICAgICAgICAgICAgY29lcmNlID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY29lcmNpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtYXliZUNvZXJjZU51bWJlcihrZXksIGNvZXJjZShhcmd2W2tleV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KSkuZm9yRWFjaChhbGkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLmFkZChhbGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2W2FsaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldFBsYWNlaG9sZGVyS2V5cyhhcmd2KSB7XG4gICAgICAgICAgICBmbGFncy5rZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IHNldCBwbGFjZWhvbGRlciBrZXlzIGZvciBkb3Qgbm90YXRpb24gb3B0aW9ucyAnZm9vLmJhcicuXG4gICAgICAgICAgICAgICAgaWYgKH5rZXkuaW5kZXhPZignLicpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd2W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKG9iaiwgYWxpYXNlcywgZGVmYXVsdHMsIGNhbkxvZyA9IGZhbHNlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNLZXkob2JqLCBrZXkuc3BsaXQoJy4nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwga2V5LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FuTG9nKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdGVkW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAoYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzS2V5KG9iaiwgeC5zcGxpdCgnLicpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRLZXkob2JqLCB4LnNwbGl0KCcuJyksIGRlZmF1bHRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9iajtcbiAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvblsnZG90LW5vdGF0aW9uJ10pXG4gICAgICAgICAgICAgICAga2V5cyA9IFtrZXlzLmpvaW4oJy4nKV07XG4gICAgICAgICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBvID0gKG9ba2V5XSB8fCB7fSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRLZXkob2JqLCBrZXlzLCB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyhiY29lKTogaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB5YXJncywgc3dpdGNoIHRvXG4gICAgICAgICAgICAgICAgLy8gT2JqZWN0LmNyZWF0ZShudWxsKSBmb3IgZG90IG5vdGF0aW9uOlxuICAgICAgICAgICAgICAgIGtleSA9IHNhbml0aXplS2V5KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvW2tleV0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgdGhhdCBvW2tleV0gaXMgYW4gYXJyYXksIGFuZCB0aGF0IHRoZSBsYXN0IGl0ZW0gaXMgYW4gZW1wdHkgb2JqZWN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvW2tleV0ucHVzaCh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBbb1trZXldLCB7fV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgdGhlIGVtcHR5IG9iamVjdCBhdCB0aGUgZW5kIG9mIHRoZSBvW2tleV0gYXJyYXksIHNvIHNldCBvIHRvIHRoYXQgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV1bb1trZXldLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IG9ba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRPRE8oYmNvZSk6IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgeWFyZ3MsIHN3aXRjaCB0b1xuICAgICAgICAgICAgLy8gT2JqZWN0LmNyZWF0ZShudWxsKSBmb3IgZG90IG5vdGF0aW9uOlxuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2FuaXRpemVLZXkoa2V5c1trZXlzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVHlwZUFycmF5ID0gY2hlY2tBbGxBbGlhc2VzKGtleXMuam9pbignLicpLCBmbGFncy5hcnJheXMpO1xuICAgICAgICAgICAgY29uc3QgaXNWYWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgZHVwbGljYXRlID0gY29uZmlndXJhdGlvblsnZHVwbGljYXRlLWFyZ3VtZW50cy1hcnJheSddO1xuICAgICAgICAgICAgLy8gbmFyZ3MgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGR1cGxpY2F0ZVxuICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGUgJiYgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoKCFpc1VuZGVmaW5lZChvW2tleV0pICYmIGZsYWdzLm5hcmdzW2tleV0gPT09IDEpIHx8IChBcnJheS5pc0FycmF5KG9ba2V5XSkgJiYgb1trZXldLmxlbmd0aCA9PT0gZmxhZ3MubmFyZ3Nba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gaW5jcmVtZW50KCkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBpbmNyZW1lbnQob1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGUgJiYgaXNUeXBlQXJyYXkgJiYgaXNWYWx1ZUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IGNvbmZpZ3VyYXRpb25bJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyddID8gb1trZXldLmNvbmNhdCh2YWx1ZSkgOiAoQXJyYXkuaXNBcnJheShvW2tleV1bMF0pID8gb1trZXldIDogW29ba2V5XV0pLmNvbmNhdChbdmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWR1cGxpY2F0ZSAmJiBCb29sZWFuKGlzVHlwZUFycmF5KSA9PT0gQm9vbGVhbihpc1ZhbHVlQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0gb1trZXldLmNvbmNhdChbdmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvW2tleV0gPT09IHVuZGVmaW5lZCAmJiBpc1R5cGVBcnJheSkge1xuICAgICAgICAgICAgICAgIG9ba2V5XSA9IGlzVmFsdWVBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGR1cGxpY2F0ZSAmJiAhKG9ba2V5XSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBbb1trZXldLCB2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleHRlbmQgdGhlIGFsaWFzZXMgbGlzdCB3aXRoIGluZmVycmVkIGFsaWFzZXMuXG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZEFsaWFzZXMoLi4uYXJncykge1xuICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvYmogfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGlmIHdlJ3ZlIGFscmVhZHkgYWRkZWQgYSBrZXlcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGFsaWFzZXMgYXJyYXksIGZvciBleGFtcGxlIGl0IG1pZ2h0XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4aXN0IGluIGJvdGggJ29wdHMuZGVmYXVsdCcgYW5kICdvcHRzLmtleScuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFncy5hbGlhc2VzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XSA9IFtdLmNvbmNhdChhbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgXCItLW9wdGlvbi1uYW1lXCIsIGFsc28gc2V0IGFyZ3Yub3B0aW9uTmFtZVxuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC8tLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2FtZWxDYXNlKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgXCItLW9wdGlvbk5hbWVcIiwgYWxzbyBzZXQgYXJndlsnb3B0aW9uLW5hbWUnXVxuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uY29uY2F0KGtleSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID4gMSAmJiAvW0EtWl0vLnRlc3QoeCkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBkZWNhbWVsaXplKHgsICctJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IGtleSAmJiBmbGFncy5hbGlhc2VzW2tleV0uaW5kZXhPZihjKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbY10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW3hdID0gW2tleV0uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XS5maWx0ZXIoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAhPT0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFnKSB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW10uY29uY2F0KGZsYWdzLmFsaWFzZXNba2V5XSB8fCBbXSwga2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmbGFnKTtcbiAgICAgICAgICAgIGNvbnN0IHNldEFsaWFzID0gdG9DaGVjay5maW5kKGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgcmV0dXJuIHNldEFsaWFzID8gZmxhZ1tzZXRBbGlhc10gOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNBbnlGbGFnKGtleSkge1xuICAgICAgICAgICAgY29uc3QgZmxhZ3NLZXlzID0gT2JqZWN0LmtleXMoZmxhZ3MpO1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFnc0tleXMubWFwKGsgPT4gZmxhZ3Nba10pKTtcbiAgICAgICAgICAgIHJldHVybiB0b0NoZWNrLnNvbWUoZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmbGFnKSA/IGZsYWcuaW5jbHVkZXMoa2V5KSA6IGZsYWdba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhc0ZsYWdzTWF0Y2hpbmcoYXJnLCAuLi5wYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdCguLi5wYXR0ZXJucyk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBhcmcubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIGhhc0FueUZsYWcobWF0Y2hbMV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYmFzZWQgb24gYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIHNob3J0IGZsYWcgZ3JvdXAgcGFyc2luZyBsb2dpY1xuICAgICAgICBmdW5jdGlvbiBoYXNBbGxTaG9ydEZsYWdzKGFyZykge1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIG5lZ2F0aXZlIG51bWJlciwgb3IgZG9lc24ndCBzdGFydCB3aXRoIGEgc2luZ2xlIGh5cGhlbiwgaXQncyBub3QgYSBzaG9ydCBmbGFnIGdyb3VwXG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSB8fCAhYXJnLm1hdGNoKC9eLVteLV0rLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFzQWxsRmxhZ3MgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEpLnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzQW55RmxhZyhsZXR0ZXJzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNBbGxGbGFncyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXSA9PT0gJz0nKSB8fFxuICAgICAgICAgICAgICAgICAgICBuZXh0ID09PSAnLScgfHxcbiAgICAgICAgICAgICAgICAgICAgKC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJiAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGxldHRlcnNbaiArIDFdICYmIGxldHRlcnNbaiArIDFdLm1hdGNoKC9cXFcvKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0FsbEZsYWdzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25bJ3Vua25vd24tb3B0aW9ucy1hcy1hcmdzJ10gJiYgaXNVbmtub3duT3B0aW9uKGFyZyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmtub3duT3B0aW9uKGFyZykge1xuICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLScpO1xuICAgICAgICAgICAgLy8gaWdub3JlIG5lZ2F0aXZlIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIHNob3J0IG9wdGlvbiBncm91cCBhbmQgYWxsIG9mIHRoZW0gYXJlIGNvbmZpZ3VyZWQsIGl0IGlzbid0IHVua25vd25cbiAgICAgICAgICAgIGlmIChoYXNBbGxTaG9ydEZsYWdzKGFyZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlLmcuICctLWNvdW50PTInXG4gICAgICAgICAgICBjb25zdCBmbGFnV2l0aEVxdWFscyA9IC9eLSsoW149XSs/KT1bXFxzXFxTXSokLztcbiAgICAgICAgICAgIC8vIGUuZy4gJy1hJyBvciAnLS1hcmcnXG4gICAgICAgICAgICBjb25zdCBub3JtYWxGbGFnID0gL14tKyhbXj1dKz8pJC87XG4gICAgICAgICAgICAvLyBlLmcuICctYS0nXG4gICAgICAgICAgICBjb25zdCBmbGFnRW5kaW5nSW5IeXBoZW4gPSAvXi0rKFtePV0rPyktJC87XG4gICAgICAgICAgICAvLyBlLmcuICctYWJjMTIzJ1xuICAgICAgICAgICAgY29uc3QgZmxhZ0VuZGluZ0luRGlnaXRzID0gL14tKyhbXj1dKz9cXGQrKSQvO1xuICAgICAgICAgICAgLy8gZS5nLiAnLWEvdXNyL2xvY2FsJ1xuICAgICAgICAgICAgY29uc3QgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMgPSAvXi0rKFtePV0rPylcXFcrLiokLztcbiAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZmxhZyBzdHlsZXMsIGluY2x1ZGluZyBuZWdhdGVkQm9vbGVhbiwgYSBwYXR0ZXJuIGRlZmluZWQgbmVhciB0aGUgc3RhcnQgb2YgdGhlIHBhcnNlIG1ldGhvZFxuICAgICAgICAgICAgcmV0dXJuICFoYXNGbGFnc01hdGNoaW5nKGFyZywgZmxhZ1dpdGhFcXVhbHMsIG5lZ2F0ZWRCb29sZWFuLCBub3JtYWxGbGFnLCBmbGFnRW5kaW5nSW5IeXBoZW4sIGZsYWdFbmRpbmdJbkRpZ2l0cywgZmxhZ0VuZGluZ0luTm9uV29yZENoYXJhY3RlcnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ha2UgYSBiZXN0IGVmZm9ydCB0byBwaWNrIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAvLyBmb3IgYW4gb3B0aW9uIGJhc2VkIG9uIG5hbWUgYW5kIHR5cGUuXG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiZcbiAgICAgICAgICAgICAgICBgJHtrZXl9YCBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JUeXBlKGd1ZXNzVHlwZShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gYSBkZWZhdWx0IHZhbHVlLCBnaXZlbiB0aGUgdHlwZSBvZiBhIGZsYWcuLFxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Rm9yVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU5dOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5TVFJJTkddOiAnJyxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuTlVNQkVSXTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWV06IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGRlZlt0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnaXZlbiBhIGZsYWcsIGVuZm9yY2UgYSBkZWZhdWx0IHR5cGUuXG4gICAgICAgIGZ1bmN0aW9uIGd1ZXNzVHlwZShrZXkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5zdHJpbmdzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuU1RSSU5HO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubnVtYmVycykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5Lk5VTUJFUjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSlcbiAgICAgICAgICAgICAgICB0eXBlID0gRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQk9PTEVBTjtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkFSUkFZO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNVbmRlZmluZWQobnVtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBpbmNvbnNpc3RlbmNpZXNcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCkge1xuICAgICAgICAgICAgLy8gY291bnQga2V5cyBzaG91bGQgbm90IGJlIHNldCBhcyBhcnJheS9uYXJnXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb3VudHMpLmZpbmQoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYXJyYXlzKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb246ICVzLCBvcHRzLmNvdW50IGV4Y2x1ZGVzIG9wdHMuYXJyYXkuJywga2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLm5hcmcuJywga2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxpYXNlczogT2JqZWN0LmFzc2lnbih7fSwgZmxhZ3MuYWxpYXNlcyksXG4gICAgICAgICAgICBhcmd2OiBPYmplY3QuYXNzaWduKGFyZ3ZSZXR1cm4sIGFyZ3YpLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIGRlZmF1bHRlZDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdGVkKSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgIG5ld0FsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIG5ld0FsaWFzZXMpXG4gICAgICAgIH07XG4gICAgfVxufVxuLy8gaWYgYW55IGFsaWFzZXMgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHdlIHNob3VsZFxuLy8gbWVyZ2UgdGhlbSB0b2dldGhlci5cbmZ1bmN0aW9uIGNvbWJpbmVBbGlhc2VzKGFsaWFzZXMpIHtcbiAgICBjb25zdCBhbGlhc0FycmF5cyA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgY2hhbmdlID0gdHJ1ZTtcbiAgICAvLyB0dXJuIGFsaWFzIGxvb2t1cCBoYXNoIHtrZXk6IFsnYWxpYXMxJywgJ2FsaWFzMiddfSBpbnRvXG4gICAgLy8gYSBzaW1wbGUgYXJyYXkgWydrZXknLCAnYWxpYXMxJywgJ2FsaWFzMiddXG4gICAgT2JqZWN0LmtleXMoYWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGFsaWFzQXJyYXlzLnB1c2goW10uY29uY2F0KGFsaWFzZXNba2V5XSwga2V5KSk7XG4gICAgfSk7XG4gICAgLy8gY29tYmluZSBhcnJheXMgdW50aWwgemVybyBjaGFuZ2VzIGFyZVxuICAgIC8vIG1hZGUgaW4gYW4gaXRlcmF0aW9uLlxuICAgIHdoaWxlIChjaGFuZ2UpIHtcbiAgICAgICAgY2hhbmdlID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxpYXNBcnJheXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGlpID0gaSArIDE7IGlpIDwgYWxpYXNBcnJheXMubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0ID0gYWxpYXNBcnJheXNbaV0uZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc0FycmF5c1tpaV0uaW5kZXhPZih2KSAhPT0gLTE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNBcnJheXNbaV0gPSBhbGlhc0FycmF5c1tpXS5jb25jYXQoYWxpYXNBcnJheXNbaWldKTtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNBcnJheXMuc3BsaWNlKGlpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1hcCBhcnJheXMgYmFjayB0byB0aGUgaGFzaC1sb29rdXAgKGRlLWR1cGUgd2hpbGVcbiAgICAvLyB3ZSdyZSBhdCBpdCkuXG4gICAgYWxpYXNBcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYWxpYXNBcnJheSkge1xuICAgICAgICBhbGlhc0FycmF5ID0gYWxpYXNBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIHNlbGYpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodikgPT09IGk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYXN0QWxpYXMgPSBhbGlhc0FycmF5LnBvcCgpO1xuICAgICAgICBpZiAobGFzdEFsaWFzICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxhc3RBbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbWJpbmVkW2xhc3RBbGlhc10gPSBhbGlhc0FycmF5O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xufVxuLy8gdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhIGNvdW50IGlzIGdpdmVuIGFzIGFuIGFyZ1xuLy8gaXQgaXMgTk9UIGNhbGxlZCB0byBzZXQgYSBkZWZhdWx0IHZhbHVlXG4vLyB0aHVzIHdlIGNhbiBzdGFydCB0aGUgY291bnQgYXQgMSBpbnN0ZWFkIG9mIDBcbmZ1bmN0aW9uIGluY3JlbWVudChvcmlnKSB7XG4gICAgcmV0dXJuIG9yaWcgIT09IHVuZGVmaW5lZCA/IG9yaWcgKyAxIDogMTtcbn1cbi8vIFRPRE8oYmNvZSk6IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgeWFyZ3MsIHN3aXRjaCB0b1xuLy8gT2JqZWN0LmNyZWF0ZShudWxsKSBmb3IgZG90IG5vdGF0aW9uOlxuZnVuY3Rpb24gc2FuaXRpemVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgIHJldHVybiAnX19fcHJvdG9fX18nO1xuICAgIHJldHVybiBrZXk7XG59XG5mdW5jdGlvbiBzdHJpcFF1b3Rlcyh2YWwpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICh2YWxbMF0gPT09IFwiJ1wiIHx8IHZhbFswXSA9PT0gJ1wiJykgJiZcbiAgICAgICAgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gdmFsWzBdKVxuICAgICAgICA/IHZhbC5zdWJzdHJpbmcoMSwgdmFsLmxlbmd0aCAtIDEpXG4gICAgICAgIDogdmFsO1xufVxuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IE1haW4gZW50cnlwb2ludCBmb3IgbGlicmFyaWVzIHVzaW5nIHlhcmdzLXBhcnNlciBpbiBOb2RlLmpzXG4gKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgQ29udHJpYnV0b3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gKi9cbnZhciBfYSwgX2IsIF9jO1xuLyogZXNsaW50LWRpc2FibGUgbi9uby11bnB1Ymxpc2hlZC1pbXBvcnQgKi9cbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgbm9ybWFsaXplLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYW1lbENhc2UsIGRlY2FtZWxpemUsIGxvb2tzTGlrZU51bWJlciB9IGZyb20gJy4vc3RyaW5nLXV0aWxzLmpzJztcbmltcG9ydCB7IFlhcmdzUGFyc2VyIH0gZnJvbSAnLi95YXJncy1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MtcGFyc2VyI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnMgZm9yIG91clxuLy8gdmVyc2lvbiBzdXBwb3J0IHBvbGljeS4gVGhlIFlBUkdTX01JTl9OT0RFX1ZFUlNJT04gaXMgdXNlZCBmb3IgdGVzdGluZyBvbmx5LlxuY29uc3QgbWluTm9kZVZlcnNpb24gPSAocHJvY2VzcyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgID8gTnVtYmVyKHByb2Nlc3MuZW52LllBUkdTX01JTl9OT0RFX1ZFUlNJT04pXG4gICAgOiAyMDtcbmNvbnN0IG5vZGVWZXJzaW9uID0gKF9iID0gKF9hID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLnZlcnNpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eubm9kZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKF9jID0gcHJvY2VzcyA9PT0gbnVsbCB8fCBwcm9jZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9jZXNzLnZlcnNpb24pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5zbGljZSgxKTtcbmlmIChub2RlVmVyc2lvbikge1xuICAgIGNvbnN0IG1ham9yID0gTnVtYmVyKG5vZGVWZXJzaW9uLm1hdGNoKC9eKFteLl0rKS8pWzFdKTtcbiAgICBpZiAobWFqb3IgPCBtaW5Ob2RlVmVyc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihgeWFyZ3MgcGFyc2VyIHN1cHBvcnRzIGEgbWluaW11bSBOb2RlLmpzIHZlcnNpb24gb2YgJHttaW5Ob2RlVmVyc2lvbn0uIFJlYWQgb3VyIHZlcnNpb24gc3VwcG9ydCBwb2xpY3k6IGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy1wYXJzZXIjc3VwcG9ydGVkLW5vZGVqcy12ZXJzaW9uc2ApO1xuICAgIH1cbn1cbi8vIENyZWF0ZXMgYSB5YXJncy1wYXJzZXIgaW5zdGFuY2UgdXNpbmcgTm9kZS5qcyBzdGFuZGFyZCBsaWJyYXJpZXM6XG5jb25zdCBlbnYgPSBwcm9jZXNzID8gcHJvY2Vzcy5lbnYgOiB7fTtcbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlID8gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpIDogdW5kZWZpbmVkO1xuY29uc3QgcGFyc2VyID0gbmV3IFlhcmdzUGFyc2VyKHtcbiAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgIGVudjogKCkgPT4ge1xuICAgICAgICByZXR1cm4gZW52O1xuICAgIH0sXG4gICAgZm9ybWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICByZXNvbHZlLFxuICAgIHJlcXVpcmU6IChwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goL1xcLmpzb24kLykpIHtcbiAgICAgICAgICAgIC8vIEFkZHJlc3NlczogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy8yMDQwXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignb25seSAuanNvbiBjb25maWcgZmlsZXMgYXJlIHN1cHBvcnRlZCBpbiBFU00nKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuY29uc3QgeWFyZ3NQYXJzZXIgPSBmdW5jdGlvbiBQYXJzZXIoYXJncywgb3B0cykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5wYXJzZShhcmdzLnNsaWNlKCksIG9wdHMpO1xuICAgIHJldHVybiByZXN1bHQuYXJndjtcbn07XG55YXJnc1BhcnNlci5kZXRhaWxlZCA9IGZ1bmN0aW9uIChhcmdzLCBvcHRzKSB7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZShhcmdzLnNsaWNlKCksIG9wdHMpO1xufTtcbnlhcmdzUGFyc2VyLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbnlhcmdzUGFyc2VyLmRlY2FtZWxpemUgPSBkZWNhbWVsaXplO1xueWFyZ3NQYXJzZXIubG9va3NMaWtlTnVtYmVyID0gbG9va3NMaWtlTnVtYmVyO1xuZXhwb3J0IGRlZmF1bHQgeWFyZ3NQYXJzZXI7XG4vLyBzcGVjaWFsIHN5bnRheCB0byBhbGxvdyB1bnF1YWxpZmllZCBkZWZhdWx0IGV4cG9ydCBmcm9tIENvbW1vbkpTXG5leHBvcnQgeyB5YXJnc1BhcnNlciBhcyAnbW9kdWxlLmV4cG9ydHMnIH07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG4vLyB0YWtlIGFuIHVuLXNwbGl0IGFyZ3Ygc3RyaW5nIGFuZCB0b2tlbml6ZSBpdC5cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZUFyZ1N0cmluZyhhcmdTdHJpbmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdTdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBhcmdTdHJpbmcubWFwKGUgPT4gdHlwZW9mIGUgIT09ICdzdHJpbmcnID8gZSArICcnIDogZSk7XG4gICAgfVxuICAgIGFyZ1N0cmluZyA9IGFyZ1N0cmluZy50cmltKCk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBwcmV2QyA9IG51bGw7XG4gICAgbGV0IGMgPSBudWxsO1xuICAgIGxldCBvcGVuaW5nID0gbnVsbDtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGFyZ1N0cmluZy5sZW5ndGg7IGlpKyspIHtcbiAgICAgICAgcHJldkMgPSBjO1xuICAgICAgICBjID0gYXJnU3RyaW5nLmNoYXJBdChpaSk7XG4gICAgICAgIC8vIHNwbGl0IG9uIHNwYWNlcyB1bmxlc3Mgd2UncmUgaW4gcXVvdGVzLlxuICAgICAgICBpZiAoYyA9PT0gJyAnICYmICFvcGVuaW5nKSB7XG4gICAgICAgICAgICBpZiAoIShwcmV2QyA9PT0gJyAnKSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IHNwbGl0IHRoZSBzdHJpbmcgaWYgd2UncmUgaW4gbWF0Y2hpbmdcbiAgICAgICAgLy8gb3BlbmluZyBvciBjbG9zaW5nIHNpbmdsZSBhbmQgZG91YmxlIHF1b3Rlcy5cbiAgICAgICAgaWYgKGMgPT09IG9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChjID09PSBcIidcIiB8fCBjID09PSAnXCInKSAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgb3BlbmluZyA9IGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzW2ldKVxuICAgICAgICAgICAgYXJnc1tpXSA9ICcnO1xuICAgICAgICBhcmdzW2ldICs9IGM7XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xufVxuIiwiZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpIHtcbiAgICBpZiAoaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDE7XG59XG5mdW5jdGlvbiBpc0J1bmRsZWRFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gaXNFbGVjdHJvbkFwcCgpICYmICFwcm9jZXNzLmRlZmF1bHRBcHA7XG59XG5mdW5jdGlvbiBpc0VsZWN0cm9uQXBwKCkge1xuICAgIHJldHVybiAhIXByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb247XG59XG5leHBvcnQgZnVuY3Rpb24gaGlkZUJpbihhcmd2KSB7XG4gICAgcmV0dXJuIGFyZ3Yuc2xpY2UoZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpICsgMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvY2Vzc0FyZ3ZCaW4oKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuYXJndltnZXRQcm9jZXNzQXJndkJpbkluZGV4KCldO1xufVxuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZnM6IHtcbiAgICAgICAgcmVhZEZpbGVTeW5jLFxuICAgICAgICB3cml0ZUZpbGVcbiAgICB9LFxuICAgIGZvcm1hdCxcbiAgICByZXNvbHZlLFxuICAgIGV4aXN0czogKGZpbGUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0U3luYyhmaWxlKS5pc0ZpbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwibGV0IHNoaW07XG5jbGFzcyBZMThOIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRzKSB7XG4gICAgICAgIC8vIGNvbmZpZ3VyYWJsZSBvcHRpb25zLlxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgdGhpcy5kaXJlY3RvcnkgPSBvcHRzLmRpcmVjdG9yeSB8fCAnLi9sb2NhbGVzJztcbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyA9IHR5cGVvZiBvcHRzLnVwZGF0ZUZpbGVzID09PSAnYm9vbGVhbicgPyBvcHRzLnVwZGF0ZUZpbGVzIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBvcHRzLmxvY2FsZSB8fCAnZW4nO1xuICAgICAgICB0aGlzLmZhbGxiYWNrVG9MYW5ndWFnZSA9IHR5cGVvZiBvcHRzLmZhbGxiYWNrVG9MYW5ndWFnZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5mYWxsYmFja1RvTGFuZ3VhZ2UgOiB0cnVlO1xuICAgICAgICAvLyBpbnRlcm5hbCBzdHVmZi5cbiAgICAgICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZSA9IFtdO1xuICAgIH1cbiAgICBfXyguLi5hcmdzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ2dlZExpdGVyYWwoYXJndW1lbnRzWzBdLCAuLi5hcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ciA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBzdGFydCB3aXRoIG5vb3AuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHsgfTsgLy8gbm9vcC5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIC8vIHdlJ3ZlIG9ic2VydmVkIGEgbmV3IHN0cmluZywgdXBkYXRlIHRoZSBsYW5ndWFnZSBmaWxlLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gJiYgdGhpcy51cGRhdGVGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSA9IHN0cjtcbiAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBsb2NhbGUsXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGVzZSB2YWx1ZXMgY291bGQgY2hhbmdlIGJlZm9yZSB0aGVcbiAgICAgICAgICAgIC8vIHdyaXRlIGlzIHBlcmZvcm1lZC5cbiAgICAgICAgICAgIHRoaXMuX2VucXVldWVXcml0ZSh7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmRpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNoaW0uZm9ybWF0LmFwcGx5KHNoaW0uZm9ybWF0LCBbdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc3RyXSB8fCBzdHJdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICAgIF9fbigpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnN0IHNpbmd1bGFyID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBwbHVyYWwgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBsZXQgY2IgPSBmdW5jdGlvbiAoKSB7IH07IC8vIHN0YXJ0IHdpdGggbm9vcC5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICBsZXQgc3RyID0gcXVhbnRpdHkgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbDtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSkge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl07XG4gICAgICAgICAgICBzdHIgPSBlbnRyeVtxdWFudGl0eSA9PT0gMSA/ICdvbmUnIDogJ290aGVyJ107XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UndmUgb2JzZXJ2ZWQgYSBuZXcgc3RyaW5nLCB1cGRhdGUgdGhlIGxhbmd1YWdlIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdICYmIHRoaXMudXBkYXRlRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSA9IHtcbiAgICAgICAgICAgICAgICBvbmU6IHNpbmd1bGFyLFxuICAgICAgICAgICAgICAgIG90aGVyOiBwbHVyYWxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbG9jYWxlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhlc2UgdmFsdWVzIGNvdWxkIGNoYW5nZSBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyB3cml0ZSBpcyBwZXJmb3JtZWQuXG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlV3JpdGUoe1xuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGEgJWQgcGxhY2Vob2xkZXIgaXMgcHJvdmlkZWQsIGFkZCBxdWFudGl0eVxuICAgICAgICAvLyB0byB0aGUgYXJndW1lbnRzIGV4cGFuZGVkIGJ5IHV0aWwuZm9ybWF0LlxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbc3RyXTtcbiAgICAgICAgaWYgKH5zdHIuaW5kZXhPZignJWQnKSlcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHF1YW50aXR5KTtcbiAgICAgICAgcmV0dXJuIHNoaW0uZm9ybWF0LmFwcGx5KHNoaW0uZm9ybWF0LCB2YWx1ZXMuY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gICAgc2V0TG9jYWxlKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICB9XG4gICAgZ2V0TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGU7XG4gICAgfVxuICAgIHVwZGF0ZUxvY2FsZShvYmopIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSlcbiAgICAgICAgICAgIHRoaXMuX3JlYWRMb2NhbGVGaWxlKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3RhZ2dlZExpdGVyYWwocGFydHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuICAgICAgICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0LCBpKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgIHN0ciArPSBwYXJ0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9ICclcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fXy5hcHBseSh0aGlzLCBbc3RyXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmdzLCAxKSkpO1xuICAgIH1cbiAgICBfZW5xdWV1ZVdyaXRlKHdvcmspIHtcbiAgICAgICAgdGhpcy53cml0ZVF1ZXVlLnB1c2god29yayk7XG4gICAgICAgIGlmICh0aGlzLndyaXRlUXVldWUubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1dyaXRlUXVldWUoKTtcbiAgICB9XG4gICAgX3Byb2Nlc3NXcml0ZVF1ZXVlKCkge1xuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHdvcmsgPSB0aGlzLndyaXRlUXVldWVbMF07XG4gICAgICAgIC8vIGRlc3RydWN0dXJlIHRoZSBlbnF1ZXVlZCB3b3JrLlxuICAgICAgICBjb25zdCBkaXJlY3RvcnkgPSB3b3JrLmRpcmVjdG9yeTtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gd29yay5sb2NhbGU7XG4gICAgICAgIGNvbnN0IGNiID0gd29yay5jYjtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gdGhpcy5fcmVzb2x2ZUxvY2FsZUZpbGUoZGlyZWN0b3J5LCBsb2NhbGUpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkTG9jYWxlID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jYWNoZVtsb2NhbGVdLCBudWxsLCAyKTtcbiAgICAgICAgc2hpbS5mcy53cml0ZUZpbGUobGFuZ3VhZ2VGaWxlLCBzZXJpYWxpemVkTG9jYWxlLCAndXRmLTgnLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBfdGhpcy53cml0ZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMud3JpdGVRdWV1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIF90aGlzLl9wcm9jZXNzV3JpdGVRdWV1ZSgpO1xuICAgICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9yZWFkTG9jYWxlRmlsZSgpIHtcbiAgICAgICAgbGV0IGxvY2FsZUxvb2t1cCA9IHt9O1xuICAgICAgICBjb25zdCBsYW5ndWFnZUZpbGUgPSB0aGlzLl9yZXNvbHZlTG9jYWxlRmlsZSh0aGlzLmRpcmVjdG9yeSwgdGhpcy5sb2NhbGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB1c2luZyBhIGJ1bmRsZXIgc3VjaCBhcyB3ZWJwYWNrLCByZWFkRmlsZVN5bmMgbWF5IG5vdCBiZSBkZWZpbmVkOlxuICAgICAgICAgICAgaWYgKHNoaW0uZnMucmVhZEZpbGVTeW5jKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlTG9va3VwID0gSlNPTi5wYXJzZShzaGltLmZzLnJlYWRGaWxlU3luYyhsYW5ndWFnZUZpbGUsICd1dGYtOCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9ICdzeW50YXggZXJyb3IgaW4gJyArIGxhbmd1YWdlRmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpXG4gICAgICAgICAgICAgICAgbG9jYWxlTG9va3VwID0ge307XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdID0gbG9jYWxlTG9va3VwO1xuICAgIH1cbiAgICBfcmVzb2x2ZUxvY2FsZUZpbGUoZGlyZWN0b3J5LCBsb2NhbGUpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBzaGltLnJlc29sdmUoZGlyZWN0b3J5LCAnLi8nLCBsb2NhbGUgKyAnLmpzb24nKTtcbiAgICAgICAgaWYgKHRoaXMuZmFsbGJhY2tUb0xhbmd1YWdlICYmICF0aGlzLl9maWxlRXhpc3RzU3luYyhmaWxlKSAmJiB+bG9jYWxlLmxhc3RJbmRleE9mKCdfJykpIHtcbiAgICAgICAgICAgIC8vIGF0dGVtcHQgZmFsbGJhY2sgdG8gbGFuZ3VhZ2Ugb25seVxuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gc2hpbS5yZXNvbHZlKGRpcmVjdG9yeSwgJy4vJywgbG9jYWxlLnNwbGl0KCdfJylbMF0gKyAnLmpzb24nKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhpc3RzU3luYyhsYW5ndWFnZUZpbGUpKVxuICAgICAgICAgICAgICAgIGZpbGUgPSBsYW5ndWFnZUZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuICAgIF9maWxlRXhpc3RzU3luYyhmaWxlKSB7XG4gICAgICAgIHJldHVybiBzaGltLmV4aXN0cyhmaWxlKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24geTE4bihvcHRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBjb25zdCB5MThuID0gbmV3IFkxOE4ob3B0cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgX186IHkxOG4uX18uYmluZCh5MThuKSxcbiAgICAgICAgX19uOiB5MThuLl9fbi5iaW5kKHkxOG4pLFxuICAgICAgICBzZXRMb2NhbGU6IHkxOG4uc2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIGdldExvY2FsZTogeTE4bi5nZXRMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgdXBkYXRlTG9jYWxlOiB5MThuLnVwZGF0ZUxvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBsb2NhbGU6IHkxOG4ubG9jYWxlXG4gICAgfTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIGluIGEgYW5vdGhlciBmdW5jdGlvbiB0byBmaW5kIG91dCB0aGUgZmlsZSBmcm9tXG4vLyB3aGljaCB0aGF0IGZ1bmN0aW9uIHdhcyBjYWxsZWQgZnJvbS4gKEluc3BlY3RzIHRoZSB2OCBzdGFjayB0cmFjZSlcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzMjI3NDg5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldENhbGxlckZpbGUocG9zaXRpb24pIHtcbiAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMCkgeyBwb3NpdGlvbiA9IDI7IH1cbiAgICBpZiAocG9zaXRpb24gPj0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2dldENhbGxlckZpbGUocG9zaXRpb24pIHJlcXVpcmVzIHBvc2l0aW9uIGJlIGxlc3MgdGhlbiBFcnJvci5zdGFja1RyYWNlTGltaXQgYnV0IHBvc2l0aW9uIHdhczogYCcgKyBwb3NpdGlvbiArICdgIGFuZCBFcnJvci5zdGFja1RyYWNlTGltaXQgd2FzOiBgJyArIEVycm9yLnN0YWNrVHJhY2VMaW1pdCArICdgJyk7XG4gICAgfVxuICAgIHZhciBvbGRQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcbiAgICB2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IG9sZFByZXBhcmVTdGFja1RyYWNlO1xuICAgIGlmIChzdGFjayAhPT0gbnVsbCAmJiB0eXBlb2Ygc3RhY2sgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIHN0YWNrWzBdIGhvbGRzIHRoaXMgZmlsZVxuICAgICAgICAvLyBzdGFja1sxXSBob2xkcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWRcbiAgICAgICAgLy8gc3RhY2tbMl0gaG9sZHMgdGhlIGZpbGUgd2UncmUgaW50ZXJlc3RlZCBpblxuICAgICAgICByZXR1cm4gc3RhY2tbcG9zaXRpb25dID8gc3RhY2tbcG9zaXRpb25dLmdldEZpbGVOYW1lKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgeyBub3RTdHJpY3RFcXVhbCwgc3RyaWN0RXF1YWwgfSBmcm9tICdhc3NlcnQnXG5pbXBvcnQgY2xpdWkgZnJvbSAnY2xpdWknXG5pbXBvcnQgZXNjYWxhZGUgZnJvbSAnZXNjYWxhZGUvc3luYydcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICd1dGlsJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgUGFyc2VyIGZyb20gJ3lhcmdzLXBhcnNlcidcbmltcG9ydCB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCByZWxhdGl2ZSwgcmVzb2x2ZSwgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZXRQcm9jZXNzQXJndkJpbiB9IGZyb20gJy4uLy4uL2J1aWxkL2xpYi91dGlscy9wcm9jZXNzLWFyZ3YuanMnXG5pbXBvcnQgc3RyaW5nV2lkdGggZnJvbSAnc3RyaW5nLXdpZHRoJztcbmltcG9ydCB5MThuIGZyb20gJ3kxOG4nXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IGdldENhbGxlckZpbGUgZnJvbSAnZ2V0LWNhbGxlci1maWxlJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdub2RlOmZzJ1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBtYWluRmlsZW5hbWUgPSBfX2Rpcm5hbWUuc3Vic3RyaW5nKDAsIF9fZGlybmFtZS5sYXN0SW5kZXhPZignbm9kZV9tb2R1bGVzJykpO1xuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnQ6IHtcbiAgICBub3RTdHJpY3RFcXVhbCxcbiAgICBzdHJpY3RFcXVhbFxuICB9LFxuICBjbGl1aSxcbiAgZmluZFVwOiBlc2NhbGFkZSxcbiAgZ2V0RW52OiAoa2V5KSA9PiB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV1cbiAgfSxcbiAgaW5zcGVjdCxcbiAgZ2V0UHJvY2Vzc0FyZ3ZCaW4sXG4gIG1haW5GaWxlbmFtZTogbWFpbkZpbGVuYW1lIHx8IHByb2Nlc3MuY3dkKCksXG4gIFBhcnNlcixcbiAgcGF0aDoge1xuICAgIGJhc2VuYW1lLFxuICAgIGRpcm5hbWUsXG4gICAgZXh0bmFtZSxcbiAgICByZWxhdGl2ZSxcbiAgICByZXNvbHZlLFxuICAgIGpvaW5cbiAgfSxcbiAgcHJvY2Vzczoge1xuICAgIGFyZ3Y6ICgpID0+IHByb2Nlc3MuYXJndixcbiAgICBjd2Q6IHByb2Nlc3MuY3dkLFxuICAgIGVtaXRXYXJuaW5nOiAod2FybmluZywgdHlwZSkgPT4gcHJvY2Vzcy5lbWl0V2FybmluZyh3YXJuaW5nLCB0eXBlKSxcbiAgICBleGVjUGF0aDogKCkgPT4gcHJvY2Vzcy5leGVjUGF0aCxcbiAgICBleGl0OiAoY29kZSkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG4vbm8tcHJvY2Vzcy1leGl0XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfSxcbiAgICBuZXh0VGljazogcHJvY2Vzcy5uZXh0VGljayxcbiAgICBzdGRDb2x1bW5zOiB0eXBlb2YgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogbnVsbFxuICB9LFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICByZXF1aXJlLFxuICBnZXRDYWxsZXJGaWxlOiAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGVyRmlsZSA9IGdldENhbGxlckZpbGUoMyk7XG4gICAgcmV0dXJuIGNhbGxlckZpbGUubWF0Y2goL15maWxlOlxcL1xcLy8pID8gZmlsZVVSTFRvUGF0aChjYWxsZXJGaWxlKSA6IGNhbGxlckZpbGU7XG4gIH0sXG4gIHN0cmluZ1dpZHRoLFxuICB5MThuOiB5MThuKHtcbiAgICBkaXJlY3Rvcnk6IHJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vLi4vbG9jYWxlcycpLFxuICAgIHVwZGF0ZUZpbGVzOiBmYWxzZVxuICB9KVxufVxuIiwiaW1wb3J0IHNoaW0gZnJvbSAnLi9idWlsZC9saWIvcGxhdGZvcm0tc2hpbXMvbm9kZS5qcydcbmltcG9ydCB7IHkxOG4gYXMgX3kxOG4gfSBmcm9tICcuL2J1aWxkL2xpYi9pbmRleC5qcydcblxuY29uc3QgeTE4biA9IChvcHRzKSA9PiB7XG4gIHJldHVybiBfeTE4bihvcHRzLCBzaGltKVxufVxuXG5leHBvcnQgZGVmYXVsdCB5MThuXG4iLCIvLyBCb290c3RyYXAgY2xpdWkgd2l0aCBDb21tb25KUyBkZXBlbmRlbmNpZXM6XG5pbXBvcnQgeyBjbGl1aSB9IGZyb20gJy4vYnVpbGQvbGliL2luZGV4LmpzJ1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ3N0cmluZy13aWR0aCdcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnc3RyaXAtYW5zaSdcbmltcG9ydCB3cmFwQW5zaSBmcm9tICd3cmFwLWFuc2knXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVpIChvcHRzKSB7XG4gIHJldHVybiBjbGl1aShvcHRzLCB7XG4gICAgc3RyaW5nV2lkdGgsXG4gICAgc3RyaXBBbnNpLFxuICAgIHdyYXA6IHdyYXBBbnNpXG4gIH0pXG59XG5cbmV4cG9ydCB7dWkgYXMgJ21vZHVsZS5leHBvcnRzJ307XG4iLCJpbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWFkZGlyU3luYywgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChzdGFydCwgY2FsbGJhY2spIHtcblx0bGV0IGRpciA9IHJlc29sdmUoJy4nLCBzdGFydCk7XG5cdGxldCB0bXAsIHN0YXRzID0gc3RhdFN5bmMoZGlyKTtcblxuXHRpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcblx0XHRkaXIgPSBkaXJuYW1lKGRpcik7XG5cdH1cblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRtcCA9IGNhbGxiYWNrKGRpciwgcmVhZGRpclN5bmMoZGlyKSk7XG5cdFx0aWYgKHRtcCkgcmV0dXJuIHJlc29sdmUoZGlyLCB0bXApO1xuXHRcdGRpciA9IGRpcm5hbWUodG1wID0gZGlyKTtcblx0XHRpZiAodG1wID09PSBkaXIpIGJyZWFrO1xuXHR9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc2hpbSwgbWVzc2FnZSkge1xuICAgIHNoaW0uYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNpbmdsZUtleShhY3R1YWwsIHNoaW0pIHtcbiAgICBzaGltLmFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWN0dWFsLCAnc3RyaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0S2V5cyhvYmplY3QpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gICAgcmV0dXJuICghIW1heWJlUHJvbWlzZSAmJlxuICAgICAgICAhIW1heWJlUHJvbWlzZS50aGVuICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4iLCJleHBvcnQgY2xhc3MgWUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1zZykge1xuICAgICAgICBzdXBlcihtc2cgfHwgJ3lhcmdzIGVycm9yJyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdZRXJyb3InO1xuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFlFcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcGFyc2VDb21tYW5kKGNtZCkge1xuICAgIGNvbnN0IGV4dHJhU3BhY2VzU3RyaXBwZWRDb21tYW5kID0gY21kLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKTtcbiAgICBjb25zdCBzcGxpdENvbW1hbmQgPSBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZC5zcGxpdCgvXFxzKyg/IVteW10qXXxbXjxdKj4pLyk7XG4gICAgY29uc3QgYnJlZ2V4ID0gL1xcLipbXFxdWzw+XS9nO1xuICAgIGNvbnN0IGZpcnN0Q29tbWFuZCA9IHNwbGl0Q29tbWFuZC5zaGlmdCgpO1xuICAgIGlmICghZmlyc3RDb21tYW5kKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGNvbW1hbmQgZm91bmQgaW46ICR7Y21kfWApO1xuICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSB7XG4gICAgICAgIGNtZDogZmlyc3RDb21tYW5kLnJlcGxhY2UoYnJlZ2V4LCAnJyksXG4gICAgICAgIGRlbWFuZGVkOiBbXSxcbiAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH07XG4gICAgc3BsaXRDb21tYW5kLmZvckVhY2goKGNtZCwgaSkgPT4ge1xuICAgICAgICBsZXQgdmFyaWFkaWMgPSBmYWxzZTtcbiAgICAgICAgY21kID0gY21kLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGlmICgvXFwuK1tcXF0+XS8udGVzdChjbWQpICYmIGkgPT09IHNwbGl0Q29tbWFuZC5sZW5ndGggLSAxKVxuICAgICAgICAgICAgdmFyaWFkaWMgPSB0cnVlO1xuICAgICAgICBpZiAoL15cXFsvLnRlc3QoY21kKSkge1xuICAgICAgICAgICAgcGFyc2VkQ29tbWFuZC5vcHRpb25hbC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZC5yZXBsYWNlKGJyZWdleCwgJycpLnNwbGl0KCd8JyksXG4gICAgICAgICAgICAgICAgdmFyaWFkaWMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuZGVtYW5kZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkQ29tbWFuZDtcbn1cbiIsImltcG9ydCB7IFlFcnJvciB9IGZyb20gJy4veWVycm9yLmpzJztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZCB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC5qcyc7XG5jb25zdCBwb3NpdGlvbk5hbWUgPSBbJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcsICdmb3VydGgnLCAnZmlmdGgnLCAnc2l4dGgnXTtcbmV4cG9ydCBmdW5jdGlvbiBhcmdzZXJ0KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICBmdW5jdGlvbiBwYXJzZUFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gW3sgZGVtYW5kZWQ6IFtdLCBvcHRpb25hbDogW10gfSwgYXJnMSwgYXJnMl1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHBhcnNlQ29tbWFuZChgY21kICR7YXJnMX1gKSxcbiAgICAgICAgICAgICAgICBhcmcyLFxuICAgICAgICAgICAgICAgIGFyZzMsXG4gICAgICAgICAgICBdO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAwO1xuICAgICAgICBjb25zdCBbcGFyc2VkLCBjYWxsZXJBcmd1bWVudHMsIF9sZW5ndGhdID0gcGFyc2VBcmdzKCk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGNhbGxlckFyZ3VtZW50cyk7XG4gICAgICAgIHdoaWxlIChhcmdzLmxlbmd0aCAmJiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGFyZ3MucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IF9sZW5ndGggfHwgYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPCBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBOb3QgZW5vdWdoIGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgJHtwYXJzZWQuZGVtYW5kZWQubGVuZ3RofSBidXQgcmVjZWl2ZWQgJHthcmdzLmxlbmd0aH0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxDb21tYW5kcyA9IHBhcnNlZC5kZW1hbmRlZC5sZW5ndGggKyBwYXJzZWQub3B0aW9uYWwubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID4gdG90YWxDb21tYW5kcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLiBFeHBlY3RlZCBtYXggJHt0b3RhbENvbW1hbmRzfSBidXQgcmVjZWl2ZWQgJHtsZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGRlbWFuZGVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVkVHlwZSA9IGd1ZXNzVHlwZShhcmcpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUeXBlcyA9IGRlbWFuZGVkLmNtZC5maWx0ZXIodHlwZSA9PiB0eXBlID09PSBvYnNlcnZlZFR5cGUgfHwgdHlwZSA9PT0gJyonKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ1R5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGRlbWFuZGVkLmNtZCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlZC5vcHRpb25hbC5mb3JFYWNoKG9wdGlvbmFsID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBvcHRpb25hbC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBvcHRpb25hbC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGd1ZXNzVHlwZShhcmcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBhcmc7XG59XG5mdW5jdGlvbiBhcmd1bWVudFR5cGVFcnJvcihvYnNlcnZlZFR5cGUsIGFsbG93ZWRUeXBlcywgcG9zaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgWUVycm9yKGBJbnZhbGlkICR7cG9zaXRpb25OYW1lW3Bvc2l0aW9uXSB8fCAnbWFueWl0aCd9IGFyZ3VtZW50LiBFeHBlY3RlZCAke2FsbG93ZWRUeXBlcy5qb2luKCcgb3IgJyl9IGJ1dCByZWNlaXZlZCAke29ic2VydmVkVHlwZX0uYCk7XG59XG4iLCJpbXBvcnQgeyBhcmdzZXJ0IH0gZnJvbSAnLi9hcmdzZXJ0LmpzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvaXMtcHJvbWlzZS5qcyc7XG5leHBvcnQgY2xhc3MgR2xvYmFsTWlkZGxld2FyZSB7XG4gICAgY29uc3RydWN0b3IoeWFyZ3MpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gW107XG4gICAgICAgIHRoaXMuZnJvemVucyA9IFtdO1xuICAgICAgICB0aGlzLnlhcmdzID0geWFyZ3M7XG4gICAgfVxuICAgIGFkZE1pZGRsZXdhcmUoY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbiwgZ2xvYmFsID0gdHJ1ZSwgbXV0YXRlcyA9IGZhbHNlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxmdW5jdGlvbj4gW2Jvb2xlYW5dIFtib29sZWFuXSBbYm9vbGVhbl0nLCBbY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbiwgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2tbaV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ21pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSBjYWxsYmFja1tpXTtcbiAgICAgICAgICAgICAgICBtLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGFwcGx5QmVmb3JlVmFsaWRhdGlvbjtcbiAgICAgICAgICAgICAgICBtLmdsb2JhbCA9IGdsb2JhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuZ2xvYmFsTWlkZGxld2FyZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgbSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgbS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICBtLmdsb2JhbCA9IGdsb2JhbDtcbiAgICAgICAgICAgIG0ubXV0YXRlcyA9IG11dGF0ZXM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUucHVzaChjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMueWFyZ3M7XG4gICAgfVxuICAgIGFkZENvZXJjZU1pZGRsZXdhcmUoY2FsbGJhY2ssIG9wdGlvbikge1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gdGhpcy55YXJncy5nZXRBbGlhc2VzKCk7XG4gICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IHRoaXMuZ2xvYmFsTWlkZGxld2FyZS5maWx0ZXIobSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b0NoZWNrID0gWy4uLihhbGlhc2VzW29wdGlvbl0gfHwgW10pLCBvcHRpb25dO1xuICAgICAgICAgICAgaWYgKCFtLm9wdGlvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRvQ2hlY2suaW5jbHVkZXMobS5vcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgY2FsbGJhY2sub3B0aW9uID0gb3B0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRNaWRkbGV3YXJlKGNhbGxiYWNrLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsTWlkZGxld2FyZTtcbiAgICB9XG4gICAgZnJlZXplKCkge1xuICAgICAgICB0aGlzLmZyb3plbnMucHVzaChbLi4udGhpcy5nbG9iYWxNaWRkbGV3YXJlXSk7XG4gICAgfVxuICAgIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSB0aGlzLmZyb3plbnMucG9wKCk7XG4gICAgICAgIGlmIChmcm96ZW4gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IGZyb3plbjtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IHRoaXMuZ2xvYmFsTWlkZGxld2FyZS5maWx0ZXIobSA9PiBtLmdsb2JhbCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSkge1xuICAgIGlmICghY29tbWFuZE1pZGRsZXdhcmUpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gY29tbWFuZE1pZGRsZXdhcmUubWFwKG1pZGRsZXdhcmUgPT4ge1xuICAgICAgICBtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoYXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBiZWZvcmVWYWxpZGF0aW9uKSB7XG4gICAgcmV0dXJuIG1pZGRsZXdhcmVzLnJlZHVjZSgoYWNjLCBtaWRkbGV3YXJlKSA9PiB7XG4gICAgICAgIGlmIChtaWRkbGV3YXJlLmFwcGx5QmVmb3JlVmFsaWRhdGlvbiAhPT0gYmVmb3JlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlkZGxld2FyZS5tdXRhdGVzKSB7XG4gICAgICAgICAgICBpZiAobWlkZGxld2FyZS5hcHBsaWVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICBtaWRkbGV3YXJlLmFwcGxpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoYWNjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgICAgICAgIC50aGVuKGluaXRpYWxPYmogPT4gUHJvbWlzZS5hbGwoW2luaXRpYWxPYmosIG1pZGRsZXdhcmUoaW5pdGlhbE9iaiwgeWFyZ3MpXSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKFtpbml0aWFsT2JqLCBtaWRkbGV3YXJlT2JqXSkgPT4gT2JqZWN0LmFzc2lnbihpbml0aWFsT2JqLCBtaWRkbGV3YXJlT2JqKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBtaWRkbGV3YXJlKGFjYywgeWFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShyZXN1bHQpXG4gICAgICAgICAgICAgICAgPyByZXN1bHQudGhlbihtaWRkbGV3YXJlT2JqID0+IE9iamVjdC5hc3NpZ24oYWNjLCBtaWRkbGV3YXJlT2JqKSlcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oYWNjLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSwgYXJndik7XG59XG4iLCJpbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL2lzLXByb21pc2UuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIG1heWJlQXN5bmNSZXN1bHQoZ2V0UmVzdWx0LCByZXN1bHRIYW5kbGVyLCBlcnJvckhhbmRsZXIgPSAoZXJyKSA9PiB7XG4gICAgdGhyb3cgZXJyO1xufSkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRnVuY3Rpb24oZ2V0UmVzdWx0KSA/IGdldFJlc3VsdCgpIDogZ2V0UmVzdWx0O1xuICAgICAgICByZXR1cm4gaXNQcm9taXNlKHJlc3VsdClcbiAgICAgICAgICAgID8gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0SGFuZGxlcihyZXN1bHQpKVxuICAgICAgICAgICAgOiByZXN1bHRIYW5kbGVyKHJlc3VsdCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcihlcnIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG4iLCJpbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCwgfSBmcm9tICcuL3R5cGluZ3MvY29tbW9uLXR5cGVzLmpzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvaXMtcHJvbWlzZS5qcyc7XG5pbXBvcnQgeyBhcHBseU1pZGRsZXdhcmUsIGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeSwgfSBmcm9tICcuL21pZGRsZXdhcmUuanMnO1xuaW1wb3J0IHsgcGFyc2VDb21tYW5kIH0gZnJvbSAnLi9wYXJzZS1jb21tYW5kLmpzJztcbmltcG9ydCB7IGlzWWFyZ3NJbnN0YW5jZSwgfSBmcm9tICcuL3lhcmdzLWZhY3RvcnkuanMnO1xuaW1wb3J0IHsgbWF5YmVBc3luY1Jlc3VsdCB9IGZyb20gJy4vdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzJztcbmNvbnN0IERFRkFVTFRfTUFSS0VSID0gLyheXFwqKXwoXlxcJDApLztcbmV4cG9ydCBjbGFzcyBDb21tYW5kSW5zdGFuY2Uge1xuICAgIGNvbnN0cnVjdG9yKHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltKSB7XG4gICAgICAgIHRoaXMucmVxdWlyZUNhY2hlID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgICAgIHRoaXMuYWxpYXNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5mcm96ZW5zID0gW107XG4gICAgICAgIHRoaXMuc2hpbSA9IHNoaW07XG4gICAgICAgIHRoaXMudXNhZ2UgPSB1c2FnZTtcbiAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlID0gZ2xvYmFsTWlkZGxld2FyZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uID0gdmFsaWRhdGlvbjtcbiAgICB9XG4gICAgYWRkRGlyZWN0b3J5KGRpciwgcmVxLCBjYWxsZXJGaWxlLCBvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLnJlcXVpcmVDYWNoZS5hZGQoY2FsbGVyRmlsZSk7XG4gICAgICAgIGNvbnN0IGZ1bGxEaXJQYXRoID0gdGhpcy5zaGltLnBhdGgucmVzb2x2ZSh0aGlzLnNoaW0ucGF0aC5kaXJuYW1lKGNhbGxlckZpbGUpLCBkaXIpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuc2hpbS5yZWFkZGlyU3luYyhmdWxsRGlyUGF0aCwge1xuICAgICAgICAgICAgcmVjdXJzaXZlOiBvcHRzLnJlY3Vyc2UgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0cy5leHRlbnNpb25zKSlcbiAgICAgICAgICAgIG9wdHMuZXh0ZW5zaW9ucyA9IFsnanMnXTtcbiAgICAgICAgY29uc3QgdmlzaXQgPSB0eXBlb2Ygb3B0cy52aXNpdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMudmlzaXQgOiAobykgPT4gbztcbiAgICAgICAgZm9yIChjb25zdCBmaWxlYiBvZiBmaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGViLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAob3B0cy5leGNsdWRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4Y2x1ZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZXhjbHVkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlID0gb3B0cy5leGNsdWRlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZSA9IG9wdHMuZXhjbHVkZS50ZXN0KGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0cy5pbmNsdWRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluY2x1ZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuaW5jbHVkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlID0gb3B0cy5pbmNsdWRlKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IG9wdHMuaW5jbHVkZS50ZXN0KGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHN1cHBvcnRlZEV4dGVuc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHQgb2Ygb3B0cy5leHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuZW5kc1dpdGgoZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRFeHRlbnNpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2luZWQgPSB0aGlzLnNoaW0ucGF0aC5qb2luKGZ1bGxEaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGUgPSByZXEoam9pbmVkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRlbmRhYmxlTW9kdWxlID0gT2JqZWN0LmNyZWF0ZShudWxsLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh7IC4uLm1vZHVsZSB9KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRlZCA9IHZpc2l0KGV4dGVuZGFibGVNb2R1bGUsIGpvaW5lZCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVxdWlyZUNhY2hlLmhhcyhqb2luZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZUNhY2hlLmFkZChqb2luZWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4dGVuZGFibGVNb2R1bGUuY29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kYWJsZU1vZHVsZS5jb21tYW5kID0gdGhpcy5zaGltLnBhdGguYmFzZW5hbWUoam9pbmVkLCB0aGlzLnNoaW0ucGF0aC5leHRuYW1lKGpvaW5lZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihleHRlbmRhYmxlTW9kdWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkSGFuZGxlcihjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBjb21tYW5kTWlkZGxld2FyZSwgZGVwcmVjYXRlZCkge1xuICAgICAgICBsZXQgYWxpYXNlcyA9IFtdO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IGNvbW1hbmRNaWRkbGV3YXJlRmFjdG9yeShjb21tYW5kTWlkZGxld2FyZSk7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICgoKSA9PiB7IH0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBpZiAoaXNDb21tYW5kQW5kQWxpYXNlcyhjbWQpKSB7XG4gICAgICAgICAgICAgICAgW2NtZCwgLi4uYWxpYXNlc10gPSBjbWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihjb21tYW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24oY21kKSkge1xuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBBcnJheS5pc0FycmF5KGNtZC5jb21tYW5kKSB8fCB0eXBlb2YgY21kLmNvbW1hbmQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBjbWQuY29tbWFuZFxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChjb21tYW5kID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIG5hbWUgZ2l2ZW4gZm9yIG1vZHVsZTogJHt0aGlzLnNoaW0uaW5zcGVjdChjbWQpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNtZC5hbGlhc2VzKVxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBbXS5jb25jYXQoY29tbWFuZCkuY29uY2F0KGNtZC5hbGlhc2VzKTtcbiAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihjb21tYW5kLCB0aGlzLmV4dHJhY3REZXNjKGNtZCksIGNtZC5idWlsZGVyLCBjbWQuaGFuZGxlciwgY21kLm1pZGRsZXdhcmVzLCBjbWQuZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlckRlZmluaXRpb24oYnVpbGRlcikpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSGFuZGxlcihbY21kXS5jb25jYXQoYWxpYXNlcyksIGRlc2NyaXB0aW9uLCBidWlsZGVyLmJ1aWxkZXIsIGJ1aWxkZXIuaGFuZGxlciwgYnVpbGRlci5taWRkbGV3YXJlcywgYnVpbGRlci5kZXByZWNhdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNtZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZENvbW1hbmQgPSBwYXJzZUNvbW1hbmQoY21kKTtcbiAgICAgICAgICAgIGFsaWFzZXMgPSBhbGlhc2VzLm1hcChhbGlhcyA9PiBwYXJzZUNvbW1hbmQoYWxpYXMpLmNtZCk7XG4gICAgICAgICAgICBsZXQgaXNEZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBbGlhc2VzID0gW3BhcnNlZENvbW1hbmQuY21kXS5jb25jYXQoYWxpYXNlcykuZmlsdGVyKGMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChERUZBVUxUX01BUktFUi50ZXN0KGMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRBbGlhc2VzLmxlbmd0aCA9PT0gMCAmJiBpc0RlZmF1bHQpXG4gICAgICAgICAgICAgICAgcGFyc2VkQWxpYXNlcy5wdXNoKCckMCcpO1xuICAgICAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZENvbW1hbmQuY21kID0gcGFyc2VkQWxpYXNlc1swXTtcbiAgICAgICAgICAgICAgICBhbGlhc2VzID0gcGFyc2VkQWxpYXNlcy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBjbWQgPSBjbWQucmVwbGFjZShERUZBVUxUX01BUktFUiwgcGFyc2VkQ29tbWFuZC5jbWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWFzTWFwW2FsaWFzXSA9IHBhcnNlZENvbW1hbmQuY21kO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2FnZS5jb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXSA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogY21kLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICAgICAgYnVpbGRlcjogYnVpbGRlciB8fCB7fSxcbiAgICAgICAgICAgICAgICBtaWRkbGV3YXJlcyxcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVkLFxuICAgICAgICAgICAgICAgIGRlbWFuZGVkOiBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJzZWRDb21tYW5kLm9wdGlvbmFsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29tbWFuZCA9IHRoaXMuaGFuZGxlcnNbcGFyc2VkQ29tbWFuZC5jbWRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbW1hbmRIYW5kbGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlcnM7XG4gICAgfVxuICAgIGdldENvbW1hbmRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5oYW5kbGVycykuY29uY2F0KE9iamVjdC5rZXlzKHRoaXMuYWxpYXNNYXApKTtcbiAgICB9XG4gICAgaGFzRGVmYXVsdENvbW1hbmQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGVmYXVsdENvbW1hbmQ7XG4gICAgfVxuICAgIHJ1bkNvbW1hbmQoY29tbWFuZCwgeWFyZ3MsIHBhcnNlZCwgY29tbWFuZEluZGV4LCBoZWxwT25seSwgaGVscE9yVmVyc2lvblNldCkge1xuICAgICAgICBjb25zdCBjb21tYW5kSGFuZGxlciA9IHRoaXMuaGFuZGxlcnNbY29tbWFuZF0gfHxcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnNbdGhpcy5hbGlhc01hcFtjb21tYW5kXV0gfHxcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbW1hbmQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbW1hbmQgPSAhY29tbWFuZDtcbiAgICAgICAgaWYgKGNvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucHVzaChjb21tYW5kSGFuZGxlci5vcmlnaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlclJlc3VsdCA9IHRoaXMuYXBwbHlCdWlsZGVyVXBkYXRlVXNhZ2VBbmRQYXJzZShpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgeWFyZ3MsIHBhcnNlZC5hbGlhc2VzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSwgaGVscE9yVmVyc2lvblNldCk7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UoYnVpbGRlclJlc3VsdClcbiAgICAgICAgICAgID8gYnVpbGRlclJlc3VsdC50aGVuKHJlc3VsdCA9PiB0aGlzLmFwcGx5TWlkZGxld2FyZUFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgcmVzdWx0LmlubmVyQXJndiwgY3VycmVudENvbnRleHQsIGhlbHBPbmx5LCByZXN1bHQuYWxpYXNlcywgeWFyZ3MpKVxuICAgICAgICAgICAgOiB0aGlzLmFwcGx5TWlkZGxld2FyZUFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgYnVpbGRlclJlc3VsdC5pbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBoZWxwT25seSwgYnVpbGRlclJlc3VsdC5hbGlhc2VzLCB5YXJncyk7XG4gICAgfVxuICAgIGFwcGx5QnVpbGRlclVwZGF0ZVVzYWdlQW5kUGFyc2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIHlhcmdzLCBhbGlhc2VzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSwgaGVscE9yVmVyc2lvblNldCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gY29tbWFuZEhhbmRsZXIuYnVpbGRlcjtcbiAgICAgICAgbGV0IGlubmVyWWFyZ3MgPSB5YXJncztcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZyZWV6ZSgpO1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlck91dHB1dCA9IGJ1aWxkZXIoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkucmVzZXQoYWxpYXNlcyksIGhlbHBPclZlcnNpb25TZXQpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShidWlsZGVyT3V0cHV0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyT3V0cHV0LnRoZW4ob3V0cHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJZYXJncyA9IGlzWWFyZ3NJbnN0YW5jZShvdXRwdXQpID8gb3V0cHV0IDogeWFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlQW5kVXBkYXRlVXNhZ2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyWWFyZ3MsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMoYnVpbGRlcikpIHtcbiAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5mcmVlemUoKTtcbiAgICAgICAgICAgIGlubmVyWWFyZ3MgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5yZXNldChhbGlhc2VzKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpbm5lcllhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFuZFVwZGF0ZVVzYWdlKGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lcllhcmdzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSk7XG4gICAgfVxuICAgIHBhcnNlQW5kVXBkYXRlVXNhZ2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyWWFyZ3MsIHBhcmVudENvbW1hbmRzLCBjb21tYW5kSW5kZXgsIGhlbHBPbmx5KSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHRDb21tYW5kKVxuICAgICAgICAgICAgaW5uZXJZYXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkudW5mcmVlemUodHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZVVzYWdlKGlubmVyWWFyZ3MpKSB7XG4gICAgICAgICAgICBpbm5lcllhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLmdldFVzYWdlSW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgIC51c2FnZSh0aGlzLnVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIocGFyZW50Q29tbWFuZHMsIGNvbW1hbmRIYW5kbGVyKSwgY29tbWFuZEhhbmRsZXIuZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlubmVyQXJndiA9IGlubmVyWWFyZ3NcbiAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgLnJ1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzKG51bGwsIHVuZGVmaW5lZCwgdHJ1ZSwgY29tbWFuZEluZGV4LCBoZWxwT25seSk7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UoaW5uZXJBcmd2KVxuICAgICAgICAgICAgPyBpbm5lckFyZ3YudGhlbihhcmd2ID0+ICh7XG4gICAgICAgICAgICAgICAgYWxpYXNlczogaW5uZXJZYXJncy5wYXJzZWQuYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBpbm5lckFyZ3Y6IGFyZ3YsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXMsXG4gICAgICAgICAgICAgICAgaW5uZXJBcmd2OiBpbm5lckFyZ3YsXG4gICAgICAgICAgICB9O1xuICAgIH1cbiAgICBzaG91bGRVcGRhdGVVc2FnZSh5YXJncykge1xuICAgICAgICByZXR1cm4gKCF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZ2V0VXNhZ2VEaXNhYmxlZCgpICYmXG4gICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZ2V0VXNhZ2UoKS5sZW5ndGggPT09IDApO1xuICAgIH1cbiAgICB1c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlcikge1xuICAgICAgICBjb25zdCBjID0gREVGQVVMVF9NQVJLRVIudGVzdChjb21tYW5kSGFuZGxlci5vcmlnaW5hbClcbiAgICAgICAgICAgID8gY29tbWFuZEhhbmRsZXIub3JpZ2luYWwucmVwbGFjZShERUZBVUxUX01BUktFUiwgJycpLnRyaW0oKVxuICAgICAgICAgICAgOiBjb21tYW5kSGFuZGxlci5vcmlnaW5hbDtcbiAgICAgICAgY29uc3QgcGMgPSBwYXJlbnRDb21tYW5kcy5maWx0ZXIoYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIURFRkFVTFRfTUFSS0VSLnRlc3QoYyk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYy5wdXNoKGMpO1xuICAgICAgICByZXR1cm4gYCQwICR7cGMuam9pbignICcpfWA7XG4gICAgfVxuICAgIGhhbmRsZVZhbGlkYXRpb25BbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQsIGFsaWFzZXMsIHlhcmdzLCBtaWRkbGV3YXJlcywgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBpZiAoIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldEhhc091dHB1dCgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0geWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAucnVuVmFsaWRhdGlvbihhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCB5YXJncy5wYXJzZWQuZXJyb3IsIGlzRGVmYXVsdENvbW1hbmQpO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gbWF5YmVBc3luY1Jlc3VsdChpbm5lckFyZ3YsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvbihyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZEhhbmRsZXIuaGFuZGxlciAmJiAheWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0SGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLnNldEhhc091dHB1dCgpO1xuICAgICAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISF5YXJncy5nZXRPcHRpb25zKCkuY29uZmlndXJhdGlvblsncG9wdWxhdGUtLSddO1xuICAgICAgICAgICAgeWFyZ3NcbiAgICAgICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgICAgICAucG9zdFByb2Nlc3MoaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBhcHBseU1pZGRsZXdhcmUoaW5uZXJBcmd2LCB5YXJncywgbWlkZGxld2FyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IG1heWJlQXN5bmNSZXN1bHQoaW5uZXJBcmd2LCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJSZXN1bHQgPSBjb21tYW5kSGFuZGxlci5oYW5kbGVyKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShoYW5kbGVyUmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICA/IGhhbmRsZXJSZXN1bHQudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIDogcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuY2FjaGVIZWxwTWVzc2FnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShpbm5lckFyZ3YpICYmXG4gICAgICAgICAgICAgICAgIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmhhc1BhcnNlQ2FsbGJhY2soKSkge1xuICAgICAgICAgICAgICAgIGlubmVyQXJndi5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZmFpbChudWxsLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuY29tbWFuZHMucG9wKCk7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5mdWxsQ29tbWFuZHMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICB9XG4gICAgYXBwbHlNaWRkbGV3YXJlQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBoZWxwT25seSwgYWxpYXNlcywgeWFyZ3MpIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgaWYgKGhlbHBPbmx5KVxuICAgICAgICAgICAgcmV0dXJuIGlubmVyQXJndjtcbiAgICAgICAgaWYgKCF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRIYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcCA9IHRoaXMucG9wdWxhdGVQb3NpdGlvbmFscyhjb21tYW5kSGFuZGxlciwgaW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgeWFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzID0gdGhpcy5nbG9iYWxNaWRkbGV3YXJlXG4gICAgICAgICAgICAuZ2V0TWlkZGxld2FyZSgpXG4gICAgICAgICAgICAuc2xpY2UoMClcbiAgICAgICAgICAgIC5jb25jYXQoY29tbWFuZEhhbmRsZXIubWlkZGxld2FyZXMpO1xuICAgICAgICBjb25zdCBtYXliZVByb21pc2VBcmd2ID0gYXBwbHlNaWRkbGV3YXJlKGlubmVyQXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShtYXliZVByb21pc2VBcmd2KVxuICAgICAgICAgICAgPyBtYXliZVByb21pc2VBcmd2LnRoZW4ocmVzb2x2ZWRJbm5lckFyZ3YgPT4gdGhpcy5oYW5kbGVWYWxpZGF0aW9uQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCByZXNvbHZlZElubmVyQXJndiwgY3VycmVudENvbnRleHQsIGFsaWFzZXMsIHlhcmdzLCBtaWRkbGV3YXJlcywgcG9zaXRpb25hbE1hcCkpXG4gICAgICAgICAgICA6IHRoaXMuaGFuZGxlVmFsaWRhdGlvbkFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgbWF5YmVQcm9taXNlQXJndiwgY3VycmVudENvbnRleHQsIGFsaWFzZXMsIHlhcmdzLCBtaWRkbGV3YXJlcywgcG9zaXRpb25hbE1hcCk7XG4gICAgfVxuICAgIHBvcHVsYXRlUG9zaXRpb25hbHMoY29tbWFuZEhhbmRsZXIsIGFyZ3YsIGNvbnRleHQsIHlhcmdzKSB7XG4gICAgICAgIGFyZ3YuXyA9IGFyZ3YuXy5zbGljZShjb250ZXh0LmNvbW1hbmRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkID0gY29tbWFuZEhhbmRsZXIuZGVtYW5kZWQuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbmFsID0gY29tbWFuZEhhbmRsZXIub3B0aW9uYWwuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxNYXAgPSB7fTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uLnBvc2l0aW9uYWxDb3VudChkZW1hbmRlZC5sZW5ndGgsIGFyZ3YuXy5sZW5ndGgpO1xuICAgICAgICB3aGlsZSAoZGVtYW5kZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZW1hbmQgPSBkZW1hbmRlZC5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvc2l0aW9uYWwoZGVtYW5kLCBhcmd2LCBwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAob3B0aW9uYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZSA9IG9wdGlvbmFsLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9zaXRpb25hbChtYXliZSwgYXJndiwgcG9zaXRpb25hbE1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgYXJndi5fID0gY29udGV4dC5jb21tYW5kcy5jb25jYXQoYXJndi5fLm1hcChhID0+ICcnICsgYSkpO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzUG9zaXRpb25hbHMoYXJndiwgcG9zaXRpb25hbE1hcCwgdGhpcy5jbWRUb1BhcnNlT3B0aW9ucyhjb21tYW5kSGFuZGxlci5vcmlnaW5hbCksIHlhcmdzKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uYWxNYXA7XG4gICAgfVxuICAgIHBvcHVsYXRlUG9zaXRpb25hbChwb3NpdGlvbmFsLCBhcmd2LCBwb3NpdGlvbmFsTWFwKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IHBvc2l0aW9uYWwuY21kWzBdO1xuICAgICAgICBpZiAocG9zaXRpb25hbC52YXJpYWRpYykge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtjbWRdID0gYXJndi5fLnNwbGljZSgwKS5tYXAoU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IFtTdHJpbmcoYXJndi5fLnNoaWZ0KCkpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbWRUb1BhcnNlT3B0aW9ucyhjbWRTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyc2VPcHRpb25zID0ge1xuICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbW1hbmQoY21kU3RyaW5nKTtcbiAgICAgICAgcGFyc2VkLmRlbWFuZGVkLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IGQuY21kO1xuICAgICAgICAgICAgaWYgKGQudmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZW1hbmRbY21kXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFsaWFzZXNdID0gby5jbWQ7XG4gICAgICAgICAgICBpZiAoby52YXJpYWRpYykge1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hcnJheS5wdXNoKGNtZCk7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmRlZmF1bHRbY21kXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2NtZF0gPSBhbGlhc2VzO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3B0aW9ucztcbiAgICB9XG4gICAgcG9zdFByb2Nlc3NQb3NpdGlvbmFscyhhcmd2LCBwb3NpdGlvbmFsTWFwLCBwYXJzZU9wdGlvbnMsIHlhcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB5YXJncy5nZXRPcHRpb25zKCkpO1xuICAgICAgICBvcHRpb25zLmRlZmF1bHQgPSBPYmplY3QuYXNzaWduKHBhcnNlT3B0aW9ucy5kZWZhdWx0LCBvcHRpb25zLmRlZmF1bHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJzZU9wdGlvbnMuYWxpYXMpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmFsaWFzW2tleV0gPSAob3B0aW9ucy5hbGlhc1trZXldIHx8IFtdKS5jb25jYXQocGFyc2VPcHRpb25zLmFsaWFzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuYXJyYXkgPSBvcHRpb25zLmFycmF5LmNvbmNhdChwYXJzZU9wdGlvbnMuYXJyYXkpO1xuICAgICAgICBvcHRpb25zLmNvbmZpZyA9IHt9O1xuICAgICAgICBjb25zdCB1bnBhcnNlZCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2tleV0ubWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb25maWd1cmF0aW9uWyd1bmtub3duLW9wdGlvbnMtYXMtYXJncyddKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB1bnBhcnNlZC5wdXNoKGAtLSR7a2V5fWApO1xuICAgICAgICAgICAgICAgIHVucGFyc2VkLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXVucGFyc2VkLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5jb25maWd1cmF0aW9uLCB7XG4gICAgICAgICAgICAncG9wdWxhdGUtLSc6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5zaGltLlBhcnNlci5kZXRhaWxlZCh1bnBhcnNlZCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlnLFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChwYXJzZWQuZXJyb3IpIHtcbiAgICAgICAgICAgIHlhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLmdldFVzYWdlSW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgIC5mYWlsKHBhcnNlZC5lcnJvci5tZXNzYWdlLCBwYXJzZWQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25hbEtleXMgPSBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBvc2l0aW9uYWxNYXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsS2V5cy5wdXNoKC4uLnBhcnNlZC5hbGlhc2VzW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwYXJzZWQuYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbmFsS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcG9zaXRpb25hbE1hcFtrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtrZXldID0gcGFyc2VkLmFyZ3Zba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW5Db25maWdzKHlhcmdzLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc0RlZmF1bHRlZCh5YXJncywga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJzZWQuYXJndiwga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoYXJndltrZXldKSB8fCBBcnJheS5pc0FycmF5KHBhcnNlZC5hcmd2W2tleV0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndltrZXldID0gW10uY29uY2F0KGFyZ3Zba2V5XSwgcGFyc2VkLmFyZ3Zba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSBwYXJzZWQuYXJndltrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNEZWZhdWx0ZWQoeWFyZ3MsIGtleSkge1xuICAgICAgICBjb25zdCB7IGRlZmF1bHQ6IGRlZmF1bHRzIH0gPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRzLCBrZXkpIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGVmYXVsdHMsIHRoaXMuc2hpbS5QYXJzZXIuY2FtZWxDYXNlKGtleSkpKTtcbiAgICB9XG4gICAgaXNJbkNvbmZpZ3MoeWFyZ3MsIGtleSkge1xuICAgICAgICBjb25zdCB7IGNvbmZpZ09iamVjdHMgfSA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIChjb25maWdPYmplY3RzLnNvbWUoYyA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYywga2V5KSkgfHxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHMuc29tZShjID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCB0aGlzLnNoaW0uUGFyc2VyLmNhbWVsQ2FzZShrZXkpKSkpO1xuICAgIH1cbiAgICBydW5EZWZhdWx0QnVpbGRlck9uKHlhcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0Q29tbWFuZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gREVGQVVMVF9NQVJLRVIudGVzdCh0aGlzLmRlZmF1bHRDb21tYW5kLm9yaWdpbmFsKVxuICAgICAgICAgICAgICAgID8gdGhpcy5kZWZhdWx0Q29tbWFuZC5vcmlnaW5hbFxuICAgICAgICAgICAgICAgIDogdGhpcy5kZWZhdWx0Q29tbWFuZC5vcmlnaW5hbC5yZXBsYWNlKC9eW15bXFxdPD5dKi8sICckMCAnKTtcbiAgICAgICAgICAgIHlhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLmdldFVzYWdlSW5zdGFuY2UoKVxuICAgICAgICAgICAgICAgIC51c2FnZShjb21tYW5kU3RyaW5nLCB0aGlzLmRlZmF1bHRDb21tYW5kLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWlsZGVyID0gdGhpcy5kZWZhdWx0Q29tbWFuZC5idWlsZGVyO1xuICAgICAgICBpZiAoaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcih5YXJncywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhidWlsZGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgeWFyZ3Mub3B0aW9uKGtleSwgYnVpbGRlcltrZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGV4dHJhY3REZXNjKHsgZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjIH0pIHtcbiAgICAgICAgZm9yIChjb25zdCB0ZXN0IG9mIFtkZXNjcmliZSwgZGVzY3JpcHRpb24sIGRlc2NdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnIHx8IHRlc3QgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodGVzdCwgdHJ1ZSwgdGhpcy5zaGltKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZyZWV6ZSgpIHtcbiAgICAgICAgdGhpcy5mcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgICAgICAgICBhbGlhc01hcDogdGhpcy5hbGlhc01hcCxcbiAgICAgICAgICAgIGRlZmF1bHRDb21tYW5kOiB0aGlzLmRlZmF1bHRDb21tYW5kLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IHRoaXMuZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHRoaXMuc2hpbSk7XG4gICAgICAgICh7XG4gICAgICAgICAgICBoYW5kbGVyczogdGhpcy5oYW5kbGVycyxcbiAgICAgICAgICAgIGFsaWFzTWFwOiB0aGlzLmFsaWFzTWFwLFxuICAgICAgICAgICAgZGVmYXVsdENvbW1hbmQ6IHRoaXMuZGVmYXVsdENvbW1hbmQsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgICAgICB0aGlzLmFsaWFzTWFwID0ge307XG4gICAgICAgIHRoaXMuZGVmYXVsdENvbW1hbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmVxdWlyZUNhY2hlID0gbmV3IFNldCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZCh1c2FnZSwgdmFsaWRhdGlvbiwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSkge1xuICAgIHJldHVybiBuZXcgQ29tbWFuZEluc3RhbmNlKHVzYWdlLCB2YWxpZGF0aW9uLCBnbG9iYWxNaWRkbGV3YXJlLCBzaGltKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgYnVpbGRlciA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgISFidWlsZGVyLmJ1aWxkZXIgJiZcbiAgICAgICAgdHlwZW9mIGJ1aWxkZXIuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBpc0NvbW1hbmRBbmRBbGlhc2VzKGNtZCkge1xuICAgIHJldHVybiBjbWQuZXZlcnkoYyA9PiB0eXBlb2YgYyA9PT0gJ3N0cmluZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkge1xuICAgIHJldHVybiB0eXBlb2YgY21kID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShjbWQpO1xufVxuIiwidmFyIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRTZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufTtcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59O1xudmFyIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgX1lhcmdzSW5zdGFuY2VfY29udGV4dCwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0LCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgX1lhcmdzSW5zdGFuY2VfZnJvemVucywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCwgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUsIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uO1xuaW1wb3J0IHsgY29tbWFuZCBhcyBDb21tYW5kLCB9IGZyb20gJy4vY29tbWFuZC5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCwgYXNzZXJ0U2luZ2xlS2V5LCBvYmplY3RLZXlzLCB9IGZyb20gJy4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuaW1wb3J0IHsgWUVycm9yIH0gZnJvbSAnLi95ZXJyb3IuanMnO1xuaW1wb3J0IHsgdXNhZ2UgYXMgVXNhZ2UgfSBmcm9tICcuL3VzYWdlLmpzJztcbmltcG9ydCB7IGFyZ3NlcnQgfSBmcm9tICcuL2FyZ3NlcnQuanMnO1xuaW1wb3J0IHsgY29tcGxldGlvbiBhcyBDb21wbGV0aW9uLCB9IGZyb20gJy4vY29tcGxldGlvbi5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uIGFzIFZhbGlkYXRpb24sIH0gZnJvbSAnLi92YWxpZGF0aW9uLmpzJztcbmltcG9ydCB7IG9iakZpbHRlciB9IGZyb20gJy4vdXRpbHMvb2JqLWZpbHRlci5qcyc7XG5pbXBvcnQgeyBhcHBseUV4dGVuZHMgfSBmcm9tICcuL3V0aWxzL2FwcGx5LWV4dGVuZHMuanMnO1xuaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBHbG9iYWxNaWRkbGV3YXJlLCB9IGZyb20gJy4vbWlkZGxld2FyZS5qcyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL2lzLXByb21pc2UuanMnO1xuaW1wb3J0IHsgbWF5YmVBc3luY1Jlc3VsdCB9IGZyb20gJy4vdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzJztcbmltcG9ydCBzZXRCbG9ja2luZyBmcm9tICcuL3V0aWxzL3NldC1ibG9ja2luZy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gWWFyZ3NGYWN0b3J5KF9zaGltKSB7XG4gICAgcmV0dXJuIChwcm9jZXNzQXJncyA9IFtdLCBjd2QgPSBfc2hpbS5wcm9jZXNzLmN3ZCgpLCBwYXJlbnRSZXF1aXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IHlhcmdzID0gbmV3IFlhcmdzSW5zdGFuY2UocHJvY2Vzc0FyZ3MsIGN3ZCwgcGFyZW50UmVxdWlyZSwgX3NoaW0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoeWFyZ3MsICdhcmd2Jywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLnBhcnNlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHlhcmdzLmhlbHAoKTtcbiAgICAgICAgeWFyZ3MudmVyc2lvbigpO1xuICAgICAgICByZXR1cm4geWFyZ3M7XG4gICAgfTtcbn1cbmNvbnN0IGtDb3B5RG91YmxlRGFzaCA9IFN5bWJvbCgnY29weURvdWJsZURhc2gnKTtcbmNvbnN0IGtDcmVhdGVMb2dnZXIgPSBTeW1ib2woJ2NvcHlEb3VibGVEYXNoJyk7XG5jb25zdCBrRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3QgPSBTeW1ib2woJ2RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0Jyk7XG5jb25zdCBrRW1pdFdhcm5pbmcgPSBTeW1ib2woJ2VtaXRXYXJuaW5nJyk7XG5jb25zdCBrRnJlZXplID0gU3ltYm9sKCdmcmVlemUnKTtcbmNvbnN0IGtHZXREb2xsYXJaZXJvID0gU3ltYm9sKCdnZXREb2xsYXJaZXJvJyk7XG5jb25zdCBrR2V0UGFyc2VyQ29uZmlndXJhdGlvbiA9IFN5bWJvbCgnZ2V0UGFyc2VyQ29uZmlndXJhdGlvbicpO1xuY29uc3Qga0dldFVzYWdlQ29uZmlndXJhdGlvbiA9IFN5bWJvbCgnZ2V0VXNhZ2VDb25maWd1cmF0aW9uJyk7XG5jb25zdCBrR3Vlc3NMb2NhbGUgPSBTeW1ib2woJ2d1ZXNzTG9jYWxlJyk7XG5jb25zdCBrR3Vlc3NWZXJzaW9uID0gU3ltYm9sKCdndWVzc1ZlcnNpb24nKTtcbmNvbnN0IGtQYXJzZVBvc2l0aW9uYWxOdW1iZXJzID0gU3ltYm9sKCdwYXJzZVBvc2l0aW9uYWxOdW1iZXJzJyk7XG5jb25zdCBrUGtnVXAgPSBTeW1ib2woJ3BrZ1VwJyk7XG5jb25zdCBrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludEFycmF5Jyk7XG5jb25zdCBrUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5ID0gU3ltYm9sKCdwb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnknKTtcbmNvbnN0IGtQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeScpO1xuY29uc3Qga1BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkgPSBTeW1ib2woJ3BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnknKTtcbmNvbnN0IGtTYW5pdGl6ZUtleSA9IFN5bWJvbCgnc2FuaXRpemVLZXknKTtcbmNvbnN0IGtTZXRLZXkgPSBTeW1ib2woJ3NldEtleScpO1xuY29uc3Qga1VuZnJlZXplID0gU3ltYm9sKCd1bmZyZWV6ZScpO1xuY29uc3Qga1ZhbGlkYXRlQXN5bmMgPSBTeW1ib2woJ3ZhbGlkYXRlQXN5bmMnKTtcbmNvbnN0IGtHZXRDb21tYW5kSW5zdGFuY2UgPSBTeW1ib2woJ2dldENvbW1hbmRJbnN0YW5jZScpO1xuY29uc3Qga0dldENvbnRleHQgPSBTeW1ib2woJ2dldENvbnRleHQnKTtcbmNvbnN0IGtHZXRIYXNPdXRwdXQgPSBTeW1ib2woJ2dldEhhc091dHB1dCcpO1xuY29uc3Qga0dldExvZ2dlckluc3RhbmNlID0gU3ltYm9sKCdnZXRMb2dnZXJJbnN0YW5jZScpO1xuY29uc3Qga0dldFBhcnNlQ29udGV4dCA9IFN5bWJvbCgnZ2V0UGFyc2VDb250ZXh0Jyk7XG5jb25zdCBrR2V0VXNhZ2VJbnN0YW5jZSA9IFN5bWJvbCgnZ2V0VXNhZ2VJbnN0YW5jZScpO1xuY29uc3Qga0dldFZhbGlkYXRpb25JbnN0YW5jZSA9IFN5bWJvbCgnZ2V0VmFsaWRhdGlvbkluc3RhbmNlJyk7XG5jb25zdCBrSGFzUGFyc2VDYWxsYmFjayA9IFN5bWJvbCgnaGFzUGFyc2VDYWxsYmFjaycpO1xuY29uc3Qga0lzR2xvYmFsQ29udGV4dCA9IFN5bWJvbCgnaXNHbG9iYWxDb250ZXh0Jyk7XG5jb25zdCBrUG9zdFByb2Nlc3MgPSBTeW1ib2woJ3Bvc3RQcm9jZXNzJyk7XG5jb25zdCBrUmViYXNlID0gU3ltYm9sKCdyZWJhc2UnKTtcbmNvbnN0IGtSZXNldCA9IFN5bWJvbCgncmVzZXQnKTtcbmNvbnN0IGtSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcyA9IFN5bWJvbCgncnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHMnKTtcbmNvbnN0IGtSdW5WYWxpZGF0aW9uID0gU3ltYm9sKCdydW5WYWxpZGF0aW9uJyk7XG5jb25zdCBrU2V0SGFzT3V0cHV0ID0gU3ltYm9sKCdzZXRIYXNPdXRwdXQnKTtcbmNvbnN0IGtUcmFja01hbnVhbGx5U2V0S2V5cyA9IFN5bWJvbCgna1RyYWNrTWFudWFsbHlTZXRLZXlzJyk7XG5jb25zdCBERUZBVUxUX0xPQ0FMRSA9ICdlbl9VUyc7XG5leHBvcnQgY2xhc3MgWWFyZ3NJbnN0YW5jZSB7XG4gICAgY29uc3RydWN0b3IocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkLCBwYXJlbnRSZXF1aXJlLCBzaGltKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tU2NyaXB0TmFtZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhcnNlZCA9IGZhbHNlO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jd2Quc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQuc2V0KHRoaXMsIHsgY29tbWFuZHM6IFtdLCBmdWxsQ29tbWFuZHM6IFtdIH0pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdC5zZXQodGhpcywgJ3Nob3ctaGlkZGVuJyk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvci5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZS5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2Vzcy5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMuc2V0KHRoaXMsIFtdKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dC5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0LnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQuc2V0KHRoaXMsICcnKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4uc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wa2dzLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3Vwcy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfc2hpbS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfdXNhZ2Uuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLnNldCh0aGlzLCB7fSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIHNoaW0sIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgcHJvY2Vzc0FyZ3MsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIGN3ZCwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUsIHBhcmVudFJlcXVpcmUsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBuZXcgR2xvYmFsTWlkZGxld2FyZSh0aGlzKSwgXCJmXCIpO1xuICAgICAgICB0aGlzLiQwID0gdGhpc1trR2V0RG9sbGFyWmVyb10oKTtcbiAgICAgICAgdGhpc1trUmVzZXRdKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIiksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIiksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5zaG93SGlkZGVuT3B0ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdCwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgdGhpc1trQ3JlYXRlTG9nZ2VyXSgpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uc2V0TG9jYWxlKERFRkFVTFRfTE9DQUxFKTtcbiAgICB9XG4gICAgYWRkSGVscE9wdChvcHQsIG1zZykge1xuICAgICAgICBjb25zdCBkZWZhdWx0SGVscE9wdCA9ICdoZWxwJztcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikpIHtcbiAgICAgICAgICAgIHRoaXNba0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0XShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIG51bGwsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0ID09PSBmYWxzZSAmJiBtc2cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogZGVmYXVsdEhlbHBPcHQsIFwiZlwiKTtcbiAgICAgICAgdGhpcy5ib29sZWFuKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpKTtcbiAgICAgICAgdGhpcy5kZXNjcmliZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSwgbXNnIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGVscCcpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGhlbHAob3B0LCBtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkSGVscE9wdChvcHQsIG1zZyk7XG4gICAgfVxuICAgIGFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xib29sZWFuXSBbc3RyaW5nXScsIFtvcHQsIG1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAob3B0ID09PSBmYWxzZSAmJiBtc2cgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBjb25zdCBzaG93SGlkZGVuT3B0ID0gdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0LCBcImZcIik7XG4gICAgICAgIHRoaXMuYm9vbGVhbihzaG93SGlkZGVuT3B0KTtcbiAgICAgICAgdGhpcy5kZXNjcmliZShzaG93SGlkZGVuT3B0LCBtc2cgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyBoaWRkZW4gb3B0aW9ucycpKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuc2hvd0hpZGRlbk9wdCA9IHNob3dIaWRkZW5PcHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzaG93SGlkZGVuKG9wdCwgbXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFNob3dIaWRkZW5PcHQob3B0LCBtc2cpO1xuICAgIH1cbiAgICBhbGlhcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeV0odGhpcy5hbGlhcy5iaW5kKHRoaXMpLCAnYWxpYXMnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFycmF5KGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ2FycmF5Jywga2V5cyk7XG4gICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGJvb2xlYW4oa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnYm9vbGVhbicsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjaGVjayhmLCBnbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9uPiBbYm9vbGVhbl0nLCBbZiwgZ2xvYmFsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZSgoYXJndiwgX3lhcmdzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVBc3luY1Jlc3VsdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYXJndiwgX3lhcmdzLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICB9LCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi5fXygnQXJndW1lbnQgY2hlY2sgZmFpbGVkOiAlcycsIGYudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyB8fCByZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbChyZXN1bHQudG9TdHJpbmcoKSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwoZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IGVyci50b1N0cmluZygpLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZhbHNlLCBnbG9iYWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2hvaWNlcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nfGFycmF5XScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5RGljdGlvbmFyeV0odGhpcy5jaG9pY2VzLmJpbmQodGhpcyksICdjaG9pY2VzJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb2VyY2Uoa2V5cywgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtmdW5jdGlvbl0nLCBba2V5cywgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKCdjb2VyY2UgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29lcmNlKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGtleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhrZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29lcmNlKGtleSwga2V5c1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJ2NvZXJjZSBjYWxsYmFjayBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29lcmNlS2V5ID0ga2V5cztcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikua2V5W2NvZXJjZUtleV0gPSB0cnVlO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5hZGRDb2VyY2VNaWRkbGV3YXJlKChhcmd2LCB5YXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgY29lcmNlS2V5QWxpYXNlcyA9IChfYSA9IHlhcmdzLmdldEFsaWFzZXMoKVtjb2VyY2VLZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3ZLZXlzID0gW2NvZXJjZUtleSwgLi4uY29lcmNlS2V5QWxpYXNlc10uZmlsdGVyKGtleSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwga2V5KSk7XG4gICAgICAgICAgICBpZiAoYXJndktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVBc3luY1Jlc3VsdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKGFyZ3ZbYXJndktleXNbMF1dKTtcbiAgICAgICAgICAgIH0sIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBhcmd2S2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb2VyY2VLZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uZmxpY3RzKGtleTEsIGtleTIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtzdHJpbmd8YXJyYXldJywgW2tleTEsIGtleTJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikuY29uZmxpY3RzKGtleTEsIGtleTIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29uZmlnKGtleSA9ICdjb25maWcnLCBtc2csIHBhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW29iamVjdHxzdHJpbmddIFtzdHJpbmd8ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBba2V5LCBtc2csIHBhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIGtleSA9IGFwcGx5RXh0ZW5kcyhrZXksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBcImZcIiksIHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGtleSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcGFyc2VGbiA9IG1zZztcbiAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc2NyaWJlKGtleSwgbXNnIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZWZlclkxOG5Mb29rdXAoJ1BhdGggdG8gSlNPTiBjb25maWcgZmlsZScpKTtcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleSA6IFtrZXldKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnW2tdID0gcGFyc2VGbiB8fCB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbXBsZXRpb24oY21kLCBkZXNjLCBmbikge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nfGJvb2xlYW58ZnVuY3Rpb25dIFtmdW5jdGlvbl0nLCBbY21kLCBkZXNjLCBmbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZuID0gZGVzYztcbiAgICAgICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgY21kIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSB8fCAnY29tcGxldGlvbicsIFwiZlwiKTtcbiAgICAgICAgaWYgKCFkZXNjICYmIGRlc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZXNjID0gJ2dlbmVyYXRlIGNvbXBsZXRpb24gc2NyaXB0JztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmQoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpLCBkZXNjKTtcbiAgICAgICAgaWYgKGZuKVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikucmVnaXN0ZXJGdW5jdGlvbihmbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXl8b2JqZWN0PiBbc3RyaW5nfGJvb2xlYW5dIFtmdW5jdGlvbnxvYmplY3RdIFtmdW5jdGlvbl0gW2FycmF5XSBbYm9vbGVhbnxzdHJpbmddJywgW2NtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29tbWFuZHMoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBtaWRkbGV3YXJlcywgZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGNvbW1hbmREaXIoZGlyLCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtvYmplY3RdJywgW2Rpciwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXEgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUsIFwiZlwiKSB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5yZXF1aXJlO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5hZGREaXJlY3RvcnkoZGlyLCByZXEsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldENhbGxlckZpbGUoKSwgb3B0cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb3VudChrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdjb3VudCcsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWZhdWx0KGtleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gWypdIFtzdHJpbmddJywgW2tleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBhc3NlcnRTaW5nbGVLZXkoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IGRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3NlcnRTaW5nbGVLZXkoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKVxuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID1cbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZ1bmN0aW9uRGVzY3JpcHRpb24odmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLmRlZmF1bHQuYmluZCh0aGlzKSwgJ2RlZmF1bHQnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlZmF1bHRzKGtleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KGtleSwgdmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIGRlbWFuZENvbW1hbmQobWluID0gMSwgbWF4LCBtaW5Nc2csIG1heE1zZykge1xuICAgICAgICBhcmdzZXJ0KCdbbnVtYmVyXSBbbnVtYmVyfHN0cmluZ10gW3N0cmluZ3xudWxsfHVuZGVmaW5lZF0gW3N0cmluZ3xudWxsfHVuZGVmaW5lZF0nLCBbbWluLCBtYXgsIG1pbk1zZywgbWF4TXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbWluTXNnID0gbWF4O1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nbG9iYWwoJ18nLCBmYWxzZSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlbWFuZGVkQ29tbWFuZHMuXyA9IHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIG1pbk1zZyxcbiAgICAgICAgICAgIG1heE1zZyxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlbWFuZChrZXlzLCBtYXgsIG1zZykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXgpKSB7XG4gICAgICAgICAgICBtYXguZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWF4ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgdGhpcy5kZW1hbmRDb21tYW5kKGtleXMsIG1heCwgbXNnLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgdHJ1ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleSwgbXNnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5cywgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZyA9PT0gdHJ1ZSB8fCB0eXBlb2YgbXNnID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZW1hbmRPcHRpb24oa2V5cywgbXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtrZXlzLCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLmRlbWFuZE9wdGlvbi5iaW5kKHRoaXMpLCAnZGVtYW5kZWRPcHRpb25zJywga2V5cywgbXNnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRlcHJlY2F0ZU9wdGlvbihvcHRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ3xib29sZWFuXScsIFtvcHRpb24sIG1lc3NhZ2VdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVwcmVjYXRlZE9wdGlvbnNbb3B0aW9uXSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZXNjcmliZShrZXlzLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBba2V5cywgZGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trU2V0S2V5XShrZXlzLCB0cnVlKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlc2NyaWJlKGtleXMsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRldGVjdExvY2FsZShkZXRlY3QpIHtcbiAgICAgICAgYXJnc2VydCgnPGJvb2xlYW4+JywgW2RldGVjdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgZGV0ZWN0LCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlbnYocHJlZml4KSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0nLCBbcHJlZml4XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChwcmVmaXggPT09IGZhbHNlKVxuICAgICAgICAgICAgZGVsZXRlIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmVudlByZWZpeDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZW52UHJlZml4ID0gcHJlZml4IHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXBpbG9ndWUobXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+JywgW21zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZXBpbG9nKG1zZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBlcGlsb2cobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVwaWxvZ3VlKG1zZyk7XG4gICAgfVxuICAgIGV4YW1wbGUoY21kLCBkZXNjcmlwdGlvbikge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiBbc3RyaW5nXScsIFtjbWQsIGRlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNtZCkpIHtcbiAgICAgICAgICAgIGNtZC5mb3JFYWNoKGV4YW1wbGVQYXJhbXMgPT4gdGhpcy5leGFtcGxlKC4uLmV4YW1wbGVQYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5leGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBleGl0KGNvZGUsIGVycikge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgZXJyLCBcImZcIik7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfVxuICAgIGV4aXRQcm9jZXNzKGVuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIGVuYWJsZWQsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZhaWwoZikge1xuICAgICAgICBhcmdzZXJ0KCc8ZnVuY3Rpb258Ym9vbGVhbj4nLCBbZl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGYgPT09ICdib29sZWFuJyAmJiBmICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihcIkludmFsaWQgZmlyc3QgYXJndW1lbnQuIEV4cGVjdGVkIGZ1bmN0aW9uIG9yIGJvb2xlYW4gJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZmFpbEZuKGYpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0QWxpYXNlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VkID8gdGhpcy5wYXJzZWQuYWxpYXNlcyA6IHt9O1xuICAgIH1cbiAgICBhc3luYyBnZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5PiBbZnVuY3Rpb25dJywgW2FyZ3MsIGRvbmVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmdldENvbXBsZXRpb24oYXJncywgKGVyciwgY29tcGxldGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmdldENvbXBsZXRpb24oYXJncywgZG9uZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0RGVtYW5kZWRPcHRpb25zKCkge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlbWFuZGVkT3B0aW9ucztcbiAgICB9XG4gICAgZ2V0RGVtYW5kZWRDb21tYW5kcygpIHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZW1hbmRlZENvbW1hbmRzO1xuICAgIH1cbiAgICBnZXREZXByZWNhdGVkT3B0aW9ucygpIHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZXByZWNhdGVkT3B0aW9ucztcbiAgICB9XG4gICAgZ2V0RGV0ZWN0TG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0RXhpdFByb2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIik7XG4gICAgfVxuICAgIGdldEdyb3VwcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIikpO1xuICAgIH1cbiAgICBnZXRIZWxwKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oYXNDYWNoZWRIZWxwTWVzc2FnZSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2UgPSB0aGlzW2tSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kc10oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShwYXJzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oZWxwKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJSZXNwb25zZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJ1bkRlZmF1bHRCdWlsZGVyT24odGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGJ1aWxkZXJSZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlclJlc3BvbnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmhlbHAoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oZWxwKCkpO1xuICAgIH1cbiAgICBnZXRPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIik7XG4gICAgfVxuICAgIGdldFN0cmljdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBcImZcIik7XG4gICAgfVxuICAgIGdldFN0cmljdENvbW1hbmRzKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgXCJmXCIpO1xuICAgIH1cbiAgICBnZXRTdHJpY3RPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBcImZcIik7XG4gICAgfVxuICAgIGdsb2JhbChnbG9iYWxzLCBnbG9iYWwpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gW2Jvb2xlYW5dJywgW2dsb2JhbHMsIGdsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBnbG9iYWxzID0gW10uY29uY2F0KGdsb2JhbHMpO1xuICAgICAgICBpZiAoZ2xvYmFsICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubG9jYWwgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbC5maWx0ZXIobCA9PiBnbG9iYWxzLmluZGV4T2YobCkgPT09IC0xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbHMuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmxvY2FsLmluY2x1ZGVzKGcpKVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbC5wdXNoKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdyb3VwKG9wdHMsIGdyb3VwTmFtZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5PiA8c3RyaW5nPicsIFtvcHRzLCBncm91cE5hbWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV0gfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKVtncm91cE5hbWVdO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKVtncm91cE5hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKVtncm91cE5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKVtncm91cE5hbWVdID0gKGV4aXN0aW5nIHx8IFtdKS5jb25jYXQob3B0cykuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VlbltrZXldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoc2VlbltrZXldID0gdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaGlkZShrZXkpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4nLCBba2V5XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmhpZGRlbk9wdGlvbnMucHVzaChrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbbnVtYmVyfHN0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5pbXBsaWVzKGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbG9jYWxlKGxvY2FsZSkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXScsIFtsb2NhbGVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzW2tHdWVzc0xvY2FsZV0oKTtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLmdldExvY2FsZSgpO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLnNldExvY2FsZShsb2NhbGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbWlkZGxld2FyZShjYWxsYmFjaywgYXBwbHlCZWZvcmVWYWxpZGF0aW9uLCBnbG9iYWwpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmFkZE1pZGRsZXdhcmUoY2FsbGJhY2ssICEhYXBwbHlCZWZvcmVWYWxpZGF0aW9uLCBnbG9iYWwpO1xuICAgIH1cbiAgICBuYXJncyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0fGFycmF5PiBbbnVtYmVyXScsIFtrZXksIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpcy5uYXJncy5iaW5kKHRoaXMpLCAnbmFyZycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbm9ybWFsaXplKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ25vcm1hbGl6ZScsIGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbnVtYmVyKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ251bWJlcicsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb24oa2V5LCBvcHQpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFtvYmplY3RdJywgW2tleSwgb3B0XSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBvcHQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXNba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXkpO1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpICYmIChrZXkgPT09ICd2ZXJzaW9uJyB8fCAob3B0ID09PSBudWxsIHx8IG9wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0LmFsaWFzKSA9PT0gJ3ZlcnNpb24nKSkge1xuICAgICAgICAgICAgICAgIHRoaXNba0VtaXRXYXJuaW5nXShbXG4gICAgICAgICAgICAgICAgICAgICdcInZlcnNpb25cIiBpcyBhIHJlc2VydmVkIHdvcmQuJyxcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzonLFxuICAgICAgICAgICAgICAgICAgICAnLSBEaXNhYmxlIHZlcnNpb24gd2l0aCBgeWFyZ3MudmVyc2lvbihmYWxzZSlgIGlmIHVzaW5nIFwidmVyc2lvblwiIGFzIGFuIG9wdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICctIFVzZSB0aGUgYnVpbHQtaW4gYHlhcmdzLnZlcnNpb25gIG1ldGhvZCBpbnN0ZWFkIChpZiBhcHBsaWNhYmxlKScsXG4gICAgICAgICAgICAgICAgICAgICctIFVzZSBhIGRpZmZlcmVudCBvcHRpb24ga2V5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8veWFyZ3MuanMub3JnL2RvY3MvI2FwaS1yZWZlcmVuY2UtdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgXS5qb2luKCdcXG4nKSwgdW5kZWZpbmVkLCAndmVyc2lvbldhcm5pbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgdGhpcy5hbGlhcyhrZXksIG9wdC5hbGlhcyk7XG4gICAgICAgICAgICBjb25zdCBkZXByZWNhdGUgPSBvcHQuZGVwcmVjYXRlIHx8IG9wdC5kZXByZWNhdGVkO1xuICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwcmVjYXRlT3B0aW9uKGtleSwgZGVwcmVjYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZCA9IG9wdC5kZW1hbmQgfHwgb3B0LnJlcXVpcmVkIHx8IG9wdC5yZXF1aXJlO1xuICAgICAgICAgICAgaWYgKGRlbWFuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kKGtleSwgZGVtYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZGVtYW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZW1hbmRPcHRpb24oa2V5LCB0eXBlb2Ygb3B0LmRlbWFuZE9wdGlvbiA9PT0gJ3N0cmluZycgPyBvcHQuZGVtYW5kT3B0aW9uIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmxpY3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25mbGljdHMoa2V5LCBvcHQuY29uZmxpY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnZGVmYXVsdCcgaW4gb3B0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0KGtleSwgb3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5pbXBsaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltcGxpZXMoa2V5LCBvcHQuaW1wbGllcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5hcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hcmdzKGtleSwgb3B0Lm5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcoa2V5LCBvcHQuY29uZmlnUGFyc2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3JtYWxpemUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY2hvaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hvaWNlcyhrZXksIG9wdC5jaG9pY2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY29lcmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2VyY2Uoa2V5LCBvcHQuY29lcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwKGtleSwgb3B0Lmdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuYm9vbGVhbiB8fCBvcHQudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib29sZWFuKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmFycmF5IHx8IG9wdC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJyYXkob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQubnVtYmVyIHx8IG9wdC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXIob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc3RyaW5nIHx8IG9wdC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdC5hbGlhcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmcob3B0LmFsaWFzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuY291bnQgfHwgb3B0LnR5cGUgPT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50KGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5nbG9iYWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsKGtleSwgb3B0Lmdsb2JhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlZmF1bHREZXNjcmlwdGlvbltrZXldID0gb3B0LmRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNraXBWYWxpZGF0aW9uKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZXNjID0gb3B0LmRlc2NyaWJlIHx8IG9wdC5kZXNjcmlwdGlvbiB8fCBvcHQuZGVzYztcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5nZXREZXNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlc2NyaXB0aW9ucywga2V5KSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBkZXNjID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpYmUoa2V5LCBkZXNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnJlcXVpcmVzQXJnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlc0FyZyhrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBvcHRpb25zKGtleSwgb3B0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbihrZXksIG9wdCk7XG4gICAgfVxuICAgIHBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xhcnJheV0gW2Z1bmN0aW9ufGJvb2xlYW58b2JqZWN0XSBbZnVuY3Rpb25dJywgW2FyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trRnJlZXplXSgpO1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhcmdzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIHNob3J0Q2lyY3VpdCwgXCJmXCIpO1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gX3BhcnNlRm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzaG9ydENpcmN1aXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgc2hvcnRDaXJjdWl0LCBcImZcIik7XG4gICAgICAgICAgICBzaG9ydENpcmN1aXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNob3J0Q2lyY3VpdClcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIGFyZ3MsIFwiZlwiKTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdKGFyZ3MsICEhc2hvcnRDaXJjdWl0KTtcbiAgICAgICAgY29uc3QgdG1wUGFyc2VkID0gdGhpcy5wYXJzZWQ7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLnNldFBhcnNlZCh0aGlzLnBhcnNlZCk7XG4gICAgICAgIGlmIChpc1Byb21pc2UocGFyc2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFxuICAgICAgICAgICAgICAgIC50aGVuKGFyZ3YgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgXCJmXCIpLCBhcmd2LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKGVyciwgdGhpcy5wYXJzZWQuYXJndiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXNba1VuZnJlZXplXSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VkID0gdG1wUGFyc2VkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikpXG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikuY2FsbCh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgXCJmXCIpLCBwYXJzZWQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikpO1xuICAgICAgICAgICAgdGhpc1trVW5mcmVlemVdKCk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlZCA9IHRtcFBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiAgICBwYXJzZUFzeW5jKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pIHtcbiAgICAgICAgY29uc3QgbWF5YmVQcm9taXNlID0gdGhpcy5wYXJzZShhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKTtcbiAgICAgICAgcmV0dXJuICFpc1Byb21pc2UobWF5YmVQcm9taXNlKVxuICAgICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKVxuICAgICAgICAgICAgOiBtYXliZVByb21pc2U7XG4gICAgfVxuICAgIHBhcnNlU3luYyhhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKSB7XG4gICAgICAgIGNvbnN0IG1heWJlUHJvbWlzZSA9IHRoaXMucGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbik7XG4gICAgICAgIGlmIChpc1Byb21pc2UobWF5YmVQcm9taXNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnBhcnNlU3luYygpIG11c3Qgbm90IGJlIHVzZWQgd2l0aCBhc3luY2hyb25vdXMgYnVpbGRlcnMsIGhhbmRsZXJzLCBvciBtaWRkbGV3YXJlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZTtcbiAgICB9XG4gICAgcGFyc2VyQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbY29uZmlnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnLCBjb25maWcsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHBrZ0NvbmYoa2V5LCByb290UGF0aCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbc3RyaW5nXScsIFtrZXksIHJvb3RQYXRoXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBjb25mID0gbnVsbDtcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpc1trUGtnVXBdKHJvb3RQYXRoIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBcImZcIikpO1xuICAgICAgICBpZiAob2JqW2tleV0gJiYgdHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uZiA9IGFwcGx5RXh0ZW5kcyhvYmpba2V5XSwgcm9vdFBhdGggfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIFwiZlwiKSwgdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKVsnZGVlcC1tZXJnZS1jb25maWcnXSB8fCBmYWxzZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyA9IChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzIHx8IFtdKS5jb25jYXQoY29uZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHBvc2l0aW9uYWwoa2V5LCBvcHRzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IDxvYmplY3Q+JywgW2tleSwgb3B0c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRPcHRzID0gW1xuICAgICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2RlZmF1bHREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnaW1wbGllcycsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgICAgICdjb25mbGljdHMnLFxuICAgICAgICAgICAgJ2NvZXJjZScsXG4gICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAnZGVzY3JpYmUnLFxuICAgICAgICAgICAgJ2Rlc2MnLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgIF07XG4gICAgICAgIG9wdHMgPSBvYmpGaWx0ZXIob3B0cywgKGssIHYpID0+IHtcbiAgICAgICAgICAgIGlmIChrID09PSAndHlwZScgJiYgIVsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ10uaW5jbHVkZXModikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnRlZE9wdHMuaW5jbHVkZXMoayk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmdWxsQ29tbWFuZCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29udGV4dCwgXCJmXCIpLmZ1bGxDb21tYW5kc1tfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQsIFwiZlwiKS5mdWxsQ29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IGZ1bGxDb21tYW5kXG4gICAgICAgICAgICA/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmNtZFRvUGFyc2VPcHRpb25zKGZ1bGxDb21tYW5kKVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgYXJyYXk6IFtdLFxuICAgICAgICAgICAgICAgIGFsaWFzOiB7fSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7fSxcbiAgICAgICAgICAgICAgICBkZW1hbmQ6IHt9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgb2JqZWN0S2V5cyhwYXJzZU9wdGlvbnMpLmZvckVhY2gocGsgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VPcHRpb24gPSBwYXJzZU9wdGlvbnNbcGtdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VPcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlT3B0aW9uLmluZGV4T2Yoa2V5KSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIG9wdHNbcGtdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZU9wdGlvbltrZXldICYmICEocGsgaW4gb3B0cykpXG4gICAgICAgICAgICAgICAgICAgIG9wdHNbcGtdID0gcGFyc2VPcHRpb25ba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXAoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKGtleSwgb3B0cyk7XG4gICAgfVxuICAgIHJlY29tbWVuZENvbW1hbmRzKHJlY29tbWVuZCA9IHRydWUpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW3JlY29tbWVuZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzLCByZWNvbW1lbmQsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJlcXVpcmVkKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbWFuZChrZXlzLCBtYXgsIG1zZyk7XG4gICAgfVxuICAgIHJlcXVpcmUoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtYW5kKGtleXMsIG1heCwgbXNnKTtcbiAgICB9XG4gICAgcmVxdWlyZXNBcmcoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nfG9iamVjdD4gW251bWJlcl0nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnICYmIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLm5hcmdba2V5c10pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5XSh0aGlzLnJlcXVpcmVzQXJnLmJpbmQodGhpcyksICduYXJnJywga2V5cywgTmFOKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd0NvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nXSBbc3RyaW5nXScsIFskMCwgY21kXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgICQwID0gJDAgfHwgdGhpcy4kMDtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIFwiZlwiKS5sb2coX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpIHx8ICdjb21wbGV0aW9uJykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd0hlbHAobGV2ZWwpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ3xmdW5jdGlvbl0nLCBbbGV2ZWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuaGFzQ2FjaGVkSGVscE1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlID0gdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIFwiZlwiKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDAsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocGFyc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dIZWxwKGxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJSZXNwb25zZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJ1bkRlZmF1bHRCdWlsZGVyT24odGhpcyk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKGJ1aWxkZXJSZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBidWlsZGVyUmVzcG9uc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dIZWxwKGxldmVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNjcmlwdE5hbWUoc2NyaXB0TmFtZSkge1xuICAgICAgICB0aGlzLmN1c3RvbVNjcmlwdE5hbWUgPSB0cnVlO1xuICAgICAgICB0aGlzLiQwID0gc2NyaXB0TmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dIZWxwT25GYWlsKGVuYWJsZWQsIG1lc3NhZ2UpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW58c3RyaW5nXSBbc3RyaW5nXScsIFtlbmFibGVkLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93SGVscE9uRmFpbChlbmFibGVkLCBtZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dWZXJzaW9uKGxldmVsKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8ZnVuY3Rpb25dJywgW2xldmVsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93VmVyc2lvbihsZXZlbCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBza2lwVmFsaWRhdGlvbihrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdza2lwVmFsaWRhdGlvbicsIGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RyaWN0KGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIGVuYWJsZWQgIT09IGZhbHNlLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdHJpY3RDb21tYW5kcyhlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIGVuYWJsZWQgIT09IGZhbHNlLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzdHJpY3RPcHRpb25zKGVuYWJsZWQpIHtcbiAgICAgICAgYXJnc2VydCgnW2Jvb2xlYW5dJywgW2VuYWJsZWRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBlbmFibGVkICE9PSBmYWxzZSwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RyaW5nKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ3N0cmluZycsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0ZXJtaW5hbFdpZHRoKCkge1xuICAgICAgICBhcmdzZXJ0KFtdLCAwKTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3Muc3RkQ29sdW1ucztcbiAgICB9XG4gICAgdXBkYXRlTG9jYWxlKG9iaikge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTdHJpbmdzKG9iaik7XG4gICAgfVxuICAgIHVwZGF0ZVN0cmluZ3Mob2JqKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW29ial0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi51cGRhdGVMb2NhbGUob2JqKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHVzYWdlKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xudWxsfHVuZGVmaW5lZD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dJywgW21zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKG1zZywgbnVsbCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgaWYgKChtc2cgfHwgJycpLm1hdGNoKC9eXFwkMCggfCQpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kKG1zZywgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignLnVzYWdlKCkgZGVzY3JpcHRpb24gbXVzdCBzdGFydCB3aXRoICQwIGlmIGJlaW5nIHVzZWQgYXMgYWxpYXMgZm9yIC5jb21tYW5kKCknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS51c2FnZShtc2cpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXNhZ2VDb25maWd1cmF0aW9uKGNvbmZpZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0PicsIFtjb25maWddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZywgY29uZmlnLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2ZXJzaW9uKG9wdCwgbXNnLCB2ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZlcnNpb25PcHQgPSAndmVyc2lvbic7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10gW3N0cmluZ10nLCBbb3B0LCBtc2csIHZlcl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikpIHtcbiAgICAgICAgICAgIHRoaXNba0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0XShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikudmVyc2lvbih1bmRlZmluZWQpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBudWxsLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZlciA9IHRoaXNba0d1ZXNzVmVyc2lvbl0oKTtcbiAgICAgICAgICAgIG9wdCA9IGRlZmF1bHRWZXJzaW9uT3B0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChvcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXIgPSBvcHQ7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2ZXIgPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRWZXJzaW9uT3B0LCBcImZcIik7XG4gICAgICAgIG1zZyA9IG1zZyB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZGVmZXJZMThuTG9va3VwKCdTaG93IHZlcnNpb24gbnVtYmVyJyk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS52ZXJzaW9uKHZlciB8fCB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmJvb2xlYW4oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpLCBtc2cpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgd3JhcChjb2xzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxudW1iZXJ8bnVsbHx1bmRlZmluZWQ+JywgW2NvbHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLndyYXAoY29scyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBbKF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9jd2QgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX291dHB1dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BrZ3MgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfc2hpbSA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3N0cmljdCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3VzYWdlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWcgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiA9IG5ldyBXZWFrTWFwKCksIGtDb3B5RG91YmxlRGFzaCldKGFyZ3YpIHtcbiAgICAgICAgaWYgKCFhcmd2Ll8gfHwgIWFyZ3ZbJy0tJ10pXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgYXJndi5fLnB1c2guYXBwbHkoYXJndi5fLCBhcmd2WyctLSddKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcmd2WyctLSddO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfVxuICAgIFtrQ3JlYXRlTG9nZ2VyXSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvZzogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNba0hhc1BhcnNlQ2FsbGJhY2tdKCkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSArICdcXG4nLCBcImZcIik7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikgKyBhcmdzLmpvaW4oJyAnKSwgXCJmXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1trSGFzUGFyc2VDYWxsYmFja10oKSlcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikgKyAnXFxuJywgXCJmXCIpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpICsgYXJncy5qb2luKCcgJyksIFwiZlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIFtrRGVsZXRlRnJvbVBhcnNlckhpbnRPYmplY3RdKG9wdGlvbktleSkge1xuICAgICAgICBvYmplY3RLZXlzKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpKS5mb3JFYWNoKChoaW50S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKChrZXkpID0+IGtleSA9PT0gJ2NvbmZpZ09iamVjdHMnKShoaW50S2V5KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBoaW50ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbaGludEtleV07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoaW50KSkge1xuICAgICAgICAgICAgICAgIGlmIChoaW50LmluY2x1ZGVzKG9wdGlvbktleSkpXG4gICAgICAgICAgICAgICAgICAgIGhpbnQuc3BsaWNlKGhpbnQuaW5kZXhPZihvcHRpb25LZXkpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBoaW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoaW50W29wdGlvbktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkZWxldGUgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmdldERlc2NyaXB0aW9ucygpW29wdGlvbktleV07XG4gICAgfVxuICAgIFtrRW1pdFdhcm5pbmddKHdhcm5pbmcsIHR5cGUsIGRlZHVwbGljYXRpb25JZCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLCBcImZcIilbZGVkdXBsaWNhdGlvbklkXSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5lbWl0V2FybmluZyh3YXJuaW5nLCB0eXBlKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzLCBcImZcIilbZGVkdXBsaWNhdGlvbklkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgW2tGcmVlemVdKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMsIFwiZlwiKS5wdXNoKHtcbiAgICAgICAgICAgIG9wdGlvbnM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cy5zbGljZSgwKSxcbiAgICAgICAgICAgIGV4aXRQcm9jZXNzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIiksXG4gICAgICAgICAgICBncm91cHM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIiksXG4gICAgICAgICAgICBzdHJpY3Q6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBcImZcIiksXG4gICAgICAgICAgICBzdHJpY3RDb21tYW5kczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcywgXCJmXCIpLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9uczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBcImZcIiksXG4gICAgICAgICAgICBjb21wbGV0aW9uQ29tbWFuZDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpLFxuICAgICAgICAgICAgb3V0cHV0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpLFxuICAgICAgICAgICAgZXhpdEVycm9yOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgXCJmXCIpLFxuICAgICAgICAgICAgaGFzT3V0cHV0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgXCJmXCIpLFxuICAgICAgICAgICAgcGFyc2VkOiB0aGlzLnBhcnNlZCxcbiAgICAgICAgICAgIHBhcnNlRm46IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpLFxuICAgICAgICAgICAgcGFyc2VDb250ZXh0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgXCJmXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmZyZWV6ZSgpO1xuICAgIH1cbiAgICBba0dldERvbGxhclplcm9dKCkge1xuICAgICAgICBsZXQgJDAgPSAnJztcbiAgICAgICAgbGV0IGRlZmF1bHQkMDtcbiAgICAgICAgaWYgKC9cXGIobm9kZXxpb2pzfGVsZWN0cm9uKShcXC5leGUpPyQvLnRlc3QoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5hcmd2KClbMF0pKSB7XG4gICAgICAgICAgICBkZWZhdWx0JDAgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgxLCAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHQkMCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuYXJndigpLnNsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgICQwID0gZGVmYXVsdCQwXG4gICAgICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgYiA9IHRoaXNba1JlYmFzZV0oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIFwiZlwiKSwgeCk7XG4gICAgICAgICAgICByZXR1cm4geC5tYXRjaCgvXihcXC98KFthLXpBLVpdOik/XFxcXCkvKSAmJiBiLmxlbmd0aCA8IHgubGVuZ3RoID8gYiA6IHg7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignICcpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdfJykgJiZcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldFByb2Nlc3NBcmd2QmluKCkgPT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignXycpKSB7XG4gICAgICAgICAgICAkMCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpXG4gICAgICAgICAgICAgICAgLmdldEVudignXycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoYCR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucGF0aC5kaXJuYW1lKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuZXhlY1BhdGgoKSl9L2AsICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJDA7XG4gICAgfVxuICAgIFtrR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZywgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldFVzYWdlQ29uZmlndXJhdGlvbl0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnLCBcImZcIik7XG4gICAgfVxuICAgIFtrR3Vlc3NMb2NhbGVdKCkge1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBcImZcIikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTENfQUxMJykgfHxcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTENfTUVTU0FHRVMnKSB8fFxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuZ2V0RW52KCdMQU5HJykgfHxcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTEFOR1VBR0UnKSB8fFxuICAgICAgICAgICAgJ2VuX1VTJztcbiAgICAgICAgdGhpcy5sb2NhbGUobG9jYWxlLnJlcGxhY2UoL1suOl0uKi8sICcnKSk7XG4gICAgfVxuICAgIFtrR3Vlc3NWZXJzaW9uXSgpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpc1trUGtnVXBdKCk7XG4gICAgICAgIHJldHVybiBvYmoudmVyc2lvbiB8fCAndW5rbm93bic7XG4gICAgfVxuICAgIFtrUGFyc2VQb3NpdGlvbmFsTnVtYmVyc10oYXJndikge1xuICAgICAgICBjb25zdCBhcmdzID0gYXJndlsnLS0nXSA/IGFyZ3ZbJy0tJ10gOiBhcmd2Ll87XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBhcmc7IChhcmcgPSBhcmdzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5QYXJzZXIubG9va3NMaWtlTnVtYmVyKGFyZykgJiZcbiAgICAgICAgICAgICAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLmZsb29yKHBhcnNlRmxvYXQoYCR7YXJnfWApKSkpIHtcbiAgICAgICAgICAgICAgICBhcmdzW2ldID0gTnVtYmVyKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgfVxuICAgIFtrUGtnVXBdKHJvb3RQYXRoKSB7XG4gICAgICAgIGNvbnN0IG5wYXRoID0gcm9vdFBhdGggfHwgJyonO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdKVxuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGtncywgXCJmXCIpW25wYXRoXTtcbiAgICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGlyID0gcm9vdFBhdGggfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikubWFpbkZpbGVuYW1lO1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnBhdGguZXh0bmFtZShzdGFydERpcikpIHtcbiAgICAgICAgICAgICAgICBzdGFydERpciA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnBhdGguZGlybmFtZShzdGFydERpcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwa2dKc29uUGF0aCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmZpbmRVcChzdGFydERpciwgKGRpciwgbmFtZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmFtZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAncGFja2FnZS5qc29uJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChwa2dKc29uUGF0aCwgdW5kZWZpbmVkLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnJlYWRGaWxlU3luYyhwa2dKc29uUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9ub29wKSB7IH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdID0gb2JqIHx8IHt9O1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wa2dzLCBcImZcIilbbnBhdGhdO1xuICAgIH1cbiAgICBba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSh0eXBlLCBrZXlzKSB7XG4gICAgICAgIGtleXMgPSBbXS5jb25jYXQoa2V5cyk7XG4gICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAga2V5ID0gdGhpc1trU2FuaXRpemVLZXldKGtleSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVt0eXBlXS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5XShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlLCAodHlwZSwga2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbdHlwZV1ba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnldKGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW3R5cGVdW2tleV0gPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbdHlwZV1ba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFtrUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgc2luZ2xlS2V5SGFuZGxlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoa2V5KSA9PiB0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykoa2V5KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG9iamVjdEtleXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNpbmdsZUtleUhhbmRsZXIodHlwZSwgdGhpc1trU2FuaXRpemVLZXldKGtleSksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBba1Nhbml0aXplS2V5XShrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpXG4gICAgICAgICAgICByZXR1cm4gJ19fX3Byb3RvX19fJztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgW2tTZXRLZXldKGtleSwgc2V0KSB7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpc1trU2V0S2V5XS5iaW5kKHRoaXMpLCAna2V5Jywga2V5LCBzZXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgW2tVbmZyZWV6ZV0oKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tO1xuICAgICAgICBjb25zdCBmcm96ZW4gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMsIFwiZlwiKS5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgbGV0IGNvbmZpZ09iamVjdHM7XG4gICAgICAgIChfYSA9IHRoaXMsIF9iID0gdGhpcywgX2MgPSB0aGlzLCBfZCA9IHRoaXMsIF9lID0gdGhpcywgX2YgPSB0aGlzLCBfZyA9IHRoaXMsIF9oID0gdGhpcywgX2ogPSB0aGlzLCBfayA9IHRoaXMsIF9sID0gdGhpcywgX20gPSB0aGlzLCB7XG4gICAgICAgICAgICBvcHRpb25zOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfYSwgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHMsXG4gICAgICAgICAgICBleGl0UHJvY2VzczogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2IsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgZ3JvdXBzOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfYywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgb3V0cHV0OiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZCwgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgZXhpdEVycm9yOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZSwgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgaGFzT3V0cHV0OiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfZiwgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgcGFyc2VkOiB0aGlzLnBhcnNlZCxcbiAgICAgICAgICAgIHN0cmljdDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2csIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHN0cmljdENvbW1hbmRzOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfaCwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBzdHJpY3RPcHRpb25zOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfaiwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGNvbXBsZXRpb25Db21tYW5kOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfaywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBwYXJzZUZuOiAoeyBzZXQgdmFsdWUoX28pIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChfbCwgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX20sIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgfSA9IGZyb3plbik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgPSBjb25maWdPYmplY3RzO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikudW5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikudW5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikudW5mcmVlemUoKTtcbiAgICB9XG4gICAgW2tWYWxpZGF0ZUFzeW5jXSh2YWxpZGF0aW9uLCBhcmd2KSB7XG4gICAgICAgIHJldHVybiBtYXliZUFzeW5jUmVzdWx0KGFyZ3YsIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0SW50ZXJuYWxNZXRob2RzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0Q29tbWFuZEluc3RhbmNlOiB0aGlzW2tHZXRDb21tYW5kSW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRDb250ZXh0OiB0aGlzW2tHZXRDb250ZXh0XS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0SGFzT3V0cHV0OiB0aGlzW2tHZXRIYXNPdXRwdXRdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRMb2dnZXJJbnN0YW5jZTogdGhpc1trR2V0TG9nZ2VySW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRQYXJzZUNvbnRleHQ6IHRoaXNba0dldFBhcnNlQ29udGV4dF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFBhcnNlckNvbmZpZ3VyYXRpb246IHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRVc2FnZUNvbmZpZ3VyYXRpb246IHRoaXNba0dldFVzYWdlQ29uZmlndXJhdGlvbl0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFVzYWdlSW5zdGFuY2U6IHRoaXNba0dldFVzYWdlSW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRWYWxpZGF0aW9uSW5zdGFuY2U6IHRoaXNba0dldFZhbGlkYXRpb25JbnN0YW5jZV0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGhhc1BhcnNlQ2FsbGJhY2s6IHRoaXNba0hhc1BhcnNlQ2FsbGJhY2tdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBpc0dsb2JhbENvbnRleHQ6IHRoaXNba0lzR2xvYmFsQ29udGV4dF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHBvc3RQcm9jZXNzOiB0aGlzW2tQb3N0UHJvY2Vzc10uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHJlc2V0OiB0aGlzW2tSZXNldF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHJ1blZhbGlkYXRpb246IHRoaXNba1J1blZhbGlkYXRpb25dLmJpbmQodGhpcyksXG4gICAgICAgICAgICBydW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kczogdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBzZXRIYXNPdXRwdXQ6IHRoaXNba1NldEhhc091dHB1dF0uYmluZCh0aGlzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgW2tHZXRDb21tYW5kSW5zdGFuY2VdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0Q29udGV4dF0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRIYXNPdXRwdXRdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRMb2dnZXJJbnN0YW5jZV0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldFBhcnNlQ29udGV4dF0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgXCJmXCIpIHx8IHt9O1xuICAgIH1cbiAgICBba0dldFVzYWdlSW5zdGFuY2VdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldFZhbGlkYXRpb25JbnN0YW5jZV0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKTtcbiAgICB9XG4gICAgW2tIYXNQYXJzZUNhbGxiYWNrXSgpIHtcbiAgICAgICAgcmV0dXJuICEhX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIik7XG4gICAgfVxuICAgIFtrSXNHbG9iYWxDb250ZXh0XSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0LCBcImZcIik7XG4gICAgfVxuICAgIFtrUG9zdFByb2Nlc3NdKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgY2FsbGVkRnJvbUNvbW1hbmQsIHJ1bkdsb2JhbE1pZGRsZXdhcmUpIHtcbiAgICAgICAgaWYgKGNhbGxlZEZyb21Db21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmIChpc1Byb21pc2UoYXJndikpXG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgaWYgKCFwb3B1bGF0ZURvdWJsZURhc2gpIHtcbiAgICAgICAgICAgIGFyZ3YgPSB0aGlzW2tDb3B5RG91YmxlRGFzaF0oYXJndik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKClbJ3BhcnNlLXBvc2l0aW9uYWwtbnVtYmVycyddIHx8XG4gICAgICAgICAgICB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocGFyc2VQb3NpdGlvbmFsTnVtYmVycykge1xuICAgICAgICAgICAgYXJndiA9IHRoaXNba1BhcnNlUG9zaXRpb25hbE51bWJlcnNdKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW5HbG9iYWxNaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICBhcmd2ID0gYXBwbHlNaWRkbGV3YXJlKGFyZ3YsIHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmdldE1pZGRsZXdhcmUoKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH1cbiAgICBba1Jlc2V0XShhbGlhc2VzID0ge30pIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSB8fCB7fSwgXCJmXCIpO1xuICAgICAgICBjb25zdCB0bXBPcHRpb25zID0ge307XG4gICAgICAgIHRtcE9wdGlvbnMubG9jYWwgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbCB8fCBbXTtcbiAgICAgICAgdG1wT3B0aW9ucy5jb25maWdPYmplY3RzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyB8fCBbXTtcbiAgICAgICAgY29uc3QgbG9jYWxMb29rdXAgPSB7fTtcbiAgICAgICAgdG1wT3B0aW9ucy5sb2NhbC5mb3JFYWNoKGwgPT4ge1xuICAgICAgICAgICAgbG9jYWxMb29rdXBbbF0gPSB0cnVlO1xuICAgICAgICAgICAgKGFsaWFzZXNbbF0gfHwgW10pLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxMb29rdXBbYV0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIiksIE9iamVjdC5rZXlzKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIikpLnJlZHVjZSgoYWNjLCBncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpW2dyb3VwTmFtZV0uZmlsdGVyKGtleSA9PiAhKGtleSBpbiBsb2NhbExvb2t1cCkpO1xuICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY1tncm91cE5hbWVdID0ga2V5cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCB7fSwgXCJmXCIpO1xuICAgICAgICBjb25zdCBhcnJheU9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnYXJyYXknLFxuICAgICAgICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgJ3N0cmluZycsXG4gICAgICAgICAgICAnc2tpcFZhbGlkYXRpb24nLFxuICAgICAgICAgICAgJ2NvdW50JyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnaGlkZGVuT3B0aW9ucycsXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IG9iamVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAnbmFyZycsXG4gICAgICAgICAgICAna2V5JyxcbiAgICAgICAgICAgICdhbGlhcycsXG4gICAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICAgICAnZGVmYXVsdERlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICdjb25maWcnLFxuICAgICAgICAgICAgJ2Nob2ljZXMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkT3B0aW9ucycsXG4gICAgICAgICAgICAnZGVtYW5kZWRDb21tYW5kcycsXG4gICAgICAgICAgICAnZGVwcmVjYXRlZE9wdGlvbnMnLFxuICAgICAgICBdO1xuICAgICAgICBhcnJheU9wdGlvbnMuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilba10gfHwgW10pLmZpbHRlcigoaykgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdE9wdGlvbnMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdG1wT3B0aW9uc1trXSA9IG9iakZpbHRlcihfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVtrXSwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICB9KTtcbiAgICAgICAgdG1wT3B0aW9ucy5lbnZQcmVmaXggPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5lbnZQcmVmaXg7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgdG1wT3B0aW9ucywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIilcbiAgICAgICAgICAgID8gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnJlc2V0KGxvY2FsTG9va3VwKVxuICAgICAgICAgICAgOiBVc2FnZSh0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKVxuICAgICAgICAgICAgPyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5yZXNldChsb2NhbExvb2t1cClcbiAgICAgICAgICAgIDogVmFsaWRhdGlvbih0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpXG4gICAgICAgICAgICA/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJlc2V0KClcbiAgICAgICAgICAgIDogQ29tbWFuZChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikpXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIENvbXBsZXRpb24odGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLnJlc2V0KCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIG51bGwsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsICcnLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBudWxsLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICB0aGlzLnBhcnNlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgW2tSZWJhc2VdKGJhc2UsIGRpcikge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucGF0aC5yZWxhdGl2ZShiYXNlLCBkaXIpO1xuICAgIH1cbiAgICBba1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzXShhcmdzLCBzaG9ydENpcmN1aXQsIGNhbGxlZEZyb21Db21tYW5kLCBjb21tYW5kSW5kZXggPSAwLCBoZWxwT25seSA9IGZhbHNlKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgbGV0IHNraXBWYWxpZGF0aW9uID0gISFjYWxsZWRGcm9tQ29tbWFuZCB8fCBoZWxwT25seTtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5fXyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uX187XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ3VyYXRpb24gPSB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpO1xuICAgICAgICBjb25zdCBwb3B1bGF0ZURvdWJsZURhc2ggPSAhIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuUGFyc2VyLmRldGFpbGVkKGFyZ3MsIE9iamVjdC5hc3NpZ24oe30sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7ICdwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnOiBmYWxzZSwgLi4uY29uZmlnIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgYXJndiA9IE9iamVjdC5hc3NpZ24ocGFyc2VkLmFyZ3YsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBcImZcIikpO1xuICAgICAgICBsZXQgYXJndlByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICAgICAgbGV0IGhlbHBPcHRTZXQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHZlcnNpb25PcHRTZXQgPSBmYWxzZTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikgJiYgYXJndltrZXldKSB7XG4gICAgICAgICAgICAgICAgaGVscE9wdFNldCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgIHZlcnNpb25PcHRTZXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXJndi4kMCA9IHRoaXMuJDA7XG4gICAgICAgIHRoaXMucGFyc2VkID0gcGFyc2VkO1xuICAgICAgICBpZiAoY29tbWFuZEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuY2xlYXJDYWNoZWRIZWxwTWVzc2FnZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzW2tHdWVzc0xvY2FsZV0oKTtcbiAgICAgICAgICAgIGlmIChzaG9ydENpcmN1aXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVscENtZHMgPSBbX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIildXG4gICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYWxpYXNlc1tfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKV0gfHwgW10pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLmxlbmd0aCA+IDEpO1xuICAgICAgICAgICAgICAgIGlmIChoZWxwQ21kcy5pbmNsdWRlcygnJyArIGFyZ3YuX1thcmd2Ll8ubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgaGVscE9wdFNldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQsIGZhbHNlLCBcImZcIik7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyS2V5cyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmdldENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29tcGxldGlvbnMgPSAoKF9hID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0aW9uS2V5KVxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAoX2IgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNvbXBsZXRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIC4uLigoX2QgPSB0aGlzLmdldEFsaWFzZXMoKVsoX2MgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNvbXBsZXRpb25LZXldKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXSksXG4gICAgICAgICAgICAgICAgXS5zb21lKChrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBza2lwUmVjb21tZW5kYXRpb24gPSBoZWxwT3B0U2V0IHx8IHJlcXVlc3RDb21wbGV0aW9ucyB8fCBoZWxwT25seTtcbiAgICAgICAgICAgIGlmIChhcmd2Ll8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RVbmtub3duQ29tbWFuZDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNvbW1hbmRJbmRleCB8fCAwLCBjbWQ7IGFyZ3YuX1tpXSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFN0cmluZyhhcmd2Ll9baV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJLZXlzLmluY2x1ZGVzKGNtZCkgJiYgY21kICE9PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5ydW5Db21tYW5kKGNtZCwgdGhpcywgcGFyc2VkLCBpICsgMSwgaGVscE9ubHksIGhlbHBPcHRTZXQgfHwgdmVyc2lvbk9wdFNldCB8fCBoZWxwT25seSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba1Bvc3RQcm9jZXNzXShpbm5lckFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0VW5rbm93bkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgIT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VW5rbm93bkNvbW1hbmQgPSBjbWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5oYXNEZWZhdWx0Q29tbWFuZCgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzLCBcImZcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VW5rbm93bkNvbW1hbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFza2lwUmVjb21tZW5kYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnJlY29tbWVuZENvbW1hbmRzKGZpcnN0VW5rbm93bkNvbW1hbmQsIGhhbmRsZXJLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3YuXy5pbmNsdWRlcyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikpICYmXG4gICAgICAgICAgICAgICAgICAgICFyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDb21wbGV0aW9uU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuaGFzRGVmYXVsdENvbW1hbmQoKSAmJiAhc2tpcFJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikucnVuQ29tbWFuZChudWxsLCB0aGlzLCBwYXJzZWQsIDAsIGhlbHBPbmx5LCBoZWxwT3B0U2V0IHx8IHZlcnNpb25PcHRTZXQgfHwgaGVscE9ubHkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29tcGxldGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpKVxuICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gW10uY29uY2F0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRpb25BcmdzID0gYXJncy5zbGljZShhcmdzLmluZGV4T2YoYC0tJHtfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5jb21wbGV0aW9uS2V5fWApICsgMSk7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuZ2V0Q29tcGxldGlvbihjb21wbGV0aW9uQXJncywgKGVyciwgY29tcGxldGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbnMgfHwgW10pLmZvckVhY2goY29tcGxldGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgXCJmXCIpLmxvZyhjb21wbGV0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdCgwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGFyZ3YsICFwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChoZWxwT3B0U2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dIZWxwKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIFwiZlwiKS5sb2cobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2ZXJzaW9uT3B0U2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd1ZlcnNpb24oJ2xvZycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbiAmJiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5za2lwVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2tpcFZhbGlkYXRpb24gPSBPYmplY3Qua2V5cyhhcmd2KS5zb21lKGtleSA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5za2lwVmFsaWRhdGlvbi5pbmRleE9mKGtleSkgPj0gMCAmJiBhcmd2W2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFza2lwVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VkLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzW2tSdW5WYWxpZGF0aW9uXShhbGlhc2VzLCB7fSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWRGcm9tQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndlByb21pc2UgPSBhcHBseU1pZGRsZXdhcmUoYXJndiwgdGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuZ2V0TWlkZGxld2FyZSgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmd2UHJvbWlzZSA9IHRoaXNba1ZhbGlkYXRlQXN5bmNdKHZhbGlkYXRpb24sIGFyZ3ZQcm9taXNlICE9PSBudWxsICYmIGFyZ3ZQcm9taXNlICE9PSB2b2lkIDAgPyBhcmd2UHJvbWlzZSA6IGFyZ3YpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKGFyZ3ZQcm9taXNlKSAmJiAhY2FsbGVkRnJvbUNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZQcm9taXNlID0gYXJndlByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5TWlkZGxld2FyZShhcmd2LCB0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5nZXRNaWRkbGV3YXJlKCksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBZRXJyb3IpXG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwoZXJyLm1lc3NhZ2UsIGVycik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oYXJndlByb21pc2UgIT09IG51bGwgJiYgYXJndlByb21pc2UgIT09IHZvaWQgMCA/IGFyZ3ZQcm9taXNlIDogYXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCAhIWNhbGxlZEZyb21Db21tYW5kLCB0cnVlKTtcbiAgICB9XG4gICAgW2tSdW5WYWxpZGF0aW9uXShhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBwYXJzZUVycm9ycywgaXNEZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB7IC4uLnRoaXMuZ2V0RGVtYW5kZWRPcHRpb25zKCkgfTtcbiAgICAgICAgcmV0dXJuIChhcmd2KSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyc2VFcnJvcnMpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihwYXJzZUVycm9ycy5tZXNzYWdlKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLm5vbk9wdGlvbkNvdW50KGFyZ3YpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikucmVxdWlyZWRBcmd1bWVudHMoYXJndiwgZGVtYW5kZWRPcHRpb25zKTtcbiAgICAgICAgICAgIGxldCBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgIGZhaWxlZFN0cmljdENvbW1hbmRzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5rbm93bkNvbW1hbmRzKGFyZ3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBcImZcIikgJiYgIWZhaWxlZFN0cmljdENvbW1hbmRzKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCAhIWlzRGVmYXVsdENvbW1hbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS51bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHt9LCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikubGltaXRlZENob2ljZXMoYXJndik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5pbXBsaWNhdGlvbnMoYXJndik7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5jb25mbGljdGluZyhhcmd2KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgW2tTZXRIYXNPdXRwdXRdKCkge1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgIH1cbiAgICBba1RyYWNrTWFudWFsbHlTZXRLZXlzXShrZXlzKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtrZXlzXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtrXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNZYXJnc0luc3RhbmNlKHkpIHtcbiAgICByZXR1cm4gISF5ICYmIHR5cGVvZiB5LmdldEludGVybmFsTWV0aG9kcyA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsImltcG9ydCB7IG9iamVjdEtleXMgfSBmcm9tICcuLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gb2JqRmlsdGVyKG9yaWdpbmFsID0ge30sIGZpbHRlciA9ICgpID0+IHRydWUpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBvYmplY3RLZXlzKG9yaWdpbmFsKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIoa2V5LCBvcmlnaW5hbFtrZXldKSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBvcmlnaW5hbFtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEJsb2NraW5nKGJsb2NraW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgcmV0dXJuO1xuICAgIFtwcm9jZXNzLnN0ZG91dCwgcHJvY2Vzcy5zdGRlcnJdLmZvckVhY2goX3N0cmVhbSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IF9zdHJlYW07XG4gICAgICAgIGlmIChzdHJlYW0uX2hhbmRsZSAmJlxuICAgICAgICAgICAgc3RyZWFtLmlzVFRZICYmXG4gICAgICAgICAgICB0eXBlb2Ygc3RyZWFtLl9oYW5kbGUuc2V0QmxvY2tpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nKGJsb2NraW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgb2JqRmlsdGVyIH0gZnJvbSAnLi91dGlscy9vYmotZmlsdGVyLmpzJztcbmltcG9ydCB7IFlFcnJvciB9IGZyb20gJy4veWVycm9yLmpzJztcbmltcG9ydCBzZXRCbG9ja2luZyBmcm9tICcuL3V0aWxzL3NldC1ibG9ja2luZy5qcyc7XG5mdW5jdGlvbiBpc0Jvb2xlYW4oZmFpbCkge1xuICAgIHJldHVybiB0eXBlb2YgZmFpbCA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzYWdlKHlhcmdzLCBzaGltKSB7XG4gICAgY29uc3QgX18gPSBzaGltLnkxOG4uX187XG4gICAgY29uc3Qgc2VsZiA9IHt9O1xuICAgIGNvbnN0IGZhaWxzID0gW107XG4gICAgc2VsZi5mYWlsRm4gPSBmdW5jdGlvbiBmYWlsRm4oZikge1xuICAgICAgICBmYWlscy5wdXNoKGYpO1xuICAgIH07XG4gICAgbGV0IGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICBsZXQgZ2xvYmFsRmFpbE1lc3NhZ2UgPSBudWxsO1xuICAgIGxldCBzaG93SGVscE9uRmFpbCA9IHRydWU7XG4gICAgc2VsZi5zaG93SGVscE9uRmFpbCA9IGZ1bmN0aW9uIHNob3dIZWxwT25GYWlsRm4oYXJnMSA9IHRydWUsIGFyZzIpIHtcbiAgICAgICAgY29uc3QgW2VuYWJsZWQsIG1lc3NhZ2VdID0gdHlwZW9mIGFyZzEgPT09ICdzdHJpbmcnID8gW3RydWUsIGFyZzFdIDogW2FyZzEsIGFyZzJdO1xuICAgICAgICBpZiAoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuaXNHbG9iYWxDb250ZXh0KCkpIHtcbiAgICAgICAgICAgIGdsb2JhbEZhaWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBmYWlsTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHNob3dIZWxwT25GYWlsID0gZW5hYmxlZDtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBsZXQgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgIHNlbGYuZmFpbCA9IGZ1bmN0aW9uIGZhaWwobXNnLCBlcnIpIHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGZhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZhaWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbCA9IGZhaWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW4oZmFpbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobXNnKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWwobXNnLCBlcnIsIHNlbGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKVxuICAgICAgICAgICAgICAgIHNldEJsb2NraW5nKHRydWUpO1xuICAgICAgICAgICAgaWYgKCFmYWlsdXJlT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZU91dHB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHNob3dIZWxwT25GYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLnNob3dIZWxwKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1zZyB8fCBlcnIpXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtc2cgfHwgZXJyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSA9IGZhaWxNZXNzYWdlIHx8IGdsb2JhbEZhaWxNZXNzYWdlO1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXNnIHx8IGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJyk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyID0gZXJyIHx8IG5ldyBZRXJyb3IobXNnKTtcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRFeGl0UHJvY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5oYXNQYXJzZUNhbGxiYWNrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geWFyZ3MuZXhpdCgxLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgdXNhZ2VzID0gW107XG4gICAgbGV0IHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBzZWxmLnVzYWdlID0gKG1zZywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG1zZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdXNhZ2VzLnB1c2goW21zZywgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBzZWxmLmdldFVzYWdlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VzO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZURpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdXNhZ2VEaXNhYmxlZDtcbiAgICB9O1xuICAgIHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF9fKCdQb3NpdGlvbmFsczonKTtcbiAgICB9O1xuICAgIGxldCBleGFtcGxlcyA9IFtdO1xuICAgIHNlbGYuZXhhbXBsZSA9IChjbWQsIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGV4YW1wbGVzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJyddKTtcbiAgICB9O1xuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuICAgIHNlbGYuY29tbWFuZCA9IGZ1bmN0aW9uIGNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5tYXAoY21kQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgIGNtZEFycmF5WzJdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNtZEFycmF5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMucHVzaChbY21kLCBkZXNjcmlwdGlvbiB8fCAnJywgaXNEZWZhdWx0LCBhbGlhc2VzLCBkZXByZWNhdGVkXSk7XG4gICAgfTtcbiAgICBzZWxmLmdldENvbW1hbmRzID0gKCkgPT4gY29tbWFuZHM7XG4gICAgbGV0IGRlc2NyaXB0aW9ucyA9IHt9O1xuICAgIHNlbGYuZGVzY3JpYmUgPSBmdW5jdGlvbiBkZXNjcmliZShrZXlPcktleXMsIGRlc2MpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuICAgICAgICAgICAga2V5T3JLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBkZXNjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlPcktleXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXlPcktleXMpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrLCBrZXlPcktleXNba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNba2V5T3JLZXlzXSA9IGRlc2M7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0RGVzY3JpcHRpb25zID0gKCkgPT4gZGVzY3JpcHRpb25zO1xuICAgIGxldCBlcGlsb2dzID0gW107XG4gICAgc2VsZi5lcGlsb2cgPSBtc2cgPT4ge1xuICAgICAgICBlcGlsb2dzLnB1c2gobXNnKTtcbiAgICB9O1xuICAgIGxldCB3cmFwU2V0ID0gZmFsc2U7XG4gICAgbGV0IHdyYXA7XG4gICAgc2VsZi53cmFwID0gY29scyA9PiB7XG4gICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB3cmFwID0gY29scztcbiAgICB9O1xuICAgIHNlbGYuZ2V0V3JhcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHNoaW0uZ2V0RW52KCdZQVJHU19ESVNBQkxFX1dSQVAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF3cmFwU2V0KSB7XG4gICAgICAgICAgICB3cmFwID0gd2luZG93V2lkdGgoKTtcbiAgICAgICAgICAgIHdyYXBTZXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3cmFwO1xuICAgIH07XG4gICAgY29uc3QgZGVmZXJZMThuTG9va3VwUHJlZml4ID0gJ19feWFyZ3NTdHJpbmdfXzonO1xuICAgIHNlbGYuZGVmZXJZMThuTG9va3VwID0gc3RyID0+IGRlZmVyWTE4bkxvb2t1cFByZWZpeCArIHN0cjtcbiAgICBzZWxmLmhlbHAgPSBmdW5jdGlvbiBoZWxwKCkge1xuICAgICAgICBpZiAoY2FjaGVkSGVscE1lc3NhZ2UpXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgICAgIG5vcm1hbGl6ZUFsaWFzZXMoKTtcbiAgICAgICAgY29uc3QgYmFzZSQwID0geWFyZ3MuY3VzdG9tU2NyaXB0TmFtZVxuICAgICAgICAgICAgPyB5YXJncy4kMFxuICAgICAgICAgICAgOiBzaGltLnBhdGguYmFzZW5hbWUoeWFyZ3MuJDApO1xuICAgICAgICBjb25zdCBkZW1hbmRlZE9wdGlvbnMgPSB5YXJncy5nZXREZW1hbmRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgZGVwcmVjYXRlZE9wdGlvbnMgPSB5YXJncy5nZXREZXByZWNhdGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBncm91cHMgPSB5YXJncy5nZXRHcm91cHMoKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgbGV0IGtleXMgPSBbXTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlc2NyaXB0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRPcHRpb25zKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZW1hbmRlZENvbW1hbmRzKSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvcHRpb25zLmRlZmF1bHQpKTtcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpO1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAnXycpXG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29uc3QgdGhlV3JhcCA9IHNlbGYuZ2V0V3JhcCgpO1xuICAgICAgICBjb25zdCB1aSA9IHNoaW0uY2xpdWkoe1xuICAgICAgICAgICAgd2lkdGg6IHRoZVdyYXAsXG4gICAgICAgICAgICB3cmFwOiAhIXRoZVdyYXAsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXVzYWdlRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh1c2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdXNhZ2VzLmZvckVhY2godXNhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVswXS5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCl9YCB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aS5kaXYoeyB0ZXh0OiBgJHt1c2FnZVsxXX1gLCBwYWRkaW5nOiBbMSwgMCwgMCwgMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCB1ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fKSB7XG4gICAgICAgICAgICAgICAgICAgIHUgPSBgJHtiYXNlJDB9IDwke19fKCdjb21tYW5kJyl9PlxcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSBbJHtfXygnY29tbWFuZCcpfV1cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1aS5kaXYoYCR7dX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMSB8fCAoY29tbWFuZHMubGVuZ3RoID09PSAxICYmICFjb21tYW5kc1swXVsyXSkpIHtcbiAgICAgICAgICAgIHVpLmRpdihfXygnQ29tbWFuZHM6JykpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gY29udGV4dC5jb21tYW5kcy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IGAke2NvbnRleHQuY29tbWFuZHMuam9pbignICcpfSBgXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgIGlmICh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3NvcnQtY29tbWFuZHMnXSA9PT1cbiAgICAgICAgICAgICAgICB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gYmFzZSQwID8gYCR7YmFzZSQwfSBgIDogJyc7XG4gICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRTdHJpbmcgPSBgJHtwcmVmaXh9JHtwYXJlbnRDb21tYW5kc30ke2NvbW1hbmRbMF0ucmVwbGFjZSgvXlxcJDAgPy8sICcnKX1gO1xuICAgICAgICAgICAgICAgIHVpLnNwYW4oe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjb21tYW5kU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMl0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChjb21tYW5kcywgdGhlV3JhcCwgYCR7YmFzZSQwfSR7cGFyZW50Q29tbWFuZHN9YCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIHsgdGV4dDogY29tbWFuZFsxXSB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoaW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjb21tYW5kWzJdKVxuICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnZGVmYXVsdCcpfV1gKTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFszXSAmJiBjb21tYW5kWzNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnYWxpYXNlczonKX0gJHtjb21tYW5kWzNdLmpvaW4oJywgJyl9XWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFs0XSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmRbNF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnZGVwcmVjYXRlZDogJXMnLCBjb21tYW5kWzRdKX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50cy5wdXNoKGBbJHtfXygnZGVwcmVjYXRlZCcpfV1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaGludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBoaW50cy5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMCwgMCwgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsaWFzS2V5cyA9IChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuY29uY2F0KE9iamVjdC5rZXlzKHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzKSB8fCBbXSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4gIXlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzW2tleV0gJiZcbiAgICAgICAgICAgIGFsaWFzS2V5cy5ldmVyeShhbGlhcyA9PiAob3B0aW9ucy5hbGlhc1thbGlhc10gfHwgW10pLmluZGV4T2Yoa2V5KSA9PT0gLTEpKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEdyb3VwID0gX18oJ09wdGlvbnM6Jyk7XG4gICAgICAgIGlmICghZ3JvdXBzW2RlZmF1bHRHcm91cF0pXG4gICAgICAgICAgICBncm91cHNbZGVmYXVsdEdyb3VwXSA9IFtdO1xuICAgICAgICBhZGRVbmdyb3VwZWRLZXlzKGtleXMsIG9wdGlvbnMuYWxpYXMsIGdyb3VwcywgZGVmYXVsdEdyb3VwKTtcbiAgICAgICAgY29uc3QgaXNMb25nU3dpdGNoID0gKHN3KSA9PiAvXi0tLy50ZXN0KGdldFRleHQoc3cpKTtcbiAgICAgICAgY29uc3QgZGlzcGxheWVkR3JvdXBzID0gT2JqZWN0LmtleXMoZ3JvdXBzKVxuICAgICAgICAgICAgLmZpbHRlcihncm91cE5hbWUgPT4gZ3JvdXBzW2dyb3VwTmFtZV0ubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5tYXAoZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gZ3JvdXBzW2dyb3VwTmFtZV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZpbHRlckhpZGRlbk9wdGlvbnMpXG4gICAgICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGlhc0tleXMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgYWxpYXNLZXk7IChhbGlhc0tleSA9IGFsaWFzS2V5c1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucy5hbGlhc1thbGlhc0tleV0gfHwgW10pLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXNLZXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMgfTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbm9ybWFsaXplZEtleXMgfSkgPT4gbm9ybWFsaXplZEtleXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIC5tYXAoKHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzd2l0Y2hlcyA9IG5vcm1hbGl6ZWRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IFtrZXldXG4gICAgICAgICAgICAgICAgICAgIC5jb25jYXQob3B0aW9ucy5hbGlhc1trZXldIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAubWFwKHN3ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwTmFtZSA9PT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3c7XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoL15bMC05XSQvLnRlc3Qoc3cpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN3Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnLS0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0nKSArIHN3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChzdzEsIHN3MikgPT4gaXNMb25nU3dpdGNoKHN3MSkgPT09IGlzTG9uZ1N3aXRjaChzdzIpXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IGlzTG9uZ1N3aXRjaChzdzEpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogLTEpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2hvcnRTd2l0Y2hlc1VzZWQgPSBkaXNwbGF5ZWRHcm91cHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgZ3JvdXBOYW1lIH0pID0+IGdyb3VwTmFtZSAhPT0gc2VsZi5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCkpXG4gICAgICAgICAgICAuc29tZSgoeyBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4gIW5vcm1hbGl6ZWRLZXlzLmV2ZXJ5KGtleSA9PiBpc0xvbmdTd2l0Y2goc3dpdGNoZXNba2V5XSkpKTtcbiAgICAgICAgaWYgKHNob3J0U3dpdGNoZXNVc2VkKSB7XG4gICAgICAgICAgICBkaXNwbGF5ZWRHcm91cHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IGdyb3VwTmFtZSB9KSA9PiBncm91cE5hbWUgIT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh7IG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb25nU3dpdGNoKHN3aXRjaGVzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hlc1trZXldID0gYWRkSW5kZW50YXRpb24oc3dpdGNoZXNba2V5XSwgJy14LCAnLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BsYXllZEdyb3Vwcy5mb3JFYWNoKCh7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+IHtcbiAgICAgICAgICAgIHVpLmRpdihncm91cE5hbWUpO1xuICAgICAgICAgICAgbm9ybWFsaXplZEtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtzd2l0Y2ggPSBzd2l0Y2hlc1trZXldO1xuICAgICAgICAgICAgICAgIGxldCBkZXNjID0gZGVzY3JpcHRpb25zW2tleV0gfHwgJyc7XG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChkZXNjLmluY2x1ZGVzKGRlZmVyWTE4bkxvb2t1cFByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAgIGRlc2MgPSBfXyhkZXNjLnN1YnN0cmluZyhkZWZlclkxOG5Mb29rdXBQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdib29sZWFuJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY291bnQuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnY291bnQnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpbmcuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnc3RyaW5nJyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubm9ybWFsaXplLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5LmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2FycmF5Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubnVtYmVyLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ251bWJlcicpfV1gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRFeHRyYSA9IChkZXByZWNhdGVkKSA9PiB0eXBlb2YgZGVwcmVjYXRlZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgZGVwcmVjYXRlZCl9XWBcbiAgICAgICAgICAgICAgICAgICAgOiBgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYSA9IFtcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlcHJlY2F0ZWRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlcHJlY2F0ZWRFeHRyYShkZXByZWNhdGVkT3B0aW9uc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBrZXkgaW4gZGVtYW5kZWRPcHRpb25zID8gYFske19fKCdyZXF1aXJlZCcpfV1gIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaG9pY2VzICYmIG9wdGlvbnMuY2hvaWNlc1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBbJHtfXygnY2hvaWNlczonKX0gJHtzZWxmLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKX1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RyaW5nKG9wdGlvbnMuZGVmYXVsdFtrZXldLCBvcHRpb25zLmRlZmF1bHREZXNjcmlwdGlvbltrZXldKSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dChrc3dpdGNoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDIgKyBnZXRJbmRlbnRhdGlvbihrc3dpdGNoKV0sXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChzd2l0Y2hlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgIH0sIGRlc2MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEhpZGVPcHRpb25FeHRyYXMgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUNvbmZpZ3VyYXRpb24oKVsnaGlkZS10eXBlcyddID09PVxuICAgICAgICAgICAgICAgICAgICB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYSAmJiAhc2hvdWxkSGlkZU9wdGlvbkV4dHJhcylcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogZXh0cmEsIHBhZGRpbmc6IFswLCAwLCAwLCAyXSwgYWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXhhbXBsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0V4YW1wbGVzOicpKTtcbiAgICAgICAgICAgIGV4YW1wbGVzLmZvckVhY2goZXhhbXBsZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhhbXBsZVswXSA9IGV4YW1wbGVbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGFtcGxlWzFdID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhXaWR0aChleGFtcGxlcywgdGhlV3JhcCkgKyA0LFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBleGFtcGxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcGlsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBlcGlsb2dzXG4gICAgICAgICAgICAgICAgLm1hcChlcGlsb2cgPT4gZXBpbG9nLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKSlcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgICAgICB1aS5kaXYoYCR7ZX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdWkudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIG1heFdpZHRoKHRhYmxlLCB0aGVXcmFwLCBtb2RpZmllcikge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFibGUpKSB7XG4gICAgICAgICAgICB0YWJsZSA9IE9iamVjdC52YWx1ZXModGFibGUpLm1hcCh2ID0+IFt2XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFibGUuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoc2hpbS5zdHJpbmdXaWR0aChtb2RpZmllciA/IGAke21vZGlmaWVyfSAke2dldFRleHQodlswXSl9YCA6IGdldFRleHQodlswXSkpICsgZ2V0SW5kZW50YXRpb24odlswXSksIHdpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGVXcmFwKVxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyc2VJbnQoKHRoZVdyYXAgKiAwLjUpLnRvU3RyaW5nKCksIDEwKSk7XG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplQWxpYXNlcygpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIChPYmplY3Qua2V5cyhvcHRpb25zLmFsaWFzKSB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbYWxpYXNdKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc2NyaWJlKGtleSwgZGVzY3JpcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIGRlbWFuZGVkT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZGVtYW5kT3B0aW9uKGtleSwgZGVtYW5kZWRPcHRpb25zW2FsaWFzXSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmJvb2xlYW4oa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb3VudC5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmNvdW50KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyaW5nLmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Muc3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubm9ybWFsaXplLmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3Mubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXJyYXkuaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5hcnJheShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm51bWJlci5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgY2FjaGVkSGVscE1lc3NhZ2U7XG4gICAgc2VsZi5jYWNoZUhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHRoaXMuaGVscCgpO1xuICAgIH07XG4gICAgc2VsZi5jbGVhckNhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWNoZWRIZWxwTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHNlbGYuaGFzQ2FjaGVkSGVscE1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhIWNhY2hlZEhlbHBNZXNzYWdlO1xuICAgIH07XG4gICAgZnVuY3Rpb24gYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBhbGlhc2VzLCBncm91cHMsIGRlZmF1bHRHcm91cCkge1xuICAgICAgICBsZXQgZ3JvdXBlZEtleXMgPSBbXTtcbiAgICAgICAgbGV0IHRvQ2hlY2sgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgZ3JvdXBlZEtleXMgPSBncm91cGVkS2V5cy5jb25jYXQoZ3JvdXBzW2dyb3VwXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRvQ2hlY2sgPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIGlmICghdG9DaGVjay5zb21lKGsgPT4gZ3JvdXBlZEtleXMuaW5kZXhPZihrKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0ucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRLZXlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaWx0ZXJIaWRkZW5PcHRpb25zKGtleSkge1xuICAgICAgICByZXR1cm4gKHlhcmdzLmdldE9wdGlvbnMoKS5oaWRkZW5PcHRpb25zLmluZGV4T2Yoa2V5KSA8IDAgfHxcbiAgICAgICAgICAgIHlhcmdzLnBhcnNlZC5hcmd2W3lhcmdzLmdldE9wdGlvbnMoKS5zaG93SGlkZGVuT3B0XSk7XG4gICAgfVxuICAgIHNlbGYuc2hvd0hlbHAgPSAobGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKCFsZXZlbClcbiAgICAgICAgICAgIGxldmVsID0gJ2Vycm9yJztcbiAgICAgICAgY29uc3QgZW1pdCA9IHR5cGVvZiBsZXZlbCA9PT0gJ2Z1bmN0aW9uJyA/IGxldmVsIDogbG9nZ2VyW2xldmVsXTtcbiAgICAgICAgZW1pdChzZWxmLmhlbHAoKSk7XG4gICAgfTtcbiAgICBzZWxmLmZ1bmN0aW9uRGVzY3JpcHRpb24gPSBmbiA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZm4ubmFtZVxuICAgICAgICAgICAgPyBzaGltLlBhcnNlci5kZWNhbWVsaXplKGZuLm5hbWUsICctJylcbiAgICAgICAgICAgIDogX18oJ2dlbmVyYXRlZC12YWx1ZScpO1xuICAgICAgICByZXR1cm4gWycoJywgZGVzY3JpcHRpb24sICcpJ10uam9pbignJyk7XG4gICAgfTtcbiAgICBzZWxmLnN0cmluZ2lmaWVkVmFsdWVzID0gZnVuY3Rpb24gc3RyaW5naWZpZWRWYWx1ZXModmFsdWVzLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgbGV0IHN0cmluZyA9ICcnO1xuICAgICAgICBjb25zdCBzZXAgPSBzZXBhcmF0b3IgfHwgJywgJztcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXS5jb25jYXQodmFsdWVzKTtcbiAgICAgICAgaWYgKCF2YWx1ZXMgfHwgIWFycmF5Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgIGFycmF5LmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHNlcDtcbiAgICAgICAgICAgIHN0cmluZyArPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH07XG4gICAgZnVuY3Rpb24gZGVmYXVsdFN0cmluZyh2YWx1ZSwgZGVmYXVsdERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBgWyR7X18oJ2RlZmF1bHQ6Jyl9IGA7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFkZWZhdWx0RGVzY3JpcHRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3RyaW5nICs9IGRlZmF1bHREZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3N0cmluZ31dYDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2luZG93V2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gODA7XG4gICAgICAgIGlmIChzaGltLnByb2Nlc3Muc3RkQ29sdW1ucykge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKG1heFdpZHRoLCBzaGltLnByb2Nlc3Muc3RkQ29sdW1ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWF4V2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IHZlcnNpb24gPSBudWxsO1xuICAgIHNlbGYudmVyc2lvbiA9IHZlciA9PiB7XG4gICAgICAgIHZlcnNpb24gPSB2ZXI7XG4gICAgfTtcbiAgICBzZWxmLnNob3dWZXJzaW9uID0gbGV2ZWwgPT4ge1xuICAgICAgICBjb25zdCBsb2dnZXIgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRMb2dnZXJJbnN0YW5jZSgpO1xuICAgICAgICBpZiAoIWxldmVsKVxuICAgICAgICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgICAgICBjb25zdCBlbWl0ID0gdHlwZW9mIGxldmVsID09PSAnZnVuY3Rpb24nID8gbGV2ZWwgOiBsb2dnZXJbbGV2ZWxdO1xuICAgICAgICBlbWl0KHZlcnNpb24pO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICAgICAgZmFpbHVyZU91dHB1dCA9IGZhbHNlO1xuICAgICAgICB1c2FnZXMgPSBbXTtcbiAgICAgICAgdXNhZ2VEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBlcGlsb2dzID0gW107XG4gICAgICAgIGV4YW1wbGVzID0gW107XG4gICAgICAgIGNvbW1hbmRzID0gW107XG4gICAgICAgIGRlc2NyaXB0aW9ucyA9IG9iakZpbHRlcihkZXNjcmlwdGlvbnMsIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgICBjb25zdCBmcm96ZW5zID0gW107XG4gICAgc2VsZi5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUoKSB7XG4gICAgICAgIGZyb3plbnMucHVzaCh7XG4gICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQsXG4gICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgZXBpbG9ncyxcbiAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgc2VsZi51bmZyZWV6ZSA9IGZ1bmN0aW9uIHVuZnJlZXplKGRlZmF1bHRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgaWYgKCFmcm96ZW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChkZWZhdWx0Q29tbWFuZCkge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zID0geyAuLi5mcm96ZW4uZGVzY3JpcHRpb25zLCAuLi5kZXNjcmlwdGlvbnMgfTtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gWy4uLmZyb3plbi5jb21tYW5kcywgLi4uY29tbWFuZHNdO1xuICAgICAgICAgICAgdXNhZ2VzID0gWy4uLmZyb3plbi51c2FnZXMsIC4uLnVzYWdlc107XG4gICAgICAgICAgICBleGFtcGxlcyA9IFsuLi5mcm96ZW4uZXhhbXBsZXMsIC4uLmV4YW1wbGVzXTtcbiAgICAgICAgICAgIGVwaWxvZ3MgPSBbLi4uZnJvemVuLmVwaWxvZ3MsIC4uLmVwaWxvZ3NdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBmYWlsTWVzc2FnZSxcbiAgICAgICAgICAgICAgICBmYWlsdXJlT3V0cHV0LFxuICAgICAgICAgICAgICAgIHVzYWdlcyxcbiAgICAgICAgICAgICAgICB1c2FnZURpc2FibGVkLFxuICAgICAgICAgICAgICAgIGVwaWxvZ3MsXG4gICAgICAgICAgICAgICAgZXhhbXBsZXMsXG4gICAgICAgICAgICAgICAgY29tbWFuZHMsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25zLFxuICAgICAgICAgICAgfSA9IGZyb3plbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gaXNJbmRlbnRlZFRleHQodGV4dCkge1xuICAgIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBhZGRJbmRlbnRhdGlvbih0ZXh0LCBpbmRlbnQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dClcbiAgICAgICAgPyB7IHRleHQ6IHRleHQudGV4dCwgaW5kZW50YXRpb246IHRleHQuaW5kZW50YXRpb24gKyBpbmRlbnQgfVxuICAgICAgICA6IHsgdGV4dCwgaW5kZW50YXRpb246IGluZGVudCB9O1xufVxuZnVuY3Rpb24gZ2V0SW5kZW50YXRpb24odGV4dCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KSA/IHRleHQuaW5kZW50YXRpb24gOiAwO1xufVxuZnVuY3Rpb24gZ2V0VGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpID8gdGV4dC50ZXh0IDogdGV4dDtcbn1cbiIsImltcG9ydCB7IGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayB9IGZyb20gJy4vY29tbWFuZC5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RTdHJpY3RFcXVhbCB9IGZyb20gJy4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuaW1wb3J0ICogYXMgdGVtcGxhdGVzIGZyb20gJy4vY29tcGxldGlvbi10ZW1wbGF0ZXMuanMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi91dGlscy9pcy1wcm9taXNlLmpzJztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZCB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC5qcyc7XG5leHBvcnQgY2xhc3MgQ29tcGxldGlvbiB7XG4gICAgY29uc3RydWN0b3IoeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICB0aGlzLnlhcmdzID0geWFyZ3M7XG4gICAgICAgIHRoaXMudXNhZ2UgPSB1c2FnZTtcbiAgICAgICAgdGhpcy5jb21tYW5kID0gY29tbWFuZDtcbiAgICAgICAgdGhpcy5zaGltID0gc2hpbTtcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uS2V5ID0gJ2dldC15YXJncy1jb21wbGV0aW9ucyc7XG4gICAgICAgIHRoaXMuYWxpYXNlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbmRleEFmdGVyTGFzdFJlc2V0ID0gMDtcbiAgICAgICAgdGhpcy56c2hTaGVsbCA9XG4gICAgICAgICAgICAoX2MgPSAoKChfYSA9IHRoaXMuc2hpbS5nZXRFbnYoJ1NIRUxMJykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbmNsdWRlcygnenNoJykpIHx8XG4gICAgICAgICAgICAgICAgKChfYiA9IHRoaXMuc2hpbS5nZXRFbnYoJ1pTSF9OQU1FJykpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pbmNsdWRlcygnenNoJykpKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogZmFsc2U7XG4gICAgfVxuICAgIGRlZmF1bHRDb21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIGRvbmUpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmNvbW1hbmQuZ2V0Q29tbWFuZEhhbmRsZXJzKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJzW2FyZ3NbaV1dICYmIGhhbmRsZXJzW2FyZ3NbaV1dLmJ1aWxkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVyID0gaGFuZGxlcnNbYXJnc1tpXV0uYnVpbGRlcjtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb21tYW5kQnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBZnRlckxhc3RSZXNldCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy55YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICBidWlsZGVyKHksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geS5hcmd2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wbGV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbW1hbmRDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgY3VycmVudCk7XG4gICAgICAgIHRoaXMub3B0aW9uQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpO1xuICAgICAgICB0aGlzLmNob2ljZXNGcm9tT3B0aW9uc0NvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5jaG9pY2VzRnJvbVBvc2l0aW9uYWxzQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpO1xuICAgICAgICBkb25lKG51bGwsIGNvbXBsZXRpb25zKTtcbiAgICB9XG4gICAgY29tbWFuZENvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBjdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudENvbW1hbmRzID0gdGhpcy55YXJnc1xuICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAuZ2V0Q29udGV4dCgpLmNvbW1hbmRzO1xuICAgICAgICBpZiAoIWN1cnJlbnQubWF0Y2goL14tLykgJiZcbiAgICAgICAgICAgIHBhcmVudENvbW1hbmRzW3BhcmVudENvbW1hbmRzLmxlbmd0aCAtIDFdICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAhdGhpcy5wcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykpIHtcbiAgICAgICAgICAgIHRoaXMudXNhZ2UuZ2V0Q29tbWFuZHMoKS5mb3JFYWNoKHVzYWdlQ29tbWFuZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBwYXJzZUNvbW1hbmQodXNhZ2VDb21tYW5kWzBdKS5jbWQ7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuaW5kZXhPZihjb21tYW5kTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy56c2hTaGVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChjb21tYW5kTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gdXNhZ2VDb21tYW5kWzFdIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChjb21tYW5kTmFtZS5yZXBsYWNlKC86L2csICdcXFxcOicpICsgJzonICsgZGVzYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvcHRpb25Db21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCkge1xuICAgICAgICBpZiAoKGN1cnJlbnQubWF0Y2goL14tLykgfHwgKGN1cnJlbnQgPT09ICcnICYmIGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMCkpICYmXG4gICAgICAgICAgICAhdGhpcy5wcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gdGhpcy55YXJncy5nZXRHcm91cHMoKVt0aGlzLnVzYWdlLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKV0gfHwgW107XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zLmtleSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lZ2FibGUgPSAhIW9wdGlvbnMuY29uZmlndXJhdGlvblsnYm9vbGVhbi1uZWdhdGlvbiddICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYm9vbGVhbi5pbmNsdWRlcyhrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUG9zaXRpb25hbEtleSA9IHBvc2l0aW9uYWxLZXlzLmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1Bvc2l0aW9uYWxLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgIW9wdGlvbnMuaGlkZGVuT3B0aW9ucy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmFyZ3NDb250YWluS2V5KGFyZ3MsIGtleSwgbmVnYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZU9wdGlvbktleShrZXksIGNvbXBsZXRpb25zLCBjdXJyZW50LCBuZWdhYmxlICYmICEhb3B0aW9ucy5kZWZhdWx0W2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNob2ljZXNGcm9tT3B0aW9uc0NvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzQXJnSGFzQ2hvaWNlcyhhcmdzKSkge1xuICAgICAgICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuZ2V0UHJldmlvdXNBcmdDaG9pY2VzKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGNob2ljZXMgJiYgY2hvaWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaCguLi5jaG9pY2VzLm1hcChjID0+IGMucmVwbGFjZSgvOi9nLCAnXFxcXDonKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNob2ljZXNGcm9tUG9zaXRpb25hbHNDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCkge1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gJycgJiZcbiAgICAgICAgICAgIGNvbXBsZXRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25hbEtleXMgPSB0aGlzLnlhcmdzLmdldEdyb3VwcygpW3RoaXMudXNhZ2UuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpXSB8fCBbXTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5tYXgodGhpcy5pbmRleEFmdGVyTGFzdFJlc2V0LCB0aGlzLnlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKS5jb21tYW5kcy5sZW5ndGggK1xuICAgICAgICAgICAgMSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXkgPSBwb3NpdGlvbmFsS2V5c1thcmd2Ll8ubGVuZ3RoIC0gb2Zmc2V0IC0gMV07XG4gICAgICAgIGlmICghcG9zaXRpb25hbEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLnlhcmdzLmdldE9wdGlvbnMoKS5jaG9pY2VzW3Bvc2l0aW9uYWxLZXldIHx8IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNob2ljZSBvZiBjaG9pY2VzKSB7XG4gICAgICAgICAgICBpZiAoY2hvaWNlLnN0YXJ0c1dpdGgoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGNob2ljZS5yZXBsYWNlKC86L2csICdcXFxcOicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRQcmV2aW91c0FyZ0Nob2ljZXMoYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAxKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgcHJldmlvdXNBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGxldCBmaWx0ZXIgPSAnJztcbiAgICAgICAgaWYgKCFwcmV2aW91c0FyZy5zdGFydHNXaXRoKCctJykgJiYgYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBmaWx0ZXIgPSBwcmV2aW91c0FyZztcbiAgICAgICAgICAgIHByZXZpb3VzQXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDJdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJldmlvdXNBcmcuc3RhcnRzV2l0aCgnLScpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcmV2aW91c0FyZ0tleSA9IHByZXZpb3VzQXJnLnJlcGxhY2UoL14tKy8sICcnKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMueWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBwb3NzaWJsZUFsaWFzZXMgPSBbXG4gICAgICAgICAgICBwcmV2aW91c0FyZ0tleSxcbiAgICAgICAgICAgIC4uLih0aGlzLnlhcmdzLmdldEFsaWFzZXMoKVtwcmV2aW91c0FyZ0tleV0gfHwgW10pLFxuICAgICAgICBdO1xuICAgICAgICBsZXQgY2hvaWNlcztcbiAgICAgICAgZm9yIChjb25zdCBwb3NzaWJsZUFsaWFzIG9mIHBvc3NpYmxlQWxpYXNlcykge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmtleSwgcG9zc2libGVBbGlhcykgJiZcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KG9wdGlvbnMuY2hvaWNlc1twb3NzaWJsZUFsaWFzXSkpIHtcbiAgICAgICAgICAgICAgICBjaG9pY2VzID0gb3B0aW9ucy5jaG9pY2VzW3Bvc3NpYmxlQWxpYXNdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaG9pY2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hvaWNlcy5maWx0ZXIoY2hvaWNlID0+ICFmaWx0ZXIgfHwgY2hvaWNlLnN0YXJ0c1dpdGgoZmlsdGVyKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuZ2V0UHJldmlvdXNBcmdDaG9pY2VzKGFyZ3MpO1xuICAgICAgICByZXR1cm4gY2hvaWNlcyAhPT0gdW5kZWZpbmVkICYmIGNob2ljZXMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgYXJnc0NvbnRhaW5LZXkoYXJncywga2V5LCBuZWdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3NDb250YWlucyA9IChzKSA9PiBhcmdzLmluZGV4T2YoKC9eW14wLTldJC8udGVzdChzKSA/ICctJyA6ICctLScpICsgcykgIT09IC0xO1xuICAgICAgICBpZiAoYXJnc0NvbnRhaW5zKGtleSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG5lZ2FibGUgJiYgYXJnc0NvbnRhaW5zKGBuby0ke2tleX1gKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hbGlhc2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIHRoaXMuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NDb250YWlucyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29tcGxldGVPcHRpb25LZXkoa2V5LCBjb21wbGV0aW9ucywgY3VycmVudCwgbmVnYWJsZSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGxldCBrZXlXaXRoRGVzYyA9IGtleTtcbiAgICAgICAgaWYgKHRoaXMuenNoU2hlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NzID0gdGhpcy51c2FnZS5nZXREZXNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IGFsaWFzS2V5ID0gKF9iID0gKF9hID0gdGhpcyA9PT0gbnVsbCB8fCB0aGlzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aGlzLmFsaWFzZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVtrZXldKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZmluZChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IGRlc2NzW2FsaWFzXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRlc2MgPT09ICdzdHJpbmcnICYmIGRlc2MubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZGVzY0Zyb21BbGlhcyA9IGFsaWFzS2V5ID8gZGVzY3NbYWxpYXNLZXldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZGVzYyA9IChfZCA9IChfYyA9IGRlc2NzW2tleV0pICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlc2NGcm9tQWxpYXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6ICcnO1xuICAgICAgICAgICAga2V5V2l0aERlc2MgPSBgJHtrZXkucmVwbGFjZSgvOi9nLCAnXFxcXDonKX06JHtkZXNjXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ19feWFyZ3NTdHJpbmdfXzonLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSwgJyAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0c0J5VHdvRGFzaGVzID0gKHMpID0+IC9eLS0vLnRlc3Qocyk7XG4gICAgICAgIGNvbnN0IGlzU2hvcnRPcHRpb24gPSAocykgPT4gL15bXjAtOV0kLy50ZXN0KHMpO1xuICAgICAgICBjb25zdCBkYXNoZXMgPSAhc3RhcnRzQnlUd29EYXNoZXMoY3VycmVudCkgJiYgaXNTaG9ydE9wdGlvbihrZXkpID8gJy0nIDogJy0tJztcbiAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyBrZXlXaXRoRGVzYyk7XG4gICAgICAgIGlmIChuZWdhYmxlKSB7XG4gICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKGRhc2hlcyArICduby0nICsga2V5V2l0aERlc2MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGN1c3RvbUNvbXBsZXRpb24oYXJncywgYXJndiwgY3VycmVudCwgZG9uZSkge1xuICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbiwgbnVsbCwgdGhpcy5zaGltKTtcbiAgICAgICAgaWYgKGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbih0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAudGhlbihsaXN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGltLnByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShudWxsLCBsaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpbS5wcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZXJyLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb25lKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBsZXRpb25GdW5jdGlvbih0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2LCAob25Db21wbGV0ZWQgPSBkb25lKSA9PiB0aGlzLmRlZmF1bHRDb21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIG9uQ29tcGxldGVkKSwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgY29tcGxldGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgY29tcGxldGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhcmdzLmxlbmd0aCA/IGFyZ3NbYXJncy5sZW5ndGggLSAxXSA6ICcnO1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy55YXJncy5wYXJzZShhcmdzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgY29tcGxldGlvbkZ1bmN0aW9uID0gdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgID8gKGFyZ3YpID0+IHRoaXMuY3VzdG9tQ29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBkb25lKVxuICAgICAgICAgICAgOiAoYXJndikgPT4gdGhpcy5kZWZhdWx0Q29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBkb25lKTtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShhcmd2KVxuICAgICAgICAgICAgPyBhcmd2LnRoZW4oY29tcGxldGlvbkZ1bmN0aW9uKVxuICAgICAgICAgICAgOiBjb21wbGV0aW9uRnVuY3Rpb24oYXJndik7XG4gICAgfVxuICAgIGdlbmVyYXRlQ29tcGxldGlvblNjcmlwdCgkMCwgY21kKSB7XG4gICAgICAgIGxldCBzY3JpcHQgPSB0aGlzLnpzaFNoZWxsXG4gICAgICAgICAgICA/IHRlbXBsYXRlcy5jb21wbGV0aW9uWnNoVGVtcGxhdGVcbiAgICAgICAgICAgIDogdGVtcGxhdGVzLmNvbXBsZXRpb25TaFRlbXBsYXRlO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5zaGltLnBhdGguYmFzZW5hbWUoJDApO1xuICAgICAgICBpZiAoJDAubWF0Y2goL1xcLmpzJC8pKVxuICAgICAgICAgICAgJDAgPSBgLi8keyQwfWA7XG4gICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC97e2FwcF9uYW1lfX0vZywgbmFtZSk7XG4gICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC97e2NvbXBsZXRpb25fY29tbWFuZH19L2csIGNtZCk7XG4gICAgICAgIHJldHVybiBzY3JpcHQucmVwbGFjZSgve3thcHBfcGF0aH19L2csICQwKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJGdW5jdGlvbihmbikge1xuICAgICAgICB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbiA9IGZuO1xuICAgIH1cbiAgICBzZXRQYXJzZWQocGFyc2VkKSB7XG4gICAgICAgIHRoaXMuYWxpYXNlcyA9IHBhcnNlZC5hbGlhc2VzO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV0aW9uKHlhcmdzLCB1c2FnZSwgY29tbWFuZCwgc2hpbSkge1xuICAgIHJldHVybiBuZXcgQ29tcGxldGlvbih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pO1xufVxuZnVuY3Rpb24gaXNTeW5jQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoIDwgMztcbn1cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wbGV0aW9uRnVuY3Rpb24oY29tcGxldGlvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBsZXRpb25GdW5jdGlvbi5sZW5ndGggPiAzO1xufVxuIiwiZXhwb3J0IGNvbnN0IGNvbXBsZXRpb25TaFRlbXBsYXRlID0gYCMjIy1iZWdpbi17e2FwcF9uYW1lfX0tY29tcGxldGlvbnMtIyMjXG4jXG4jIHlhcmdzIGNvbW1hbmQgY29tcGxldGlvbiBzY3JpcHRcbiNcbiMgSW5zdGFsbGF0aW9uOiB7e2FwcF9wYXRofX0ge3tjb21wbGV0aW9uX2NvbW1hbmR9fSA+PiB+Ly5iYXNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaF9wcm9maWxlIG9uIE9TWC5cbiNcbl97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICAgIGxvY2FsIGN1cl93b3JkIGFyZ3MgdHlwZV9saXN0XG5cbiAgICBjdXJfd29yZD1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gICAgYXJncz0oXCJcXCR7Q09NUF9XT1JEU1tAXX1cIilcblxuICAgICMgYXNrIHlhcmdzIHRvIGdlbmVyYXRlIGNvbXBsZXRpb25zLlxuICAgICMgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MDk0NDE5NS83MDgwMDM2IGZvciB0aGUgc3BhY2VzLWhhbmRsaW5nIGF3a1xuICAgIG1hcGZpbGUgLXQgdHlwZV9saXN0IDwgPCh7e2FwcF9wYXRofX0gLS1nZXQteWFyZ3MtY29tcGxldGlvbnMgXCJcXCR7YXJnc1tAXX1cIilcbiAgICBtYXBmaWxlIC10IENPTVBSRVBMWSA8IDwoY29tcGdlbiAtVyBcIiQoIHByaW50ZiAnJXEgJyBcIlxcJHt0eXBlX2xpc3RbQF19XCIgKVwiIC0tIFwiXFwke2N1cl93b3JkfVwiIHxcbiAgICAgICAgYXdrICcvIC8geyBwcmludCBcIlxcXFxcIlwiJDBcIlxcXFxcIlwiIH0gL15bXiBdKyQvIHsgcHJpbnQgJDAgfScpXG5cbiAgICAjIGlmIG5vIG1hdGNoIHdhcyBmb3VuZCwgZmFsbCBiYWNrIHRvIGZpbGVuYW1lIGNvbXBsZXRpb25cbiAgICBpZiBbIFxcJHsjQ09NUFJFUExZW0BdfSAtZXEgMCBdOyB0aGVuXG4gICAgICBDT01QUkVQTFk9KClcbiAgICBmaVxuXG4gICAgcmV0dXJuIDBcbn1cbmNvbXBsZXRlIC1vIGJhc2hkZWZhdWx0IC1vIGRlZmF1bHQgLUYgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyB7e2FwcF9uYW1lfX1cbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcbmV4cG9ydCBjb25zdCBjb21wbGV0aW9uWnNoVGVtcGxhdGUgPSBgI2NvbXBkZWYge3thcHBfbmFtZX19XG4jIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uenNocmNcbiMgICAgb3Ige3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uenByb2ZpbGUgb24gT1NYLlxuI1xuX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucygpXG57XG4gIGxvY2FsIHJlcGx5XG4gIGxvY2FsIHNpPSRJRlNcbiAgSUZTPSQnXFxuJyByZXBseT0oJChDT01QX0NXT1JEPVwiJCgoQ1VSUkVOVC0xKSlcIiBDT01QX0xJTkU9XCIkQlVGRkVSXCIgQ09NUF9QT0lOVD1cIiRDVVJTT1JcIiB7e2FwcF9wYXRofX0gLS1nZXQteWFyZ3MtY29tcGxldGlvbnMgXCJcXCR7d29yZHNbQF19XCIpKVxuICBJRlM9JHNpXG4gIGlmIFtbIFxcJHsjcmVwbHl9IC1ndCAwIF1dOyB0aGVuXG4gICAgX2Rlc2NyaWJlICd2YWx1ZXMnIHJlcGx5XG4gIGVsc2VcbiAgICBfZGVmYXVsdFxuICBmaVxufVxuaWYgW1sgXCInXFwke3pzaF9ldmFsX2NvbnRleHRbLTFdfVwiID09IFwibG9hZGF1dG9mdW5jXCIgXV07IHRoZW5cbiAgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyBcIiRAXCJcbmVsc2VcbiAgY29tcGRlZiBfe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zIHt7YXBwX25hbWV9fVxuZmlcbiMjIy1lbmQte3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuYDtcbiIsImV4cG9ydCBmdW5jdGlvbiBsZXZlbnNodGVpbihhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYi5sZW5ndGg7XG4gICAgaWYgKGIubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gYS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gW107XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgaSA8PSBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgICB9XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIG1hdHJpeFswXVtqXSA9IGo7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMV1baiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIGogPiAxICYmXG4gICAgICAgICAgICAgICAgICAgIGIuY2hhckF0KGkgLSAyKSA9PT0gYS5jaGFyQXQoaiAtIDEpICYmXG4gICAgICAgICAgICAgICAgICAgIGIuY2hhckF0KGkgLSAxKSA9PT0gYS5jaGFyQXQoaiAtIDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtpIC0gMl1baiAtIDJdICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSwgTWF0aC5taW4obWF0cml4W2ldW2ogLSAxXSArIDEsIG1hdHJpeFtpIC0gMV1bal0gKyAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXhbYi5sZW5ndGhdW2EubGVuZ3RoXTtcbn1cbiIsImltcG9ydCB7IGFyZ3NlcnQgfSBmcm9tICcuL2FyZ3NlcnQuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90U3RyaWN0RXF1YWwsIH0gZnJvbSAnLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5pbXBvcnQgeyBsZXZlbnNodGVpbiBhcyBkaXN0YW5jZSB9IGZyb20gJy4vdXRpbHMvbGV2ZW5zaHRlaW4uanMnO1xuaW1wb3J0IHsgb2JqRmlsdGVyIH0gZnJvbSAnLi91dGlscy9vYmotZmlsdGVyLmpzJztcbmNvbnN0IHNwZWNpYWxLZXlzID0gWyckMCcsICctLScsICdfJ107XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGlvbih5YXJncywgdXNhZ2UsIHNoaW0pIHtcbiAgICBjb25zdCBfXyA9IHNoaW0ueTE4bi5fXztcbiAgICBjb25zdCBfX24gPSBzaGltLnkxOG4uX19uO1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBzZWxmLm5vbk9wdGlvbkNvdW50ID0gZnVuY3Rpb24gbm9uT3B0aW9uQ291bnQoYXJndikge1xuICAgICAgICBjb25zdCBkZW1hbmRlZENvbW1hbmRzID0geWFyZ3MuZ2V0RGVtYW5kZWRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsQ291bnQgPSBhcmd2Ll8ubGVuZ3RoICsgKGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddLmxlbmd0aCA6IDApO1xuICAgICAgICBjb25zdCBfcyA9IHBvc2l0aW9uYWxDb3VudCAtIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKS5jb21tYW5kcy5sZW5ndGg7XG4gICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8gJiZcbiAgICAgICAgICAgIChfcyA8IGRlbWFuZGVkQ29tbWFuZHMuXy5taW4gfHwgX3MgPiBkZW1hbmRlZENvbW1hbmRzLl8ubWF4KSkge1xuICAgICAgICAgICAgaWYgKF9zIDwgZGVtYW5kZWRDb21tYW5kcy5fLm1pbikge1xuICAgICAgICAgICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlbWFuZGVkQ29tbWFuZHMuXy5taW5Nc2dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMC9nLCBfcy50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQxLywgZGVtYW5kZWRDb21tYW5kcy5fLm1pbi50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCAnTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgX3MsIF9zLnRvU3RyaW5nKCksIGRlbWFuZGVkQ29tbWFuZHMuXy5taW4udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKF9zID4gZGVtYW5kZWRDb21tYW5kcy5fLm1heCkge1xuICAgICAgICAgICAgICAgIGlmIChkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2UuZmFpbChkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXhNc2dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMC9nLCBfcy50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCQxLywgZGVtYW5kZWRDb21tYW5kcy5fLm1heC50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdUb28gbWFueSBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBtYXhpbXVtIG9mICVzJywgJ1RvbyBtYW55IG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG1heGltdW0gb2YgJXMnLCBfcywgX3MudG9TdHJpbmcoKSwgZGVtYW5kZWRDb21tYW5kcy5fLm1heC50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnBvc2l0aW9uYWxDb3VudCA9IGZ1bmN0aW9uIHBvc2l0aW9uYWxDb3VudChyZXF1aXJlZCwgb2JzZXJ2ZWQpIHtcbiAgICAgICAgaWYgKG9ic2VydmVkIDwgcmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdOb3QgZW5vdWdoIG5vbi1vcHRpb24gYXJndW1lbnRzOiBnb3QgJXMsIG5lZWQgYXQgbGVhc3QgJXMnLCAnTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgb2JzZXJ2ZWQsIG9ic2VydmVkICsgJycsIHJlcXVpcmVkICsgJycpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5yZXF1aXJlZEFyZ3VtZW50cyA9IGZ1bmN0aW9uIHJlcXVpcmVkQXJndW1lbnRzKGFyZ3YsIGRlbWFuZGVkT3B0aW9ucykge1xuICAgICAgICBsZXQgbWlzc2luZyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgYXJndltrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nIHx8IHt9O1xuICAgICAgICAgICAgICAgIG1pc3Npbmdba2V5XSA9IGRlbWFuZGVkT3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaXNzaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2dzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtaXNzaW5nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IG1pc3Npbmdba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIGN1c3RvbU1zZ3MuaW5kZXhPZihtc2cpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21Nc2dzLnB1c2gobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Nc2cgPSBjdXN0b21Nc2dzLmxlbmd0aCA/IGBcXG4ke2N1c3RvbU1zZ3Muam9pbignXFxuJyl9YCA6ICcnO1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQ6ICVzJywgJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnRzOiAlcycsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmxlbmd0aCwgT2JqZWN0LmtleXMobWlzc2luZykuam9pbignLCAnKSArIGN1c3RvbU1zZykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Bcmd1bWVudHMgPSBmdW5jdGlvbiB1bmtub3duQXJndW1lbnRzKGFyZ3YsIGFsaWFzZXMsIHBvc2l0aW9uYWxNYXAsIGlzRGVmYXVsdENvbW1hbmQsIGNoZWNrUG9zaXRpb25hbHMgPSB0cnVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY29tbWFuZEtleXMgPSB5YXJnc1xuICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAuZ2V0Q29tbWFuZEluc3RhbmNlKClcbiAgICAgICAgICAgIC5nZXRDb21tYW5kcygpO1xuICAgICAgICBjb25zdCB1bmtub3duID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0Q29udGV4dCgpO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNwZWNpYWxLZXlzLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBvc2l0aW9uYWxNYXAsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFBhcnNlQ29udGV4dCgpLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykpIHtcbiAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaGVja1Bvc2l0aW9uYWxzICYmXG4gICAgICAgICAgICAoY3VycmVudENvbnRleHQuY29tbWFuZHMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgIGNvbW1hbmRLZXlzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgICBpc0RlZmF1bHRDb21tYW5kKSkge1xuICAgICAgICAgICAgYXJndi5fLnNsaWNlKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29tbWFuZEtleXMuaW5jbHVkZXMoJycgKyBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrUG9zaXRpb25hbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhOb25PcHREZW1hbmRlZCA9ICgoX2EgPSBkZW1hbmRlZENvbW1hbmRzLl8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXgpIHx8IDA7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCArIG1heE5vbk9wdERlbWFuZGVkO1xuICAgICAgICAgICAgaWYgKGV4cGVjdGVkIDwgYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGFyZ3YuXy5zbGljZShleHBlY3RlZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBTdHJpbmcoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGV4dC5jb21tYW5kcy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdW5rbm93bi5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gYXJndW1lbnQ6ICVzJywgJ1Vua25vd24gYXJndW1lbnRzOiAlcycsIHVua25vd24ubGVuZ3RoLCB1bmtub3duLm1hcChzID0+IChzLnRyaW0oKSA/IHMgOiBgXCIke3N9XCJgKSkuam9pbignLCAnKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnVua25vd25Db21tYW5kcyA9IGZ1bmN0aW9uIHVua25vd25Db21tYW5kcyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRLZXlzID0geWFyZ3NcbiAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgLmdldENvbW1hbmRJbnN0YW5jZSgpXG4gICAgICAgICAgICAuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgdW5rbm93biA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCA+IDAgfHwgY29tbWFuZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJndi5fLnNsaWNlKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29tbWFuZEtleXMuaW5jbHVkZXMoJycgKyBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd24ucHVzaCgnJyArIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXNhZ2UuZmFpbChfX24oJ1Vua25vd24gY29tbWFuZDogJXMnLCAnVW5rbm93biBjb21tYW5kczogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5qb2luKCcsICcpKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5pc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcgPSBmdW5jdGlvbiBpc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXcoa2V5LCBhbGlhc2VzKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFsaWFzZXMsIGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBbGlhc2VzID0geWFyZ3MucGFyc2VkLm5ld0FsaWFzZXM7XG4gICAgICAgIHJldHVybiBba2V5LCAuLi5hbGlhc2VzW2tleV1dLnNvbWUoYSA9PiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0FsaWFzZXMsIGEpIHx8ICFuZXdBbGlhc2VzW2tleV0pO1xuICAgIH07XG4gICAgc2VsZi5saW1pdGVkQ2hvaWNlcyA9IGZ1bmN0aW9uIGxpbWl0ZWRDaG9pY2VzKGFyZ3YpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZCA9IHt9O1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG9wdGlvbnMuY2hvaWNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoc3BlY2lhbEtleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmNob2ljZXMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBbXS5jb25jYXQoYXJndltrZXldKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hvaWNlc1trZXldLmluZGV4T2YodmFsdWUpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFtrZXldID0gKGludmFsaWRba2V5XSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhpbnZhbGlkKTtcbiAgICAgICAgaWYgKCFpbnZhbGlkS2V5cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtc2cgPSBfXygnSW52YWxpZCB2YWx1ZXM6Jyk7XG4gICAgICAgIGludmFsaWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG1zZyArPSBgXFxuICAke19fKCdBcmd1bWVudDogJXMsIEdpdmVuOiAlcywgQ2hvaWNlczogJXMnLCBrZXksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKGludmFsaWRba2V5XSksIHVzYWdlLnN0cmluZ2lmaWVkVmFsdWVzKG9wdGlvbnMuY2hvaWNlc1trZXldKSl9YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICB9O1xuICAgIGxldCBpbXBsaWVkID0ge307XG4gICAgc2VsZi5pbXBsaWVzID0gZnVuY3Rpb24gaW1wbGllcyhrZXksIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbYXJyYXl8bnVtYmVyfHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmltcGxpZXMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWFyZ3MuZ2xvYmFsKGtleSk7XG4gICAgICAgICAgICBpZiAoIWltcGxpZWRba2V5XSkge1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChpID0+IHNlbGYuaW1wbGllcyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHZhbHVlLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAgICAgICAgIGltcGxpZWRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5nZXRJbXBsaWVkID0gZnVuY3Rpb24gZ2V0SW1wbGllZCgpIHtcbiAgICAgICAgcmV0dXJuIGltcGxpZWQ7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBrZXlFeGlzdHMoYXJndiwgdmFsKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgICAgICB2YWwgPSBpc05hTihudW0pID8gdmFsIDogbnVtO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbCA9IGFyZ3YuXy5sZW5ndGggPj0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbC5tYXRjaCgvXi0tbm8tLisvKSkge1xuICAgICAgICAgICAgdmFsID0gdmFsLm1hdGNoKC9eLS1uby0oLispLylbMV07XG4gICAgICAgICAgICB2YWwgPSAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBzZWxmLmltcGxpY2F0aW9ucyA9IGZ1bmN0aW9uIGltcGxpY2F0aW9ucyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IGltcGx5RmFpbCA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhpbXBsaWVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnS2V5ID0ga2V5O1xuICAgICAgICAgICAgKGltcGxpZWRba2V5XSB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IG9yaWdLZXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAga2V5ID0ga2V5RXhpc3RzKGFyZ3YsIGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBrZXlFeGlzdHMoYXJndiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5RmFpbC5wdXNoKGAgJHtvcmlnS2V5fSAtPiAke29yaWdWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbXBseUZhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgbXNnID0gYCR7X18oJ0ltcGxpY2F0aW9ucyBmYWlsZWQ6Jyl9XFxuYDtcbiAgICAgICAgICAgIGltcGx5RmFpbC5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwobXNnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGNvbmZsaWN0aW5nID0ge307XG4gICAgc2VsZi5jb25mbGljdHMgPSBmdW5jdGlvbiBjb25mbGljdHMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fHN0cmluZ10nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZsaWN0cyhrLCBrZXlba10pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5YXJncy5nbG9iYWwoa2V5KTtcbiAgICAgICAgICAgIGlmICghY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmNvbmZsaWN0cyhrZXksIGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0Q29uZmxpY3RpbmcgPSAoKSA9PiBjb25mbGljdGluZztcbiAgICBzZWxmLmNvbmZsaWN0aW5nID0gZnVuY3Rpb24gY29uZmxpY3RpbmdGbihhcmd2KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIGFyZ3Zba2V5XSAhPT0gdW5kZWZpbmVkICYmIGFyZ3ZbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFBhcnNlckNvbmZpZ3VyYXRpb24oKVsnc3RyaXAtZGFzaGVkJ10pIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZsaWN0aW5nKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uZmxpY3Rpbmdba2V5XS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W3NoaW0uUGFyc2VyLmNhbWVsQ2FzZShrZXkpXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2W3NoaW0uUGFyc2VyLmNhbWVsQ2FzZSh2YWx1ZSldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0FyZ3VtZW50cyAlcyBhbmQgJXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucmVjb21tZW5kQ29tbWFuZHMgPSBmdW5jdGlvbiByZWNvbW1lbmRDb21tYW5kcyhjbWQsIHBvdGVudGlhbENvbW1hbmRzKSB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDM7XG4gICAgICAgIHBvdGVudGlhbENvbW1hbmRzID0gcG90ZW50aWFsQ29tbWFuZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XG4gICAgICAgIGxldCByZWNvbW1lbmRlZCA9IG51bGw7XG4gICAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNhbmRpZGF0ZTsgKGNhbmRpZGF0ZSA9IHBvdGVudGlhbENvbW1hbmRzW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkaXN0YW5jZShjbWQsIGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICBpZiAoZCA8PSB0aHJlc2hvbGQgJiYgZCA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGQ7XG4gICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY29tbWVuZGVkKVxuICAgICAgICAgICAgdXNhZ2UuZmFpbChfXygnRGlkIHlvdSBtZWFuICVzPycsIHJlY29tbWVuZGVkKSk7XG4gICAgfTtcbiAgICBzZWxmLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQobG9jYWxMb29rdXApIHtcbiAgICAgICAgaW1wbGllZCA9IG9iakZpbHRlcihpbXBsaWVkLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIGNvbmZsaWN0aW5nID0gb2JqRmlsdGVyKGNvbmZsaWN0aW5nLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgaW1wbGllZCxcbiAgICAgICAgICAgIGNvbmZsaWN0aW5nLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gZnJvemVucy5wb3AoKTtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwoZnJvemVuLCB1bmRlZmluZWQsIHNoaW0pO1xuICAgICAgICAoeyBpbXBsaWVkLCBjb25mbGljdGluZyB9ID0gZnJvemVuKTtcbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xufVxuIiwiaW1wb3J0IHsgWUVycm9yIH0gZnJvbSAnLi4veWVycm9yLmpzJztcbmxldCBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbmxldCBzaGltO1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RXh0ZW5kcyhjb25maWcsIGN3ZCwgbWVyZ2VFeHRlbmRzLCBfc2hpbSkge1xuICAgIHNoaW0gPSBfc2hpbTtcbiAgICBsZXQgZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAnZXh0ZW5kcycpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmV4dGVuZHMgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25maWc7XG4gICAgICAgIGNvbnN0IGlzUGF0aCA9IC9cXC5qc29ufFxcLi4qcmMkLy50ZXN0KGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgbGV0IHBhdGhUb0RlZmF1bHQgPSBudWxsO1xuICAgICAgICBpZiAoIWlzUGF0aCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gaW1wb3J0Lm1ldGEucmVzb2x2ZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXRoVG9EZWZhdWx0ID0gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyhwYXRoVG9EZWZhdWx0KTtcbiAgICAgICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzLnB1c2gocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIGRlZmF1bHRDb25maWcgPSBpc1BhdGhcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzaGltLnJlYWRGaWxlU3luYyhwYXRoVG9EZWZhdWx0LCAndXRmOCcpKVxuICAgICAgICAgICAgOiBfc2hpbS5yZXF1aXJlKGNvbmZpZy5leHRlbmRzKTtcbiAgICAgICAgZGVsZXRlIGNvbmZpZy5leHRlbmRzO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gYXBwbHlFeHRlbmRzKGRlZmF1bHRDb25maWcsIHNoaW0ucGF0aC5kaXJuYW1lKHBhdGhUb0RlZmF1bHQpLCBtZXJnZUV4dGVuZHMsIHNoaW0pO1xuICAgIH1cbiAgICBwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MgPSBbXTtcbiAgICByZXR1cm4gbWVyZ2VFeHRlbmRzXG4gICAgICAgID8gbWVyZ2VEZWVwKGRlZmF1bHRDb25maWcsIGNvbmZpZylcbiAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xufVxuZnVuY3Rpb24gY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMoY2ZnUGF0aCkge1xuICAgIGlmIChwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MuaW5kZXhPZihjZmdQYXRoKSA+IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBZRXJyb3IoYENpcmN1bGFyIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb25zOiAnJHtjZmdQYXRofScuYCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyhjd2QsIHBhdGhUb0V4dGVuZCkge1xuICAgIHJldHVybiBzaGltLnBhdGgucmVzb2x2ZShjd2QsIHBhdGhUb0V4dGVuZCk7XG59XG5mdW5jdGlvbiBtZXJnZURlZXAoY29uZmlnMSwgY29uZmlnMikge1xuICAgIGNvbnN0IHRhcmdldCA9IHt9O1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9iaik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBjb25maWcxKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcyKSkge1xuICAgICAgICBpZiAoaXNPYmplY3QoY29uZmlnMltrZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gbWVyZ2VEZWVwKGNvbmZpZzFba2V5XSwgY29uZmlnMltrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gY29uZmlnMltrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIEJvb3RzdHJhcHMgeWFyZ3MgZm9yIEVTTTpcbmltcG9ydCBlc21QbGF0Zm9ybVNoaW0gZnJvbSAnLi9saWIvcGxhdGZvcm0tc2hpbXMvZXNtLm1qcyc7XG5pbXBvcnQge1lhcmdzRmFjdG9yeX0gZnJvbSAnLi9idWlsZC9saWIveWFyZ3MtZmFjdG9yeS5qcyc7XG5cbmNvbnN0IFlhcmdzID0gWWFyZ3NGYWN0b3J5KGVzbVBsYXRmb3JtU2hpbSk7XG5leHBvcnQgZGVmYXVsdCBZYXJncztcblxuZXhwb3J0IHtZYXJncyBhcyAnbW9kdWxlLmV4cG9ydHMnfTtcbiIsImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcbmltcG9ydCB7IGxvYWRDb25maWdGaWxlIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTLFxuICBERUZBVUxUX0NMQVVERV9DT0RFX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfQ09ERVhfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyxcbiAgREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gIERFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTLFxufSBmcm9tICcuL2RlZmF1bHRPcHRpb25zLmpzJztcbmltcG9ydCB7IG1haW4gfSBmcm9tICcuL21haW4uanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplTm9kZVJ1bnRpbWUgfSBmcm9tICcuL3NwYXduLmpzJztcbmltcG9ydCB0eXBlIHsgQ29kaW5nVG9vbCwgTm9kZVJ1bnRpbWUsIE5vZGVSdW50aW1lQWN0dWFsLCBSZWFzb25pbmdFZmZvcnQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB1c2luZyB5YXJncyAoQ0xJIG9wdGlvbnMgb3ZlcnJpZGUgY29uZmlnKVxuY29uc3QgYXJndiA9IGF3YWl0IHlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLmNvbmZpZyhsb2FkQ29uZmlnRmlsZSgpKVxuICAvLyBPcHRpb25zIHNhbWUgd2l0aCB0aGUgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dcbiAgLm9wdGlvbignaXNzdWUtbnVtYmVyJywge1xuICAgIGFsaWFzOiAnaScsXG4gICAgZGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIHRvIHByb2Nlc3MnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncGxhbm5pbmctbW9kZWwnLCB7XG4gICAgYWxpYXM6ICdtJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdMTE0gZm9yIHBsYW5uaW5nIGNvZGUgY2hhbmdlcy4gTXVzdCB1c2UgbGxtbGl0ZSBmb3JtYXQ6IHByb3ZpZGVyL21vZGVsIChlLmcuLCBvcGVuYWkvZ3B0LTQuMSwgYXp1cmUvZ3B0LTQuMSwgZ2VtaW5pL2dlbWluaS0yLjUtcHJvLCBhbnRocm9waWMvY2xhdWRlLTQtc29ubmV0LWxhdGVzdCwgYmVkcm9jay91cy5hbnRocm9waWMuY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0LXYxOjAsIHZlcnRleC9nZW1pbmktMi41LXBybywgeGFpL2dyb2stNCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAub3B0aW9uKCd0d28tc3RhZ2VkLXBsYW5uaW5nJywge1xuICAgIGFsaWFzOiAncCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnRW5hYmxlIHR3by1zdGFnZWQgcGxhbm5pbmc6IGZpcnN0IHNlbGVjdCByZWxldmFudCBmaWxlcywgdGhlbiBnZW5lcmF0ZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBwbGFucyAoaW5jcmVhc2VzIExMTSBjb3N0IGJ1dCBpbXByb3ZlcyBjb2RlIHF1YWxpdHkpJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncmVhc29uaW5nLWVmZm9ydCcsIHtcbiAgICBhbGlhczogJ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uc3RyYWlucyBlZmZvcnQgb24gcmVhc29uaW5nIGZvciBwbGFubmluZyBtb2RlbHMuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGxvdywgbWVkaXVtLCBhbmQgaGlnaC4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbG93JywgJ21lZGl1bScsICdoaWdoJ10sXG4gIH0pXG4gIC5vcHRpb24oJ2NvZGluZy10b29sJywge1xuICAgIGFsaWFzOiAnYycsXG4gICAgZGVzY3JpcHRpb246ICdDb2RpbmcgdG9vbCB0byB1c2UgZm9yIG1ha2luZyBjaGFuZ2VzJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjaG9pY2VzOiBbJ2FpZGVyJywgJ2NsYXVkZS1jb2RlJywgJ2NvZGV4LWNsaScsICdnZW1pbmktY2xpJ10sXG4gICAgZGVmYXVsdDogREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgfSlcbiAgLm9wdGlvbignYWlkZXItZXh0cmEtYXJncycsIHtcbiAgICBhbGlhczogJ2EnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gQWlkZXIgKFwiLS15ZXMtYWx3YXlzIC0tbm8tY2hlY2stdXBkYXRlIC0tbm8tc2hvdy1yZWxlYXNlLW5vdGVzXCIgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0FJREVSX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2NsYXVkZS1jb2RlLWV4dHJhLWFyZ3MnLCB7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDbGF1ZGUgQ29kZSAoXCItLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnNcIiBpcyBhbHdheXMgYXBwbGllZCwgXCItLXByaW50XCIgaXMgYXBwbGllZCBvbmx5IGluIENJKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdjb2RleC1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDb2RleCBDTEkgKG5vdGhpbmcgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0NPREVYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2dlbWluaS1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBHZW1pbmkgQ0xJIChcIi0teW9sb1wiIGlzIGFsd2F5cyBhcHBsaWVkKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbigncmVwb21peC1leHRyYS1hcmdzJywge1xuICAgIGFsaWFzOiAncicsXG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgcmVwb21peCB3aGVuIGdlbmVyYXRpbmcgY29udGV4dCcsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9SRVBPTUlYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ3Rlc3QtY29tbWFuZCcsIHtcbiAgICBhbGlhczogJ3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCB0byBydW4gYWZ0ZXIgdGhlIGNvZGluZyB0b29sIGFwcGxpZXMgY2hhbmdlcy4gSWYgaXQgZmFpbHMsIHRoZSBhc3Npc3RhbnQgd2lsbCB0cnkgdG8gZml4IGl0LicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC5vcHRpb24oJ21heC10ZXN0LWF0dGVtcHRzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gZml4IHRlc3QgZmFpbHVyZXMnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfTUFYX1RFU1RfQVRURU1QVFMsXG4gIH0pXG4gIC5vcHRpb24oJ2RyeS1ydW4nLCB7XG4gICAgYWxpYXM6ICdkJyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biB3aXRob3V0IG1ha2luZyBhY3R1YWwgY2hhbmdlcyAobm8gYnJhbmNoIGNyZWF0aW9uLCBubyBQUiknLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSlcbiAgLm9wdGlvbigncmVtb3ZlLXBhdHRlcm4nLCB7XG4gICAgZGVzY3JpcHRpb246ICdSZWdFeHAgcGF0dGVybiB0byByZW1vdmUgZnJvbSBpc3N1ZSBhbmQgUFIgZGVzY3JpcHRpb25zJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLm9wdGlvbignbm8tYnJhbmNoJywge1xuICAgIGFsaWFzOiAnbicsXG4gICAgZGVzY3JpcHRpb246ICdEbyBub3QgY3JlYXRlIGEgbmV3IGJyYW5jaCwgY29tbWl0IGNoYW5nZXMgZGlyZWN0bHkgdG8gdGhlIGJhc2UgYnJhbmNoJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0pXG4gIC5vcHRpb24oJ25vZGUtcnVudGltZScsIHtcbiAgICBkZXNjcmlwdGlvbjogJ05vZGUuanMgcnVudGltZSB0byB1c2UgZm9yIHJ1bm5pbmcgdG9vbHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbm9kZScsICdidW4nLCAnbnB4JywgJ2J1bngnXSxcbiAgICBkZWZhdWx0OiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgfSlcbiAgLy8gT3B0aW9ucyBvbmx5IGZvciB0aGlzIHN0YW5kYWxvbmUgdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAub3B0aW9uKCd3b3JraW5nLWRpcicsIHtcbiAgICBhbGlhczogJ3cnLFxuICAgIGRlc2NyaXB0aW9uOiAnV29ya2luZyBkaXJlY3RvcnkgcGF0aCBmb3IgY29tbWFuZHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSlcbiAgLmhlbHAoKS5hcmd2O1xuXG5mdW5jdGlvbiBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gIGxldCBwYWNrYWdlSnNvbkRpciA9IGltcG9ydC5tZXRhLmRpciB8fCBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lKTtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgIHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uRGlyKTtcbiAgfVxuICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHBhY2thZ2VKc29uRGlyLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpLnZlcnNpb247XG59XG5cbmlmIChhcmd2Wyd3b3JraW5nLWRpciddKSB7XG4gIHByb2Nlc3MuY2hkaXIoYXJndlsnd29ya2luZy1kaXInXSk7XG4gIGNvbnNvbGUuaW5mbyhgQ2hhbmdlZCB3b3JraW5nIGRpcmVjdG9yeSB0bzogJHtwcm9jZXNzLmN3ZCgpfWApO1xufVxuXG4vLyBOb3JtYWxpemUgdGhlIHJ1bnRpbWUgdmFsdWUgKGNvbnZlcnQgYWxpYXNlcyB0byBhY3R1YWwgY29tbWFuZHMpXG5jb25zdCBub2RlUnVudGltZTogTm9kZVJ1bnRpbWVBY3R1YWwgPSBub3JtYWxpemVOb2RlUnVudGltZShhcmd2Wydub2RlLXJ1bnRpbWUnXSBhcyBOb2RlUnVudGltZSk7XG5cbmF3YWl0IG1haW4oe1xuICBhaWRlckV4dHJhQXJnczogYXJndlsnYWlkZXItZXh0cmEtYXJncyddLFxuICBjbGF1ZGVDb2RlRXh0cmFBcmdzOiBhcmd2WydjbGF1ZGUtY29kZS1leHRyYS1hcmdzJ10sXG4gIGNvZGV4RXh0cmFBcmdzOiBhcmd2Wydjb2RleC1leHRyYS1hcmdzJ10sXG4gIGdlbWluaUV4dHJhQXJnczogYXJndlsnZ2VtaW5pLWV4dHJhLWFyZ3MnXSxcbiAgY29kaW5nVG9vbDogYXJndlsnY29kaW5nLXRvb2wnXSBhcyBDb2RpbmdUb29sLFxuICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgbm9CcmFuY2g6IGFyZ3ZbJ25vLWJyYW5jaCddLFxuICBub2RlUnVudGltZSxcbiAgdHdvU3RhZ2VQbGFubmluZzogYXJndlsndHdvLXN0YWdlZC1wbGFubmluZyddLFxuICBpc3N1ZU51bWJlcjogYXJndlsnaXNzdWUtbnVtYmVyJ10sXG4gIG1heFRlc3RBdHRlbXB0czogYXJndlsnbWF4LXRlc3QtYXR0ZW1wdHMnXSxcbiAgcGxhbm5pbmdNb2RlbDogYXJndlsncGxhbm5pbmctbW9kZWwnXSxcbiAgcmVhc29uaW5nRWZmb3J0OiBhcmd2WydyZWFzb25pbmctZWZmb3J0J10gYXMgUmVhc29uaW5nRWZmb3J0LFxuICByZXBvbWl4RXh0cmFBcmdzOiBhcmd2WydyZXBvbWl4LWV4dHJhLWFyZ3MnXSxcbiAgdGVzdENvbW1hbmQ6IGFyZ3ZbJ3Rlc3QtY29tbWFuZCddLFxuICByZW1vdmVQYXR0ZXJuOiBhcmd2WydyZW1vdmUtcGF0dGVybiddLFxufSk7XG4iXSwibmFtZXMiOlsiYWxpZ24iLCJyaWdodCIsInN0ciIsIndpZHRoIiwidHJpbSIsInN0cldpZHRoIiwibWl4aW4iLCJzdHJpbmdXaWR0aCIsInJlcGVhdCIsImNlbnRlciIsIlVJIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX2EiLCJ0aGlzIiwid3JhcCIsInJvd3MiLCJzcGFuIiwiYXJncyIsImRpdiIsInJlc2V0T3V0cHV0IiwibGVuZ3RoIiwic2hvdWxkQXBwbHlMYXlvdXREU0wiLCJhcHBseUxheW91dERTTCIsImNvbHMiLCJtYXAiLCJhcmciLCJjb2xGcm9tU3RyaW5nIiwicHVzaCIsInRlc3QiLCJzcGxpdCIsInJvdyIsImxlZnRDb2x1bW5XaWR0aCIsImZvckVhY2giLCJjb2x1bW5zIiwiTWF0aCIsIm1pbiIsImZsb29yIiwiciIsImkiLCJ0ZXh0IiwicGFkZGluZyIsIm1lYXN1cmVQYWRkaW5nIiwidW5kZWZpbmVkIiwibm9BbnNpIiwic3RyaXBBbnNpIiwibWF0Y2giLCJ0b1N0cmluZyIsImxpbmVzIiwicm93VG9TdHJpbmciLCJmaWx0ZXIiLCJsaW5lIiwiaGlkZGVuIiwiam9pbiIsInJhc3Rlcml6ZSIsInJyb3ciLCJjb2wiLCJjIiwid3JhcFdpZHRoIiwibmVnYXRlUGFkZGluZyIsInRzIiwiZm4iLCJhZGRCb3JkZXIiLCJyZW5kZXJJbmxpbmUiLCJyZXBsYWNlIiwic291cmNlIiwicHJldmlvdXNMaW5lIiwibGVhZGluZ1doaXRlc3BhY2UiLCJ0YXJnZXQiLCJ0YXJnZXRUZXh0V2lkdGgiLCJ0cmltUmlnaHQiLCJ0cmltTGVmdCIsInJyb3dzIiwid2lkdGhzIiwiY29sdW1uV2lkdGhzIiwid3JhcHBlZCIsImhhcmQiLCJib3JkZXIiLCJ1bnNoaWZ0IiwiQXJyYXkiLCJmaWxsIiwidW5zZXQiLCJyZW1haW5pbmdXaWR0aCIsInVuc2V0V2lkdGgiLCJ3IiwibWF4IiwibWluV2lkdGgiLCJfbWluV2lkdGgiLCJzdHlsZSIsInJlZ2V4Iiwib25seUZpcnN0IiwiUmVnRXhwIiwiYW5zaVJlZ2V4Iiwic3RyaW5nIiwiVHlwZUVycm9yIiwiZWFzdEFzaWFuV2lkdGgiLCJjb2RlUG9pbnQiLCJhbWJpZ3VvdXNBc1dpZGUiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwidmFsaWRhdGUiLCJ4IiwiaXNXaWRlIiwiaXNBbWJpZ3VvdXMiLCJlbW9qaVJlZ2V4Iiwic2VnbWVudGVyIiwiSW50bCIsIlNlZ21lbnRlciIsImRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleCIsIm9wdGlvbnMiLCJhbWJpZ3VvdXNJc05hcnJvdyIsImNvdW50QW5zaUVzY2FwZUNvZGVzIiwiZWFzdEFzaWFuV2lkdGhPcHRpb25zIiwic2VnbWVudCIsImNoYXJhY3RlciIsImNvZGVQb2ludEF0Iiwid3JhcEFuc2kxNiIsIm9mZnNldCIsImNvZGUiLCJ3cmFwQW5zaTI1NiIsIndyYXBBbnNpMTZtIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwic3R5bGVzIiwibW9kaWZpZXIiLCJyZXNldCIsImJvbGQiLCJkaW0iLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImludmVyc2UiLCJzdHJpa2V0aHJvdWdoIiwiY29sb3IiLCJibGFjayIsInllbGxvdyIsIm1hZ2VudGEiLCJjeWFuIiwid2hpdGUiLCJibGFja0JyaWdodCIsImdyYXkiLCJncmV5IiwicmVkQnJpZ2h0IiwiZ3JlZW5CcmlnaHQiLCJ5ZWxsb3dCcmlnaHQiLCJibHVlQnJpZ2h0IiwibWFnZW50YUJyaWdodCIsImN5YW5CcmlnaHQiLCJ3aGl0ZUJyaWdodCIsImJnQ29sb3IiLCJiZ0JsYWNrIiwiYmdSZWQiLCJiZ0dyZWVuIiwiYmdZZWxsb3ciLCJiZ0JsdWUiLCJiZ01hZ2VudGEiLCJiZ0N5YW4iLCJiZ1doaXRlIiwiYmdCbGFja0JyaWdodCIsImJnR3JheSIsImJnR3JleSIsImJnUmVkQnJpZ2h0IiwiYmdHcmVlbkJyaWdodCIsImJnWWVsbG93QnJpZ2h0IiwiYmdCbHVlQnJpZ2h0IiwiYmdNYWdlbnRhQnJpZ2h0IiwiYmdDeWFuQnJpZ2h0IiwiYmdXaGl0ZUJyaWdodCIsIk9iamVjdCIsImtleXMiLCJhbnNpU3R5bGVzIiwiY29kZXMiLCJNYXAiLCJncm91cE5hbWUiLCJncm91cCIsImVudHJpZXMiLCJzdHlsZU5hbWUiLCJvcGVuIiwiY2xvc2UiLCJzZXQiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImFuc2kiLCJhbnNpMjU2IiwiYW5zaTE2bSIsImRlZmluZVByb3BlcnRpZXMiLCJyZ2JUb0Fuc2kyNTYiLCJyb3VuZCIsImhleFRvUmdiIiwiaGV4IiwibWF0Y2hlcyIsImV4ZWMiLCJjb2xvclN0cmluZyIsImludGVnZXIiLCJwYXJzZUludCIsImhleFRvQW5zaTI1NiIsImFuc2kyNTZUb0Fuc2kiLCJyZW1haW5kZXIiLCJyZXN1bHQiLCJyZ2JUb0Fuc2kiLCJoZXhUb0Fuc2kiLCJhc3NlbWJsZVN0eWxlcyIsIkVTQ0FQRVMiLCJTZXQiLCJBTlNJX0VTQ0FQRV9MSU5LIiwid3JhcEFuc2lDb2RlIiwidmFsdWVzIiwibmV4dCIsIndyYXBBbnNpSHlwZXJsaW5rIiwidXJsIiwid3JhcFdvcmQiLCJ3b3JkIiwiY2hhcmFjdGVycyIsImlzSW5zaWRlRXNjYXBlIiwiaXNJbnNpZGVMaW5rRXNjYXBlIiwidmlzaWJsZSIsImF0IiwiaW5kZXgiLCJjaGFyYWN0ZXJMZW5ndGgiLCJoYXMiLCJzbGljZSIsInBvcCIsImVzY2FwZUNvZGUiLCJlc2NhcGVVcmwiLCJyZXR1cm5WYWx1ZSIsImxlbmd0aHMiLCJ3b3JkTGVuZ3RocyIsInRyaW1TdGFydCIsInJvd0xlbmd0aCIsIndvcmRXcmFwIiwicmVtYWluaW5nQ29sdW1ucyIsImJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUiLCJ3b3JkcyIsImxhc3QiLCJzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0IiwicHJlU3RyaW5nIiwicHJlIiwicHJlU3RyaW5nSW5kZXgiLCJncm91cHMiLCJwYXJzZUZsb2F0IiwidXJpIiwiZ2V0Iiwid3JhcEFuc2kiLCJTdHJpbmciLCJub3JtYWxpemUiLCJyZXBsYWNlQWxsIiwiY2FtZWxDYXNlIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsImluZGV4T2YiLCJjYW1lbGNhc2UiLCJuZXh0Q2hyVXBwZXIiLCJsZWFkaW5nSHlwaGVucyIsImNociIsImNoYXJBdCIsImRlY2FtZWxpemUiLCJqb2luU3RyaW5nIiwibG93ZXJjYXNlIiwibm90Q2FtZWxjYXNlIiwiY2hyTG93ZXIiLCJjaHJTdHJpbmciLCJsb29rc0xpa2VOdW1iZXIiLCJEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSIsImluY3JlbWVudCIsIm9yaWciLCJzYW5pdGl6ZUtleSIsImtleSIsIl9iIiwiX2MiLCJtaW5Ob2RlVmVyc2lvbiIsInByb2Nlc3MiLCJlbnYiLCJZQVJHU19NSU5fTk9ERV9WRVJTSU9OIiwibm9kZVZlcnNpb24iLCJ2ZXJzaW9ucyIsIm5vZGUiLCJ2ZXJzaW9uIiwiRXJyb3IiLCJyZXF1aXJlIiwiY3JlYXRlUmVxdWlyZSIsInBhcnNlciIsIl9taXhpbiIsInBhcnNlIiwiYXJnc0lucHV0IiwiYXNzaWduIiwiYWxpYXMiLCJhcnJheSIsImJvb2xlYW4iLCJjb25maWciLCJjb25maWdPYmplY3RzIiwiY29uZmlndXJhdGlvbiIsImNvZXJjZSIsImNvdW50IiwiZGVmYXVsdCIsImVudlByZWZpeCIsIm5hcmciLCJudW1iZXIiLCJfXyIsImFyZ1N0cmluZyIsImlzQXJyYXkiLCJlIiwicHJldkMiLCJvcGVuaW5nIiwiaWkiLCJ0b2tlbml6ZUFyZ1N0cmluZyIsImlucHV0SXNTdHJpbmciLCJhbGlhc2VzIiwiYWxpYXNBcnJheXMiLCJjb21iaW5lZCIsImNyZWF0ZSIsImNoYW5nZSIsImNvbmNhdCIsInYiLCJzcGxpY2UiLCJhbGlhc0FycmF5IiwibGFzdEFsaWFzIiwic2VsZiIsImNvbWJpbmVBbGlhc2VzIiwiZGVmYXVsdHMiLCJub3RGbGFnc09wdGlvbiIsIm5vdEZsYWdzQXJndiIsIm5ld0FsaWFzZXMiLCJkZWZhdWx0ZWQiLCJmb3JtYXQiLCJmbGFncyIsImFycmF5cyIsImJvb2xzIiwic3RyaW5ncyIsIm51bWJlcnMiLCJjb3VudHMiLCJjb25maWdzIiwibmFyZ3MiLCJjb2VyY2lvbnMiLCJuZWdhdGl2ZSIsIm5lZ2F0ZWRCb29sZWFuIiwiQm9vbGVhbiIsIm9wdCIsImFzc2lnbm1lbnQiLCJvYmoiLCJ5IiwiZXh0ZW5kQWxpYXNlcyIsImVycm9yIiwiZmluZCIsImNoZWNrQWxsQWxpYXNlcyIsIm5vdEZsYWdzIiwiYXJndiIsIl8iLCJhcmd2UmV0dXJuIiwidHJ1bmNhdGVkQXJnIiwiYnJva2VuIiwibGV0dGVycyIsIm0iLCJpc1Vua25vd25PcHRpb25Bc0FyZyIsInB1c2hQb3NpdGlvbmFsIiwiZWF0QXJyYXkiLCJlYXROYXJncyIsInNldEFyZyIsImRlZmF1bHRWYWx1ZSIsImoiLCJtYXliZUNvZXJjZWROdW1iZXIiLCJtYXliZUNvZXJjZU51bWJlciIsImFyZ0FmdGVyRXF1YWxTaWduIiwidG9FYXQiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiYXZhaWxhYmxlIiwiY29uc3VtZWQiLCJhcmdzVG9TZXQiLCJuYXJnc0NvdW50IiwiZGVmVmFsIiwicHJvY2Vzc1ZhbHVlIiwidmFsIiwic2hvdWxkU3RyaXBRdW90ZXMiLCJwcm9wIiwiYWRkTmV3QWxpYXMiLCJzcGxpdEtleSIsInNldEtleSIsImtleVByb3BlcnRpZXMiLCJhIiwic2hpZnQiLCJpbmNsdWRlcyIsInN1YnN0cmluZyIsInN0cmlwUXVvdGVzIiwic2V0Q29uZmlnT2JqZWN0IiwicHJldiIsImZ1bGxLZXkiLCJoYXNLZXkiLCJhcHBseUVudlZhcnMiLCJjb25maWdPbmx5IiwicHJlZml4IiwiZW52VmFyIiwibGFzdEluZGV4T2YiLCJhcHBseURlZmF1bHRzQW5kQWxpYXNlcyIsImNhbkxvZyIsIm8iLCJpc1R5cGVBcnJheSIsImlzVmFsdWVBcnJheSIsImR1cGxpY2F0ZSIsImZsYWciLCJ0b0NoZWNrIiwic2V0QWxpYXMiLCJoYXNBbnlGbGFnIiwiZmxhZ3NLZXlzIiwiayIsInNvbWUiLCJoYXNBbGxGbGFncyIsImhhc0FsbFNob3J0RmxhZ3MiLCJwYXR0ZXJucyIsInBhdHRlcm4iLCJoYXNGbGFnc01hdGNoaW5nIiwiaXNVbmtub3duT3B0aW9uIiwidHlwZSIsIkJPT0xFQU4iLCJTVFJJTkciLCJOVU1CRVIiLCJBUlJBWSIsImd1ZXNzVHlwZSIsIm51bSIsImNvbmZpZ0xvb2t1cCIsImNvbmZpZ0tleSIsImNvbmZpZ1BhdGgiLCJyZXNvbHZlZENvbmZpZ1BhdGgiLCJyZXNvbHZlIiwiY3dkIiwicmVzb2x2ZUNvbmZpZyIsImV4IiwibmFtZSIsInNldENvbmZpZyIsImNvbmZpZ09iamVjdCIsImFwcGxpZWQiLCJhbGkiLCJhZGQiLCJlcnIiLCJhcHBseUNvZXJjaW9ucyIsInNldFBsYWNlaG9sZGVyS2V5cyIsInBhdGgiLCJKU09OIiwicmVhZEZpbGVTeW5jIiwieWFyZ3NQYXJzZXIiLCJnZXRQcm9jZXNzQXJndkJpbkluZGV4IiwiZWxlY3Ryb24iLCJkZWZhdWx0QXBwIiwiZGV0YWlsZWQiLCJzaGltJDMiLCJmcyIsIndyaXRlRmlsZSIsImV4aXN0cyIsImZpbGUiLCJzdGF0U3luYyIsImlzRmlsZSIsInNoaW0iLCJZMThOIiwiZGlyZWN0b3J5IiwidXBkYXRlRmlsZXMiLCJsb2NhbGUiLCJmYWxsYmFja1RvTGFuZ3VhZ2UiLCJjYWNoZSIsIndyaXRlUXVldWUiLCJhcmd1bWVudHMiLCJfdGFnZ2VkTGl0ZXJhbCIsImNiIiwiX3JlYWRMb2NhbGVGaWxlIiwiX2VucXVldWVXcml0ZSIsImFwcGx5IiwiX19uIiwicHJvdG90eXBlIiwiY2FsbCIsInNpbmd1bGFyIiwicGx1cmFsIiwicXVhbnRpdHkiLCJvbmUiLCJvdGhlciIsInNldExvY2FsZSIsImdldExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsImhhc093blByb3BlcnR5IiwicGFydHMiLCJwYXJ0Iiwid29yayIsIl9wcm9jZXNzV3JpdGVRdWV1ZSIsIl90aGlzIiwibGFuZ3VhZ2VGaWxlIiwiX3Jlc29sdmVMb2NhbGVGaWxlIiwic2VyaWFsaXplZExvY2FsZSIsInN0cmluZ2lmeSIsImxvY2FsZUxvb2t1cCIsIlN5bnRheEVycm9yIiwibWVzc2FnZSIsIl9maWxlRXhpc3RzU3luYyIsImdldENhbGxlckZpbGUiLCJwb3NpdGlvbiIsInN0YWNrVHJhY2VMaW1pdCIsIm9sZFByZXBhcmVTdGFja1RyYWNlIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJzdGFjayIsImdldEZpbGVOYW1lIiwiX19kaXJuYW1lIiwiZmlsZVVSTFRvUGF0aCIsIm1haW5GaWxlbmFtZSIsInNoaW0kMSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwic3RyaWN0RXF1YWwiLCJjbGl1aSIsInN0ZG91dCIsImZpbmRVcCIsInN0YXJ0IiwiY2FsbGJhY2siLCJ0bXAiLCJkaXIiLCJpc0RpcmVjdG9yeSIsImRpcm5hbWUiLCJyZWFkZGlyU3luYyIsImdldEVudiIsImluc3BlY3QiLCJnZXRQcm9jZXNzQXJndkJpbiIsIlBhcnNlciIsImJhc2VuYW1lIiwiZXh0bmFtZSIsInJlbGF0aXZlIiwiZW1pdFdhcm5pbmciLCJ3YXJuaW5nIiwiZXhlY1BhdGgiLCJleGl0IiwibmV4dFRpY2siLCJzdGRDb2x1bW5zIiwiY2FsbGVyRmlsZSIsInkxOG4iLCJfc2hpbSIsImJpbmQiLCJfeTE4biIsImFzc2VydE5vdFN0cmljdEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJhc3NlcnRTaW5nbGVLZXkiLCJvYmplY3RLZXlzIiwib2JqZWN0IiwiaXNQcm9taXNlIiwibWF5YmVQcm9taXNlIiwidGhlbiIsIllFcnJvciIsIm1zZyIsInN1cGVyIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJwYXJzZUNvbW1hbmQiLCJjbWQiLCJzcGxpdENvbW1hbmQiLCJicmVnZXgiLCJmaXJzdENvbW1hbmQiLCJwYXJzZWRDb21tYW5kIiwiZGVtYW5kZWQiLCJvcHRpb25hbCIsInZhcmlhZGljIiwicG9zaXRpb25OYW1lIiwiYXJnc2VydCIsImFyZzEiLCJhcmcyIiwiYXJnMyIsInBhcnNlZCIsImNhbGxlckFyZ3VtZW50cyIsIl9sZW5ndGgiLCJ0b3RhbENvbW1hbmRzIiwib2JzZXJ2ZWRUeXBlIiwiYXJndW1lbnRUeXBlRXJyb3IiLCJjb25zb2xlIiwid2FybiIsImFsbG93ZWRUeXBlcyIsIkdsb2JhbE1pZGRsZXdhcmUiLCJ5YXJncyIsImdsb2JhbE1pZGRsZXdhcmUiLCJmcm96ZW5zIiwiYWRkTWlkZGxld2FyZSIsImFwcGx5QmVmb3JlVmFsaWRhdGlvbiIsImdsb2JhbCIsIm11dGF0ZXMiLCJhZGRDb2VyY2VNaWRkbGV3YXJlIiwib3B0aW9uIiwiZ2V0QWxpYXNlcyIsImdldE1pZGRsZXdhcmUiLCJmcmVlemUiLCJ1bmZyZWV6ZSIsImZyb3plbiIsImFwcGx5TWlkZGxld2FyZSIsIm1pZGRsZXdhcmVzIiwiYmVmb3JlVmFsaWRhdGlvbiIsInJlZHVjZSIsImFjYyIsIm1pZGRsZXdhcmUiLCJpbml0aWFsT2JqIiwiUHJvbWlzZSIsImFsbCIsIm1pZGRsZXdhcmVPYmoiLCJtYXliZUFzeW5jUmVzdWx0IiwiZ2V0UmVzdWx0IiwicmVzdWx0SGFuZGxlciIsImVycm9ySGFuZGxlciIsIkRFRkFVTFRfTUFSS0VSIiwiQ29tbWFuZEluc3RhbmNlIiwidXNhZ2UiLCJ2YWxpZGF0aW9uIiwicmVxdWlyZUNhY2hlIiwiaGFuZGxlcnMiLCJhbGlhc01hcCIsImFkZERpcmVjdG9yeSIsInJlcSIsImZ1bGxEaXJQYXRoIiwiZmlsZXMiLCJyZWN1cnNpdmUiLCJyZWN1cnNlIiwiZXh0ZW5zaW9ucyIsInZpc2l0IiwiZmlsZWIiLCJleGNsdWRlIiwiaW5jbHVkZSIsInN1cHBvcnRlZEV4dGVuc2lvbiIsImV4dCIsImVuZHNXaXRoIiwiam9pbmVkIiwibW9kdWxlIiwiZXh0ZW5kYWJsZU1vZHVsZSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJjb21tYW5kIiwiYWRkSGFuZGxlciIsImRlc2NyaXB0aW9uIiwiYnVpbGRlciIsImhhbmRsZXIiLCJjb21tYW5kTWlkZGxld2FyZSIsImRlcHJlY2F0ZWQiLCJjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkiLCJldmVyeSIsImlzQ29tbWFuZEFuZEFsaWFzZXMiLCJpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbiIsImV4dHJhY3REZXNjIiwiaXNDb21tYW5kQnVpbGRlckRlZmluaXRpb24iLCJpc0RlZmF1bHQiLCJwYXJzZWRBbGlhc2VzIiwib3JpZ2luYWwiLCJkZWZhdWx0Q29tbWFuZCIsImdldENvbW1hbmRIYW5kbGVycyIsImdldENvbW1hbmRzIiwiaGFzRGVmYXVsdENvbW1hbmQiLCJydW5Db21tYW5kIiwiY29tbWFuZEluZGV4IiwiaGVscE9ubHkiLCJoZWxwT3JWZXJzaW9uU2V0IiwiY29tbWFuZEhhbmRsZXIiLCJjdXJyZW50Q29udGV4dCIsImdldEludGVybmFsTWV0aG9kcyIsImdldENvbnRleHQiLCJwYXJlbnRDb21tYW5kcyIsImNvbW1hbmRzIiwiaXNEZWZhdWx0Q29tbWFuZCIsImZ1bGxDb21tYW5kcyIsImJ1aWxkZXJSZXN1bHQiLCJhcHBseUJ1aWxkZXJVcGRhdGVVc2FnZUFuZFBhcnNlIiwiYXBwbHlNaWRkbGV3YXJlQW5kR2V0UmVzdWx0IiwiaW5uZXJBcmd2IiwiaW5uZXJZYXJncyIsImlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayIsImdldFVzYWdlSW5zdGFuY2UiLCJidWlsZGVyT3V0cHV0Iiwib3V0cHV0IiwicGFyc2VBbmRVcGRhdGVVc2FnZSIsImlzQ29tbWFuZEJ1aWxkZXJPcHRpb25EZWZpbml0aW9ucyIsInNob3VsZFVwZGF0ZVVzYWdlIiwidXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlciIsInJ1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzIiwiZ2V0VXNhZ2VEaXNhYmxlZCIsImdldFVzYWdlIiwicGMiLCJoYW5kbGVWYWxpZGF0aW9uQW5kR2V0UmVzdWx0IiwicG9zaXRpb25hbE1hcCIsImdldEhhc091dHB1dCIsInJ1blZhbGlkYXRpb24iLCJzZXRIYXNPdXRwdXQiLCJwb3B1bGF0ZURvdWJsZURhc2giLCJnZXRPcHRpb25zIiwicG9zdFByb2Nlc3MiLCJoYW5kbGVyUmVzdWx0IiwiY2FjaGVIZWxwTWVzc2FnZSIsImhhc1BhcnNlQ2FsbGJhY2siLCJjYXRjaCIsImZhaWwiLCJfZXJyIiwicG9wdWxhdGVQb3NpdGlvbmFscyIsIm1heWJlUHJvbWlzZUFyZ3YiLCJyZXNvbHZlZElubmVyQXJndiIsImNvbnRleHQiLCJwb3NpdGlvbmFsQ291bnQiLCJkZW1hbmQiLCJwb3B1bGF0ZVBvc2l0aW9uYWwiLCJtYXliZSIsInBvc3RQcm9jZXNzUG9zaXRpb25hbHMiLCJjbWRUb1BhcnNlT3B0aW9ucyIsInBvc2l0aW9uYWwiLCJjbWRTdHJpbmciLCJwYXJzZU9wdGlvbnMiLCJkIiwidW5wYXJzZWQiLCJwb3NpdGlvbmFsS2V5cyIsImlzSW5Db25maWdzIiwiaXNEZWZhdWx0ZWQiLCJydW5EZWZhdWx0QnVpbGRlck9uIiwiY29tbWFuZFN0cmluZyIsImRlc2NyaWJlIiwiZGVzYyIsIm9iakZpbHRlciIsInNldEJsb2NraW5nIiwiYmxvY2tpbmciLCJzdGRlcnIiLCJfc3RyZWFtIiwic3RyZWFtIiwiX2hhbmRsZSIsImlzVFRZIiwiaXNCb29sZWFuIiwiZmFpbHMiLCJmYWlsRm4iLCJmIiwiZmFpbE1lc3NhZ2UiLCJnbG9iYWxGYWlsTWVzc2FnZSIsInNob3dIZWxwT25GYWlsIiwiZW5hYmxlZCIsImlzR2xvYmFsQ29udGV4dCIsImZhaWx1cmVPdXRwdXQiLCJsb2dnZXIiLCJnZXRMb2dnZXJJbnN0YW5jZSIsImdldEV4aXRQcm9jZXNzIiwic2hvd0hlbHAiLCJnbG9iYWxPckNvbW1hbmRGYWlsTWVzc2FnZSIsInVzYWdlcyIsInVzYWdlRGlzYWJsZWQiLCJnZXRQb3NpdGlvbmFsR3JvdXBOYW1lIiwiZXhhbXBsZXMiLCJleGFtcGxlIiwiY21kQXJyYXkiLCJkZXNjcmlwdGlvbnMiLCJrZXlPcktleXMiLCJnZXREZXNjcmlwdGlvbnMiLCJlcGlsb2dzIiwiZXBpbG9nIiwid3JhcFNldCIsImdldFdyYXAiLCJtYXhXaWR0aCIsIndpbmRvd1dpZHRoIiwiZGVmZXJZMThuTG9va3VwUHJlZml4IiwidGFibGUiLCJ0aGVXcmFwIiwiZ2V0VGV4dCIsImdldEluZGVudGF0aW9uIiwiY2FjaGVkSGVscE1lc3NhZ2UiLCJmaWx0ZXJIaWRkZW5PcHRpb25zIiwiaGlkZGVuT3B0aW9ucyIsInNob3dIaWRkZW5PcHQiLCJkZWZhdWx0U3RyaW5nIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwiZGVmZXJZMThuTG9va3VwIiwiaGVscCIsImRlbWFuZGVkT3B0aW9ucyIsImdldERlbWFuZGVkT3B0aW9ucyIsImRlbWFuZE9wdGlvbiIsIm5vcm1hbGl6ZUFsaWFzZXMiLCJiYXNlJDAiLCJjdXN0b21TY3JpcHROYW1lIiwiJDAiLCJkZW1hbmRlZENvbW1hbmRzIiwiZ2V0RGVtYW5kZWRDb21tYW5kcyIsImRlcHJlY2F0ZWRPcHRpb25zIiwiZ2V0RGVwcmVjYXRlZE9wdGlvbnMiLCJnZXRHcm91cHMiLCJ1aSIsInUiLCJnZXRQYXJzZXJDb25maWd1cmF0aW9uIiwic29ydCIsImIiLCJsb2NhbGVDb21wYXJlIiwiaGludHMiLCJhbGlhc0tleXMiLCJkZWZhdWx0R3JvdXAiLCJncm91cGVkS2V5cyIsImFkZFVuZ3JvdXBlZEtleXMiLCJpc0xvbmdTd2l0Y2giLCJzdyIsImRpc3BsYXllZEdyb3VwcyIsIm5vcm1hbGl6ZWRLZXlzIiwiYWxpYXNLZXkiLCJzd2l0Y2hlcyIsInN3MSIsInN3MiIsImluZGVudCIsImlzSW5kZW50ZWRUZXh0IiwiaW5kZW50YXRpb24iLCJrc3dpdGNoIiwiZXh0cmEiLCJjaG9pY2VzIiwic3RyaW5naWZpZWRWYWx1ZXMiLCJzaG91bGRIaWRlT3B0aW9uRXh0cmFzIiwiZ2V0VXNhZ2VDb25maWd1cmF0aW9uIiwiY2xlYXJDYWNoZWRIZWxwTWVzc2FnZSIsImhhc0NhY2hlZEhlbHBNZXNzYWdlIiwibGV2ZWwiLCJmdW5jdGlvbkRlc2NyaXB0aW9uIiwic2VwYXJhdG9yIiwic2VwIiwidmVyIiwic2hvd1ZlcnNpb24iLCJsb2NhbExvb2t1cCIsIkNvbXBsZXRpb24iLCJjb21wbGV0aW9uS2V5IiwiY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uIiwiaW5kZXhBZnRlckxhc3RSZXNldCIsInpzaFNoZWxsIiwiZGVmYXVsdENvbXBsZXRpb24iLCJjdXJyZW50IiwiZG9uZSIsImNvbXBsZXRpb25zIiwiY29tbWFuZENvbXBsZXRpb25zIiwib3B0aW9uQ29tcGxldGlvbnMiLCJjaG9pY2VzRnJvbU9wdGlvbnNDb21wbGV0aW9ucyIsImNob2ljZXNGcm9tUG9zaXRpb25hbHNDb21wbGV0aW9ucyIsInByZXZpb3VzQXJnSGFzQ2hvaWNlcyIsInVzYWdlQ29tbWFuZCIsImNvbW1hbmROYW1lIiwibmVnYWJsZSIsImFyZ3NDb250YWluS2V5IiwiY29tcGxldGVPcHRpb25LZXkiLCJnZXRQcmV2aW91c0FyZ0Nob2ljZXMiLCJwb3NpdGlvbmFsS2V5IiwiY2hvaWNlIiwic3RhcnRzV2l0aCIsInByZXZpb3VzQXJnIiwicHJldmlvdXNBcmdLZXkiLCJwb3NzaWJsZUFsaWFzZXMiLCJwb3NzaWJsZUFsaWFzIiwiYXJnc0NvbnRhaW5zIiwicyIsIl9kIiwia2V5V2l0aERlc2MiLCJkZXNjcyIsImRlc2NGcm9tQWxpYXMiLCJkYXNoZXMiLCJpc1Nob3J0T3B0aW9uIiwiY3VzdG9tQ29tcGxldGlvbiIsImxpc3QiLCJjb21wbGV0aW9uRnVuY3Rpb24iLCJpc0ZhbGxiYWNrQ29tcGxldGlvbkZ1bmN0aW9uIiwib25Db21wbGV0ZWQiLCJnZXRDb21wbGV0aW9uIiwiZ2VuZXJhdGVDb21wbGV0aW9uU2NyaXB0Iiwic2NyaXB0IiwicmVnaXN0ZXJGdW5jdGlvbiIsInNldFBhcnNlZCIsImxldmVuc2h0ZWluIiwibWF0cml4Iiwic3BlY2lhbEtleXMiLCJwcmV2aW91c2x5VmlzaXRlZENvbmZpZ3MiLCJhcHBseUV4dGVuZHMiLCJtZXJnZUV4dGVuZHMiLCJkZWZhdWx0Q29uZmlnIiwiZXh0ZW5kcyIsImlzUGF0aCIsInBhdGhUb0RlZmF1bHQiLCJwYXRoVG9FeHRlbmQiLCJnZXRQYXRoVG9EZWZhdWx0Q29uZmlnIiwiY2ZnUGF0aCIsImNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzIiwibWVyZ2VEZWVwIiwiY29uZmlnMSIsImNvbmZpZzIiLCJpc09iamVjdCIsIl9ZYXJnc0luc3RhbmNlX2NvbW1hbmQiLCJfWWFyZ3NJbnN0YW5jZV9jd2QiLCJfWWFyZ3NJbnN0YW5jZV9jb250ZXh0IiwiX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiIsIl9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kIiwiX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQiLCJfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IiLCJfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUiLCJfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3MiLCJfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcyIsIl9ZYXJnc0luc3RhbmNlX2Zyb3plbnMiLCJfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlIiwiX1lhcmdzSW5zdGFuY2VfZ3JvdXBzIiwiX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0IiwiX1lhcmdzSW5zdGFuY2VfaGVscE9wdCIsIl9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCIsIl9ZYXJnc0luc3RhbmNlX2xvZ2dlciIsIl9ZYXJnc0luc3RhbmNlX291dHB1dCIsIl9ZYXJnc0luc3RhbmNlX29wdGlvbnMiLCJfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlIiwiX1lhcmdzSW5zdGFuY2VfcGFyc2VyQ29uZmlnIiwiX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiIsIl9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCIsIl9ZYXJnc0luc3RhbmNlX3BrZ3MiLCJfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMiLCJfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncyIsIl9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzIiwiX1lhcmdzSW5zdGFuY2Vfc2hpbSIsIl9ZYXJnc0luc3RhbmNlX3N0cmljdCIsIl9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzIiwiX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucyIsIl9ZYXJnc0luc3RhbmNlX3VzYWdlIiwiX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWciLCJfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0IiwiX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiIsIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCJyZWNlaXZlciIsInN0YXRlIiwia2luZCIsIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCJrQ29weURvdWJsZURhc2giLCJTeW1ib2wiLCJrQ3JlYXRlTG9nZ2VyIiwia0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0Iiwia0VtaXRXYXJuaW5nIiwia0ZyZWV6ZSIsImtHZXREb2xsYXJaZXJvIiwia0dldFBhcnNlckNvbmZpZ3VyYXRpb24iLCJrR2V0VXNhZ2VDb25maWd1cmF0aW9uIiwia0d1ZXNzTG9jYWxlIiwia0d1ZXNzVmVyc2lvbiIsImtQYXJzZVBvc2l0aW9uYWxOdW1iZXJzIiwia1BrZ1VwIiwia1BvcHVsYXRlUGFyc2VySGludEFycmF5Iiwia1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeSIsImtQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnkiLCJrUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeSIsImtTYW5pdGl6ZUtleSIsImtTZXRLZXkiLCJrVW5mcmVlemUiLCJrVmFsaWRhdGVBc3luYyIsImtHZXRDb21tYW5kSW5zdGFuY2UiLCJrR2V0Q29udGV4dCIsImtHZXRIYXNPdXRwdXQiLCJrR2V0TG9nZ2VySW5zdGFuY2UiLCJrR2V0UGFyc2VDb250ZXh0Iiwia0dldFVzYWdlSW5zdGFuY2UiLCJrR2V0VmFsaWRhdGlvbkluc3RhbmNlIiwia0hhc1BhcnNlQ2FsbGJhY2siLCJrSXNHbG9iYWxDb250ZXh0Iiwia1Bvc3RQcm9jZXNzIiwia1JlYmFzZSIsImtSZXNldCIsImtSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcyIsImtSdW5WYWxpZGF0aW9uIiwia1NldEhhc091dHB1dCIsImtUcmFja01hbnVhbGx5U2V0S2V5cyIsIllhcmdzSW5zdGFuY2UiLCJwcm9jZXNzQXJncyIsInBhcmVudFJlcXVpcmUiLCJhZGRIZWxwT3B0IiwiYWRkU2hvd0hpZGRlbk9wdCIsInNob3dIaWRkZW4iLCJjaGVjayIsIl95YXJncyIsImNvZXJjZUtleSIsImNvZXJjZUtleUFsaWFzZXMiLCJhcmd2S2V5cyIsImNvbmZsaWN0cyIsImtleTEiLCJrZXkyIiwicGFyc2VGbiIsImNvbXBsZXRpb24iLCJjb21tYW5kRGlyIiwiZGVtYW5kQ29tbWFuZCIsIm1pbk1zZyIsIm1heE1zZyIsIkluZmluaXR5IiwiZGVwcmVjYXRlT3B0aW9uIiwiZGV0ZWN0TG9jYWxlIiwiZGV0ZWN0IiwiZXBpbG9ndWUiLCJleGFtcGxlUGFyYW1zIiwiZXhpdFByb2Nlc3MiLCJyZWplY3QiLCJnZXREZXRlY3RMb2NhbGUiLCJnZXRIZWxwIiwiYnVpbGRlclJlc3BvbnNlIiwiZ2V0U3RyaWN0IiwiZ2V0U3RyaWN0Q29tbWFuZHMiLCJnZXRTdHJpY3RPcHRpb25zIiwiZ2xvYmFscyIsImxvY2FsIiwibCIsImciLCJleGlzdGluZyIsInNlZW4iLCJoaWRlIiwiaW1wbGllcyIsImRlcHJlY2F0ZSIsInJlcXVpcmVkIiwiY29uZmlnUGFyc2VyIiwic2tpcFZhbGlkYXRpb24iLCJyZXF1aXJlc0FyZyIsInNob3J0Q2lyY3VpdCIsIl9wYXJzZUZuIiwidG1wUGFyc2VkIiwiZmluYWxseSIsInBhcnNlQXN5bmMiLCJwYXJzZVN5bmMiLCJwYXJzZXJDb25maWd1cmF0aW9uIiwicGtnQ29uZiIsInJvb3RQYXRoIiwiY29uZiIsInN1cHBvcnRlZE9wdHMiLCJmdWxsQ29tbWFuZCIsInBrIiwicGFyc2VPcHRpb24iLCJyZWNvbW1lbmRDb21tYW5kcyIsInJlY29tbWVuZCIsIk5hTiIsInNob3dDb21wbGV0aW9uU2NyaXB0IiwibG9nIiwic2NyaXB0TmFtZSIsInN0cmljdCIsInN0cmljdENvbW1hbmRzIiwic3RyaWN0T3B0aW9ucyIsInRlcm1pbmFsV2lkdGgiLCJ1cGRhdGVTdHJpbmdzIiwidXNhZ2VDb25maWd1cmF0aW9uIiwiZGVmYXVsdFZlcnNpb25PcHQiLCJXZWFrTWFwIiwib3B0aW9uS2V5IiwiaGludEtleSIsImhpbnQiLCJkZWR1cGxpY2F0aW9uSWQiLCJjb21wbGV0aW9uQ29tbWFuZCIsImV4aXRFcnJvciIsImhhc091dHB1dCIsInBhcnNlQ29udGV4dCIsImRlZmF1bHQkMCIsIm5wYXRoIiwic3RhcnREaXIiLCJwa2dKc29uUGF0aCIsIm5hbWVzIiwiX25vb3AiLCJzaW5nbGVLZXlIYW5kbGVyIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9rIiwiX2wiLCJfbSIsIl9vIiwiZ2V0Q29tbWFuZEluc3RhbmNlIiwiZ2V0UGFyc2VDb250ZXh0IiwiZ2V0VmFsaWRhdGlvbkluc3RhbmNlIiwiY2FsbGVkRnJvbUNvbW1hbmQiLCJydW5HbG9iYWxNaWRkbGV3YXJlIiwidG1wT3B0aW9ucyIsIlVzYWdlIiwiX3MiLCJvYnNlcnZlZCIsIm1pc3NpbmciLCJjdXN0b21Nc2dzIiwiY3VzdG9tTXNnIiwiY2hlY2tQb3NpdGlvbmFscyIsImNvbW1hbmRLZXlzIiwidW5rbm93biIsImlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyIsIm1heE5vbk9wdERlbWFuZGVkIiwiaW52YWxpZCIsImludmFsaWRLZXlzIiwiaW1wbGllZCIsImtleUV4aXN0cyIsImdldEltcGxpZWQiLCJpbXBsaWNhdGlvbnMiLCJpbXBseUZhaWwiLCJvcmlnS2V5Iiwib3JpZ1ZhbHVlIiwiY29uZmxpY3RpbmciLCJnZXRDb25mbGljdGluZyIsInBvdGVudGlhbENvbW1hbmRzIiwicmVjb21tZW5kZWQiLCJiZXN0RGlzdGFuY2UiLCJjYW5kaWRhdGUiLCJkaXN0YW5jZSIsIlZhbGlkYXRpb24iLCJDb21tYW5kIiwiYmFzZSIsImFyZ3ZQcm9taXNlIiwiaGVscE9wdFNldCIsInZlcnNpb25PcHRTZXQiLCJoYW5kbGVyS2V5cyIsInJlcXVlc3RDb21wbGV0aW9ucyIsInNraXBSZWNvbW1lbmRhdGlvbiIsImZpcnN0VW5rbm93bkNvbW1hbmQiLCJjb21wbGV0aW9uQXJncyIsInBhcnNlRXJyb3JzIiwibm9uT3B0aW9uQ291bnQiLCJyZXF1aXJlZEFyZ3VtZW50cyIsImZhaWxlZFN0cmljdENvbW1hbmRzIiwidW5rbm93bkNvbW1hbmRzIiwidW5rbm93bkFyZ3VtZW50cyIsImxpbWl0ZWRDaG9pY2VzIiwiWWFyZ3MiLCJlc21QbGF0Zm9ybVNoaW0iLCJoaWRlQmluIiwibG9hZENvbmZpZ0ZpbGUiLCJERUZBVUxUX0NPRElOR19UT09MIiwiREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTIiwiREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTIiwiREVGQVVMVF9DT0RFWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyIsIkRFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyIsIkRFRkFVTFRfTk9ERV9SVU5USU1FIiwicGFja2FnZUpzb25EaXIiLCJVUkwiLCJwYXRobmFtZSIsImV4aXN0c1N5bmMiLCJnZXRWZXJzaW9uIiwiY2hkaXIiLCJpbmZvIiwibm9kZVJ1bnRpbWUiLCJub3JtYWxpemVOb2RlUnVudGltZSIsIm1haW4iLCJhaWRlckV4dHJhQXJncyIsImNsYXVkZUNvZGVFeHRyYUFyZ3MiLCJjb2RleEV4dHJhQXJncyIsImdlbWluaUV4dHJhQXJncyIsImNvZGluZ1Rvb2wiLCJkcnlSdW4iLCJub0JyYW5jaCIsInR3b1N0YWdlUGxhbm5pbmciLCJpc3N1ZU51bWJlciIsIm1heFRlc3RBdHRlbXB0cyIsInBsYW5uaW5nTW9kZWwiLCJyZWFzb25pbmdFZmZvcnQiLCJyZXBvbWl4RXh0cmFBcmdzIiwidGVzdENvbW1hbmQiLCJyZW1vdmVQYXR0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QSxHQUNNLFFBQU5BLEdBQ0FBLEdBQUssT0FBVUEsR0FBSyxPQUNkLFFBQU5BLEdBQ0FBLEdBQUssT0FBVUEsR0FBSyxPQUNkLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNBQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVdBLEdBQUssT0FDZixRQUFOQSxHQUNNLFFBQU5BLEdBQ0FBLEdBQUssT0FBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNNLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDTSxTQUFOQSxHQUNNLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxNQUMxQixDRHhWS0MsQ0FBT04sSUFDTkMsR0NsQk4sU0FBcUJJLEdBQ3BCLE9BQWEsTUFBTkEsR0FDRyxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFRQSxHQUFLLEtBQ2xCQSxHQUFLLEtBQVFBLEdBQUssS0FDbEJBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFRQSxHQUFLLEtBQ1osTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNiLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFTQSxHQUFLLEtBQ25CQSxHQUFLLEtBQVNBLEdBQUssS0FDbkJBLEdBQUssS0FBU0EsR0FBSyxLQUNuQkEsR0FBSyxLQUFTQSxHQUFLLEtBQ25CQSxHQUFLLEtBQVNBLEdBQUssS0FDYixPQUFOQSxHQUNBQSxHQUFLLE1BQVNBLEdBQUssTUFDYixPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BC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QUFPLElBQ1BrVixZQUFhLHlFQUNicE4sS0FBTSxVQUNOdEgsU0FBUyxJQUVWMlIsT0FBTyxlQUFnQixDQUN0QitDLFlBQWEsMkNBQ2JwTixLQUFNLFNBQ044WCxRQUFTLENBQUMsT0FBUSxNQUFPLE1BQU8sUUFDaENwZixRQUFTOHlCLElBR1ZuaEIsT0FBTyxjQUFlLENBQ3JCblMsTUFBTyxJQUNQa1YsWUFBYSxzQ0FDYnBOLEtBQU0sV0FHUHZJLFFBR0gsV0FDRSxJQUFJZzBCLGNBQTZCdmxCLEtBQU8xRSxFQUFLNEUsUUFBUSxJQUFJc2xCLGdCQUFnQnA0QixLQUFLcTRCLFVBQzlFLE1BQVExcEIsRUFBRzJwQixXQUFXcHFCLEVBQUtoWSxLQUFLaWlDLEVBQWdCLGtCQUM5Q0EsRUFBaUJqcUIsRUFBSzRFLFFBQVFxbEIsR0FFaEMsT0FBT2hxQixLQUFLMUosTUFBTWtLLEVBQUdQLGFBQWFGLEVBQUtoWSxLQUFLaWlDLEVBQWdCLGdCQUFpQixTQUFTaDBCLE9BQ3hGLENBVFdvMEIsSUFDUnBXLE9BQU8zWixLQVVOQSxHQUFLLGlCQUNQM0UsRUFBUTIwQixNQUFNaHdCLEdBQUssZ0JBQ25CMk4sUUFBUXNpQixLQUFLLGlDQUFpQzUwQixFQUFReUosVUFJeEQsTUFBTW9yQixHQUFpQ0MsRUFBcUJud0IsR0FBSyx1QkFFM0Rvd0IsRUFBSyxDQUNUQyxlQUFnQnJ3QixHQUFLLG9CQUNyQnN3QixvQkFBcUJ0d0IsR0FBSywwQkFDMUJ1d0IsZUFBZ0J2d0IsR0FBSyxvQkFDckJ3d0IsZ0JBQWlCeHdCLEdBQUsscUJBQ3RCeXdCLFdBQVl6d0IsR0FBSyxlQUNqQjB3QixPQUFRMXdCLEdBQUssV0FDYjJ3QixTQUFVM3dCLEdBQUssYUFDZmt3QixlQUNBVSxpQkFBa0I1d0IsR0FBSyx1QkFDdkI2d0IsWUFBYTd3QixHQUFLLGdCQUNsQjh3QixnQkFBaUI5d0IsR0FBSyxxQkFDdEIrd0IsY0FBZS93QixHQUFLLGtCQUNwQmd4QixnQkFBaUJoeEIsR0FBSyxvQkFDdEJpeEIsaUJBQWtCanhCLEdBQUssc0JBQ3ZCa3hCLFlBQWFseEIsR0FBSyxnQkFDbEJteEIsY0FBZW54QixHQUFLIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzldfQ==
|
|
1
|
+
import e from"node:fs";import o from"node:path";import t from"node:process";import i from"yargs";import{hideBin as a}from"yargs/helpers";import{l as n,D as r,c as s,d as p,e as d,f as m,g as l,b as g,a as c,n as u,m as f}from"./main-DA3u-sLa.js";import"yaml";import"ansis";import"dotenv";import"node:child_process";import"@octokit/graphql";import"@octokit/rest";import"@ai-sdk/amazon-bedrock";import"@ai-sdk/anthropic";import"@ai-sdk/azure";import"@ai-sdk/google";import"@ai-sdk/google-vertex";import"@ai-sdk/openai";import"@ai-sdk/xai";import"@openrouter/ai-sdk-provider";import"ai";import"ai-v4";import"ollama-ai-provider-v2";const h=await i(a(t.argv)).config(n()).option("issue-number",{alias:"i",description:"GitHub issue number to process",type:"number",demandOption:!0}).option("planning-model",{alias:"m",description:"LLM for planning code changes. Must use llmlite format: provider/model (e.g., openai/gpt-4.1, azure/gpt-4.1, gemini/gemini-2.5-pro, anthropic/claude-4-sonnet-latest, bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0, vertex/gemini-2.5-pro, xai/grok-4)",type:"string"}).option("two-staged-planning",{alias:"p",description:"Enable two-staged planning: first select relevant files, then generate detailed implementation plans (increases LLM cost but improves code quality)",type:"boolean",default:!0}).option("reasoning-effort",{alias:"e",description:"Constrains effort on reasoning for planning models. Supported values are low, medium, and high.",type:"string",choices:["low","medium","high"]}).option("coding-tool",{alias:"c",description:"Coding tool to use for making changes",type:"string",choices:["aider","claude-code","codex-cli","gemini-cli"],default:r}).option("aider-extra-args",{alias:"a",description:'Additional arguments to pass to Aider ("--yes-always --no-check-update --no-show-release-notes" is always applied)',type:"string",default:s}).option("claude-code-extra-args",{description:'Additional arguments to pass to Claude Code ("--dangerously-skip-permissions" is always applied, "--print" is applied only in CI)',type:"string",default:p}).option("codex-extra-args",{description:"Additional arguments to pass to Codex CLI (nothing is always applied)",type:"string",default:d}).option("gemini-extra-args",{description:'Additional arguments to pass to Gemini CLI ("--yolo" is always applied)',type:"string",default:m}).option("repomix-extra-args",{alias:"r",description:"Additional arguments for repomix when generating context",type:"string",default:l}).option("test-command",{alias:"t",description:"Command to run after the coding tool applies changes. If it fails, the assistant will try to fix it.",type:"string"}).option("max-test-attempts",{description:"Maximum number of attempts to fix test failures",type:"number",default:g}).option("dry-run",{alias:"d",description:"Run without making actual changes (no branch creation, no PR)",type:"boolean",default:!1}).option("remove-pattern",{description:"RegExp pattern to remove from issue and PR descriptions",type:"string"}).option("no-branch",{alias:"n",description:"Do not create a new branch, commit changes directly to the base branch",type:"boolean",default:!1}).option("node-runtime",{description:"Node.js runtime to use for running tools",type:"string",choices:["node","bun","npx","bunx"],default:c}).option("working-dir",{alias:"w",description:"Working directory path for commands",type:"string"}).version(function(){let t=import.meta.dir||o.dirname(new URL(import.meta.url).pathname);for(;!e.existsSync(o.join(t,"package.json"));)t=o.dirname(t);return JSON.parse(e.readFileSync(o.join(t,"package.json"),"utf8")).version}()).help().argv;h["working-dir"]&&(t.chdir(h["working-dir"]),console.info(`Changed working directory to: ${t.cwd()}`));const x=u(h["node-runtime"]);await f({aiderExtraArgs:h["aider-extra-args"],claudeCodeExtraArgs:h["claude-code-extra-args"],codexExtraArgs:h["codex-extra-args"],geminiExtraArgs:h["gemini-extra-args"],codingTool:h["coding-tool"],dryRun:h["dry-run"],noBranch:h["no-branch"],nodeRuntime:x,twoStagePlanning:h["two-staged-planning"],issueNumber:h["issue-number"],maxTestAttempts:h["max-test-attempts"],planningModel:h["planning-model"],reasoningEffort:h["reasoning-effort"],repomixExtraArgs:h["repomix-extra-args"],testCommand:h["test-command"],removePattern:h["remove-pattern"]});
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcbmltcG9ydCB7IGxvYWRDb25maWdGaWxlIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTLFxuICBERUZBVUxUX0NMQVVERV9DT0RFX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfQ09ERVhfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyxcbiAgREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gIERFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTLFxufSBmcm9tICcuL2RlZmF1bHRPcHRpb25zLmpzJztcbmltcG9ydCB7IG1haW4gfSBmcm9tICcuL21haW4uanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplTm9kZVJ1bnRpbWUgfSBmcm9tICcuL3NwYXduLmpzJztcbmltcG9ydCB0eXBlIHsgQ29kaW5nVG9vbCwgTm9kZVJ1bnRpbWUsIE5vZGVSdW50aW1lQWN0dWFsLCBSZWFzb25pbmdFZmZvcnQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB1c2luZyB5YXJncyAoQ0xJIG9wdGlvbnMgb3ZlcnJpZGUgY29uZmlnKVxuY29uc3QgYXJndiA9IGF3YWl0IHlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLmNvbmZpZyhsb2FkQ29uZmlnRmlsZSgpKVxuICAvLyBPcHRpb25zIHNhbWUgd2l0aCB0aGUgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dcbiAgLm9wdGlvbignaXNzdWUtbnVtYmVyJywge1xuICAgIGFsaWFzOiAnaScsXG4gICAgZGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIHRvIHByb2Nlc3MnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncGxhbm5pbmctbW9kZWwnLCB7XG4gICAgYWxpYXM6ICdtJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdMTE0gZm9yIHBsYW5uaW5nIGNvZGUgY2hhbmdlcy4gTXVzdCB1c2UgbGxtbGl0ZSBmb3JtYXQ6IHByb3ZpZGVyL21vZGVsIChlLmcuLCBvcGVuYWkvZ3B0LTQuMSwgYXp1cmUvZ3B0LTQuMSwgZ2VtaW5pL2dlbWluaS0yLjUtcHJvLCBhbnRocm9waWMvY2xhdWRlLTQtc29ubmV0LWxhdGVzdCwgYmVkcm9jay91cy5hbnRocm9waWMuY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0LXYxOjAsIHZlcnRleC9nZW1pbmktMi41LXBybywgeGFpL2dyb2stNCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAub3B0aW9uKCd0d28tc3RhZ2VkLXBsYW5uaW5nJywge1xuICAgIGFsaWFzOiAncCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnRW5hYmxlIHR3by1zdGFnZWQgcGxhbm5pbmc6IGZpcnN0IHNlbGVjdCByZWxldmFudCBmaWxlcywgdGhlbiBnZW5lcmF0ZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBwbGFucyAoaW5jcmVhc2VzIExMTSBjb3N0IGJ1dCBpbXByb3ZlcyBjb2RlIHF1YWxpdHkpJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncmVhc29uaW5nLWVmZm9ydCcsIHtcbiAgICBhbGlhczogJ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uc3RyYWlucyBlZmZvcnQgb24gcmVhc29uaW5nIGZvciBwbGFubmluZyBtb2RlbHMuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGxvdywgbWVkaXVtLCBhbmQgaGlnaC4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbG93JywgJ21lZGl1bScsICdoaWdoJ10sXG4gIH0pXG4gIC5vcHRpb24oJ2NvZGluZy10b29sJywge1xuICAgIGFsaWFzOiAnYycsXG4gICAgZGVzY3JpcHRpb246ICdDb2RpbmcgdG9vbCB0byB1c2UgZm9yIG1ha2luZyBjaGFuZ2VzJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjaG9pY2VzOiBbJ2FpZGVyJywgJ2NsYXVkZS1jb2RlJywgJ2NvZGV4LWNsaScsICdnZW1pbmktY2xpJ10sXG4gICAgZGVmYXVsdDogREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgfSlcbiAgLm9wdGlvbignYWlkZXItZXh0cmEtYXJncycsIHtcbiAgICBhbGlhczogJ2EnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gQWlkZXIgKFwiLS15ZXMtYWx3YXlzIC0tbm8tY2hlY2stdXBkYXRlIC0tbm8tc2hvdy1yZWxlYXNlLW5vdGVzXCIgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0FJREVSX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2NsYXVkZS1jb2RlLWV4dHJhLWFyZ3MnLCB7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDbGF1ZGUgQ29kZSAoXCItLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnNcIiBpcyBhbHdheXMgYXBwbGllZCwgXCItLXByaW50XCIgaXMgYXBwbGllZCBvbmx5IGluIENJKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdjb2RleC1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDb2RleCBDTEkgKG5vdGhpbmcgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0NPREVYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2dlbWluaS1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBHZW1pbmkgQ0xJIChcIi0teW9sb1wiIGlzIGFsd2F5cyBhcHBsaWVkKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbigncmVwb21peC1leHRyYS1hcmdzJywge1xuICAgIGFsaWFzOiAncicsXG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgcmVwb21peCB3aGVuIGdlbmVyYXRpbmcgY29udGV4dCcsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9SRVBPTUlYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ3Rlc3QtY29tbWFuZCcsIHtcbiAgICBhbGlhczogJ3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCB0byBydW4gYWZ0ZXIgdGhlIGNvZGluZyB0b29sIGFwcGxpZXMgY2hhbmdlcy4gSWYgaXQgZmFpbHMsIHRoZSBhc3Npc3RhbnQgd2lsbCB0cnkgdG8gZml4IGl0LicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC5vcHRpb24oJ21heC10ZXN0LWF0dGVtcHRzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gZml4IHRlc3QgZmFpbHVyZXMnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfTUFYX1RFU1RfQVRURU1QVFMsXG4gIH0pXG4gIC5vcHRpb24oJ2RyeS1ydW4nLCB7XG4gICAgYWxpYXM6ICdkJyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biB3aXRob3V0IG1ha2luZyBhY3R1YWwgY2hhbmdlcyAobm8gYnJhbmNoIGNyZWF0aW9uLCBubyBQUiknLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSlcbiAgLm9wdGlvbigncmVtb3ZlLXBhdHRlcm4nLCB7XG4gICAgZGVzY3JpcHRpb246ICdSZWdFeHAgcGF0dGVybiB0byByZW1vdmUgZnJvbSBpc3N1ZSBhbmQgUFIgZGVzY3JpcHRpb25zJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLm9wdGlvbignbm8tYnJhbmNoJywge1xuICAgIGFsaWFzOiAnbicsXG4gICAgZGVzY3JpcHRpb246ICdEbyBub3QgY3JlYXRlIGEgbmV3IGJyYW5jaCwgY29tbWl0IGNoYW5nZXMgZGlyZWN0bHkgdG8gdGhlIGJhc2UgYnJhbmNoJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0pXG4gIC5vcHRpb24oJ25vZGUtcnVudGltZScsIHtcbiAgICBkZXNjcmlwdGlvbjogJ05vZGUuanMgcnVudGltZSB0byB1c2UgZm9yIHJ1bm5pbmcgdG9vbHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbm9kZScsICdidW4nLCAnbnB4JywgJ2J1bngnXSxcbiAgICBkZWZhdWx0OiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgfSlcbiAgLy8gT3B0aW9ucyBvbmx5IGZvciB0aGlzIHN0YW5kYWxvbmUgdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAub3B0aW9uKCd3b3JraW5nLWRpcicsIHtcbiAgICBhbGlhczogJ3cnLFxuICAgIGRlc2NyaXB0aW9uOiAnV29ya2luZyBkaXJlY3RvcnkgcGF0aCBmb3IgY29tbWFuZHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSlcbiAgLmhlbHAoKS5hcmd2O1xuXG5mdW5jdGlvbiBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gIGxldCBwYWNrYWdlSnNvbkRpciA9IGltcG9ydC5tZXRhLmRpciB8fCBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lKTtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgIHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uRGlyKTtcbiAgfVxuICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHBhY2thZ2VKc29uRGlyLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpLnZlcnNpb247XG59XG5cbmlmIChhcmd2Wyd3b3JraW5nLWRpciddKSB7XG4gIHByb2Nlc3MuY2hkaXIoYXJndlsnd29ya2luZy1kaXInXSk7XG4gIGNvbnNvbGUuaW5mbyhgQ2hhbmdlZCB3b3JraW5nIGRpcmVjdG9yeSB0bzogJHtwcm9jZXNzLmN3ZCgpfWApO1xufVxuXG4vLyBOb3JtYWxpemUgdGhlIHJ1bnRpbWUgdmFsdWUgKGNvbnZlcnQgYWxpYXNlcyB0byBhY3R1YWwgY29tbWFuZHMpXG5jb25zdCBub2RlUnVudGltZTogTm9kZVJ1bnRpbWVBY3R1YWwgPSBub3JtYWxpemVOb2RlUnVudGltZShhcmd2Wydub2RlLXJ1bnRpbWUnXSBhcyBOb2RlUnVudGltZSk7XG5cbmF3YWl0IG1haW4oe1xuICBhaWRlckV4dHJhQXJnczogYXJndlsnYWlkZXItZXh0cmEtYXJncyddLFxuICBjbGF1ZGVDb2RlRXh0cmFBcmdzOiBhcmd2WydjbGF1ZGUtY29kZS1leHRyYS1hcmdzJ10sXG4gIGNvZGV4RXh0cmFBcmdzOiBhcmd2Wydjb2RleC1leHRyYS1hcmdzJ10sXG4gIGdlbWluaUV4dHJhQXJnczogYXJndlsnZ2VtaW5pLWV4dHJhLWFyZ3MnXSxcbiAgY29kaW5nVG9vbDogYXJndlsnY29kaW5nLXRvb2wnXSBhcyBDb2RpbmdUb29sLFxuICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgbm9CcmFuY2g6IGFyZ3ZbJ25vLWJyYW5jaCddLFxuICBub2RlUnVudGltZSxcbiAgdHdvU3RhZ2VQbGFubmluZzogYXJndlsndHdvLXN0YWdlZC1wbGFubmluZyddLFxuICBpc3N1ZU51bWJlcjogYXJndlsnaXNzdWUtbnVtYmVyJ10sXG4gIG1heFRlc3RBdHRlbXB0czogYXJndlsnbWF4LXRlc3QtYXR0ZW1wdHMnXSxcbiAgcGxhbm5pbmdNb2RlbDogYXJndlsncGxhbm5pbmctbW9kZWwnXSxcbiAgcmVhc29uaW5nRWZmb3J0OiBhcmd2WydyZWFzb25pbmctZWZmb3J0J10gYXMgUmVhc29uaW5nRWZmb3J0LFxuICByZXBvbWl4RXh0cmFBcmdzOiBhcmd2WydyZXBvbWl4LWV4dHJhLWFyZ3MnXSxcbiAgdGVzdENvbW1hbmQ6IGFyZ3ZbJ3Rlc3QtY29tbWFuZCddLFxuICByZW1vdmVQYXR0ZXJuOiBhcmd2WydyZW1vdmUtcGF0dGVybiddLFxufSk7XG4iXSwibmFtZXMiOlsiYXJndiIsInlhcmdzIiwiaGlkZUJpbiIsInByb2Nlc3MiLCJjb25maWciLCJsb2FkQ29uZmlnRmlsZSIsIm9wdGlvbiIsImFsaWFzIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiZGVtYW5kT3B0aW9uIiwiZGVmYXVsdCIsImNob2ljZXMiLCJERUZBVUxUX0NPRElOR19UT09MIiwiREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTIiwiREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTIiwiREVGQVVMVF9DT0RFWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyIsIkRFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyIsIkRFRkFVTFRfTk9ERV9SVU5USU1FIiwidmVyc2lvbiIsInBhY2thZ2VKc29uRGlyIiwiZGlyIiwicGF0aCIsImRpcm5hbWUiLCJVUkwiLCJ1cmwiLCJwYXRobmFtZSIsImZzIiwiZXhpc3RzU3luYyIsImpvaW4iLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJnZXRWZXJzaW9uIiwiaGVscCIsImNoZGlyIiwiY29uc29sZSIsImluZm8iLCJjd2QiLCJub2RlUnVudGltZSIsIm5vcm1hbGl6ZU5vZGVSdW50aW1lIiwibWFpbiIsImFpZGVyRXh0cmFBcmdzIiwiY2xhdWRlQ29kZUV4dHJhQXJncyIsImNvZGV4RXh0cmFBcmdzIiwiZ2VtaW5pRXh0cmFBcmdzIiwiY29kaW5nVG9vbCIsImRyeVJ1biIsIm5vQnJhbmNoIiwidHdvU3RhZ2VQbGFubmluZyIsImlzc3VlTnVtYmVyIiwibWF4VGVzdEF0dGVtcHRzIiwicGxhbm5pbmdNb2RlbCIsInJlYXNvbmluZ0VmZm9ydCIsInJlcG9taXhFeHRyYUFyZ3MiLCJ0ZXN0Q29tbWFuZCIsInJlbW92ZVBhdHRlcm4iXSwibWFwcGluZ3MiOiJvbkJBcUJBLE1BQU1BLFFBQWFDLEVBQU1DLEVBQVFDLEVBQVFILE9BQ3RDSSxPQUFPQyxLQUVQQyxPQUFPLGVBQWdCLENBQ3RCQyxNQUFPLElBQ1BDLFlBQWEsaUNBQ2JDLEtBQU0sU0FDTkMsY0FBYyxJQUVmSixPQUFPLGlCQUFrQixDQUN4QkMsTUFBTyxJQUNQQyxZQUNFLCtQQUNGQyxLQUFNLFdBRVBILE9BQU8sc0JBQXVCLENBQzdCQyxNQUFPLElBQ1BDLFlBQ0Usc0pBQ0ZDLEtBQU0sVUFDTkUsU0FBUyxJQUVWTCxPQUFPLG1CQUFvQixDQUMxQkMsTUFBTyxJQUNQQyxZQUFhLGtHQUNiQyxLQUFNLFNBQ05HLFFBQVMsQ0FBQyxNQUFPLFNBQVUsVUFFNUJOLE9BQU8sY0FBZSxDQUNyQkMsTUFBTyxJQUNQQyxZQUFhLHdDQUNiQyxLQUFNLFNBQ05HLFFBQVMsQ0FBQyxRQUFTLGNBQWUsWUFBYSxjQUMvQ0QsUUFBU0UsSUFFVlAsT0FBTyxtQkFBb0IsQ0FDMUJDLE1BQU8sSUFDUEMsWUFDRSxxSEFDRkMsS0FBTSxTQUNORSxRQUFTRyxJQUVWUixPQUFPLHlCQUEwQixDQUNoQ0UsWUFDRSxvSUFDRkMsS0FBTSxTQUNORSxRQUFTSSxJQUVWVCxPQUFPLG1CQUFvQixDQUMxQkUsWUFBYSx3RUFDYkMsS0FBTSxTQUNORSxRQUFTSyxJQUVWVixPQUFPLG9CQUFxQixDQUMzQkUsWUFBYSwwRUFDYkMsS0FBTSxTQUNORSxRQUFTTSxJQUVWWCxPQUFPLHFCQUFzQixDQUM1QkMsTUFBTyxJQUNQQyxZQUFhLDJEQUNiQyxLQUFNLFNBQ05FLFFBQVNPLElBRVZaLE9BQU8sZUFBZ0IsQ0FDdEJDLE1BQU8sSUFDUEMsWUFBYSx1R0FDYkMsS0FBTSxXQUVQSCxPQUFPLG9CQUFxQixDQUMzQkUsWUFBYSxrREFDYkMsS0FBTSxTQUNORSxRQUFTUSxJQUVWYixPQUFPLFVBQVcsQ0FDakJDLE1BQU8sSUFDUEMsWUFBYSxnRUFDYkMsS0FBTSxVQUNORSxTQUFTLElBRVZMLE9BQU8saUJBQWtCLENBQ3hCRSxZQUFhLDBEQUNiQyxLQUFNLFdBRVBILE9BQU8sWUFBYSxDQUNuQkMsTUFBTyxJQUNQQyxZQUFhLHlFQUNiQyxLQUFNLFVBQ05FLFNBQVMsSUFFVkwsT0FBTyxlQUFnQixDQUN0QkUsWUFBYSwyQ0FDYkMsS0FBTSxTQUNORyxRQUFTLENBQUMsT0FBUSxNQUFPLE1BQU8sUUFDaENELFFBQVNTLElBR1ZkLE9BQU8sY0FBZSxDQUNyQkMsTUFBTyxJQUNQQyxZQUFhLHNDQUNiQyxLQUFNLFdBR1BZLFFBR0gsV0FDRSxJQUFJQyxjQUE2QkMsS0FBT0MsRUFBS0MsUUFBUSxJQUFJQyxnQkFBZ0JDLEtBQUtDLFVBQzlFLE1BQVFDLEVBQUdDLFdBQVdOLEVBQUtPLEtBQUtULEVBQWdCLGtCQUM5Q0EsRUFBaUJFLEVBQUtDLFFBQVFILEdBRWhDLE9BQU9VLEtBQUtDLE1BQU1KLEVBQUdLLGFBQWFWLEVBQUtPLEtBQUtULEVBQWdCLGdCQUFpQixTQUFTRCxPQUN4RixDQVRXYyxJQUNSQyxPQUFPcEMsS0FVTkEsRUFBSyxpQkFDUEcsRUFBUWtDLE1BQU1yQyxFQUFLLGdCQUNuQnNDLFFBQVFDLEtBQUssaUNBQWlDcEMsRUFBUXFDLFVBSXhELE1BQU1DLEVBQWlDQyxFQUFxQjFDLEVBQUssdUJBRTNEMkMsRUFBSyxDQUNUQyxlQUFnQjVDLEVBQUssb0JBQ3JCNkMsb0JBQXFCN0MsRUFBSywwQkFDMUI4QyxlQUFnQjlDLEVBQUssb0JBQ3JCK0MsZ0JBQWlCL0MsRUFBSyxxQkFDdEJnRCxXQUFZaEQsRUFBSyxlQUNqQmlELE9BQVFqRCxFQUFLLFdBQ2JrRCxTQUFVbEQsRUFBSyxhQUNmeUMsY0FDQVUsaUJBQWtCbkQsRUFBSyx1QkFDdkJvRCxZQUFhcEQsRUFBSyxnQkFDbEJxRCxnQkFBaUJyRCxFQUFLLHFCQUN0QnNELGNBQWV0RCxFQUFLLGtCQUNwQnVELGdCQUFpQnZELEVBQUssb0JBQ3RCd0QsaUJBQWtCeEQsRUFBSyxzQkFDdkJ5RCxZQUFhekQsRUFBSyxnQkFDbEIwRCxjQUFlMUQsRUFBSyJ9
|