// ==UserScript==
// @name Eldarya Enhancements
// @namespace https://gitlab.com/NatoBoram/eldarya-enhancements
// @license GPL-3.0-or-later
// @version 1.1.0
// @author Nato Boram
// @description Enhances the user experience of Eldarya.
// @icon https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/avatar.png
// @supportURL https://gitlab.com/NatoBoram/Eldarya-Face-Downloader/issues
//
// @match https://www.eldarya.com.br/*
// @match https://www.eldarya.de/*
// @match https://www.eldarya.es/*
// @match https://www.eldarya.hu/*
// @match https://www.eldarya.it/*
// @match https://www.eldarya.pl/*
// @match https://www.eldarya.ru/*
// @match https://www.eldarya.com/*
// @match https://www.eldarya.fr/*
//
// @grant none
// ==/UserScript==
(()=>{var e={329:(e,t)=>{!function(e){var t=/\S/,n=/\"/g,a=/\n/g,i=/\r/g,o=/\\/g,r=/\u2028/,s=/\u2029/;function c(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function l(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var a=1,i=e.length;a<i;a++)if(t.charAt(n+a)!=e.charAt(a))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,a){var i,o=n.length,r=0,s=null,u=null,d="",m=[],p=!1,f=0,g=0,h="{{",b="}}";function y(){d.length>0&&(m.push({tag:"_t",text:new String(d)}),d="")}function v(n,a){if(y(),n&&function(){for(var n=!0,a=g;a<m.length;a++)if(!(n=e.tags[m[a].tag]<e.tags._v||"_t"==m[a].tag&&null===m[a].text.match(t)))return!1;return n}())for(var i,o=g;o<m.length;o++)m[o].text&&((i=m[o+1])&&">"==i.tag&&(i.indent=m[o].text.toString()),m.splice(o,1));else a||m.push({tag:"\n"});p=!1,g=m.length}function w(e,t){var n="="+b,a=e.indexOf(n,t),i=c(e.substring(e.indexOf("=",t)+1,a)).split(" ");return h=i[0],b=i[i.length-1],a+n.length-1}for(a&&(a=a.split(" "),h=a[0],b=a[1]),f=0;f<o;f++)0==r?l(h,n,f)?(--f,y(),r=1):"\n"==n.charAt(f)?v(p):d+=n.charAt(f):1==r?(f+=h.length-1,"="==(s=(u=e.tags[n.charAt(f+1)])?n.charAt(f+1):"_v")?(f=w(n,f),r=0):(u&&f++,r=2),p=f):l(b,n,f)?(m.push({tag:s,n:c(d),otag:h,ctag:b,i:"/"==s?p-h.length:f+b.length}),d="",f+=b.length-1,r=0,"{"==s&&("}}"==b?f++:"}"===(i=m[m.length-1]).n.substr(i.n.length-1)&&(i.n=i.n.substring(0,i.n.length-1)))):d+=n.charAt(f);return v(p,!0),m};var u={_t:!0,"\n":!0,$:!0,"/":!0};function d(t,n,a,i){var o,r=[],s=null,c=null;for(o=a[a.length-1];t.length>0;){if(c=t.shift(),o&&"<"==o.tag&&!(c.tag in u))throw new Error("Illegal content in < super tag.");if(e.tags[c.tag]<=e.tags.$||m(c,i))a.push(c),c.nodes=d(t,c.tag,a,i);else{if("/"==c.tag){if(0===a.length)throw new Error("Closing tag without opener: /"+c.n);if(s=a.pop(),c.n!=s.n&&!p(c.n,s.n,i))throw new Error("Nesting error: "+s.n+" vs. "+c.n);return s.end=c.i,r}"\n"==c.tag&&(c.last=0==t.length||"\n"==t[0].tag)}r.push(c)}if(a.length>0)throw new Error("missing closing tag: "+a.pop().n);return r}function m(e,t){for(var n=0,a=t.length;n<a;n++)if(t[n].o==e.n)return e.tag="#",!0}function p(e,t,n){for(var a=0,i=n.length;a<i;a++)if(n[a].c==e&&n[a].o==t)return!0}function f(e){var t=[];for(var n in e.partials)t.push('"'+h(n)+'":{name:"'+h(e.partials[n].name)+'", '+f(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+h(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,n,a){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+f(t)+"}"};var g=0;function h(e){return e.replace(o,"\\\\").replace(n,'\\"').replace(a,"\\n").replace(i,"\\r").replace(r,"\\u2028").replace(s,"\\u2029")}function b(e){return~e.indexOf(".")?"d":"f"}function y(e,t){var n="<"+(t.prefix||"")+e.n+g++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+h(n)+'",c,p,"'+(e.indent||"")+'"));',n}function v(e,t){t.code+="t.b(t.t(t."+b(e.n)+'("'+h(e.n)+'",c,p,0)));'}function w(e){return"t.b("+e+");"}e.generate=function(t,n,a){g=0;var i={code:"",subs:{},partials:{}};return e.walk(t,i),a.asString?this.stringify(i,n,a):this.makeTemplate(i,n,a)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var a=this.makePartials(e);return a.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(a,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+b(t.n)+'("'+h(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+b(t.n)+'("'+h(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":y,"<":function(t,n){var a={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,a);var i=n.partials[y(t,n)];i.subs=a.subs,i.partials=a.partials},$:function(t,n){var a={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,a),n.subs[t.n]=a.code,n.inPartial||(n.code+='t.sub("'+h(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=w('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+b(e.n)+'("'+h(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=w('"'+h(e.text)+'"')},"{":v,"&":v},e.walk=function(t,n){for(var a,i=0,o=t.length;i<o;i++)(a=e.codegen[t[i].tag])&&a(t[i],n);return n},e.parse=function(e,t,n){return d(e,0,[],(n=n||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var a=e.cacheKey(t,n),i=this.cache[a];if(i){var o=i.partials;for(var r in o)delete o[r].instance;return i}return i=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[a]=i}}(t)},508:(e,t,n)=>{var a=n(329);a.Template=n(14).Template,a.template=a.Template,e.exports=a},14:(e,t)=>{!function(e){function t(e,t,n){var a;return t&&"object"==typeof t&&(void 0!==t[e]?a=t[e]:n&&t.get&&"function"==typeof t.get&&(a=t.get(e))),a}e.Template=function(e,t,n,a){e=e||{},this.r=e.code||this.r,this.c=n,this.options=a||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=c(e),s.test(e)?e.replace(n,"&").replace(a,"<").replace(i,">").replace(o,"'").replace(r,"""):e},t:c,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],a=t[n.name];if(n.instance&&n.base==a)return n.instance;if("string"==typeof a){if(!this.c)throw new Error("No compiler available.");a=this.c.compile(a,this.options)}if(!a)return null;if(this.partials[e].base=a,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);a=function(e,t,n,a,i,o){function r(){}function s(){}var c;r.prototype=e,s.prototype=e.subs;var l=new r;for(c in l.subs=new s,l.subsText={},l.buf="",a=a||{},l.stackSubs=a,l.subsText=o,t)a[c]||(a[c]=t[c]);for(c in a)l.subs[c]=a[c];for(c in i=i||{},l.stackPartials=i,n)i[c]||(i[c]=n[c]);for(c in i)l.partials[c]=i[c];return l}(a,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=a,a},rp:function(e,t,n,a){var i=this.ep(e,n);return i?i.ri(t,n,a):""},rs:function(e,t,n){var a=e[e.length-1];if(l(a))for(var i=0;i<a.length;i++)e.push(a[i]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,a,i,o,r){var s;return(!l(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,a,i,o,r)),s=!!e,!a&&s&&t&&t.push("object"==typeof e?e:t[t.length-1]),s)},d:function(e,n,a,i){var o,r=e.split("."),s=this.f(r[0],n,a,i),c=this.options.modelGet,u=null;if("."===e&&l(n[n.length-2]))s=n[n.length-1];else for(var d=1;d<r.length;d++)void 0!==(o=t(r[d],s,c))?(u=s,s=o):s="";return!(i&&!s)&&(i||"function"!=typeof s||(n.push(u),s=this.mv(s,n,a),n.pop()),s)},f:function(e,n,a,i){for(var o=!1,r=!1,s=this.options.modelGet,c=n.length-1;c>=0;c--)if(void 0!==(o=t(e,n[c],s))){r=!0;break}return r?(i||"function"!=typeof o||(o=this.mv(o,n,a)),o):!i&&""},ls:function(e,t,n,a,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(c(e.call(t,a)),t,n)),this.options.delimiters=o,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,a,i,o,r){var s,c=t[t.length-1],l=e.call(c);return"function"==typeof l?!!a||(s=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(l,c,n,s.substring(i,o),r)):l},mv:function(e,t,n){var a=t[t.length-1],i=e.call(a);return"function"==typeof i?this.ct(c(i.call(a)),a,n):i},sub:function(e,t,n,a){var i=this.subs[e];i&&(this.activeSub=e,i(t,n,this,a),this.activeSub=!1)}};var n=/&/g,a=/</g,i=/>/g,o=/\'/g,r=/\"/g,s=/[&<>\"\']/;function c(e){return String(null==e?"":e)}var l=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},454:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<div id="marketplace-itemDetail-info-autobuy" style="text-align: center; margin: 20px auto"><div class="nl-button">Add to wishlist</div></div>'),a.fl()},partials:{},subs:{}})},827:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<h1>Add to wishlist</h1><p>How many maanas do you wish to offer to acquire this item?</p>"),a.fl()},partials:{},subs:{}})},949:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<button id="auto-explore-button" class="nl-button '),a.s(a.f("active",e,t,1),e,t,0,61,67,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('" data-id="'),a.b(a.v(a.f("locationId",e,t,0))),a.b('" data-mapid="'),a.b(a.v(a.f("regionId",e,t,0))),a.b('">Auto explore</button>'),a.fl()},partials:{},subs:{}})},469:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="carousel-news carousel-ee" href="" style="background-image: url('),a.b(a.v(a.f("backgroundImage",e,t,0))),a.b(')"><div><h4>'),a.b(a.v(a.f("h4",e,t,0))),a.b("</h4><h5>"),a.b(a.v(a.f("h5",e,t,0))),a.b("</h5><p>"),a.b(a.v(a.f("p",e,t,0))),a.b("</p></div></a>"),a.fl()},partials:{},subs:{}})},731:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<h1>Change price</h1><p>How many maanas do you wish to offer to acquire this item?</p>"),a.fl()},partials:{},subs:{}})},900:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<button id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="nl-button favorites-action-ee">'),a.b(a.v(a.f("text",e,t,0))),a.b("</button>"),a.fl()},partials:{},subs:{}})},293:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="home-'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="home-content-tile home-content-small home-content-small-ee" href="'),a.b(a.v(a.f("href",e,t,0))),a.b('" style="background-image: url('),a.b(a.v(a.f("backgroundImage",e,t,0))),a.b(');"><h4>'),a.b(a.v(a.f("h4",e,t,0))),a.b("</h4></a>"),a.fl()},partials:{},subs:{}})},431:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li class="main-menu-'),a.b(a.v(a.f("class",e,t,0))),a.b(' main-menu-ee"><a href="'),a.b(a.v(a.f("href",e,t,0))),a.b('">'),a.b(a.v(a.f("text",e,t,0))),a.b("</a></li>"),a.fl()},partials:{},subs:{}})},444:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="profile-contact-action-ee"><span class="nl-button nl-button-sm"><div class="action-description">'),a.b(a.v(a.f("actionDescription",e,t,0))),a.b("</div></span></li>"),a.fl()},partials:{},subs:{}})},657:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<div class="account-misc-bloc account-ee-bloc bloc"><h2 class="section-title">Enhancements</h2><ul class="account-misc-actions"><li id="ee-debug-enabled" class="nl-button nl-button-sm '),a.s(a.f("debug",e,t,1),e,t,0,194,200,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('" title="Enables or disables logging.">Debug</li><li id="ee-minigames-enabled" class="nl-button nl-button-sm '),a.s(a.f("minigames",e,t,1),e,t,0,333,339,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Minigames</li><li id="ee-explorations-enabled" class="nl-button nl-button-sm '),a.s(a.f("explorations",e,t,1),e,t,0,449,455,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Explorations</li><li id="ee-market-enabled" class="nl-button nl-button-sm '),a.s(a.f("market",e,t,1),e,t,0,559,565,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Market</li></ul></div>'),a.fl()},partials:{},subs:{}})},333:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="wishlist-button" class="nl-button">Wishlist</a>'),a.fl()},partials:{},subs:{}})},952:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<style>table {\r"),a.b("\n"+n),a.b(" text-align: center;\r"),a.b("\n"+n),a.b(" width: 100%;\r"),a.b("\n"+n),a.b(" }\r"),a.b("\n"+n),a.b("\r"),a.b("\n"+n),a.b(" .action-picto {\r"),a.b("\n"+n),a.b(" height: 50px;\r"),a.b("\n"+n),a.b(" width: 50px;\r"),a.b("\n"+n),a.b(" cursor: pointer;\r"),a.b("\n"+n),a.b(" }\r"),a.b("\n"+n),a.b("\r"),a.b("\n"+n),a.b(" .action-picto:hover:not(.disabled),\r"),a.b("\n"+n),a.b(" .edit-price:hover {\r"),a.b("\n"+n),a.b(" animation: button-bounce 300ms linear forwards;\r"),a.b("\n"+n),a.b(" filter: brightness(1.05) contrast(1.1);\r"),a.b("\n"+n),a.b(" }\r"),a.b("\n"+n),a.b("\r"),a.b("\n"+n),a.b(" .edit-price {\r"),a.b("\n"+n),a.b(" cursor: pointer;\r"),a.b("\n"+n),a.b(" }\r"),a.b("\n"+n),a.b("\r"),a.b("\n"+n),a.b(" img.disabled {\r"),a.b("\n"+n),a.b(" filter: grayscale(1);\r"),a.b("\n"+n),a.b(" }\r"),a.b("\n"+n),a.b("\r"),a.b("\n"+n),a.b(" .item-icon {\r"),a.b("\n"+n),a.b(" width: 100px;\r"),a.b("\n"+n),a.b(" height: 100px;\r"),a.b("\n"+n),a.b(" }</style><table><thead><tr><th>Icon</th><th>Name</th><th>Price</th><th>Status</th><th>Actions</th></tr></thead><tbody> "),a.s(a.f("wishlist",e,t,1),e,t,0,605,1303,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b(' <tr class="marketplace-abstract" data-wearableitemid="'),n.b(n.v(n.f("wearableitemid",e,t,0))),n.b('"><td><img class="item-icon" src="'),n.b(n.v(n.f("icon",e,t,0))),n.b('" alt="'),n.b(n.v(n.f("name",e,t,0))),n.b('"></td><td><div class="abstract-name">'),n.b(n.v(n.f("name",e,t,0))),n.b('</div></td><td><div class="edit-price" title="Change price"><span class="price-item">'),n.b(n.v(n.f("price",e,t,0))),n.b('</span><span class="maana-icon" alt="maanas"></span></div></td><td><p class="error">'),n.b(n.v(n.f("error",e,t,0))),n.b('</p></td><td><img class="action-picto reset-item-status '),n.s(n.f("error",e,t,1),e,t,1,0,0,"")||n.b("disabled"),n.b('" src="/static/img/new-layout/wardrobe/reset-btn.png" title="Reset the error status" alt="Reset"> <img class="action-picto delete-wishlist-item" src="/static/img/new-layout/wardrobe/delete.png" title="Remove from the wishlist" alt="Delete"></td></tr> ')})),e.pop()),a.b(" </tbody></table>"),a.fl()},partials:{},subs:{}})}},t={};function n(a){var i=t[a];if(void 0!==i)return i.exports;var o=t[a]={exports:{}};return e[a](o,o.exports,n),o.exports}(()=>{"use strict";var e,t,a,i,o,r,s,c,l,u;!function(e){e[e.millisecond=1]="millisecond",e[e.second=1e3]="second",e[e.minute=6e4]="minute",e[e.hour=36e5]="hour",e[e.day=864e5]="day",e[e.week=6048e5]="week"}(e||(e={})),function(e){e.autoExploreLocations="autoExploreLocations",e.debug="debug",e.explorations="explorations",e.market="market",e.minigames="minigames",e.wishlist="wishlist"}(t||(t={}));class d{static localStorage=localStorage;constructor(){}static get autoExploreLocations(){return this.getItem(t.autoExploreLocations,[])}static set autoExploreLocations(e){this.setItem(t.autoExploreLocations,e)}static get debug(){return this.getItem(t.debug,!1)}static set debug(e){this.setItem(t.debug,e)}static get explorations(){return this.getItem(t.explorations,!1)}static set explorations(e){this.setItem(t.explorations,e)}static get market(){return this.getItem(t.market,!1)}static set market(e){this.setItem(t.market,e)}static get minigames(){return this.getItem(t.minigames,!1)}static set minigames(e){this.setItem(t.minigames,e)}static get settings(){return{autoExploreLocations:this.autoExploreLocations,debug:this.debug,explorations:this.explorations,market:this.market,minigames:this.minigames,wishlist:this.wishlist}}static set settings(e){this.autoExploreLocations=e.autoExploreLocations,this.explorations=e.explorations,this.market=e.market,this.minigames=e.minigames}static get wishlist(){return this.getItem(t.wishlist,[])}static set wishlist(e){this.setItem(t.wishlist,e)}static getItem(e,t){return JSON.parse(this.localStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.localStorage.setItem(e,JSON.stringify(t))}}class m{static console=console;constructor(){}static get debugging(){return d.debug}static debug(e,...t){this.debugging&&this.console.debug(e,...t)}static error(e,...t){this.debugging&&this.console.error(e,...t)}static info(e,...t){this.debugging&&this.console.info(e,...t)}static log(e,...t){this.debugging&&this.console.log(e,...t)}static warn(e,...t){this.debugging&&this.console.warn(e,...t)}}!function(e){e.action="action",e.explorationsDone="explorationsDone",e.meta="meta",e.minigamesDone="minigamesDone",e.selectedLocation="selectedLocation",e.takeover="takeover",e.wishlist="wishlist"}(a||(a={}));class p{static sessionStorage=sessionStorage;constructor(){}static get action(){return this.getItem(a.action,null)}static set action(e){this.setItem(a.action,e)}static get explorationsDone(){return this.getItem(a.explorationsDone,!1)}static set explorationsDone(e){this.setItem(a.explorationsDone,e)}static get meta(){return this.getItem(a.meta,null)}static set meta(e){this.setItem(a.meta,e)}static get minigamesDone(){return this.getItem(a.minigamesDone,!1)}static set minigamesDone(e){this.setItem(a.minigamesDone,e)}static get selectedLocation(){return this.getItem(a.selectedLocation,null)}static set selectedLocation(e){this.setItem(a.selectedLocation,e)}static get takeover(){return this.getItem(a.takeover,!1)}static set takeover(e){this.setItem(a.takeover,e)}static get wishlist(){return this.getItem(a.wishlist,[])}static set wishlist(e){this.setItem(a.wishlist,e)}static getItem(e,t){return JSON.parse(this.sessionStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.sessionStorage.setItem(e,JSON.stringify(t))}}function f(e){const t=e.querySelector(".abstract-name")?.innerText,n=e.querySelector(".abstract-icon img")?.src,a=e.querySelector(".price-item[data-bids]")?.dataset,i=e.querySelector(".price-item:not([data-bids])")?.dataset;return n&&t?{...e.dataset,icon:n,name:t,buyNowPrice:i,currentPrice:a}:null}async function g(e){return new Promise((t=>{const n=setInterval((()=>{const a=document.querySelector(e);if(!a)return;clearInterval(n);const i=document.createEvent("MouseEvent");i.initEvent("mouseover"),a.dispatchEvent(i),setTimeout((()=>{a.click(),t(a)}),800)}),800)}))}!function(e){e.All="",e[e.Underwear=1]="Underwear",e[e.Skins=2]="Skins",e[e.Tattoos=20]="Tattoos",e[e.Mouths=21]="Mouths",e[e.Eyes=3]="Eyes",e[e.Hair=4]="Hair",e[e.Socks=5]="Socks",e[e.Shoes=6]="Shoes",e[e.Pants=7]="Pants",e[e.HandAccessories=8]="HandAccessories",e[e.Tops=9]="Tops",e[e.Coats=10]="Coats",e[e.Gloves=11]="Gloves",e[e.Necklaces=12]="Necklaces",e[e.Dresses=13]="Dresses",e[e.Hats=14]="Hats",e[e.FaceAccessories=15]="FaceAccessories",e[e.Funds=16]="Funds",e[e.Belts=18]="Belts",e[e.Atmospheres=19]="Atmospheres"}(i||(i={})),function(e){e.all="",e.food="food",e.alchemy="alchemy",e.utility="utility",e.tame="tame"}(o||(o={})),function(e){e.all="",e[e.food=1]="food",e.alchemy="Consumable",e[e.utility=3]="utility",e[e.tame=4]="tame"}(r||(r={})),function(e){e.any="",e[e.light=1]="light",e[e.obsidian=2]="obsidian",e[e.absynthe=3]="absynthe",e[e.shadow=4]="shadow"}(s||(s={})),function(e){e.all="",e.common="common",e.rare="rare",e.Epic="epic",e.legendary="legendary",e.event="event"}(c||(c={})),function(e){e.All="",e.Bag="Bag",e.Consumable="Consumable",e.EggItem="EggItem",e.PlayerWearableItem="PlayerWearableItem",e.QuestItem="QuestItem"}(l||(l={})),function(e){e.daily="daily",e.minigames="minigames",e.explorations="explorations",e.auctions="auctions",e.buy="buy",e.wait="wait"}(u||(u={}));class h{}const b=new class extends h{key=u.buy;get currentMaana(){return Number(document.querySelector("#currency-maana")?.dataset.maana)}condition(){return d.market&&Boolean(d.wishlist.length)}async perform(){if(!location.pathname.startsWith("/marketplace"))return await g(".main-menu-marketplace a"),!0;for(const e of d.wishlist){if(e.error){m.warn(`Skipped "${e.name}"`,e);continue}m.info(`Searching for "${e.name}"`,e);let t=8;e:for(let n=1;8===t;n++){const a=await this.search(e,n);t=a.length,m.log(`Found ${t} results`,a);const i=a.filter((t=>t.icon===e.icon&&t.buyNowPrice&&Number(t.buyNowPrice.price)<=e.price&&Number(t.buyNowPrice.price)<=this.currentMaana));for(const e of i){if(!await this.buy(e))break e;m.info(`Bought "${e.name}" for ${Number(e.buyNowPrice?.price)} maanas.`,e),$.flavrNotif(`Bought <strong>${e.name}</strong> for <strong class="price-item">${Number(e.buyNowPrice?.price)}</strong> <span class="maana-icon" alt="maanas"></span>.`)}}}return!1}async buy(e){const t=await async function(e){return new Promise((t=>{$.post("/marketplace/buy",{id:e},(e=>{p.meta=e.meta,t(e),"success"===e.result||$.flavrNotif(e.data)}),"json")}))}(Number(e.itemid));return"success"!==t.result&&this.setError(e.wearableitemid,t.data),"success"===t.result}async search(e,t=1){const n=document.querySelector("#filter-itemName");n&&(n.value=e.name);const a=document.querySelector(".marketplace-search-items");return a?(a.innerHTML=await async function(e){return e={type:l.All,bodyLocation:i.All,category:r.all,rarity:c.all,price:"",guard:s.any,page:1,name:"",...e},new Promise((t=>{$.get("/marketplace/ajax_search",{...e,from:8*(e.page-1),to:8},t)}))}({name:e.name,page:t}),Array.from(a.querySelectorAll(".marketplace-search-item")).map(f).filter((e=>null!==e))):[]}setError(e,t){const n=d.wishlist,a=n.findIndex((t=>t.wearableitemid===e)),i=n[a];i&&(i.error=t,d.wishlist=[...n.slice(void 0,a),i,...n.slice(a+1,void 0)])}},y=new class{key=u.daily;condition(){const e=document.getElementById("daily-gift-container");return!!e&&"none"!==getComputedStyle(e).display}async perform(){const e=document.getElementById("daily-gift-container");return!(!e||"none"===getComputedStyle(e).display||(e.click(),await g(".first-connexion .flavr-button.default"),P(),1))}};async function v(e){return new Promise((t=>{$.post("/pet/changeRegion",{newRegionId:e},(e=>{p.meta=e.meta,t(e),"success"===e.result?(currentRegion=e.data.currentRegion,pendingTreasureHuntLocation=void 0===e.data.pendingTreasureHuntLocation?null:e.data.pendingTreasureHuntLocation,timeLeftExploration=void 0===e.data.timeLeftExploration?null:e.data.timeLeftExploration):$.flavrNotif(e.data)}))}))}var w,x;!function(e){e.error="error",e.success="success"}(w||(w={})),function(e){e[e.idle=0]="idle",e[e.result=1]="result",e[e.capture=2]="capture",e[e.pending=3]="pending"}(x||(x={}));const k=new class extends h{key=u.explorations;get globals(){return{currentRegion,pendingTreasureHuntLocation,timeLeftExploration}}condition(){return d.explorations&&!p.explorationsDone&&!!d.autoExploreLocations.length}async perform(){if("/pet"!==location.pathname)return await g(".main-menu-pet a"),!0;switch(this.getExplorationStatus()){case x.idle:return(await this.startExploration()).selected||(p.explorationsDone=!0),!1;case x.pending:return await this.waitExploration()&&this.perform();case x.result:return await this.endExploration(),this.perform();case x.capture:return await this.endCapture(),this.perform();default:return!1}}async clickExplore(){return g("#explore-button")}async clickLocation(e){return g(`.map-location[data-id="${e.location.id}"]`)}clickRegion(e){const t=document.querySelector(`.minimap[data-mapid="${e.region.id}"]`);return t?(t.click(),t):(d.autoExploreLocations=d.autoExploreLocations.filter((t=>t.region.id!==e.region.toString())),p.selectedLocation=null,location.reload(),null)}async clickSeason(){return g("#crystal-images-container")}async endCapture(){try{new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play()}catch(e){}await g("#open-capture-interface"),await g("#capture-button"),await g("#close-result")}async endExploration(){return g("#close-result")}getCurrentSeason(){return Array.from(document.querySelector("body")?.classList??[]).find((e=>e.startsWith("season-")))?.replace("season-","")??null}getExplorationStatus(){return document.querySelector("#open-capture-interface")||document.querySelector("#capture-interface-outer.active")?x.capture:document.querySelector("#pending-map-location-data-outer.active")||document.querySelector("#map-container.pending")?x.pending:document.querySelector("#treasure-hunt-result-overlay.active")?x.result:x.idle}getLowestEnergyLocation(){return d.autoExploreLocations.reduce(((e,t)=>Number(t.location.energyRequired)<Number(e.location.energyRequired)?t:e))}getSelectedLocation(){let e=p.selectedLocation;return e||(e=this.selectLocation(),p.selectedLocation=e),e}selectLocation(){const e=d.autoExploreLocations.filter((e=>Number(e.location.energyRequired)<=petEnergy)),t=this.getLowestEnergyLocation(),n=e.filter((e=>petEnergy-Number(e.location.energyRequired)>=Number(t.location.energyRequired)));if(n.length)return n[Math.floor(Math.random()*n.length)]??null;const a=e.filter((e=>Number(e.location.energyRequired)===petEnergy));return a.length?a[Math.floor(Math.random()*a.length)]??null:e[Math.floor(Math.random()*e.length)]??null}async startExploration(){const e=this.getSelectedLocation();return e?(m.info("Exploring",e),e.region.season&&this.getCurrentSeason()!==e.region.season?(await this.clickSeason(),{exploring:!1,selected:e}):(this.clickRegion(e),await this.clickLocation(e),await this.clickExplore(),p.selectedLocation=null,{exploring:!0,selected:e})):{exploring:!1,selected:e}}async waitExploration(t){document.querySelector(`.minimap[data-mapid="${t?.region.id??currentRegion.id}"]`)?.click();let n=3*e.second;if(t)n+=t.location.timeToExplore*e.minute;else if(timeLeftExploration&&timeLeftExploration>0)n+=timeLeftExploration*e.second;else if(!pendingTreasureHuntLocation&&document.querySelector("#map-container.pending")){const t=await async function(){return new Promise((e=>{$.post("/pet/explorationResults",(t=>{p.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}();return t.result===w.success&&(!!t.data.results.find((e=>"capture"===e.type))&&(await async function(){return new Promise((e=>{$.post("/pet/capture/end",(t=>{p.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}(),m.error("Reloading because the exploration is in another region.",this.globals),await new Promise((t=>setTimeout(t,e.minute))),location.reload(),!0))}return!(n>10*e.minute||(m.log(`Waiting for the exploration to end in ${Math.ceil(n/e.second)} seconds...`,this.globals),await new Promise((e=>setTimeout(e,n))),await v(Number(t?.region.id??currentRegion.id)),this.getExplorationStatus()===x.pending&&timeLeftExploration&&timeLeftExploration<0&&(m.info("Reloading because the timer is desynchronised.",this.globals),await new Promise((t=>setTimeout(t,e.second))),location.reload()),0))}},S={name:"Flappy",scoreMin:180,scoreMax:200,delayMin:6e4,delayMax:7e4,buttonSelector:'.minigame-start [href="/minigames/bubbltemple"] .nl-button'},E={name:"Hatchlings",scoreMin:18,scoreMax:20,delayMin:3e4,delayMax:3e4,buttonSelector:'.minigame-start [href="/minigames/cocooninpick"] .nl-button'},L={name:"Peggle",scoreMin:9,scoreMax:10,delayMin:1e4,delayMax:2e4,buttonSelector:'.minigame-start [href="/minigames/gembomb"] .nl-button'};async function I(e){await new Promise((e=>{const t=setInterval((()=>{const n=document.querySelectorAll(".minigames-rules .flavr-button");if(n.length){clearInterval(t);for(const e of n)e.classList.add("disabled");e(!0)}}),250)}));const t=await async function(e){return new Promise(((t,n)=>{"undefined"!=typeof Recaptcha?Recaptcha.execute(`minigameStart${e.name}`,(a=>{q(e,a).then(t).catch(n)})):q(e).then(t).catch(n)}))}(e);$.flavrNotif(`Playing <strong>${e.name}</strong>...`);const n=t.data,a=T(e.scoreMin,e.scoreMax),i=function(e,t){e=e.toString(),t=t.toString();let n="";for(let a=0;a<e.length;++a){let i=e[a];for(let e=0;e<t.length;++e)i=String.fromCharCode(i.charCodeAt(0)^t.charCodeAt(e));n+=i}return encodeURIComponent(n)}(n,a.toString());await new Promise((t=>setTimeout(t,T(e.delayMin,e.delayMax)))),await A(e,n,a),await new Promise((e=>setTimeout(e,T(1e3,3e3)))),await async function(e,t,n){return new Promise((a=>{"undefined"!=typeof Recaptcha?Recaptcha.execute("minigameSave"+n,(i=>{N(e,t,n,i).then(a)})):N(e,t,n).then(a)}))}(i,a,e.name.toLowerCase()),await new Promise((e=>setTimeout(e,T(1e3,3e3))))}function T(e,t){return Math.floor(Math.random()*(t-e+1)+e)}async function q(e,t){return new Promise(((n,a)=>{$.ajax({url:"/minigames/ajax_startGame",type:"post",dataType:"json",data:t?{game:e.name.toLowerCase(),recaptchaToken:t}:{game:e.name.toLowerCase()},success:e=>{n(e)},error:()=>{a()}})}))}async function A(e,t,n){return new Promise((a=>{$.post("/minigames/ajax_getPrizes",{game:e.name.toLowerCase(),score:n},(t=>{a(t),"success"===t.result?$.flavrNotif(`Played <strong>${e.name}</strong> for <strong class="price-item">${t.data.maana}</strong> <span class="maana-icon" alt="maanas"></span>.`):$.flavrNotif(t.data)}),"json").fail((()=>setTimeout((()=>{a(A(e,t,n))}),T(1e3,3e3))))}))}async function N(e,t,n,a){return new Promise((i=>{const o=decodeURIComponent(e);$.ajax({type:"post",url:"/minigames/ajax_saveScore",data:a?{token:o,score:t,game:n,recaptchaToken:a}:{token:o,score:t,game:n},success:()=>{i()},error:()=>setTimeout((()=>{i(N(e,t,n))}),T(1e3,3e3))})}))}function M(){p.takeover&&B()}function P(){p.action=null,p.explorationsDone=!1,p.minigamesDone=!1,p.selectedLocation=null,p.wishlist=[]}async function B(){if(!p.takeover)return;y.condition()&&await y.perform();const e=C.find((e=>e.key===p.action));return e?(m.info("Action:",e.key),e.condition()&&await e.perform()?void 0:(_(),void B())):(_(),void B())}const C=[new class{key=u.minigames;condition(){return d.minigames&&!p.minigamesDone}async perform(){switch(location.pathname){case"/minigames":{const e=this.openMinigame(L)||this.openMinigame(S)||this.openMinigame(E);return e||(p.minigamesDone=!0,document.querySelector('.minigames-rules [rel="btn-cancel"]')?.click()),e}case"/minigames/gembomb":await async function(){return I(L)}();break;case"/minigames/bubbltemple":await async function(){return I(S)}();break;case"/minigames/cocooninpick":await async function(){return I(E)}();break;default:return await g(".main-menu-minigames a"),!0}return await g(".main-menu-minigames a"),!0}openMinigame(e){const t=document.querySelector(e.buttonSelector);return!!t&&(t.click(),!0)}},k,b,new class extends h{key=u.wait;condition(){return!0}async perform(){return m.log("Waiting for 10 minutes..."),new Promise((e=>setTimeout((()=>{e(!1)}),6e5)))}}];function _(){const e=C.findIndex((e=>e.key===p.action))+1;return p.action=C[e>=C.length?0:e].key}function D(e,t="outfit"){const n=Sacha.Avatar.avatars[e];if(!n)return;const a=function(e){return e.children.map((e=>{const t=e.getItem();return{id:t._id,group:t._group,name:t._name,image:t._image,type:t._type,categoryId:t._categoryId,hiddenCategories:Object.values(t._hiddenCategories),animationData:t._animationData,locked:t._locked}}))}(n),i="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(a,null,"\t")),o=document.createElement("a");o.setAttribute("href",i),o.setAttribute("download",`${t}.json`),o.click()}function R(){D("#appearance-preview")}function j(){const e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept","application/json"),e.click(),e.addEventListener("input",(e=>{if(!e.target)return;const t=e.target.files;if(!t)return;const n=t[0];n&&n.text().then((async e=>{if(!e)return;const t=JSON.parse(e),n=Sacha.Avatar.avatars["#appearance-preview"];if(!n)return;$.flavrNotif("Importing outfit. Please wait...");const a=new Set;for(const e of t)a.add(e.type);await Promise.all(Array.from(a.values()).map((async e=>async function(e){return new Promise((t=>{const n=$("#appearance-items-category-"+e);n.hasClass("active")?t():n.length<=0?$.post("/player/openCategory/"+e,(e=>{$(e).hide().appendTo("#appearance-items")})).always((()=>{t()})):t()}))}(e))));const i=new Set;for(const e of t)document.querySelector(`[data-group="${e.group}"]`)&&i.add(e.group);await Promise.all(Array.from(i.values()).map((async e=>async function(e){return new Promise((t=>{const n=$("#appearance-items-group-"+e.toString());n.hasClass("active")?t():n.length<=0?$.get("/player/openGroup/"+e.toString(),(e=>{$(e).hide().appendTo("#appearance-items")})).always((()=>{t()})):t()}))}(e))));const o=[];for(const e of t){const t=availableItems[e.id];t&&o.push(t)}!function(){const e=Sacha.Avatar.avatars["#appearance-preview"];if(e)for(let t=e.children.length-1;t>=0;t--){const n=e.children[t];if(!n)continue;const a=n.getItem();Sacha.Avatar.removeItemFromAllAvatars(a)&&$(`#appearance-item-${a._id}`).removeClass("selected")}}(),n.addItems(o),initializeSelectedItems(),initializeHiddenCategories(),$.flavrNotif("Imported outfit!")}))}))}function H(e,t){const n=e.toDataURL("image/png"),a=document.createElement("a");a.setAttribute("href",n),a.setAttribute("download",`${t}.png`),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}function O(){const e=document.querySelector("#avatar-menu-container canvas");e?H(e,"face"):console.warn("Couldn't find the guardian's face.")}function F(){const e=document.querySelector("#home-avatar-player canvas");e?H(e,J()??"guardian"):console.warn("Couldn't find the guardian.")}function G(){const e=document.querySelector("#appearance-preview canvas");e?H(e,J()??"guardian"):console.warn("Couldn't find the guardian.")}function J(){return document.querySelector("#avatar-menu-container-outer>p")?.textContent??null}let W;function U(){W?.disconnect(),W=null;const e=document.getElementById("appearance-items");e&&(W=new MutationObserver(U),W.observe(e,{childList:!0}),function(){const e=document.getElementById("favorites-actions");if(!e||document.querySelector(".favorites-action-ee"))return;const t=n(900),a={id:"import-outfit",text:"Import"},i={id:"export-outfit",text:"Export"},o={id:"download-outfit",text:"Download"};e.insertAdjacentHTML("beforeend",t.render(a)+t.render(i)+t.render(o)),document.getElementById(a.id)?.addEventListener("click",j),document.getElementById(i.id)?.addEventListener("click",R),document.getElementById(o.id)?.addEventListener("click",G)}())}const z={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",h4:"Beemoov Annoyances",href:"https://gitlab.com/NatoBoram/Beemoov-Annoyances",id:"carousel-beemoov-annoyances",p:"Block some of Eldarya's annoyances."},K={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",id:"carousel-download-face",h4:"Download your face!",p:"Click here to download your guardian's face."},Q={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",id:"carousel-download-guardian",h4:"Download your guardian!",p:"Click here to download your guardian."},V={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",h4:"Eldarya Enhancements",href:"https://gitlab.com/NatoBoram/eldarya-enhancements",id:"carousel-eldarya-enhancements",p:"Enhances the user experience of Eldarya."},X={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",id:"carousel-takeover",h4:"Takeover",p:"Give up this tab to perform automated actions."};function Y(e){const t=e.querySelector("h4");t&&(t.innerText=(p.takeover?"Disable":"Enable")+" Takeover")}let Z,ee;function te(){for(const e of document.querySelectorAll(".marketplace-abstract"))e.addEventListener("click",(()=>{new MutationObserver(((t,n)=>{const a=f(e);a&&ne(a,n)})).observe(document.getElementById("marketplace-zoom"),{childList:!0})}))}function ne(e,t){const a=document.querySelector("#marketplace-itemDetail");if(!a)return;t?.disconnect(),document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();const i=n(454);a.insertAdjacentHTML("beforeend",i.render({})),a.querySelector("#marketplace-itemDetail-info-autobuy")?.addEventListener("click",(()=>{!function(e){const t=n(827);$.flavr({content:t.render({}),buttons:{close:{style:"close"},save:{action:()=>{const t=Number(document.querySelector(".flavr-prompt")?.value.trim());if(!t||t<=0)return $.flavrNotif("This is not a valid price."),!1;const n=d.wishlist.filter((t=>t.icon!==e.icon));return n.push({...e,price:t}),d.wishlist=n,!0}}},dialog:"prompt",prompt:{value:""},onBuild:e=>{e.addClass("new-layout-popup")}})}(e)}))}function ae(){if(ee?.disconnect(),ee=null,"/pet"!==location.pathname)return;const e=document.querySelector(".page-main-container");e&&(ee=new MutationObserver(ae),ee.observe(e,{attributes:!0}),function(){const e=d.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]")){const n=Number(t.getAttribute("data-id"));n&&(se(e,t),t.addEventListener("click",(()=>{new MutationObserver(((e,t)=>{ie(n,t)})).observe(document.getElementById("map-location-preview"),{attributes:!0})})))}}())}function ie(e,t){const a=document.querySelector("#buttons-container");if(!a)return;t?.disconnect();const i={locationId:e,active:d.autoExploreLocations.some((t=>t.location.id===e.toString())),regionId:Number(document.querySelector(".minimap.current[data-mapid]")?.getAttribute("data-mapid"))};a.querySelector("#auto-explore-button")?.remove();const o=n(949);a.insertAdjacentHTML("beforeend",o.render(i)),a.querySelector("#auto-explore-button")?.addEventListener("click",(()=>{(async function(e){if(e.active){const t=d.autoExploreLocations.filter((t=>t.location.id!==e.locationId.toString()));return d.autoExploreLocations=t,void ie(e.locationId)}const t=await oe(e.regionId,e.locationId);if(!t)return;const n=d.autoExploreLocations;n.push(t),d.autoExploreLocations=n,ie(e.locationId)})(i).then(re)})),async function(e){const t=await oe(e.regionId,e.locationId);t&&petEnergy<Number(t.location.energyRequired)&&document.getElementById("explore-button")?.classList.add("disabled")}(i)}async function oe(e,t){const n=await async function(e){if(e.toString()===currentRegion.id)return currentRegion;const t=await v(e);return t.result===w.success?t.data.currentRegion:null}(e);if(!n)return null;const a=n.locations.find((e=>e.id===t.toString()));return a?{location:a,region:n}:null}function re(){const e=d.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]"))se(e,t)}function se(e,t){const n=t.getAttribute("data-id");n&&(t.style.backgroundImage=e.some((e=>e.location.id===n))?"url(/static/img/new-layout/pet/icons/picto_map_explo.png)":"url(/static/img/new-layout/pet/icons/picto_map.png)")}function ce(){const e=document.querySelector("#main-section .section-title"),t=Object.keys(Sacha.Avatar.avatars).filter((e=>e.startsWith("#playerProfileAvatar")));for(const n of t)D(n,e?.textContent?.trim())}function le(){const e=document.querySelector("#account-right div");if(!e||e.querySelector(".account-ee-bloc"))return;const t=n(657);e.insertAdjacentHTML("beforeend",t.render(d.settings)),document.getElementById("ee-debug-enabled")?.addEventListener("click",(()=>{d.debug=!d.debug,ue()})),document.getElementById("ee-minigames-enabled")?.addEventListener("click",(()=>{d.minigames=!d.minigames,ue()})),document.getElementById("ee-explorations-enabled")?.addEventListener("click",(()=>{d.explorations=!d.explorations,ue()})),document.getElementById("ee-market-enabled")?.addEventListener("click",(()=>{d.market=!d.market,ue()}))}function ue(){document.querySelector(".account-ee-bloc")?.remove(),le()}function de(){const e=document.getElementById("marketplace-menu");if(!e)return;if(!e.querySelector("#wishlist-button"))for(const t of e.querySelectorAll("a"))t.addEventListener("click",(()=>{pageLoad(t.href,void 0,void 0,void 0,!0)}));e.querySelector("#wishlist-button")?.remove();const t=n(333);e.insertAdjacentHTML("beforeend",t.render({}));const a=e.querySelector("#wishlist-button");a?.addEventListener("click",(()=>{me(a)}))}function me(e){const t=document.querySelector(".marketplace-assistance");t&&(t.textContent="On this page, you can organize your wishlist and check the status of your wished items."),document.querySelector("#marketplace-menu .active")?.classList.remove("active"),e.classList.add("active");const a=document.getElementById("marketplace-filters");a&&(a.innerHTML="");const i=n(952),o=document.querySelector(".marketplace-container")??document.getElementById("marketplace-active-auctions")??document.getElementById("marketplace-itemsForSale");if(!o)return;const r={wishlist:d.wishlist};o.innerHTML=i.render(r);for(const t of o.querySelectorAll("tr")){const n=t.dataset.wearableitemid;if(!n)continue;const a=t.querySelector(".reset-item-status");a&&a.addEventListener("click",(()=>{pe(n),me(e)}));const i=t.querySelector(".delete-wishlist-item");i&&i.addEventListener("click",(()=>{fe(n),me(e)}));const o=t.querySelector(".edit-price");o&&o.addEventListener("click",(()=>{ge(n).then((()=>{me(e)}))}))}}function pe(e){const t=d.wishlist,n=t.findIndex((t=>t.wearableitemid===e)),a=t[n];a&&(delete a.error,d.wishlist=[...t.slice(void 0,n),a,...t.slice(n+1,void 0)])}function fe(e){d.wishlist=d.wishlist.filter((t=>t.wearableitemid!==e))}async function ge(e){const t=n(731),a=d.wishlist,i=a.findIndex((t=>t.wearableitemid===e)),o=a[i];if(o)return new Promise((e=>{$.flavr({content:t.render({}),dialog:"prompt",prompt:{value:o.price.toString()},buttons:{close:{style:"close",action:()=>(e(),!0)},save:{action:()=>{const t=Number(document.querySelector(".flavr-prompt")?.value.trim());return!t||t<=0?($.flavrNotif("This is not a valid price."),!1):(o.price=t,d.wishlist=[...a.slice(void 0,i),o,...a.slice(i+1,void 0)],e(),!0)}}},onBuild:e=>{e.addClass("new-layout-popup")}})}))}function he(){!function(){const e=document.getElementById("menu-inner-right");if(!e||e.querySelector(".main-menu-ee"))return;e.querySelector(".main-menu-bank")?.remove();const t=n(431);e.insertAdjacentHTML("beforeend",t.render({class:"forum",href:"/forum",text:"Forum"}))}(),function(){const e=document.querySelector("#carousel-inner");if(!e||document.querySelector(".carousel-ee"))return;const t=n(469),a=[V,...d.minigames||d.explorations||d.market?[X]:[],Q,K,z];e.insertAdjacentHTML("beforeend",a.map((e=>t.render(e))).join("\n"));for(const t of a){if(!t.href)continue;const n=e.querySelector(`#${t.id}`);n&&n.addEventListener("click",(()=>{n.classList.contains("active")&&open(t.href,"_blank")}))}document.getElementById(K.id)?.addEventListener("click",O),document.getElementById(Q.id)?.addEventListener("click",F);const i=document.getElementById(X.id);i?.addEventListener("click",(()=>{P(),p.takeover=!p.takeover,p.takeover?$.flavrNotif("Takeover mode enabled. Please do not interact with this tab."):$.flavrNotif("Takeover mode disabled."),B(),Y(i)})),i&&Y(i)}(),function(){const e=document.getElementById("home-content-smalls");if(!e||e.querySelector(".home-content-small-ee"))return;document.getElementById("home-bank")?.remove();const t=n(293);e.insertAdjacentHTML("beforeend",t.render({backgroundImage:"/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",h4:"Forum",href:"/forum",id:"forum"}))}(),U(),function(){const e=document.getElementById("profile-contact-actions");if(!e||document.querySelector(".profile-contact-action-ee"))return;const t=n(444),a={id:"profile-contact-action-export",actionDescription:"Export outfit"};e.insertAdjacentHTML("beforeend",t.render(a)),document.getElementById(a.id)?.addEventListener("click",ce)}(),le(),ae(),function(){if(Z?.disconnect(),Z=null,"/marketplace"!==location.pathname)return;const e=document.querySelector(".marketplace-search-items");e&&(Z=new MutationObserver(te),Z.observe(e,{childList:!0}),te())}(),de(),setTimeout((()=>{document.querySelector(".music-hidden-voice")?.click()}),e.second)}window.addEventListener("load",(()=>{document.querySelector(".music-hidden-voice")?.click()})),new MutationObserver((function(){he(),M()})).observe(document.getElementById("container"),{childList:!0}),he(),console.log("Eldarya Enhancements loaded."),M()})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2NvbXBpbGVyLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvaG9nYW4uanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmF2b3JpdGVzX2FjdGlvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3Byb2ZpbGVfY29udGFjdF9hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X3NldHRpbmdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY29uc29sZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsaWNrLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYnV5X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2J1eS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2FqYXhfc2VhcmNoLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvZGFpbHlfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2hhbmdlX3JlZ2lvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcGkvcmVzdWx0LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvZXhwbG9yYXRpb25fc3RhdHVzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9leHBsb3JhdGlvbl9yZXN1bHRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2FwdHVyZV9lbmQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2ZsYXBweS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvaGF0Y2hsaW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvcGVnZ2xlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9lbWlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9icmFpbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL21pbmlnYW1lX2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL3dhaXRfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL291dGZpdC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2Zhdm9yaXRlc19hY3Rpb25zLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Rvd25sb2FkLWNhbnZhcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9hcHBlYXJhbmNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX3Rha2VvdmVyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2Nhcm91c2VsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21hcmtldC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcHJvZmlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS93aXNobGlzdC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21lbnUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvaG9tZV9jb250ZW50LnRzIl0sIm5hbWVzIjpbIkhvZ2FuIiwicklzV2hpdGVzcGFjZSIsInJRdW90Iiwick5ld2xpbmUiLCJyQ3IiLCJyU2xhc2giLCJyTGluZVNlcCIsInJQYXJhZ3JhcGhTZXAiLCJ0cmltIiwicyIsInJlcGxhY2UiLCJ0YWdDaGFuZ2UiLCJ0YWciLCJ0ZXh0IiwiaW5kZXgiLCJjaGFyQXQiLCJpIiwibCIsImxlbmd0aCIsInRhZ3MiLCJzY2FuIiwiZGVsaW1pdGVycyIsInRva2VuIiwibGVuIiwic3RhdGUiLCJ0YWdUeXBlIiwiYnVmIiwidG9rZW5zIiwic2VlblRhZyIsImxpbmVTdGFydCIsIm90YWciLCJjdGFnIiwiYWRkQnVmIiwicHVzaCIsIlN0cmluZyIsImZpbHRlckxpbmUiLCJoYXZlU2VlblRhZyIsIm5vTmV3TGluZSIsImlzQWxsV2hpdGVzcGFjZSIsImoiLCJtYXRjaCIsImxpbmVJc1doaXRlc3BhY2UiLCJuZXh0IiwiaW5kZW50IiwidG9TdHJpbmciLCJzcGxpY2UiLCJjaGFuZ2VEZWxpbWl0ZXJzIiwiY2xvc2UiLCJjbG9zZUluZGV4IiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInNwbGl0IiwibiIsInN1YnN0ciIsImFsbG93ZWRJblN1cGVyIiwiYnVpbGRUcmVlIiwia2luZCIsInN0YWNrIiwiY3VzdG9tVGFncyIsInRhaWwiLCJpbnN0cnVjdGlvbnMiLCJvcGVuZXIiLCJzaGlmdCIsIkVycm9yIiwiaXNPcGVuZXIiLCJub2RlcyIsInBvcCIsImlzQ2xvc2VyIiwiZW5kIiwibGFzdCIsIm8iLCJvcGVuIiwiYyIsInN0cmluZ2lmeVBhcnRpYWxzIiwiY29kZU9iaiIsInBhcnRpYWxzIiwia2V5IiwiZXNjIiwibmFtZSIsImpvaW4iLCJvYmoiLCJpdGVtcyIsInN0cmluZ2lmeVN1YnN0aXR1dGlvbnMiLCJzdWJzIiwic3RyaW5naWZ5Iiwib3B0aW9ucyIsIndyYXBNYWluIiwiY29kZSIsInNlcmlhbE5vIiwiY2hvb3NlTWV0aG9kIiwiY3JlYXRlUGFydGlhbCIsIm5vZGUiLCJjb250ZXh0Iiwic3ltIiwicHJlZml4IiwidHJpcGxlU3RhY2hlIiwid3JpdGUiLCJnZW5lcmF0ZSIsInRyZWUiLCJ3YWxrIiwiYXNTdHJpbmciLCJ0aGlzIiwibWFrZVRlbXBsYXRlIiwidGVtcGxhdGUiLCJUZW1wbGF0ZSIsIm1ha2VQYXJ0aWFscyIsIkZ1bmN0aW9uIiwiY29kZWdlbiIsImN0eCIsImluUGFydGlhbCIsIm5vZGVsaXN0IiwiZnVuYyIsInBhcnNlIiwic2VjdGlvblRhZ3MiLCJjYWNoZSIsImNhY2hlS2V5IiwiZGlzYWJsZUxhbWJkYSIsIm1vZGVsR2V0IiwiY29tcGlsZSIsImluc3RhbmNlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImZpbmRJblNjb3BlIiwic2NvcGUiLCJkb01vZGVsR2V0IiwidmFsIiwidW5kZWZpbmVkIiwiZ2V0IiwiY29tcGlsZXIiLCJyIiwicHJvdG90eXBlIiwidiIsInN0ciIsImNvZXJjZVRvU3RyaW5nIiwiaENoYXJzIiwidGVzdCIsInJBbXAiLCJyTHQiLCJyR3QiLCJyQXBvcyIsInQiLCJyZW5kZXIiLCJyaSIsImVwIiwic3ltYm9sIiwicGFydGlhbCIsImJhc2UiLCJzdGFja1RleHQiLCJhY3RpdmVTdWIiLCJzdGFja1N1YnMiLCJzdGFja1BhcnRpYWxzIiwiUGFydGlhbFRlbXBsYXRlIiwiU3Vic3RpdHV0aW9ucyIsInN1YnNUZXh0IiwiY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsIiwicnAiLCJycyIsInNlY3Rpb24iLCJpc0FycmF5IiwiaW52ZXJ0ZWQiLCJzdGFydCIsInBhc3MiLCJtcyIsImQiLCJyZXR1cm5Gb3VuZCIsImZvdW5kIiwibmFtZXMiLCJmIiwiY3giLCJtdiIsImxzIiwib2xkVGFncyIsImIiLCJjdCIsImNhbGwiLCJmbCIsInRleHRTb3VyY2UiLCJyZXN1bHQiLCJzdWIiLCJBcnJheSIsImEiLCJPYmplY3QiLCJIIiwicCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJEdXJhdGlvblVuaXQiLCJMb2NhbFN0b3JhZ2VLZXkiLCJTZXNzaW9uU3RvcmFnZUtleSIsIkJvZHlMb2NhdGlvbiIsIkNhdGVnb3J5U3RyaW5nIiwiQ2F0ZWdvcnlOdW1iZXIiLCJHdWFyZCIsIlJhcml0eSIsIlR5cGUiLCJUYWtlb3ZlckFjdGlvbiIsIkxvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJhdXRvRXhwbG9yZUxvY2F0aW9ucyIsImxvY2F0aW9ucyIsInNldEl0ZW0iLCJkZWJ1ZyIsImVuYWJsZWQiLCJleHBsb3JhdGlvbnMiLCJtYXJrZXQiLCJtaW5pZ2FtZXMiLCJ3aXNobGlzdCIsInNldHRpbmdzIiwiZmFsbGJhY2siLCJKU09OIiwidmFsdWUiLCJDb25zb2xlIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJvcHRpb25hbFBhcmFtcyIsImRlYnVnZ2luZyIsImVycm9yIiwiaW5mbyIsImxvZyIsIndhcm4iLCJTZXNzaW9uU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiYWN0aW9uIiwiZXhwbG9yYXRpb25zRG9uZSIsImRvbmUiLCJtZXRhIiwibWluaWdhbWVzRG9uZSIsInNlbGVjdGVkTG9jYXRpb24iLCJzZWxlY3RlZCIsInRha2VvdmVyIiwiZ2V0SXRlbURldGFpbHMiLCJsaSIsInF1ZXJ5U2VsZWN0b3IiLCJpbm5lclRleHQiLCJzcmMiLCJjdXJyZW50UHJpY2UiLCJkYXRhc2V0IiwiYnV5Tm93UHJpY2UiLCJpY29uIiwiYXN5bmMiLCJjbGljayIsInNlbGVjdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiZWxlbWVudCIsImRvY3VtZW50IiwiY2xlYXJJbnRlcnZhbCIsIm1vdXNlRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJzZXRUaW1lb3V0IiwiQWN0aW9uIiwiYnV5IiwiTnVtYmVyIiwibWFhbmEiLCJjb25kaXRpb24iLCJCb29sZWFuIiwibG9jYXRpb24iLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJ3aXNoZWQiLCJhbW91bnQiLCJmb3JwYWdlIiwicGFnZSIsInJlc3VsdHMiLCJzZWFyY2giLCJ3YW50ZWQiLCJmaWx0ZXIiLCJwcmljZSIsImN1cnJlbnRNYWFuYSIsIiQiLCJmbGF2ck5vdGlmIiwianNvbiIsIml0ZW1JZCIsInBvc3QiLCJpZCIsImRhdGEiLCJpdGVtaWQiLCJzZXRFcnJvciIsIndlYXJhYmxlaXRlbWlkIiwiZmlsdGVySXRlbU5hbWUiLCJtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zIiwiaW5uZXJIVE1MIiwidHlwZSIsIkFsbCIsImJvZHlMb2NhdGlvbiIsImNhdGVnb3J5IiwiYWxsIiwicmFyaXR5IiwiZ3VhcmQiLCJhbnkiLCJmcm9tIiwidG8iLCJhamF4U2VhcmNoIiwicXVlcnlTZWxlY3RvckFsbCIsIm1hcCIsIml0ZW0iLCJmaW5kSW5kZXgiLCJlbnRyeSIsInNsaWNlIiwiZGFpbHkiLCJkYWlseUdpZnRDb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwicmVzZXRUYWtlb3ZlciIsImNoYW5nZVJlZ2lvbiIsIm5ld1JlZ2lvbklkIiwiY3VycmVudFJlZ2lvbiIsInBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiIsInRpbWVMZWZ0RXhwbG9yYXRpb24iLCJSZXN1bHQiLCJFeHBsb3JhdGlvblN0YXR1cyIsImdldEV4cGxvcmF0aW9uU3RhdHVzIiwiaWRsZSIsInN0YXJ0RXhwbG9yYXRpb24iLCJwZW5kaW5nIiwid2FpdEV4cGxvcmF0aW9uIiwicGVyZm9ybSIsImVuZEV4cGxvcmF0aW9uIiwiY2FwdHVyZSIsImVuZENhcHR1cmUiLCJjbGlja1JlZ2lvbiIsImRpdiIsInJlZ2lvbiIsInNhdmVkIiwicmVsb2FkIiwiQXVkaW8iLCJwbGF5IiwiZSIsImdldEN1cnJlbnRTZWFzb24iLCJjbGFzc0xpc3QiLCJmaW5kIiwiZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24iLCJyZWR1Y2UiLCJsb3dlc3QiLCJwbGFjZSIsImVuZXJneVJlcXVpcmVkIiwiZ2V0U2VsZWN0ZWRMb2NhdGlvbiIsInNlbGVjdExvY2F0aW9uIiwiYWZmb3JkYWJsZSIsInBldEVuZXJneSIsIm1pbmltdW1FbmVyZ3kiLCJub3REZWFkRW5kIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2FtZUVuZXJneSIsInNlYXNvbiIsImNsaWNrU2Vhc29uIiwiZXhwbG9yaW5nIiwiY2xpY2tMb2NhdGlvbiIsImNsaWNrRXhwbG9yZSIsInNlY29uZCIsInRpbWVUb0V4cGxvcmUiLCJtaW51dGUiLCJleHBsb3JhdGlvblJlc3VsdHMiLCJzdWNjZXNzIiwiY2FwdHVyZUVuZCIsImdsb2JhbHMiLCJjZWlsIiwiZmxhcHB5Iiwic2NvcmVNaW4iLCJzY29yZU1heCIsImRlbGF5TWluIiwiZGVsYXlNYXgiLCJidXR0b25TZWxlY3RvciIsImhhdGNobGluZ3MiLCJwZWdnbGUiLCJtaW5pZ2FtZSIsImJ1dHRvbnMiLCJidXR0b24iLCJhZGQiLCJyZWplY3QiLCJSZWNhcHRjaGEiLCJleGVjdXRlIiwic3RhcnRHYW1lIiwidGhlbiIsImNhdGNoIiwiZ2FtZVRva2VuIiwic2NvcmUiLCJyYW5kb21JbnQiLCJlbmNfdG9rZW4iLCJ4b3IiLCJ0bXAiLCJmcm9tQ2hhckNvZGUiLCJjaGFyQ29kZUF0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwieG9yRW5jb2RlIiwiZ2V0UHJpemVzIiwiZ2FtZSIsInJlY2FwdGNoYVRva2VuIiwic2F2ZVNjb3JlIiwic2VuZCIsInRvTG93ZXJDYXNlIiwibWluIiwibWF4IiwiYWpheCIsInVybCIsImRhdGFUeXBlIiwiZmFpbCIsImRlY29kZVVSSUNvbXBvbmVudCIsImxvYWRUYWtlb3ZlciIsImFjdGlvbnMiLCJjaGFuZ2VBY3Rpb24iLCJwbGF5aW5nIiwib3Blbk1pbmlnYW1lIiwicGxheVBlZ2dsZSIsInBsYXlGbGFwcHkiLCJwbGF5SGF0Y2hsaW5ncyIsIndhaXQiLCJleHBvcnRPdXRmaXQiLCJhdmF0YXIiLCJTYWNoYSIsIkF2YXRhciIsImF2YXRhcnMiLCJvdXRmaXQiLCJjaGlsZHJlbiIsImNoaWxkIiwiX2lkIiwiZ3JvdXAiLCJfZ3JvdXAiLCJfbmFtZSIsImltYWdlIiwiX2ltYWdlIiwiX3R5cGUiLCJjYXRlZ29yeUlkIiwiX2NhdGVnb3J5SWQiLCJoaWRkZW5DYXRlZ29yaWVzIiwidmFsdWVzIiwiX2hpZGRlbkNhdGVnb3JpZXMiLCJhbmltYXRpb25EYXRhIiwiX2FuaW1hdGlvbkRhdGEiLCJsb2NrZWQiLCJfbG9ja2VkIiwiZ2V0SXRlbXNUb1NhdmUiLCJocmVmIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImV4cG9ydFByZXZpZXciLCJpbXBvcnRPdXRmaXQiLCJpbnB1dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInRhcmdldCIsImZpbGVzIiwiZmlsZSIsImNhdGVnb3JpZXMiLCJTZXQiLCJjbG90aGluZyIsImNhdGVnb3J5Q29udGFpbmVyIiwiaGFzQ2xhc3MiLCJ2aWV3IiwiaGlkZSIsImFwcGVuZFRvIiwiYWx3YXlzIiwib3BlbkNhdGVnb3J5IiwiZ3JvdXBzIiwib3Blbkdyb3VwIiwid29ybkl0ZW1zIiwiYXZhaWxhYmxlSXRlbXMiLCJpdGVtUmVuZGVyIiwicmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVDbG90aGVzIiwiYWRkSXRlbXMiLCJpbml0aWFsaXplU2VsZWN0ZWRJdGVtcyIsImluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzIiwiZG93bmxvYWRDYW52YXMiLCJjYW52YXMiLCJ0b0RhdGFVUkwiLCJzdHlsZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZG93bmxvYWRGYWNlIiwiZG93bmxvYWRHdWFyZGlhbiIsImdldE5hbWUiLCJkb3dubG9hZEFwcGVhcmFuY2UiLCJ0ZXh0Q29udGVudCIsIm9ic2VydmVyIiwibG9hZEFwcGVhcmFuY2UiLCJkaXNjb25uZWN0IiwiYXBwZWFyYW5jZUl0ZW1zIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJhY3Rpb25UZW1wbGF0ZSIsImltcG9ydEFjdGlvbiIsImV4cG9ydEFjdGlvbiIsImRvd25sb2FkQWN0aW9uIiwiaW5zZXJ0QWRqYWNlbnRIVE1MIiwibG9hZEZhdm9yaXRlc0FjdGlvbnMiLCJjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzIiwiYmFja2dyb3VuZEltYWdlIiwiaDQiLCJjYXJvdXNlbERvd25sb2FkRmFjZSIsImNhcm91c2VsRG93bmxvYWRHdWFyZGlhbiIsImNhcm91c2VsRUUiLCJjYXJvdXNlbFRha2VvdmVyIiwidGFrZW92ZXJUaXRsZSIsInRha2VvdmVyQW5jaG9yIiwidGFrZW92ZXJINCIsIm1hcmtldE9ic2VydmVyIiwicGV0T2JzZXJ2ZXIiLCJsb2FkV2lzaGxpc3QiLCJfIiwibWFya2V0RW50cnkiLCJhZGRXaXNoaXN0QnV0dG9uIiwiYnV0dG9uc0NvbnRhaW5lciIsInJlbW92ZSIsImJ1dHRvblRlbXBsYXRlIiwiZmxhdnIiLCJjb250ZW50Iiwic2F2ZSIsIndpc2hsaXN0RW50cnkiLCJkaWFsb2ciLCJwcm9tcHQiLCJvbkJ1aWxkIiwiJGNvbnRhaW5lciIsImFkZENsYXNzIiwiYWRkVG9XaXNobGlzdEZsYXZyIiwibG9hZFBldCIsIm1haW5Db250YWluZXIiLCJhdHRyaWJ1dGVzIiwibG9jYXRpb25JZCIsImdldEF0dHJpYnV0ZSIsImxvYWRQaWN0b01hcCIsImFkZEF1dG9FeHBsb3JlQnV0dG9uIiwibG9hZEV4cGxvcmF0aW9ucyIsImFjdGl2ZSIsInNvbWUiLCJyZWdpb25JZCIsImF1dG9FeHBsb3JlVGVtcGxhdGUiLCJmaWx0ZXJlZExvY2F0aW9ucyIsIm5ld0F1dG9FeHBsb3JlIiwiZ2V0QXV0b0V4cGxvcmVFbnRyeSIsIm5ld0xvY2F0aW9ucyIsImF1dG9FeHBsb3JlIiwibG9hZFBpY3RvTWFwcyIsImRpc2FibGVFeHBsb3JlIiwiZ2V0UmVnaW9uIiwibWFwTG9jYXRpb24iLCJleHBvcnRQcm9maWxlIiwidGl0bGUiLCJrZXlzIiwibG9hZFNldHRpbmdzIiwiYWNjb3VudFJpZ2h0Iiwic2V0dGluZ3NUZW1wbGF0ZSIsInJlbG9hZFNldHRpbmdzIiwibWFya2V0cGxhY2VNZW51IiwicGFnZUxvYWQiLCJ3aXNobGlzdEJ1dHRvblRlbXBsYXRlIiwid2lzaGxpc3RCdXR0b24iLCJpbnNlcnRXaXNobGlzdCIsImFzc2lzdGFuY2UiLCJmaWx0ZXJzIiwid2lzaGxpc3RUZW1wbGF0ZSIsImNvbnRhaW5lciIsIndpc2hsaXN0Q29udGV4dCIsInRyIiwicmVzZXQiLCJyZXNldFN0YXR1cyIsImRlbGV0ZUJ1dHRvbiIsImRlbGV0ZUl0ZW0iLCJlZGl0UHJpY2UiLCJjaGFuZ2VQcmljZSIsImxvYWRVSSIsIm1lbnVJbm5lclJpZ2h0IiwibWVudVRlbXBsYXRlIiwiY2xhc3MiLCJsb2FkTWVudSIsImNhcm91c2VsSW5uZXIiLCJjb250ZXh0cyIsImJhbm5lciIsImNhcm91c2VsIiwiY29udGFpbnMiLCJsb2FkQ2Fyb3VzZWwiLCJob21lQ29udGVudFNtYWxscyIsInNtYWxsVGVtcGxhdGUiLCJsb2FkSG9tZUNvbnRlbnQiLCJwcm9maWxlQ29udGFjdEFjdGlvbnMiLCJwcm9maWxlQWN0aW9uRXhwb3J0IiwiYWN0aW9uRGVzY3JpcHRpb24iLCJsb2FkUHJvZmlsZSIsInNlYXJjaEl0ZW1zIiwibG9hZE1hcmtldCIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjBCQWVBLFNBQVdBLEdBR1QsSUFBSUMsRUFBZ0IsS0FDaEJDLEVBQVEsTUFDUkMsRUFBWSxNQUNaQyxFQUFNLE1BQ05DLEVBQVMsTUFDVEMsRUFBVyxTQUNYQyxFQUFnQixTQStJcEIsU0FBU0MsRUFBS0MsR0FDWixPQUFJQSxFQUFFRCxLQUNHQyxFQUFFRCxPQUdKQyxFQUFFQyxRQUFRLGFBQWMsSUFHakMsU0FBU0MsRUFBVUMsRUFBS0MsRUFBTUMsR0FDNUIsR0FBSUQsRUFBS0UsT0FBT0QsSUFBVUYs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QU1xRSxFQUEwQixFQUFRLEtBU3hDRCxFQUFrQnZGLG1CQUNoQixZQUNBd0YsRUFBYzdiLE9BVnVCLENBQ3JDd1csZ0JBQ0UsMEVBQ0ZDLEdBQUksUUFDSjNELEtBQU0sU0FDTmpLLEdBQUksV0ZDTmlULEdBQ0FuRyxJSG5CSyxXQUNMLE1BQU1vRyxFQUF3QmpWLFNBQVMwRCxlQUNyQywyQkFFRixJQUNHdVIsR0FDRGpWLFNBQVNmLGNBQWMsOEJBRXZCLE9BR0YsTUFBTXJJLEVBQXFCLEVBQVEsS0FDN0JzZSxFQUE0QyxDQUNoRG5ULEdBQUksZ0NBQ0pvVCxrQkFBbUIsaUJBSXJCRixFQUFzQjFGLG1CQUNwQixZQUNBM1ksRUFBU3NDLE9BQU9nYyxJQUlsQmxWLFNBQ0cwRCxlQUFld1IsRUFBb0JuVCxLQUNsQ3VLLGlCQUFpQixRQUFTcUcsSUdOOUJ5QyxHQUNBdEMsS0FDQXhCLEtMbkJLLFdBSUwsR0FIQW5CLEdBQWdCckIsYUFDaEJxQixFQUFpQixLQUVTLGlCQUF0QnRQLFNBQVNDLFNBQTZCLE9BSTFDLE1BQU11VSxFQUFjclYsU0FBU2YsY0FDM0IsNkJBRUdvVyxJQUVMbEYsRUFBaUIsSUFBSW5CLGlCQUFpQnFCLElBQ3RDRixFQUFlbEIsUUFBUW9HLEVBQWEsQ0FDbENuRyxXQUFXLElBR2JtQixNS0VBaUYsR0FDQSxLQUVBaFYsWUFBVyxLQUNUTixTQUFTZixjQUFnQyx3QkFBd0JRLFVBQ2hFdkQsRUFBYTJLLFFBR2xCME8sT0FBT2pKLGlCQUFpQixRQUFRLEtBQzlCdE0sU0FBU2YsY0FBZ0Msd0JBQXdCUSxXQUduRSxJQUFJdVAsa0JBekJKLFdBQ0VtRixLQUNBckssT0F1QnlCbUYsUUFBY2pQLFNBQVMwRCxlQUFlLGFBQWMsQ0FDN0V3TCxXQUFXLElBR2JpRixLQUNBdFcsUUFBUU0sSUFBSSxnQ0FDWjJMLEsiLCJmaWxlIjoiZWxkYXJ5YS1lbmhhbmNlbWVudHMudXNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuKGZ1bmN0aW9uIChIb2dhbikge1xuICAvLyBTZXR1cCByZWdleCAgYXNzaWdubWVudHNcbiAgLy8gcmVtb3ZlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIE11c3RhY2hlIHNwZWNcbiAgdmFyIHJJc1doaXRlc3BhY2UgPSAvXFxTLyxcbiAgICAgIHJRdW90ID0gL1xcXCIvZyxcbiAgICAgIHJOZXdsaW5lID0gIC9cXG4vZyxcbiAgICAgIHJDciA9IC9cXHIvZyxcbiAgICAgIHJTbGFzaCA9IC9cXFxcL2csXG4gICAgICByTGluZVNlcCA9IC9cXHUyMDI4LyxcbiAgICAgIHJQYXJhZ3JhcGhTZXAgPSAvXFx1MjAyOS87XG5cbiAgSG9nYW4udGFncyA9IHtcbiAgICAnIyc6IDEsICdeJzogMiwgJzwnOiAzLCAnJCc6IDQsXG4gICAgJy8nOiA1LCAnISc6IDYsICc+JzogNywgJz0nOiA4LCAnX3YnOiA5LFxuICAgICd7JzogMTAsICcmJzogMTEsICdfdCc6IDEyXG4gIH07XG5cbiAgSG9nYW4uc2NhbiA9IGZ1bmN0aW9uIHNjYW4odGV4dCwgZGVsaW1pdGVycykge1xuICAgIHZhciBsZW4gPSB0ZXh0Lmxlbmd0aCxcbiAgICAgICAgSU5fVEVYVCA9IDAsXG4gICAgICAgIElOX1RBR19UWVBFID0gMSxcbiAgICAgICAgSU5fVEFHID0gMixcbiAgICAgICAgc3RhdGUgPSBJTl9URVhULFxuICAgICAgICB0YWdUeXBlID0gbnVsbCxcbiAgICAgICAgdGFnID0gbnVsbCxcbiAgICAgICAgYnVmID0gJycsXG4gICAgICAgIHRva2VucyA9IFtdLFxuICAgICAgICBzZWVuVGFnID0gZmFsc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBsaW5lU3RhcnQgPSAwLFxuICAgICAgICBvdGFnID0gJ3t7JyxcbiAgICAgICAgY3RhZyA9ICd9fSc7XG5cbiAgICBmdW5jdGlvbiBhZGRCdWYoKSB7XG4gICAgICBpZiAoYnVmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe3RhZzogJ190JywgdGV4dDogbmV3IFN0cmluZyhidWYpfSk7XG4gICAgICAgIGJ1ZiA9ICcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVJc1doaXRlc3BhY2UoKSB7XG4gICAgICB2YXIgaXNBbGxXaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGogPSBsaW5lU3RhcnQ7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaXNBbGxXaGl0ZXNwYWNlID1cbiAgICAgICAgICAoSG9nYW4udGFnc1t0b2tlbnNbal0udGFnXSA8IEhvZ2FuLnRhZ3NbJ192J10pIHx8XG4gICAgICAgICAgKHRva2Vuc1tqXS50YWcgPT0gJ190JyAmJiB0b2tlbnNbal0udGV4dC5tYXRjaChySXNXaGl0ZXNwYWNlKSA9PT0gbnVsbCk7XG4gICAgICAgIGlmICghaXNBbGxXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0FsbFdoaXRlc3BhY2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyTGluZShoYXZlU2VlblRhZywgbm9OZXdMaW5lKSB7XG4gICAgICBhZGRCdWYoKTtcblxuICAgICAgaWYgKGhhdmVTZWVuVGFnICYmIGxpbmVJc1doaXRlc3BhY2UoKSkge1xuICAgICAgICBmb3IgKHZhciBqID0gbGluZVN0YXJ0LCBuZXh0OyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHRva2Vuc1tqXS50ZXh0KSB7XG4gICAgICAgICAgICBpZiAoKG5leHQgPSB0b2tlbnNbaisxXSkgJiYgbmV4dC50YWcgPT0gJz4nKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBpbmRlbnQgdG8gdG9rZW4gdmFsdWVcbiAgICAgICAgICAgICAgbmV4dC5pbmRlbnQgPSB0b2tlbnNbal0udGV4dC50b1N0cmluZygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghbm9OZXdMaW5lKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHt0YWc6J1xcbid9KTtcbiAgICAgIH1cblxuICAgICAgc2VlblRhZyA9IGZhbHNlO1xuICAgICAgbGluZVN0YXJ0ID0gdG9rZW5zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VEZWxpbWl0ZXJzKHRleHQsIGluZGV4KSB7XG4gICAgICB2YXIgY2xvc2UgPSAnPScgKyBjdGFnLFxuICAgICAgICAgIGNsb3NlSW5kZXggPSB0ZXh0LmluZGV4T2YoY2xvc2UsIGluZGV4KSxcbiAgICAgICAgICBkZWxpbWl0ZXJzID0gdHJpbShcbiAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHRleHQuaW5kZXhPZignPScsIGluZGV4KSArIDEsIGNsb3NlSW5kZXgpXG4gICAgICAgICAgKS5zcGxpdCgnICcpO1xuXG4gICAgICBvdGFnID0gZGVsaW1pdGVyc1swXTtcbiAgICAgIGN0YWcgPSBkZWxpbWl0ZXJzW2RlbGltaXRlcnMubGVuZ3RoIC0gMV07XG5cbiAgICAgIHJldHVybiBjbG9zZUluZGV4ICsgY2xvc2UubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBpZiAoZGVsaW1pdGVycykge1xuICAgICAgZGVsaW1pdGVycyA9IGRlbGltaXRlcnMuc3BsaXQoJyAnKTtcbiAgICAgIG90YWcgPSBkZWxpbWl0ZXJzWzBdO1xuICAgICAgY3RhZyA9IGRlbGltaXRlcnNbMV07XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoc3RhdGUgPT0gSU5fVEVYVCkge1xuICAgICAgICBpZiAodGFnQ2hhbmdlKG90YWcsIHRleHQsIGkpKSB7XG4gICAgICAgICAgLS1pO1xuICAgICAgICAgIGFkZEJ1ZigpO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEFHX1RZUEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09ICdcXG4nKSB7XG4gICAgICAgICAgICBmaWx0ZXJMaW5lKHNlZW5UYWcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWYgKz0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09IElOX1RBR19UWVBFKSB7XG4gICAgICAgIGkgKz0gb3RhZy5sZW5ndGggLSAxO1xuICAgICAgICB0YWcgPSBIb2dhbi50YWdzW3RleHQuY2hhckF0KGkgKyAxKV07XG4gICAgICAgIHRhZ1R5cGUgPSB0YWcgPyB0ZXh0LmNoYXJBdChpICsgMSkgOiAnX3YnO1xuICAgICAgICBpZiAodGFnVHlwZSA9PSAnPScpIHtcbiAgICAgICAgICBpID0gY2hhbmdlRGVsaW1pdGVycyh0ZXh0LCBpKTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RFWFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRhZykge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IElOX1RBRztcbiAgICAgICAgfVxuICAgICAgICBzZWVuVGFnID0gaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YWdDaGFuZ2UoY3RhZywgdGV4dCwgaSkpIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh7dGFnOiB0YWdUeXBlLCBuOiB0cmltKGJ1ZiksIG90YWc6IG90YWcsIGN0YWc6IGN0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgIGk6ICh0YWdUeXBlID09ICcvJykgPyBzZWVuVGFnIC0gb3RhZy5sZW5ndGggOiBpICsgY3RhZy5sZW5ndGh9KTtcbiAgICAgICAgICBidWYgPSAnJztcbiAgICAgICAgICBpICs9IGN0YWcubGVuZ3RoIC0gMTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RFWFQ7XG4gICAgICAgICAgaWYgKHRhZ1R5cGUgPT0gJ3snKSB7XG4gICAgICAgICAgICBpZiAoY3RhZyA9PSAnfX0nKSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsZWFuVHJpcGxlU3RhY2hlKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWYgKz0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWx0ZXJMaW5lKHNlZW5UYWcsIHRydWUpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFuVHJpcGxlU3RhY2hlKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLm4uc3Vic3RyKHRva2VuLm4ubGVuZ3RoIC0gMSkgPT09ICd9Jykge1xuICAgICAgdG9rZW4ubiA9IHRva2VuLm4uc3Vic3RyaW5nKDAsIHRva2VuLm4ubGVuZ3RoIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpbShzKSB7XG4gICAgaWYgKHMudHJpbSkge1xuICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhZ0NoYW5nZSh0YWcsIHRleHQsIGluZGV4KSB7XG4gICAgaWYgKHRleHQuY2hhckF0KGluZGV4KSAhPSB0YWcuY2hhckF0KDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0YWcubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGV4dC5jaGFyQXQoaW5kZXggKyBpKSAhPSB0YWcuY2hhckF0KGkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRoZSB0YWdzIGFsbG93ZWQgaW5zaWRlIHN1cGVyIHRlbXBsYXRlc1xuICB2YXIgYWxsb3dlZEluU3VwZXIgPSB7J190JzogdHJ1ZSwgJ1xcbic6IHRydWUsICckJzogdHJ1ZSwgJy8nOiB0cnVlfTtcblxuICBmdW5jdGlvbiBidWlsZFRyZWUodG9rZW5zLCBraW5kLCBzdGFjaywgY3VzdG9tVGFncykge1xuICAgIHZhciBpbnN0cnVjdGlvbnMgPSBbXSxcbiAgICAgICAgb3BlbmVyID0gbnVsbCxcbiAgICAgICAgdGFpbCA9IG51bGwsXG4gICAgICAgIHRva2VuID0gbnVsbDtcblxuICAgIHRhaWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgdG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblxuICAgICAgaWYgKHRhaWwgJiYgdGFpbC50YWcgPT0gJzwnICYmICEodG9rZW4udGFnIGluIGFsbG93ZWRJblN1cGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgY29udGVudCBpbiA8IHN1cGVyIHRhZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEhvZ2FuLnRhZ3NbdG9rZW4udGFnXSA8PSBIb2dhbi50YWdzWyckJ10gfHwgaXNPcGVuZXIodG9rZW4sIGN1c3RvbVRhZ3MpKSB7XG4gICAgICAgIHN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgICB0b2tlbi5ub2RlcyA9IGJ1aWxkVHJlZSh0b2tlbnMsIHRva2VuLnRhZywgc3RhY2ssIGN1c3RvbVRhZ3MpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50YWcgPT0gJy8nKSB7XG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nsb3NpbmcgdGFnIHdpdGhvdXQgb3BlbmVyOiAvJyArIHRva2VuLm4pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5lciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAodG9rZW4ubiAhPSBvcGVuZXIubiAmJiAhaXNDbG9zZXIodG9rZW4ubiwgb3BlbmVyLm4sIGN1c3RvbVRhZ3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXN0aW5nIGVycm9yOiAnICsgb3BlbmVyLm4gKyAnIHZzLiAnICsgdG9rZW4ubik7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbmVyLmVuZCA9IHRva2VuLmk7XG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnRhZyA9PSAnXFxuJykge1xuICAgICAgICB0b2tlbi5sYXN0ID0gKHRva2Vucy5sZW5ndGggPT0gMCkgfHwgKHRva2Vuc1swXS50YWcgPT0gJ1xcbicpO1xuICAgICAgfVxuXG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjbG9zaW5nIHRhZzogJyArIHN0YWNrLnBvcCgpLm4pO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICBmdW5jdGlvbiBpc09wZW5lcih0b2tlbiwgdGFncykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0YWdzW2ldLm8gPT0gdG9rZW4ubikge1xuICAgICAgICB0b2tlbi50YWcgPSAnIyc7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ2xvc2VyKGNsb3NlLCBvcGVuLCB0YWdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRhZ3NbaV0uYyA9PSBjbG9zZSAmJiB0YWdzW2ldLm8gPT0gb3Blbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlTdWJzdGl0dXRpb25zKG9iaikge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGl0ZW1zLnB1c2goJ1wiJyArIGVzYyhrZXkpICsgJ1wiOiBmdW5jdGlvbihjLHAsdCxpKSB7JyArIG9ialtrZXldICsgJ30nKTtcbiAgICB9XG4gICAgcmV0dXJuIFwieyBcIiArIGl0ZW1zLmpvaW4oXCIsXCIpICsgXCIgfVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iaikge1xuICAgIHZhciBwYXJ0aWFscyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBjb2RlT2JqLnBhcnRpYWxzKSB7XG4gICAgICBwYXJ0aWFscy5wdXNoKCdcIicgKyBlc2Moa2V5KSArICdcIjp7bmFtZTpcIicgKyBlc2MoY29kZU9iai5wYXJ0aWFsc1trZXldLm5hbWUpICsgJ1wiLCAnICsgc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iai5wYXJ0aWFsc1trZXldKSArIFwifVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwicGFydGlhbHM6IHtcIiArIHBhcnRpYWxzLmpvaW4oXCIsXCIpICsgXCJ9LCBzdWJzOiBcIiArIHN0cmluZ2lmeVN1YnN0aXR1dGlvbnMoY29kZU9iai5zdWJzKTtcbiAgfVxuXG4gIEhvZ2FuLnN0cmluZ2lmeSA9IGZ1bmN0aW9uKGNvZGVPYmosIHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gXCJ7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IFwiICsgSG9nYW4ud3JhcE1haW4oY29kZU9iai5jb2RlKSArIFwiIH0sXCIgKyBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqKSArICBcIn1cIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxObyA9IDA7XG4gIEhvZ2FuLmdlbmVyYXRlID0gZnVuY3Rpb24odHJlZSwgdGV4dCwgb3B0aW9ucykge1xuICAgIHNlcmlhbE5vID0gMDtcbiAgICB2YXIgY29udGV4dCA9IHsgY29kZTogJycsIHN1YnM6IHt9LCBwYXJ0aWFsczoge30gfTtcbiAgICBIb2dhbi53YWxrKHRyZWUsIGNvbnRleHQpO1xuXG4gICAgaWYgKG9wdGlvbnMuYXNTdHJpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeShjb250ZXh0LCB0ZXh0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlVGVtcGxhdGUoY29udGV4dCwgdGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICBIb2dhbi53cmFwTWFpbiA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICByZXR1cm4gJ3ZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7JyArIGNvZGUgKyAncmV0dXJuIHQuZmwoKTsnO1xuICB9XG5cbiAgSG9nYW4udGVtcGxhdGUgPSBIb2dhbi5UZW1wbGF0ZTtcblxuICBIb2dhbi5tYWtlVGVtcGxhdGUgPSBmdW5jdGlvbihjb2RlT2JqLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5tYWtlUGFydGlhbHMoY29kZU9iaik7XG4gICAgdGVtcGxhdGUuY29kZSA9IG5ldyBGdW5jdGlvbignYycsICdwJywgJ2knLCB0aGlzLndyYXBNYWluKGNvZGVPYmouY29kZSkpO1xuICAgIHJldHVybiBuZXcgdGhpcy50ZW1wbGF0ZSh0ZW1wbGF0ZSwgdGV4dCwgdGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICBIb2dhbi5tYWtlUGFydGlhbHMgPSBmdW5jdGlvbihjb2RlT2JqKSB7XG4gICAgdmFyIGtleSwgdGVtcGxhdGUgPSB7c3Viczoge30sIHBhcnRpYWxzOiBjb2RlT2JqLnBhcnRpYWxzLCBuYW1lOiBjb2RlT2JqLm5hbWV9O1xuICAgIGZvciAoa2V5IGluIHRlbXBsYXRlLnBhcnRpYWxzKSB7XG4gICAgICB0ZW1wbGF0ZS5wYXJ0aWFsc1trZXldID0gdGhpcy5tYWtlUGFydGlhbHModGVtcGxhdGUucGFydGlhbHNba2V5XSk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIGNvZGVPYmouc3Vicykge1xuICAgICAgdGVtcGxhdGUuc3Vic1trZXldID0gbmV3IEZ1bmN0aW9uKCdjJywgJ3AnLCAndCcsICdpJywgY29kZU9iai5zdWJzW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBlc2Mocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoclNsYXNoLCAnXFxcXFxcXFwnKVxuICAgICAgICAgICAgLnJlcGxhY2UoclF1b3QsICdcXFxcXFxcIicpXG4gICAgICAgICAgICAucmVwbGFjZShyTmV3bGluZSwgJ1xcXFxuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJDciwgJ1xcXFxyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJMaW5lU2VwLCAnXFxcXHUyMDI4JylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJQYXJhZ3JhcGhTZXAsICdcXFxcdTIwMjknKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNob29zZU1ldGhvZChzKSB7XG4gICAgcmV0dXJuICh+cy5pbmRleE9mKCcuJykpID8gJ2QnIDogJ2YnO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZWZpeCA9IFwiPFwiICsgKGNvbnRleHQucHJlZml4IHx8IFwiXCIpO1xuICAgIHZhciBzeW0gPSBwcmVmaXggKyBub2RlLm4gKyBzZXJpYWxObysrO1xuICAgIGNvbnRleHQucGFydGlhbHNbc3ltXSA9IHtuYW1lOiBub2RlLm4sIHBhcnRpYWxzOiB7fX07XG4gICAgY29udGV4dC5jb2RlICs9ICd0LmIodC5ycChcIicgKyAgZXNjKHN5bSkgKyAnXCIsYyxwLFwiJyArIChub2RlLmluZGVudCB8fCAnJykgKyAnXCIpKTsnO1xuICAgIHJldHVybiBzeW07XG4gIH1cblxuICBIb2dhbi5jb2RlZ2VuID0ge1xuICAgICcjJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICdpZih0LnModC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwxKSwnICtcbiAgICAgICAgICAgICAgICAgICAgICAnYyxwLDAsJyArIG5vZGUuaSArICcsJyArIG5vZGUuZW5kICsgJyxcIicgKyBub2RlLm90YWcgKyBcIiBcIiArIG5vZGUuY3RhZyArICdcIikpeycgK1xuICAgICAgICAgICAgICAgICAgICAgICd0LnJzKGMscCwnICsgJ2Z1bmN0aW9uKGMscCx0KXsnO1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjb250ZXh0KTtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnfSk7Yy5wb3AoKTt9JztcbiAgICB9LFxuXG4gICAgJ14nOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ2lmKCF0LnModC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpeyc7XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGNvbnRleHQpO1xuICAgICAgY29udGV4dC5jb2RlICs9ICd9Oyc7XG4gICAgfSxcblxuICAgICc+JzogY3JlYXRlUGFydGlhbCxcbiAgICAnPCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjdHggPSB7cGFydGlhbHM6IHt9LCBjb2RlOiAnJywgc3Viczoge30sIGluUGFydGlhbDogdHJ1ZX07XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGN0eCk7XG4gICAgICB2YXIgdGVtcGxhdGUgPSBjb250ZXh0LnBhcnRpYWxzW2NyZWF0ZVBhcnRpYWwobm9kZSwgY29udGV4dCldO1xuICAgICAgdGVtcGxhdGUuc3VicyA9IGN0eC5zdWJzO1xuICAgICAgdGVtcGxhdGUucGFydGlhbHMgPSBjdHgucGFydGlhbHM7XG4gICAgfSxcblxuICAgICckJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgdmFyIGN0eCA9IHtzdWJzOiB7fSwgY29kZTogJycsIHBhcnRpYWxzOiBjb250ZXh0LnBhcnRpYWxzLCBwcmVmaXg6IG5vZGUubn07XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGN0eCk7XG4gICAgICBjb250ZXh0LnN1YnNbbm9kZS5uXSA9IGN0eC5jb2RlO1xuICAgICAgaWYgKCFjb250ZXh0LmluUGFydGlhbCkge1xuICAgICAgICBjb250ZXh0LmNvZGUgKz0gJ3Quc3ViKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCxpKTsnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAnXFxuJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9IHdyaXRlKCdcIlxcXFxuXCInICsgKG5vZGUubGFzdCA/ICcnIDogJyArIGknKSk7XG4gICAgfSxcblxuICAgICdfdic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQudih0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDApKSk7JztcbiAgICB9LFxuXG4gICAgJ190JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9IHdyaXRlKCdcIicgKyBlc2Mobm9kZS50ZXh0KSArICdcIicpO1xuICAgIH0sXG5cbiAgICAneyc6IHRyaXBsZVN0YWNoZSxcblxuICAgICcmJzogdHJpcGxlU3RhY2hlXG4gIH1cblxuICBmdW5jdGlvbiB0cmlwbGVTdGFjaGUobm9kZSwgY29udGV4dCkge1xuICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQudCh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDApKSk7JztcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlKHMpIHtcbiAgICByZXR1cm4gJ3QuYignICsgcyArICcpOyc7XG4gIH1cblxuICBIb2dhbi53YWxrID0gZnVuY3Rpb24obm9kZWxpc3QsIGNvbnRleHQpIHtcbiAgICB2YXIgZnVuYztcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGVsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZnVuYyA9IEhvZ2FuLmNvZGVnZW5bbm9kZWxpc3RbaV0udGFnXTtcbiAgICAgIGZ1bmMgJiYgZnVuYyhub2RlbGlzdFtpXSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgSG9nYW4ucGFyc2UgPSBmdW5jdGlvbih0b2tlbnMsIHRleHQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gYnVpbGRUcmVlKHRva2VucywgJycsIFtdLCBvcHRpb25zLnNlY3Rpb25UYWdzIHx8IFtdKTtcbiAgfVxuXG4gIEhvZ2FuLmNhY2hlID0ge307XG5cbiAgSG9nYW4uY2FjaGVLZXkgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFt0ZXh0LCAhIW9wdGlvbnMuYXNTdHJpbmcsICEhb3B0aW9ucy5kaXNhYmxlTGFtYmRhLCBvcHRpb25zLmRlbGltaXRlcnMsICEhb3B0aW9ucy5tb2RlbEdldF0uam9pbignfHwnKTtcbiAgfVxuXG4gIEhvZ2FuLmNvbXBpbGUgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIGtleSA9IEhvZ2FuLmNhY2hlS2V5KHRleHQsIG9wdGlvbnMpO1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuY2FjaGVba2V5XTtcblxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHBhcnRpYWxzID0gdGVtcGxhdGUucGFydGlhbHM7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIHBhcnRpYWxzKSB7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsc1tuYW1lXS5pbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICB0ZW1wbGF0ZSA9IHRoaXMuZ2VuZXJhdGUodGhpcy5wYXJzZSh0aGlzLnNjYW4odGV4dCwgb3B0aW9ucy5kZWxpbWl0ZXJzKSwgdGV4dCwgb3B0aW9ucyksIHRleHQsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlW2tleV0gPSB0ZW1wbGF0ZTtcbiAgfVxufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IEhvZ2FuKTtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gVGhpcyBmaWxlIGlzIGZvciB1c2Ugd2l0aCBOb2RlLmpzLiBTZWUgZGlzdC8gZm9yIGJyb3dzZXIgZmlsZXMuXG5cbnZhciBIb2dhbiA9IHJlcXVpcmUoJy4vY29tcGlsZXInKTtcbkhvZ2FuLlRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZScpLlRlbXBsYXRlO1xuSG9nYW4udGVtcGxhdGUgPSBIb2dhbi5UZW1wbGF0ZTtcbm1vZHVsZS5leHBvcnRzID0gSG9nYW47XG4iLCIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBIb2dhbiA9IHt9O1xuXG4oZnVuY3Rpb24gKEhvZ2FuKSB7XG4gIEhvZ2FuLlRlbXBsYXRlID0gZnVuY3Rpb24gKGNvZGVPYmosIHRleHQsIGNvbXBpbGVyLCBvcHRpb25zKSB7XG4gICAgY29kZU9iaiA9IGNvZGVPYmogfHwge307XG4gICAgdGhpcy5yID0gY29kZU9iai5jb2RlIHx8IHRoaXMucjtcbiAgICB0aGlzLmMgPSBjb21waWxlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMudGV4dCA9IHRleHQgfHwgJyc7XG4gICAgdGhpcy5wYXJ0aWFscyA9IGNvZGVPYmoucGFydGlhbHMgfHwge307XG4gICAgdGhpcy5zdWJzID0gY29kZU9iai5zdWJzIHx8IHt9O1xuICAgIHRoaXMuYnVmID0gJyc7XG4gIH1cblxuICBIb2dhbi5UZW1wbGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgLy8gcmVuZGVyOiByZXBsYWNlZCBieSBnZW5lcmF0ZWQgY29kZS5cbiAgICByOiBmdW5jdGlvbiAoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkgeyByZXR1cm4gJyc7IH0sXG5cbiAgICAvLyB2YXJpYWJsZSBlc2NhcGluZ1xuICAgIHY6IGhvZ2FuRXNjYXBlLFxuXG4gICAgLy8gdHJpcGxlIHN0YWNoZVxuICAgIHQ6IGNvZXJjZVRvU3RyaW5nLFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmkoW2NvbnRleHRdLCBwYXJ0aWFscyB8fCB7fSwgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gcmVuZGVyIGludGVybmFsIC0tIGEgaG9vayBmb3Igb3ZlcnJpZGVzIHRoYXQgY2F0Y2hlcyBwYXJ0aWFscyB0b29cbiAgICByaTogZnVuY3Rpb24gKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnIoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIGVuc3VyZVBhcnRpYWxcbiAgICBlcDogZnVuY3Rpb24oc3ltYm9sLCBwYXJ0aWFscykge1xuICAgICAgdmFyIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWxzW3N5bWJvbF07XG5cbiAgICAgIC8vIGNoZWNrIHRvIHNlZSB0aGF0IGlmIHdlJ3ZlIGluc3RhbnRpYXRlZCB0aGlzIHBhcnRpYWwgYmVmb3JlXG4gICAgICB2YXIgdGVtcGxhdGUgPSBwYXJ0aWFsc1twYXJ0aWFsLm5hbWVdO1xuICAgICAgaWYgKHBhcnRpYWwuaW5zdGFuY2UgJiYgcGFydGlhbC5iYXNlID09IHRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghdGhpcy5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tcGlsZXIgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMuYy5jb21waWxlKHRlbXBsYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSB1c2UgdGhpcyB0byBjaGVjayB3aGV0aGVyIHRoZSBwYXJ0aWFscyBkaWN0aW9uYXJ5IGhhcyBjaGFuZ2VkXG4gICAgICB0aGlzLnBhcnRpYWxzW3N5bWJvbF0uYmFzZSA9IHRlbXBsYXRlO1xuXG4gICAgICBpZiAocGFydGlhbC5zdWJzKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjb25zaWRlciBwYXJlbnQgdGVtcGxhdGUgbm93XG4gICAgICAgIGlmICghcGFydGlhbHMuc3RhY2tUZXh0KSBwYXJ0aWFscy5zdGFja1RleHQgPSB7fTtcbiAgICAgICAgZm9yIChrZXkgaW4gcGFydGlhbC5zdWJzKSB7XG4gICAgICAgICAgaWYgKCFwYXJ0aWFscy5zdGFja1RleHRba2V5XSkge1xuICAgICAgICAgICAgcGFydGlhbHMuc3RhY2tUZXh0W2tleV0gPSAodGhpcy5hY3RpdmVTdWIgIT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFscy5zdGFja1RleHRbdGhpcy5hY3RpdmVTdWJdKSA/IHBhcnRpYWxzLnN0YWNrVGV4dFt0aGlzLmFjdGl2ZVN1Yl0gOiB0aGlzLnRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRlbXBsYXRlID0gY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsKHRlbXBsYXRlLCBwYXJ0aWFsLnN1YnMsIHBhcnRpYWwucGFydGlhbHMsXG4gICAgICAgICAgdGhpcy5zdGFja1N1YnMsIHRoaXMuc3RhY2tQYXJ0aWFscywgcGFydGlhbHMuc3RhY2tUZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbc3ltYm9sXS5pbnN0YW5jZSA9IHRlbXBsYXRlO1xuXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIC8vIHRyaWVzIHRvIGZpbmQgYSBwYXJ0aWFsIGluIHRoZSBjdXJyZW50IHNjb3BlIGFuZCByZW5kZXIgaXRcbiAgICBycDogZnVuY3Rpb24oc3ltYm9sLCBjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHRoaXMuZXAoc3ltYm9sLCBwYXJ0aWFscyk7XG4gICAgICBpZiAoIXBhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydGlhbC5yaShjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gcmVuZGVyIGEgc2VjdGlvblxuICAgIHJzOiBmdW5jdGlvbihjb250ZXh0LCBwYXJ0aWFscywgc2VjdGlvbikge1xuICAgICAgdmFyIHRhaWwgPSBjb250ZXh0W2NvbnRleHQubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICghaXNBcnJheSh0YWlsKSkge1xuICAgICAgICBzZWN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhaWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29udGV4dC5wdXNoKHRhaWxbaV0pO1xuICAgICAgICBzZWN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzKTtcbiAgICAgICAgY29udGV4dC5wb3AoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWF5YmUgc3RhcnQgYSBzZWN0aW9uXG4gICAgczogZnVuY3Rpb24odmFsLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncykge1xuICAgICAgdmFyIHBhc3M7XG5cbiAgICAgIGlmIChpc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gdGhpcy5tcyh2YWwsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKTtcbiAgICAgIH1cblxuICAgICAgcGFzcyA9ICEhdmFsO1xuXG4gICAgICBpZiAoIWludmVydGVkICYmIHBhc3MgJiYgY3R4KSB7XG4gICAgICAgIGN0eC5wdXNoKCh0eXBlb2YgdmFsID09ICdvYmplY3QnKSA/IHZhbCA6IGN0eFtjdHgubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFzcztcbiAgICB9LFxuXG4gICAgLy8gZmluZCB2YWx1ZXMgd2l0aCBkb3R0ZWQgbmFtZXNcbiAgICBkOiBmdW5jdGlvbihrZXksIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSB7XG4gICAgICB2YXIgZm91bmQsXG4gICAgICAgICAgbmFtZXMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAgICB2YWwgPSB0aGlzLmYobmFtZXNbMF0sIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSxcbiAgICAgICAgICBkb01vZGVsR2V0ID0gdGhpcy5vcHRpb25zLm1vZGVsR2V0LFxuICAgICAgICAgIGN4ID0gbnVsbDtcblxuICAgICAgaWYgKGtleSA9PT0gJy4nICYmIGlzQXJyYXkoY3R4W2N0eC5sZW5ndGggLSAyXSkpIHtcbiAgICAgICAgdmFsID0gY3R4W2N0eC5sZW5ndGggLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3VuZCA9IGZpbmRJblNjb3BlKG5hbWVzW2ldLCB2YWwsIGRvTW9kZWxHZXQpO1xuICAgICAgICAgIGlmIChmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjeCA9IHZhbDtcbiAgICAgICAgICAgIHZhbCA9IGZvdW5kO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZvdW5kICYmICF2YWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJldHVybkZvdW5kICYmIHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdHgucHVzaChjeCk7XG4gICAgICAgIHZhbCA9IHRoaXMubXYodmFsLCBjdHgsIHBhcnRpYWxzKTtcbiAgICAgICAgY3R4LnBvcCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyBmaW5kIHZhbHVlcyB3aXRoIG5vcm1hbCBuYW1lc1xuICAgIGY6IGZ1bmN0aW9uKGtleSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpIHtcbiAgICAgIHZhciB2YWwgPSBmYWxzZSxcbiAgICAgICAgICB2ID0gbnVsbCxcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlLFxuICAgICAgICAgIGRvTW9kZWxHZXQgPSB0aGlzLm9wdGlvbnMubW9kZWxHZXQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSBjdHgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdiA9IGN0eFtpXTtcbiAgICAgICAgdmFsID0gZmluZEluU2NvcGUoa2V5LCB2LCBkb01vZGVsR2V0KTtcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIChyZXR1cm5Gb3VuZCkgPyBmYWxzZSA6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0dXJuRm91bmQgJiYgdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHRoaXMubXYodmFsLCBjdHgsIHBhcnRpYWxzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gaGlnaGVyIG9yZGVyIHRlbXBsYXRlc1xuICAgIGxzOiBmdW5jdGlvbihmdW5jLCBjeCwgcGFydGlhbHMsIHRleHQsIHRhZ3MpIHtcbiAgICAgIHZhciBvbGRUYWdzID0gdGhpcy5vcHRpb25zLmRlbGltaXRlcnM7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzID0gdGFncztcbiAgICAgIHRoaXMuYih0aGlzLmN0KGNvZXJjZVRvU3RyaW5nKGZ1bmMuY2FsbChjeCwgdGV4dCkpLCBjeCwgcGFydGlhbHMpKTtcbiAgICAgIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzID0gb2xkVGFncztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvLyBjb21waWxlIHRleHRcbiAgICBjdDogZnVuY3Rpb24odGV4dCwgY3gsIHBhcnRpYWxzKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMYW1iZGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMYW1iZGEgZmVhdHVyZXMgZGlzYWJsZWQuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jLmNvbXBpbGUodGV4dCwgdGhpcy5vcHRpb25zKS5yZW5kZXIoY3gsIHBhcnRpYWxzKTtcbiAgICB9LFxuXG4gICAgLy8gdGVtcGxhdGUgcmVzdWx0IGJ1ZmZlcmluZ1xuICAgIGI6IGZ1bmN0aW9uKHMpIHsgdGhpcy5idWYgKz0gczsgfSxcblxuICAgIGZsOiBmdW5jdGlvbigpIHsgdmFyIHIgPSB0aGlzLmJ1ZjsgdGhpcy5idWYgPSAnJzsgcmV0dXJuIHI7IH0sXG5cbiAgICAvLyBtZXRob2QgcmVwbGFjZSBzZWN0aW9uXG4gICAgbXM6IGZ1bmN0aW9uKGZ1bmMsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKSB7XG4gICAgICB2YXIgdGV4dFNvdXJjZSxcbiAgICAgICAgICBjeCA9IGN0eFtjdHgubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5jYWxsKGN4KTtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0U291cmNlID0gKHRoaXMuYWN0aXZlU3ViICYmIHRoaXMuc3Vic1RleHQgJiYgdGhpcy5zdWJzVGV4dFt0aGlzLmFjdGl2ZVN1Yl0pID8gdGhpcy5zdWJzVGV4dFt0aGlzLmFjdGl2ZVN1Yl0gOiB0aGlzLnRleHQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubHMocmVzdWx0LCBjeCwgcGFydGlhbHMsIHRleHRTb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLCB0YWdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICAvLyBtZXRob2QgcmVwbGFjZSB2YXJpYWJsZVxuICAgIG12OiBmdW5jdGlvbihmdW5jLCBjdHgsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgY3ggPSBjdHhbY3R4Lmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuY2FsbChjeCk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3QoY29lcmNlVG9TdHJpbmcocmVzdWx0LmNhbGwoY3gpKSwgY3gsIHBhcnRpYWxzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc3ViOiBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICB2YXIgZiA9IHRoaXMuc3Vic1tuYW1lXTtcbiAgICAgIGlmIChmKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU3ViID0gbmFtZTtcbiAgICAgICAgZihjb250ZXh0LCBwYXJ0aWFscywgdGhpcywgaW5kZW50KTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdWIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcblxuICAvL0ZpbmQgYSBrZXkgaW4gYW4gb2JqZWN0XG4gIGZ1bmN0aW9uIGZpbmRJblNjb3BlKGtleSwgc2NvcGUsIGRvTW9kZWxHZXQpIHtcbiAgICB2YXIgdmFsO1xuXG4gICAgaWYgKHNjb3BlICYmIHR5cGVvZiBzY29wZSA9PSAnb2JqZWN0Jykge1xuXG4gICAgICBpZiAoc2NvcGVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbCA9IHNjb3BlW2tleV07XG5cbiAgICAgIC8vIHRyeSBsb29rdXAgd2l0aCBnZXQgZm9yIGJhY2tib25lIG9yIHNpbWlsYXIgbW9kZWwgZGF0YVxuICAgICAgfSBlbHNlIGlmIChkb01vZGVsR2V0ICYmIHNjb3BlLmdldCAmJiB0eXBlb2Ygc2NvcGUuZ2V0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gc2NvcGUuZ2V0KGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNwZWNpYWxpemVkUGFydGlhbChpbnN0YW5jZSwgc3VicywgcGFydGlhbHMsIHN0YWNrU3Vicywgc3RhY2tQYXJ0aWFscywgc3RhY2tUZXh0KSB7XG4gICAgZnVuY3Rpb24gUGFydGlhbFRlbXBsYXRlKCkge307XG4gICAgUGFydGlhbFRlbXBsYXRlLnByb3RvdHlwZSA9IGluc3RhbmNlO1xuICAgIGZ1bmN0aW9uIFN1YnN0aXR1dGlvbnMoKSB7fTtcbiAgICBTdWJzdGl0dXRpb25zLnByb3RvdHlwZSA9IGluc3RhbmNlLnN1YnM7XG4gICAgdmFyIGtleTtcbiAgICB2YXIgcGFydGlhbCA9IG5ldyBQYXJ0aWFsVGVtcGxhdGUoKTtcbiAgICBwYXJ0aWFsLnN1YnMgPSBuZXcgU3Vic3RpdHV0aW9ucygpO1xuICAgIHBhcnRpYWwuc3Vic1RleHQgPSB7fTsgIC8vaGVoZS4gc3Vic3RleHQuXG4gICAgcGFydGlhbC5idWYgPSAnJztcblxuICAgIHN0YWNrU3VicyA9IHN0YWNrU3VicyB8fCB7fTtcbiAgICBwYXJ0aWFsLnN0YWNrU3VicyA9IHN0YWNrU3VicztcbiAgICBwYXJ0aWFsLnN1YnNUZXh0ID0gc3RhY2tUZXh0O1xuICAgIGZvciAoa2V5IGluIHN1YnMpIHtcbiAgICAgIGlmICghc3RhY2tTdWJzW2tleV0pIHN0YWNrU3Vic1trZXldID0gc3Vic1trZXldO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBzdGFja1N1YnMpIHtcbiAgICAgIHBhcnRpYWwuc3Vic1trZXldID0gc3RhY2tTdWJzW2tleV07XG4gICAgfVxuXG4gICAgc3RhY2tQYXJ0aWFscyA9IHN0YWNrUGFydGlhbHMgfHwge307XG4gICAgcGFydGlhbC5zdGFja1BhcnRpYWxzID0gc3RhY2tQYXJ0aWFscztcbiAgICBmb3IgKGtleSBpbiBwYXJ0aWFscykge1xuICAgICAgaWYgKCFzdGFja1BhcnRpYWxzW2tleV0pIHN0YWNrUGFydGlhbHNba2V5XSA9IHBhcnRpYWxzW2tleV07XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHN0YWNrUGFydGlhbHMpIHtcbiAgICAgIHBhcnRpYWwucGFydGlhbHNba2V5XSA9IHN0YWNrUGFydGlhbHNba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydGlhbDtcbiAgfVxuXG4gIHZhciByQW1wID0gLyYvZyxcbiAgICAgIHJMdCA9IC88L2csXG4gICAgICByR3QgPSAvPi9nLFxuICAgICAgckFwb3MgPSAvXFwnL2csXG4gICAgICByUXVvdCA9IC9cXFwiL2csXG4gICAgICBoQ2hhcnMgPSAvWyY8PlxcXCJcXCddLztcblxuICBmdW5jdGlvbiBjb2VyY2VUb1N0cmluZyh2YWwpIHtcbiAgICByZXR1cm4gU3RyaW5nKCh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpID8gJycgOiB2YWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gaG9nYW5Fc2NhcGUoc3RyKSB7XG4gICAgc3RyID0gY29lcmNlVG9TdHJpbmcoc3RyKTtcbiAgICByZXR1cm4gaENoYXJzLnRlc3Qoc3RyKSA/XG4gICAgICBzdHJcbiAgICAgICAgLnJlcGxhY2UockFtcCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2Uockx0LCAnJmx0OycpXG4gICAgICAgIC5yZXBsYWNlKHJHdCwgJyZndDsnKVxuICAgICAgICAucmVwbGFjZShyQXBvcywgJyYjMzk7JylcbiAgICAgICAgLnJlcGxhY2UoclF1b3QsICcmcXVvdDsnKSA6XG4gICAgICBzdHI7XG4gIH1cblxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbn0pKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyA/IGV4cG9ydHMgOiBIb2dhbik7XG4iLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcIm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XFxcIiBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IDIwcHggYXV0b1xcXCI+PGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5BZGQgdG8gd2lzaGxpc3Q8L2Rpdj48L2Rpdj5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPkFkZCB0byB3aXNobGlzdDwvaDE+PHA+SG93IG1hbnkgbWFhbmFzIGRvIHlvdSB3aXNoIHRvIG9mZmVyIHRvIGFjcXVpcmUgdGhpcyBpdGVtPzwvcD5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGJ1dHRvbiBpZD1cXFwiYXV0by1leHBsb3JlLWJ1dHRvblxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBcIik7aWYodC5zKHQuZihcImFjdGl2ZVwiLGMscCwxKSxjLHAsMCw2MSw2NyxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCIgZGF0YS1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwibG9jYXRpb25JZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgZGF0YS1tYXBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwicmVnaW9uSWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiPkF1dG8gZXhwbG9yZTwvYnV0dG9uPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YSBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJjYXJvdXNlbC1uZXdzIGNhcm91c2VsLWVlXFxcIiBocmVmPVxcXCJcXFwiIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwiYmFja2dyb3VuZEltYWdlXCIsYyxwLDApKSk7dC5iKFwiKVxcXCI+PGRpdj48aDQ+XCIpO3QuYih0LnYodC5mKFwiaDRcIixjLHAsMCkpKTt0LmIoXCI8L2g0PjxoNT5cIik7dC5iKHQudih0LmYoXCJoNVwiLGMscCwwKSkpO3QuYihcIjwvaDU+PHA+XCIpO3QuYih0LnYodC5mKFwicFwiLGMscCwwKSkpO3QuYihcIjwvcD48L2Rpdj48L2E+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5DaGFuZ2UgcHJpY2U8L2gxPjxwPkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT88L3A+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxidXR0b24gaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIGZhdm9yaXRlcy1hY3Rpb24tZWVcXFwiPlwiKTt0LmIodC52KHQuZihcInRleHRcIixjLHAsMCkpKTt0LmIoXCI8L2J1dHRvbj5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGEgaWQ9XFxcImhvbWUtXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJob21lLWNvbnRlbnQtdGlsZSBob21lLWNvbnRlbnQtc21hbGwgaG9tZS1jb250ZW50LXNtYWxsLWVlXFxcIiBocmVmPVxcXCJcIik7dC5iKHQudih0LmYoXCJocmVmXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcImJhY2tncm91bmRJbWFnZVwiLGMscCwwKSkpO3QuYihcIik7XFxcIj48aDQ+XCIpO3QuYih0LnYodC5mKFwiaDRcIixjLHAsMCkpKTt0LmIoXCI8L2g0PjwvYT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGNsYXNzPVxcXCJtYWluLW1lbnUtXCIpO3QuYih0LnYodC5mKFwiY2xhc3NcIixjLHAsMCkpKTt0LmIoXCIgbWFpbi1tZW51LWVlXFxcIj48YSBocmVmPVxcXCJcIik7dC5iKHQudih0LmYoXCJocmVmXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5cIik7dC5iKHQudih0LmYoXCJ0ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9hPjwvbGk+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaSBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uLWVlXFxcIj48c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+PGRpdiBjbGFzcz1cXFwiYWN0aW9uLWRlc2NyaXB0aW9uXFxcIj5cIik7dC5iKHQudih0LmYoXCJhY3Rpb25EZXNjcmlwdGlvblwiLGMscCwwKSkpO3QuYihcIjwvZGl2Pjwvc3Bhbj48L2xpPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2IGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYmxvYyBhY2NvdW50LWVlLWJsb2MgYmxvY1xcXCI+PGgyIGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5FbmhhbmNlbWVudHM8L2gyPjx1bCBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWFjdGlvbnNcXFwiPjxsaSBpZD1cXFwiZWUtZGVidWctZW5hYmxlZFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJkZWJ1Z1wiLGMscCwxKSxjLHAsMCwxOTQsMjAwLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIiB0aXRsZT1cXFwiRW5hYmxlcyBvciBkaXNhYmxlcyBsb2dnaW5nLlxcXCI+RGVidWc8L2xpPjxsaSBpZD1cXFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwibWluaWdhbWVzXCIsYyxwLDEpLGMscCwwLDMzMywzMzksXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiPk1pbmlnYW1lczwvbGk+PGxpIGlkPVxcXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJleHBsb3JhdGlvbnNcIixjLHAsMSksYyxwLDAsNDQ5LDQ1NSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCI+RXhwbG9yYXRpb25zPC9saT48bGkgaWQ9XFxcImVlLW1hcmtldC1lbmFibGVkXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcIm1hcmtldFwiLGMscCwxKSxjLHAsMCw1NTksNTY1LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIj5NYXJrZXQ8L2xpPjwvdWw+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPldpc2hsaXN0PC9hPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+dGFibGUge1xcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAxMDAlO1xcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVxcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIlxcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmFjdGlvbi1waWN0byB7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogNTBweDtcXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDUwcHg7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCJcXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5hY3Rpb24tcGljdG86aG92ZXI6bm90KC5kaXNhYmxlZCksXFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuZWRpdC1wcmljZTpob3ZlciB7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGFuaW1hdGlvbjogYnV0dG9uLWJvdW5jZSAzMDBtcyBsaW5lYXIgZm9yd2FyZHM7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjA1KSBjb250cmFzdCgxLjEpO1xcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVxcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIlxcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmVkaXQtcHJpY2Uge1xcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiXFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpbWcuZGlzYWJsZWQge1xcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCJcXHJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5pdGVtLWljb24ge1xcclwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogMTAwcHg7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogMTAwcHg7XFxyXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9PC9zdHlsZT48dGFibGU+PHRoZWFkPjx0cj48dGg+SWNvbjwvdGg+PHRoPk5hbWU8L3RoPjx0aD5QcmljZTwvdGg+PHRoPlN0YXR1czwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+IFwiKTtpZih0LnModC5mKFwid2lzaGxpc3RcIixjLHAsMSksYyxwLDAsNjA1LDEzMDMsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiA8dHIgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBkYXRhLXdlYXJhYmxlaXRlbWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJ3ZWFyYWJsZWl0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCI+PHRkPjxpbWcgY2xhc3M9XFxcIml0ZW0taWNvblxcXCIgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvdGQ+PHRkPjxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj48L3RkPjx0ZD48ZGl2IGNsYXNzPVxcXCJlZGl0LXByaWNlXFxcIiB0aXRsZT1cXFwiQ2hhbmdlIHByaWNlXFxcIj48c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5mKFwicHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiIGFsdD1cXFwibWFhbmFzXFxcIj48L3NwYW4+PC9kaXY+PC90ZD48dGQ+PHAgY2xhc3M9XFxcImVycm9yXFxcIj5cIik7dC5iKHQudih0LmYoXCJlcnJvclwiLGMscCwwKSkpO3QuYihcIjwvcD48L3RkPjx0ZD48aW1nIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gcmVzZXQtaXRlbS1zdGF0dXMgXCIpO2lmKCF0LnModC5mKFwiZXJyb3JcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXt0LmIoXCJkaXNhYmxlZFwiKTt9O3QuYihcIlxcXCIgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL3Jlc2V0LWJ0bi5wbmdcXFwiIHRpdGxlPVxcXCJSZXNldCB0aGUgZXJyb3Igc3RhdHVzXFxcIiBhbHQ9XFxcIlJlc2V0XFxcIj4gPGltZyBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIGRlbGV0ZS13aXNobGlzdC1pdGVtXFxcIiBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvZGVsZXRlLnBuZ1xcXCIgdGl0bGU9XFxcIlJlbW92ZSBmcm9tIHRoZSB3aXNobGlzdFxcXCIgYWx0PVxcXCJEZWxldGVcXFwiPjwvdGQ+PC90cj4gXCIpO30pO2MucG9wKCk7fXQuYihcIiA8L3Rib2R5PjwvdGFibGU+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiZXhwb3J0IGVudW0gRHVyYXRpb25Vbml0IHtcclxuICBtaWxsaXNlY29uZCA9IDEsXHJcbiAgc2Vjb25kID0gMTAwMCAqIG1pbGxpc2Vjb25kLFxyXG4gIG1pbnV0ZSA9IDYwICogc2Vjb25kLFxyXG4gIGhvdXIgPSA2MCAqIG1pbnV0ZSxcclxuICBkYXkgPSAyNCAqIGhvdXIsXHJcbiAgd2VlayA9IDcgKiBkYXksXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEdXJhdGlvbiB7XHJcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IG51bWJlciwgcmVhZG9ubHkgdW5pdDogRHVyYXRpb25Vbml0KSB7fVxyXG5cclxuICBkaXZpZGUoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC8gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxyXG4gIH1cclxuXHJcbiAgbWludXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC0gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxyXG4gIH1cclxuXHJcbiAgbXVsdGlwbHkoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlICogZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxyXG4gIH1cclxuXHJcbiAgcGx1cyhkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXHJcbiAgfVxyXG5cclxuICB0byh1bml0OiBEdXJhdGlvblVuaXQpOiBEdXJhdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKCh0aGlzLnZhbHVlICogdGhpcy51bml0KSAvIHVuaXQsIHVuaXQpXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIExvY2FsU3RvcmFnZUtleSB7XHJcbiAgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBcImF1dG9FeHBsb3JlTG9jYXRpb25zXCIsXHJcbiAgZGVidWcgPSBcImRlYnVnXCIsXHJcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcclxuICBtYXJrZXQgPSBcIm1hcmtldFwiLFxyXG4gIG1pbmlnYW1lcyA9IFwibWluaWdhbWVzXCIsXHJcbiAgd2lzaGxpc3QgPSBcIndpc2hsaXN0XCIsXHJcbn1cclxuIiwiZXhwb3J0IGVudW0gU2Vzc2lvblN0b3JhZ2VLZXkge1xyXG4gIGFjdGlvbiA9IFwiYWN0aW9uXCIsXHJcbiAgZXhwbG9yYXRpb25zRG9uZSA9IFwiZXhwbG9yYXRpb25zRG9uZVwiLFxyXG4gIG1ldGEgPSBcIm1ldGFcIixcclxuICBtaW5pZ2FtZXNEb25lID0gXCJtaW5pZ2FtZXNEb25lXCIsXHJcbiAgc2VsZWN0ZWRMb2NhdGlvbiA9IFwic2VsZWN0ZWRMb2NhdGlvblwiLFxyXG4gIHRha2VvdmVyID0gXCJ0YWtlb3ZlclwiLFxyXG4gIHdpc2hsaXN0ID0gXCJ3aXNobGlzdFwiLFxyXG59XHJcbiIsImV4cG9ydCBlbnVtIEJvZHlMb2NhdGlvbiB7XHJcbiAgQWxsID0gXCJcIixcclxuICBVbmRlcndlYXIgPSAxLFxyXG4gIFNraW5zID0gMixcclxuICBUYXR0b29zID0gMjAsXHJcbiAgTW91dGhzID0gMjEsXHJcbiAgRXllcyA9IDMsXHJcbiAgSGFpciA9IDQsXHJcbiAgU29ja3MgPSA1LFxyXG4gIFNob2VzID0gNixcclxuICBQYW50cyA9IDcsXHJcbiAgSGFuZEFjY2Vzc29yaWVzID0gOCxcclxuICBUb3BzID0gOSxcclxuICBDb2F0cyA9IDEwLFxyXG4gIEdsb3ZlcyA9IDExLFxyXG4gIE5lY2tsYWNlcyA9IDEyLFxyXG4gIERyZXNzZXMgPSAxMyxcclxuICBIYXRzID0gMTQsXHJcbiAgRmFjZUFjY2Vzc29yaWVzID0gMTUsXHJcbiAgRnVuZHMgPSAxNixcclxuICBCZWx0cyA9IDE4LFxyXG4gIEF0bW9zcGhlcmVzID0gMTksXHJcbn1cclxuIiwiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuL3R5cGUuZW51bVwiXHJcblxyXG5leHBvcnQgZW51bSBDYXRlZ29yeVN0cmluZyB7XHJcbiAgYWxsID0gXCJcIixcclxuICBmb29kID0gXCJmb29kXCIsXHJcbiAgYWxjaGVteSA9IFwiYWxjaGVteVwiLFxyXG4gIHV0aWxpdHkgPSBcInV0aWxpdHlcIixcclxuICB0YW1lID0gXCJ0YW1lXCIsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIENhdGVnb3J5TnVtYmVyIHtcclxuICBhbGwgPSBDYXRlZ29yeVN0cmluZy5hbGwsXHJcbiAgZm9vZCA9IDEsXHJcbiAgYWxjaGVteSA9IFR5cGUuQ29uc3VtYWJsZSxcclxuICB1dGlsaXR5ID0gMyxcclxuICB0YW1lID0gNCxcclxufVxyXG4iLCJleHBvcnQgZW51bSBHdWFyZCB7XHJcbiAgYW55ID0gXCJcIixcclxuICBsaWdodCA9IDEsXHJcbiAgb2JzaWRpYW4sXHJcbiAgYWJzeW50aGUsXHJcbiAgc2hhZG93LFxyXG59XHJcbiIsImV4cG9ydCBlbnVtIFJhcml0eSB7XHJcbiAgYWxsID0gXCJcIixcclxuICBjb21tb24gPSBcImNvbW1vblwiLFxyXG4gIHJhcmUgPSBcInJhcmVcIixcclxuICBFcGljID0gXCJlcGljXCIsXHJcbiAgbGVnZW5kYXJ5ID0gXCJsZWdlbmRhcnlcIixcclxuICBldmVudCA9IFwiZXZlbnRcIixcclxufVxyXG4iLCJleHBvcnQgZW51bSBUeXBlIHtcclxuICBBbGwgPSBcIlwiLFxyXG4gIEJhZyA9IFwiQmFnXCIsXHJcbiAgQ29uc3VtYWJsZSA9IFwiQ29uc3VtYWJsZVwiLFxyXG4gIEVnZ0l0ZW0gPSBcIkVnZ0l0ZW1cIixcclxuICBQbGF5ZXJXZWFyYWJsZUl0ZW0gPSBcIlBsYXllcldlYXJhYmxlSXRlbVwiLFxyXG4gIFF1ZXN0SXRlbSA9IFwiUXVlc3RJdGVtXCIsXHJcbn1cclxuIiwiZXhwb3J0IGVudW0gVGFrZW92ZXJBY3Rpb24ge1xyXG4gIGRhaWx5ID0gXCJkYWlseVwiLFxyXG4gIG1pbmlnYW1lcyA9IFwibWluaWdhbWVzXCIsXHJcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcclxuICBhdWN0aW9ucyA9IFwiYXVjdGlvbnNcIixcclxuICBidXkgPSBcImJ1eVwiLFxyXG4gIC8vIHNlbGwsXHJcbiAgd2FpdCA9IFwid2FpdFwiLFxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvc2V0dGluZ3NcIlxyXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXkgfSBmcm9tIFwiLi9sb2NhbF9zdG9yYWdlLmVudW1cIlxyXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi93aXNoZWRfaXRlbVwiXHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlIHtcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBsb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2VcclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHN0YXRpYyBnZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMoKTogQXV0b0V4cGxvcmVMb2NhdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLmdldEl0ZW08QXV0b0V4cGxvcmVMb2NhdGlvbltdPihcclxuICAgICAgTG9jYWxTdG9yYWdlS2V5LmF1dG9FeHBsb3JlTG9jYXRpb25zLFxyXG4gICAgICBbXVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldCBhdXRvRXhwbG9yZUxvY2F0aW9ucyhsb2NhdGlvbnM6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSkge1xyXG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5hdXRvRXhwbG9yZUxvY2F0aW9ucywgbG9jYXRpb25zKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBkZWJ1ZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5LmRlYnVnLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXQgZGVidWcoZW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5kZWJ1ZywgZW5hYmxlZClcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgZXhwbG9yYXRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25zKGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBlbmFibGVkKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBtYXJrZXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5tYXJrZXQsIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldCBtYXJrZXQoZW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5tYXJrZXQsIGVuYWJsZWQpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0IG1pbmlnYW1lcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZmFsc2UpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0IG1pbmlnYW1lcyhlbmFibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZW5hYmxlZClcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgc2V0dGluZ3MoKTogU2V0dGluZ3Mge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYXV0b0V4cGxvcmVMb2NhdGlvbnM6IHRoaXMuYXV0b0V4cGxvcmVMb2NhdGlvbnMsXHJcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxyXG4gICAgICBleHBsb3JhdGlvbnM6IHRoaXMuZXhwbG9yYXRpb25zLFxyXG4gICAgICBtYXJrZXQ6IHRoaXMubWFya2V0LFxyXG4gICAgICBtaW5pZ2FtZXM6IHRoaXMubWluaWdhbWVzLFxyXG4gICAgICB3aXNobGlzdDogdGhpcy53aXNobGlzdCxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXQgc2V0dGluZ3Moc2V0dGluZ3M6IFNldHRpbmdzKSB7XHJcbiAgICB0aGlzLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gc2V0dGluZ3MuYXV0b0V4cGxvcmVMb2NhdGlvbnNcclxuICAgIHRoaXMuZXhwbG9yYXRpb25zID0gc2V0dGluZ3MuZXhwbG9yYXRpb25zXHJcbiAgICB0aGlzLm1hcmtldCA9IHNldHRpbmdzLm1hcmtldFxyXG4gICAgdGhpcy5taW5pZ2FtZXMgPSBzZXR0aW5ncy5taW5pZ2FtZXNcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgd2lzaGxpc3QoKTogV2lzaGVkSXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldEl0ZW08V2lzaGVkSXRlbVtdPihMb2NhbFN0b3JhZ2VLZXkud2lzaGxpc3QsIFtdKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldCB3aXNobGlzdChsb2NhdGlvbnM6IFdpc2hlZEl0ZW1bXSkge1xyXG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgbG9jYXRpb25zKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgZmFsbGJhY2s6IFQpOiBUIHtcclxuICAgIHJldHVybiA8VD4oXHJcbiAgICAgIChKU09OLnBhcnNlKHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyBKU09OLnN0cmluZ2lmeShmYWxsYmFjaykpID8/XHJcbiAgICAgICAgZmFsbGJhY2spXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBzZXRJdGVtPFQ+KGtleTogTG9jYWxTdG9yYWdlS2V5LCB2YWx1ZTogVCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcclxuXHJcbmV4cG9ydCBjbGFzcyBDb25zb2xlIHtcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBjb25zb2xlID0gY29uc29sZVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGRlYnVnZ2luZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuZGVidWdcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxyXG4gICAgdGhpcy5jb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXHJcbiAgICB0aGlzLmNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxyXG4gICAgdGhpcy5jb25zb2xlLmluZm8obWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbG9nKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXHJcbiAgICB0aGlzLmNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cclxuICAgIHRoaXMuY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IE1ldGEgfSBmcm9tIFwiLi4vYXBpL21ldGFcIlxyXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxyXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlS2V5IH0gZnJvbSBcIi4vc2Vzc2lvbl9zdG9yYWdlLmVudW1cIlxyXG5pbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4vdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlIHtcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzZXNzaW9uU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlXHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBzdGF0aWMgZ2V0IGFjdGlvbigpOiBUYWtlb3ZlckFjdGlvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5hY3Rpb24sIG51bGwpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0IGFjdGlvbihhY3Rpb246IFRha2VvdmVyQWN0aW9uIHwgbnVsbCkge1xyXG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbnNEb25lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5leHBsb3JhdGlvbnNEb25lLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25zRG9uZShkb25lOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zRG9uZSwgZG9uZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgbWV0YSgpOiBNZXRhIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1ldGEsIG51bGwpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0IG1ldGEobWV0YTogTWV0YSB8IG51bGwpIHtcclxuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5tZXRhLCBtZXRhKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBtaW5pZ2FtZXNEb25lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5taW5pZ2FtZXNEb25lLCBmYWxzZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXQgbWluaWdhbWVzRG9uZShkb25lOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWluaWdhbWVzRG9uZSwgZG9uZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgc2VsZWN0ZWRMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnNlbGVjdGVkTG9jYXRpb24sIG51bGwpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0IHNlbGVjdGVkTG9jYXRpb24oc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsKSB7XHJcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc2VsZWN0ZWRMb2NhdGlvbiwgc2VsZWN0ZWQpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0IHRha2VvdmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZmFsc2UpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0IHRha2VvdmVyKGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZW5hYmxlZClcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgd2lzaGxpc3QoKTogV2lzaGVkSXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIFtdKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldCB3aXNobGlzdCh3aXNobGlzdDogV2lzaGVkSXRlbVtdKSB7XHJcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIHdpc2hsaXN0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IFNlc3Npb25TdG9yYWdlS2V5LCBmYWxsYmFjazogVCk6IFQge1xyXG4gICAgcmV0dXJuIDxUPihcclxuICAgICAgKEpTT04ucGFyc2UoXHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXHJcbiAgICAgICkgPz8gZmFsbGJhY2spXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBzZXRJdGVtPFQ+KGtleTogU2Vzc2lvblN0b3JhZ2VLZXksIHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgQnV5Tm93UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2J1eV9ub3dfcHJpY2VcIlxyXG5pbXBvcnQgdHlwZSB7IEN1cnJlbnRQcmljZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY3VycmVudF9wcmljZVwiXHJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnkgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXHJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnlEYXRhU2V0IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlfZGF0YV9zZXRcIlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EZXRhaWxzKGxpOiBIVE1MTElFbGVtZW50KTogTWFya2V0RW50cnkgfCBudWxsIHtcclxuICBjb25zdCBuYW1lID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWJzdHJhY3QtbmFtZVwiKT8uaW5uZXJUZXh0XHJcbiAgY29uc3Qgc3JjID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcIi5hYnN0cmFjdC1pY29uIGltZ1wiKT8uc3JjXHJcblxyXG4gIGNvbnN0IGN1cnJlbnRQcmljZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXHJcbiAgICBcIi5wcmljZS1pdGVtW2RhdGEtYmlkc11cIlxyXG4gICk/LmRhdGFzZXQgYXMgdW5rbm93biBhcyBDdXJyZW50UHJpY2VcclxuXHJcbiAgY29uc3QgYnV5Tm93UHJpY2UgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFxyXG4gICAgXCIucHJpY2UtaXRlbTpub3QoW2RhdGEtYmlkc10pXCJcclxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQnV5Tm93UHJpY2VcclxuXHJcbiAgaWYgKCFzcmMgfHwgIW5hbWUpIHJldHVybiBudWxsXHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi4obGkuZGF0YXNldCBhcyB1bmtub3duIGFzIE1hcmtldEVudHJ5RGF0YVNldCksXHJcbiAgICBpY29uOiBzcmMsXHJcbiAgICBuYW1lLFxyXG4gICAgYnV5Tm93UHJpY2UsXHJcbiAgICBjdXJyZW50UHJpY2UsXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGljazxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxyXG4gIHNlbGVjdG9yOiBzdHJpbmdcclxuKTogUHJvbWlzZTxUPiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KHJlc29sdmUgPT4ge1xyXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPFQ+KHNlbGVjdG9yKVxyXG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVyblxyXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxyXG5cclxuICAgICAgLy8gU29tZSBlbGVtZW50cyBkb24ndCBoYXZlIHRoZWlyIGNsaWNrIGhhbmRsZXJzIHJlYWR5IHVudGlsIHRoZXkncmVcclxuICAgICAgLy8gaG92ZXJlZC5cclxuICAgICAgY29uc3QgbW91c2VFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudFwiKVxyXG4gICAgICBtb3VzZUV2ZW50LmluaXRFdmVudChcIm1vdXNlb3ZlclwiKVxyXG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudClcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGVsZW1lbnQuY2xpY2soKVxyXG4gICAgICAgIHJlc29sdmUoZWxlbWVudClcclxuICAgICAgfSwgODAwKVxyXG4gICAgfSwgODAwKVxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjdGlvbiB7XHJcbiAgLyoqIEtleSBieSB3aGljaCB0aGUgYFNlc3Npb25TdG9yYWdlYCBjYW4gcmVmZXJlbmNlIHRoaXMgYWN0aW9uLiAqL1xyXG4gIGFic3RyYWN0IHJlYWRvbmx5IGtleTogVGFrZW92ZXJBY3Rpb25cclxuXHJcbiAgLyoqIERldGVybWluZXMgaWYgdGhpcyBhY3Rpb24gY2FuIGJlIHBlcmZvcm1lZCBkdXJpbmcgYSB0YWtlb3Zlci4gKi9cclxuICBhYnN0cmFjdCBjb25kaXRpb24oKTogYm9vbGVhblxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtcyB0aGUgYWN0aW9uIGFuZCByZXR1cm5zIGB0cnVlYCB0aGUgYnJhaW4gY2FuIGNvbnRpbnVlIHdpdGggYW5vdGhlclxyXG4gICAqIGFjdGlvbiBvciBgZmFsc2VgIGlmIHRoaXMgYWN0aW9uIGlzbid0IGZpbmlzaGVkIGV4ZWN1dGluZy5cclxuICAgKi9cclxuICBhYnN0cmFjdCBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj5cclxufVxyXG4iLCJpbXBvcnQgeyBhamF4U2VhcmNoIH0gZnJvbSBcIi4uLy4uL2FqYXgvYWpheF9zZWFyY2hcIlxyXG5pbXBvcnQgeyBidXkgfSBmcm9tIFwiLi4vLi4vYWpheC9idXlcIlxyXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcclxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxyXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcclxuaW1wb3J0IHsgZ2V0SXRlbURldGFpbHMgfSBmcm9tIFwiLi4vLi4vbWFya2V0cGxhY2UvbWFya2V0cGxhY2VfaGFuZGxlcnNcIlxyXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxyXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXHJcblxyXG5jbGFzcyBCdXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xyXG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmJ1eVxyXG5cclxuICBwcml2YXRlIGdldCBjdXJyZW50TWFhbmEoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBOdW1iZXIoXHJcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI2N1cnJlbmN5LW1hYW5hXCIpPy5kYXRhc2V0XHJcbiAgICAgICAgLm1hYW5hXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLm1hcmtldCAmJiBCb29sZWFuKExvY2FsU3RvcmFnZS53aXNobGlzdC5sZW5ndGgpXHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL21hcmtldHBsYWNlXCIpKSB7XHJcbiAgICAgIGF3YWl0IGNsaWNrPEhUTUxBbmNob3JFbGVtZW50PihcIi5tYWluLW1lbnUtbWFya2V0cGxhY2UgYVwiKVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qgd2lzaGVkIG9mIExvY2FsU3RvcmFnZS53aXNobGlzdCkge1xyXG4gICAgICAvLyBDbG90aGVzIG1pZ2h0IGJlIGEgc3BlY2lhbCBleGNlcHRpb24uIElmIHRoZXkgYXJlLCB0aGVuIGNoZWNrIGZvclxyXG4gICAgICAvLyBgd2lzaGVkLnR5cGUgPT09IFR5cGUuUGxheWVyV2VhcmFibGVJdGVtYC5cclxuICAgICAgaWYgKHdpc2hlZC5lcnJvcikge1xyXG4gICAgICAgIENvbnNvbGUud2FybihgU2tpcHBlZCBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICBDb25zb2xlLmluZm8oYFNlYXJjaGluZyBmb3IgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxyXG5cclxuICAgICAgbGV0IGFtb3VudCA9IDhcclxuICAgICAgZm9ycGFnZTogZm9yIChsZXQgcGFnZSA9IDE7IGFtb3VudCA9PT0gODsgcGFnZSsrKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuc2VhcmNoKHdpc2hlZCwgcGFnZSlcclxuICAgICAgICBhbW91bnQgPSByZXN1bHRzLmxlbmd0aFxyXG4gICAgICAgIENvbnNvbGUubG9nKGBGb3VuZCAke2Ftb3VudH0gcmVzdWx0c2AsIHJlc3VsdHMpXHJcblxyXG4gICAgICAgIGNvbnN0IHdhbnRlZCA9IHJlc3VsdHMuZmlsdGVyKFxyXG4gICAgICAgICAgcmVzdWx0ID0+XHJcbiAgICAgICAgICAgIHJlc3VsdC5pY29uID09PSB3aXNoZWQuaWNvbiAmJlxyXG4gICAgICAgICAgICByZXN1bHQuYnV5Tm93UHJpY2UgJiZcclxuICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZS5wcmljZSkgPD0gd2lzaGVkLnByaWNlICYmXHJcbiAgICAgICAgICAgIE51bWJlcihyZXN1bHQuYnV5Tm93UHJpY2UucHJpY2UpIDw9IHRoaXMuY3VycmVudE1hYW5hXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHdhbnRlZCkge1xyXG4gICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5idXkocmVzdWx0KSkpIGJyZWFrIGZvcnBhZ2VcclxuXHJcbiAgICAgICAgICBDb25zb2xlLmluZm8oXHJcbiAgICAgICAgICAgIGBCb3VnaHQgXCIke3Jlc3VsdC5uYW1lfVwiIGZvciAke051bWJlcihcclxuICAgICAgICAgICAgICByZXN1bHQuYnV5Tm93UHJpY2U/LnByaWNlXHJcbiAgICAgICAgICAgICl9IG1hYW5hcy5gLFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAkLmZsYXZyTm90aWYoXHJcbiAgICAgICAgICAgIGBCb3VnaHQgPHN0cm9uZz4ke1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5uYW1lXHJcbiAgICAgICAgICAgIH08L3N0cm9uZz4gZm9yIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtOdW1iZXIoXHJcbiAgICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlPy5wcmljZVxyXG4gICAgICAgICAgICApfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmBcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYnV5KHJlc3VsdDogTWFya2V0RW50cnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGpzb24gPSBhd2FpdCBidXkoTnVtYmVyKHJlc3VsdC5pdGVtaWQpKVxyXG4gICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIilcclxuICAgICAgdGhpcy5zZXRFcnJvcihyZXN1bHQud2VhcmFibGVpdGVtaWQsIGpzb24uZGF0YSlcclxuICAgIHJldHVybiBqc29uLnJlc3VsdCA9PT0gXCJzdWNjZXNzXCJcclxuICB9XHJcblxyXG4gIC8qKiBTZWFyY2ggZm9yIGEgd2lzaGVkIGl0ZW0gb24gYSBzcGVjaWZpYyBwYWdlIHVzaW5nIHRoZSBpdGVtJ3MgbmFtZS4gKi9cclxuICBwcml2YXRlIGFzeW5jIHNlYXJjaCh3aXNoZWQ6IFdpc2hlZEl0ZW0sIHBhZ2UgPSAxKTogUHJvbWlzZTxNYXJrZXRFbnRyeVtdPiB7XHJcbiAgICBjb25zdCBmaWx0ZXJJdGVtTmFtZSA9XHJcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjZmlsdGVyLWl0ZW1OYW1lXCIpXHJcbiAgICBpZiAoZmlsdGVySXRlbU5hbWUpIGZpbHRlckl0ZW1OYW1lLnZhbHVlID0gd2lzaGVkLm5hbWVcclxuXHJcbiAgICBjb25zdCBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcclxuICAgICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zXCJcclxuICAgIClcclxuICAgIGlmICghbWFya2V0cGxhY2VTZWFyY2hJdGVtcykgcmV0dXJuIFtdXHJcbiAgICBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zLmlubmVySFRNTCA9IGF3YWl0IGFqYXhTZWFyY2goe1xyXG4gICAgICBuYW1lOiB3aXNoZWQubmFtZSxcclxuICAgICAgcGFnZSxcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oXHJcbiAgICAgIG1hcmtldHBsYWNlU2VhcmNoSXRlbXMucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcclxuICAgICAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbVwiXHJcbiAgICAgIClcclxuICAgIClcclxuICAgICAgLm1hcChnZXRJdGVtRGV0YWlscylcclxuICAgICAgLmZpbHRlcjxNYXJrZXRFbnRyeT4oKGl0ZW0pOiBpdGVtIGlzIE1hcmtldEVudHJ5ID0+IGl0ZW0gIT09IG51bGwpXHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBgV2lzaGVkSXRlbS5lcnJvcmAgcHJvcGVydHkgd2l0aG91dCByZW9yZGVyaW5nIHRoZSB3aXNobGlzdC4gKi9cclxuICBwcml2YXRlIHNldEVycm9yKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XHJcbiAgICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcclxuICAgICAgaXRlbSA9PiBpdGVtLndlYXJhYmxlaXRlbWlkID09PSB3ZWFyYWJsZWl0ZW1pZFxyXG4gICAgKVxyXG4gICAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cclxuICAgIGlmICghZW50cnkpIHJldHVyblxyXG5cclxuICAgIGVudHJ5LmVycm9yID0gZXJyb3JcclxuICAgIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IFtcclxuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXHJcbiAgICAgIGVudHJ5LFxyXG4gICAgICAuLi53aXNobGlzdC5zbGljZShpbmRleCArIDEsIHVuZGVmaW5lZCksXHJcbiAgICBdXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQnV5QWN0aW9uKClcclxuIiwiaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1eShpdGVtSWQ6IG51bWJlcik6IFByb21pc2U8UGFja2V0PFwiXCI+PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgdm9pZCAkLnBvc3QoXHJcbiAgICAgIFwiL21hcmtldHBsYWNlL2J1eVwiLFxyXG4gICAgICB7IGlkOiBpdGVtSWQgfSxcclxuICAgICAgKGpzb246IFBhY2tldDxcIlwiPik6IHZvaWQgPT4ge1xyXG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcclxuICAgICAgICByZXNvbHZlKGpzb24pXHJcblxyXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIFwianNvblwiXHJcbiAgICApXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBCb2R5TG9jYXRpb24gfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvYm9keV9sb2NhdGlvbi5lbnVtXCJcclxuaW1wb3J0IHsgQ2F0ZWdvcnlOdW1iZXIgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bVwiXHJcbmltcG9ydCB7IEd1YXJkIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW1cIlxyXG5pbXBvcnQgeyBSYXJpdHkgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW1cIlxyXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bVwiXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWpheFNlYXJjaChkYXRhOiB7XHJcbiAgdHlwZT86IFR5cGVcclxuICBib2R5TG9jYXRpb24/OiBCb2R5TG9jYXRpb25cclxuICBjYXRlZ29yeT86IENhdGVnb3J5TnVtYmVyXHJcbiAgcmFyaXR5PzogUmFyaXR5XHJcbiAgcHJpY2U/OiBudW1iZXIgfCBcIlwiXHJcbiAgZ3VhcmQ/OiBHdWFyZFxyXG4gIC8qKiBQYWdlIG51bWJlciwgaW5kZXhlZCBieSAxICovXHJcbiAgcGFnZTogbnVtYmVyXHJcbiAgbmFtZT86IHN0cmluZ1xyXG59KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICBkYXRhID0ge1xyXG4gICAgLi4ue1xyXG4gICAgICB0eXBlOiBUeXBlLkFsbCxcclxuICAgICAgYm9keUxvY2F0aW9uOiBCb2R5TG9jYXRpb24uQWxsLFxyXG4gICAgICBjYXRlZ29yeTogQ2F0ZWdvcnlOdW1iZXIuYWxsLFxyXG4gICAgICByYXJpdHk6IFJhcml0eS5hbGwsXHJcbiAgICAgIHByaWNlOiBcIlwiLFxyXG4gICAgICBndWFyZDogR3VhcmQuYW55LFxyXG4gICAgICBwYWdlOiAxLFxyXG4gICAgICBuYW1lOiBcIlwiLFxyXG4gICAgfSxcclxuICAgIC4uLmRhdGEsXHJcbiAgfVxyXG5cclxuICBjb25zdCBJVEVNU19QRVJfUEFHRSA9IDhcclxuXHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpOiB2b2lkID0+IHtcclxuICAgIHZvaWQgJC5nZXQoXHJcbiAgICAgIFwiL21hcmtldHBsYWNlL2FqYXhfc2VhcmNoXCIsXHJcbiAgICAgIHtcclxuICAgICAgICAuLi5kYXRhLFxyXG4gICAgICAgIGZyb206IChkYXRhLnBhZ2UgLSAxKSAqIElURU1TX1BFUl9QQUdFLFxyXG4gICAgICAgIHRvOiBJVEVNU19QRVJfUEFHRSxcclxuICAgICAgfSxcclxuICAgICAgcmVzb2x2ZVxyXG4gICAgKVxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcclxuaW1wb3J0IHsgcmVzZXRUYWtlb3ZlciB9IGZyb20gXCIuLi9icmFpblwiXHJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxyXG5cclxuY2xhc3MgRGFpbHlBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmRhaWx5XHJcblxyXG4gIC8qKiBDaGVja3MgaWYgdGhlIGRhaWx5IG1hYW5hIGdpZnQgaWYgdGhlcmUuICovXHJcbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgISFkYWlseUdpZnRDb250YWluZXIgJiZcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgIT09IFwibm9uZVwiXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGljayBvbiB0aGUgZGFpbHkgbWFhbmEgZ2lmdC5cclxuICAgKiBAcmV0dXJucyBgZmFsc2VgLiBUaGlzIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtIG1lYW5pbmdmdWwgYWN0aW9ucyBvbiB0aGVcclxuICAgKiBwYWdlLlxyXG4gICAqL1xyXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBkYWlseUdpZnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRhaWx5LWdpZnQtY29udGFpbmVyXCIpXHJcbiAgICBpZiAoXHJcbiAgICAgICFkYWlseUdpZnRDb250YWluZXIgfHxcclxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgPT09IFwibm9uZVwiXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZGFpbHlHaWZ0Q29udGFpbmVyLmNsaWNrKClcclxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIi5maXJzdC1jb25uZXhpb24gLmZsYXZyLWJ1dHRvbi5kZWZhdWx0XCIpXHJcblxyXG4gICAgcmVzZXRUYWtlb3ZlcigpXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBEYWlseUFjdGlvbigpXHJcbiIsImltcG9ydCB0eXBlIHsgQ2hhbmdlUmVnaW9uRGF0YSB9IGZyb20gXCIuLi9hcGkvY2hhbmdlX3JlZ2lvbl9kYXRhXCJcclxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoYW5nZVJlZ2lvbihcclxuICBuZXdSZWdpb25JZDogbnVtYmVyXHJcbik6IFByb21pc2U8UGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxDaGFuZ2VSZWdpb25EYXRhPj4oKHJlc29sdmUpOiB2b2lkID0+IHtcclxuICAgIHZvaWQgJC5wb3N0KFxyXG4gICAgICBcIi9wZXQvY2hhbmdlUmVnaW9uXCIsXHJcbiAgICAgIHsgbmV3UmVnaW9uSWQgfSxcclxuICAgICAgKGpzb246IFBhY2tldDxDaGFuZ2VSZWdpb25EYXRhPik6IHZvaWQgPT4ge1xyXG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcclxuICAgICAgICByZXNvbHZlKGpzb24pXHJcblxyXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1cnJlbnRSZWdpb24gPSBqc29uLmRhdGEuY3VycmVudFJlZ2lvblxyXG5cclxuICAgICAgICBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPVxyXG4gICAgICAgICAgdHlwZW9mIGpzb24uZGF0YS5wZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPT09IFwidW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgIDoganNvbi5kYXRhLnBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvblxyXG5cclxuICAgICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uID1cclxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvbiA9PT0gXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgOiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvblxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfSlcclxufVxyXG4iLCJleHBvcnQgZW51bSBSZXN1bHQge1xuICBlcnJvciA9IFwiZXJyb3JcIixcbiAgc3VjY2VzcyA9IFwic3VjY2Vzc1wiLFxufVxuIiwiZXhwb3J0IGVudW0gRXhwbG9yYXRpb25TdGF0dXMge1xuICBpZGxlLFxuICByZXN1bHQsXG4gIGNhcHR1cmUsXG4gIHBlbmRpbmcsXG59XG4iLCJpbXBvcnQgeyBjYXB0dXJlRW5kIH0gZnJvbSBcIi4uLy4uL2FqYXgvY2FwdHVyZV9lbmRcIlxyXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcclxuaW1wb3J0IHsgZXhwbG9yYXRpb25SZXN1bHRzIH0gZnJvbSBcIi4uLy4uL2FqYXgvZXhwbG9yYXRpb25fcmVzdWx0c1wiXHJcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuLi8uLi9hcGkvcmVzdWx0LmVudW1cIlxyXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxyXG5pbXBvcnQgeyBEdXJhdGlvblVuaXQgfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIlxyXG5pbXBvcnQgdHlwZSB7IE1hcFJlZ2lvbiwgU2Vhc29uIH0gZnJvbSBcIi4uLy4uL2VsZGFyeWEvY3VycmVudF9yZWdpb25cIlxyXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL3RyZWFzdXJlXCJcclxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxyXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxyXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXHJcbmltcG9ydCB7IEV4cGxvcmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4uL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtXCJcclxuaW1wb3J0IHR5cGUgeyBTdGFydEV4cGxvcmF0aW9uIH0gZnJvbSBcIi4uL3N0YXJ0X2V4cGxvcmF0aW9uXCJcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcclxuXHJcbmNsYXNzIEV4cGxvcmF0aW9uQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcclxuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5leHBsb3JhdGlvbnNcclxuXHJcbiAgcHJpdmF0ZSBnZXQgZ2xvYmFscygpOiB7XHJcbiAgICBjdXJyZW50UmVnaW9uOiBNYXBSZWdpb25cclxuICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbjogUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIHwgbnVsbFxyXG4gICAgdGltZUxlZnRFeHBsb3JhdGlvbjogbnVtYmVyIHwgbnVsbFxyXG4gIH0ge1xyXG4gICAgcmV0dXJuIHsgY3VycmVudFJlZ2lvbiwgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uLCB0aW1lTGVmdEV4cGxvcmF0aW9uIH1cclxuICB9XHJcblxyXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgJiZcclxuICAgICAgIVNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgJiZcclxuICAgICAgISFMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMubGVuZ3RoXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9wZXRcIikge1xyXG4gICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LXBldCBhXCIpXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmdldEV4cGxvcmF0aW9uU3RhdHVzKCkpIHtcclxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5pZGxlOlxyXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuc3RhcnRFeHBsb3JhdGlvbigpKS5zZWxlY3RlZClcclxuICAgICAgICAgIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSB0cnVlXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmc6XHJcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLndhaXRFeHBsb3JhdGlvbigpKSAmJiB0aGlzLnBlcmZvcm0oKVxyXG5cclxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5yZXN1bHQ6XHJcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRFeHBsb3JhdGlvbigpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXHJcblxyXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLmNhcHR1cmU6XHJcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRDYXB0dXJlKClcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtKClcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNsaWNrRXhwbG9yZSgpOiBQcm9taXNlPEhUTUxCdXR0b25FbGVtZW50PiB7XHJcbiAgICByZXR1cm4gY2xpY2soXCIjZXhwbG9yZS1idXR0b25cIilcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tMb2NhdGlvbihcclxuICAgIHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uXHJcbiAgKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xyXG4gICAgcmV0dXJuIGNsaWNrPEhUTUxEaXZFbGVtZW50PihcclxuICAgICAgYC5tYXAtbG9jYXRpb25bZGF0YS1pZD1cIiR7c2VsZWN0ZWQubG9jYXRpb24uaWR9XCJdYFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGlja1JlZ2lvbihzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvbik6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCB7XHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcclxuICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkLnJlZ2lvbi5pZH1cIl1gXHJcbiAgICApXHJcblxyXG4gICAgaWYgKCFkaXYpIHtcclxuICAgICAgLy8gQ2xlYXJpbmcgaW52YWxpZCByZWdpb25zIGlzIHVzZWZ1bCB0byByZW1vdmUgZmluaXNoZWQgZXZlbnRzLlxyXG4gICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPVxyXG4gICAgICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICBzYXZlZCA9PiBzYXZlZC5yZWdpb24uaWQgIT09IHNlbGVjdGVkLnJlZ2lvbi50b1N0cmluZygpXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcclxuICAgICAgbG9jYXRpb24ucmVsb2FkKClcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBkaXYuY2xpY2soKVxyXG4gICAgcmV0dXJuIGRpdlxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjbGlja1NlYXNvbigpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcclxuICAgIHJldHVybiBjbGljazxIVE1MSW1hZ2VFbGVtZW50PihcIiNjcnlzdGFsLWltYWdlcy1jb250YWluZXJcIilcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZW5kQ2FwdHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZvaWQgbmV3IEF1ZGlvKFxyXG4gICAgICAgIFwiL3N0YXRpYy9ldmVudC8yMDIxL211c2ljL3NvdW5kcy9taXNzaW9uLWNvbXBsZXRlLm1wM1wiXHJcbiAgICAgICkucGxheSgpXHJcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNvcGVuLWNhcHR1cmUtaW50ZXJmYWNlXCIpXHJcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2FwdHVyZS1idXR0b25cIilcclxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjbG9zZS1yZXN1bHRcIilcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZW5kRXhwbG9yYXRpb24oKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xyXG4gICAgcmV0dXJuIGNsaWNrKFwiI2Nsb3NlLXJlc3VsdFwiKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50U2Vhc29uKCk6IFNlYXNvbiB7XHJcbiAgICByZXR1cm4gPFNlYXNvbj4oQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKT8uY2xhc3NMaXN0ID8/IFtdKVxyXG4gICAgICAuZmluZChjID0+IGMuc3RhcnRzV2l0aChcInNlYXNvbi1cIikpXHJcbiAgICAgID8ucmVwbGFjZShcInNlYXNvbi1cIiwgXCJcIikgPz8gbnVsbClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RXhwbG9yYXRpb25TdGF0dXMoKTogRXhwbG9yYXRpb25TdGF0dXMge1xyXG4gICAgaWYgKFxyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI29wZW4tY2FwdHVyZS1pbnRlcmZhY2VcIikgfHxcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjYXB0dXJlLWludGVyZmFjZS1vdXRlci5hY3RpdmVcIilcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwZW5kaW5nLW1hcC1sb2NhdGlvbi1kYXRhLW91dGVyLmFjdGl2ZVwiKSB8fFxyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hcC1jb250YWluZXIucGVuZGluZ1wiKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nXHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdHJlYXN1cmUtaHVudC1yZXN1bHQtb3ZlcmxheS5hY3RpdmVcIikpXHJcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5yZXN1bHRcclxuICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5pZGxlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExvd2VzdEVuZXJneUxvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24ge1xyXG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5yZWR1Y2UoKGxvd2VzdCwgcGxhY2UpID0+XHJcbiAgICAgIE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPFxyXG4gICAgICBOdW1iZXIobG93ZXN0LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxyXG4gICAgICAgID8gcGxhY2VcclxuICAgICAgICA6IGxvd2VzdFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZCA9IFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb25cclxuICAgIGlmICghc2VsZWN0ZWQpIHtcclxuICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdExvY2F0aW9uKClcclxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IHNlbGVjdGVkXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGVkXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcclxuICAgIGNvbnN0IGFmZm9yZGFibGUgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxyXG4gICAgICBzYXZlZCA9PiBOdW1iZXIoc2F2ZWQubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDw9IHBldEVuZXJneVxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IG1pbmltdW1FbmVyZ3kgPSB0aGlzLmdldExvd2VzdEVuZXJneUxvY2F0aW9uKClcclxuICAgIGNvbnN0IG5vdERlYWRFbmQgPSBhZmZvcmRhYmxlLmZpbHRlcihcclxuICAgICAgcGxhY2UgPT5cclxuICAgICAgICBwZXRFbmVyZ3kgLSBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpID49XHJcbiAgICAgICAgTnVtYmVyKG1pbmltdW1FbmVyZ3kubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXHJcbiAgICApXHJcbiAgICBpZiAobm90RGVhZEVuZC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBub3REZWFkRW5kW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vdERlYWRFbmQubGVuZ3RoKV0gPz8gbnVsbFxyXG5cclxuICAgIGNvbnN0IHNhbWVFbmVyZ3kgPSBhZmZvcmRhYmxlLmZpbHRlcihcclxuICAgICAgcGxhY2UgPT4gTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA9PT0gcGV0RW5lcmd5XHJcbiAgICApXHJcbiAgICBpZiAoc2FtZUVuZXJneS5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBzYW1lRW5lcmd5W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNhbWVFbmVyZ3kubGVuZ3RoKV0gPz8gbnVsbFxyXG5cclxuICAgIHJldHVybiBhZmZvcmRhYmxlW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFmZm9yZGFibGUubGVuZ3RoKV0gPz8gbnVsbFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzdGFydEV4cGxvcmF0aW9uKCk6IFByb21pc2U8U3RhcnRFeHBsb3JhdGlvbj4ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb24oKVxyXG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuIHsgZXhwbG9yaW5nOiBmYWxzZSwgc2VsZWN0ZWQgfVxyXG4gICAgQ29uc29sZS5pbmZvKFwiRXhwbG9yaW5nXCIsIHNlbGVjdGVkKVxyXG5cclxuICAgIC8vIEdvIHRvIHNlYXNvblxyXG4gICAgaWYgKFxyXG4gICAgICBzZWxlY3RlZC5yZWdpb24uc2Vhc29uICYmXHJcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFNlYXNvbigpICE9PSBzZWxlY3RlZC5yZWdpb24uc2Vhc29uXHJcbiAgICApIHtcclxuICAgICAgYXdhaXQgdGhpcy5jbGlja1NlYXNvbigpXHJcbiAgICAgIHJldHVybiB7IGV4cGxvcmluZzogZmFsc2UsIHNlbGVjdGVkIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBHbyB0byByZWdpb25cclxuICAgIHRoaXMuY2xpY2tSZWdpb24oc2VsZWN0ZWQpXHJcblxyXG4gICAgLy8gR28gdG8gbG9jYXRpb25cclxuICAgIGF3YWl0IHRoaXMuY2xpY2tMb2NhdGlvbihzZWxlY3RlZClcclxuICAgIGF3YWl0IHRoaXMuY2xpY2tFeHBsb3JlKClcclxuXHJcbiAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxyXG4gICAgcmV0dXJuIHsgZXhwbG9yaW5nOiB0cnVlLCBzZWxlY3RlZCB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYWl0IGZvciB1cCB0byAxMCBtaW51dGVzLlxyXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGV4cGxvcmF0aW9uIGlzIGZpbmlzaGVkLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgd2FpdEV4cGxvcmF0aW9uKFxyXG4gICAgc2VsZWN0ZWQ/OiBBdXRvRXhwbG9yZUxvY2F0aW9uXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBkb2N1bWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXHJcbiAgICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZH1cIl1gXHJcbiAgICAgIClcclxuICAgICAgPy5jbGljaygpXHJcblxyXG4gICAgbGV0IG1zID0gMyAqIER1cmF0aW9uVW5pdC5zZWNvbmRcclxuICAgIGlmIChzZWxlY3RlZCkgbXMgKz0gc2VsZWN0ZWQubG9jYXRpb24udGltZVRvRXhwbG9yZSAqIER1cmF0aW9uVW5pdC5taW51dGVcclxuICAgIGVsc2UgaWYgKHRpbWVMZWZ0RXhwbG9yYXRpb24gJiYgdGltZUxlZnRFeHBsb3JhdGlvbiA+IDApXHJcbiAgICAgIG1zICs9IHRpbWVMZWZ0RXhwbG9yYXRpb24gKiBEdXJhdGlvblVuaXQuc2Vjb25kXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgIXBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiAmJlxyXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hcC1jb250YWluZXIucGVuZGluZ1wiKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBleHBsb3JhdGlvblJlc3VsdHMoKVxyXG4gICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFJlc3VsdC5zdWNjZXNzKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBqc29uLmRhdGEucmVzdWx0cy5maW5kKFxyXG4gICAgICAgIHJlc3VsdCA9PiByZXN1bHQudHlwZSA9PT0gXCJjYXB0dXJlXCJcclxuICAgICAgKVxyXG4gICAgICBpZiAoIWNhcHR1cmUpIHJldHVybiBmYWxzZVxyXG4gICAgICBhd2FpdCBjYXB0dXJlRW5kKClcclxuXHJcbiAgICAgIC8vIFJlbG9hZGluZyBpcyB0aGUgb25seSBwb3NzaWJsZSBhY3Rpb24gaWYgdGhlIGV4cGxvcmF0aW9uIGZpbmlzaGVkIGluIGFcclxuICAgICAgLy8gZGlmZmVyZW50IHJlZ2lvbi5cclxuICAgICAgQ29uc29sZS5lcnJvcihcclxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSBleHBsb3JhdGlvbiBpcyBpbiBhbm90aGVyIHJlZ2lvbi5cIixcclxuICAgICAgICB0aGlzLmdsb2JhbHNcclxuICAgICAgKVxyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0Lm1pbnV0ZSkpXHJcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1zID4gMTAgKiBEdXJhdGlvblVuaXQubWludXRlKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICBDb25zb2xlLmxvZyhcclxuICAgICAgYFdhaXRpbmcgZm9yIHRoZSBleHBsb3JhdGlvbiB0byBlbmQgaW4gJHtNYXRoLmNlaWwoXHJcbiAgICAgICAgbXMgLyBEdXJhdGlvblVuaXQuc2Vjb25kXHJcbiAgICAgICl9IHNlY29uZHMuLi5gLFxyXG4gICAgICB0aGlzLmdsb2JhbHNcclxuICAgIClcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXHJcbiAgICBhd2FpdCBjaGFuZ2VSZWdpb24oTnVtYmVyKHNlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZCkpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdldEV4cGxvcmF0aW9uU3RhdHVzKCkgPT09IEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmcgJiZcclxuICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiAmJlxyXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uIDwgMFxyXG4gICAgKSB7XHJcbiAgICAgIENvbnNvbGUuaW5mbyhcclxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSB0aW1lciBpcyBkZXN5bmNocm9uaXNlZC5cIixcclxuICAgICAgICB0aGlzLmdsb2JhbHNcclxuICAgICAgKVxyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0LnNlY29uZCkpXHJcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBFeHBsb3JhdGlvbkFjdGlvbigpXHJcbiIsImltcG9ydCB0eXBlIHsgRXhwbG9yYXRpb25SZXN1bHRzRGF0YSB9IGZyb20gXCIuLi9hcGkvZXhwbG9yYXRpb25fcmVzdWx0c19kYXRhXCJcclxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGxvcmF0aW9uUmVzdWx0cygpOiBQcm9taXNlPFxyXG4gIFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPlxyXG4+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+PigocmVzb2x2ZSk6IHZvaWQgPT4ge1xyXG4gICAgdm9pZCAkLnBvc3QoXHJcbiAgICAgIFwiL3BldC9leHBsb3JhdGlvblJlc3VsdHNcIixcclxuICAgICAgKGpzb246IFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPik6IHZvaWQgPT4ge1xyXG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcclxuICAgICAgICByZXNvbHZlKGpzb24pXHJcblxyXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgRXhwbG9yYXRpb25SZXN1bHRzRGF0YSB9IGZyb20gXCIuLi9hcGkvZXhwbG9yYXRpb25fcmVzdWx0c19kYXRhXCJcclxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFbmQoKTogUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICB2b2lkICQucG9zdChcclxuICAgICAgXCIvcGV0L2NhcHR1cmUvZW5kXCIsXHJcbiAgICAgIChqc29uOiBQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4pOiB2b2lkID0+IHtcclxuICAgICAgICBTZXNzaW9uU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXHJcbiAgICAgICAgcmVzb2x2ZShqc29uKVxyXG5cclxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxyXG5cclxuZXhwb3J0IGNvbnN0IGZsYXBweTogTWluaWdhbWUgPSB7XHJcbiAgbmFtZTogXCJGbGFwcHlcIixcclxuICBzY29yZU1pbjogMTgwLFxyXG4gIHNjb3JlTWF4OiAyMDAsXHJcbiAgZGVsYXlNaW46IDYwXzAwMCxcclxuICBkZWxheU1heDogNzBfMDAwLFxyXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiXSAubmwtYnV0dG9uJyxcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxyXG5cclxuZXhwb3J0IGNvbnN0IGhhdGNobGluZ3M6IE1pbmlnYW1lID0ge1xyXG4gIG5hbWU6IFwiSGF0Y2hsaW5nc1wiLFxyXG4gIHNjb3JlTWluOiAxOCxcclxuICBzY29yZU1heDogMjAsXHJcbiAgZGVsYXlNaW46IDMwXzAwMCxcclxuICBkZWxheU1heDogMzBfMDAwLFxyXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIl0gLm5sLWJ1dHRvbicsXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcclxuXHJcbmV4cG9ydCBjb25zdCBwZWdnbGU6IE1pbmlnYW1lID0ge1xyXG4gIG5hbWU6IFwiUGVnZ2xlXCIsXHJcbiAgc2NvcmVNaW46IDksXHJcbiAgc2NvcmVNYXg6IDEwLFxyXG4gIGRlbGF5TWluOiAxMF8wMDAsXHJcbiAgZGVsYXlNYXg6IDIwXzAwMCxcclxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvZ2VtYm9tYlwiXSAubmwtYnV0dG9uJyxcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IEdldFByaXplc0RhdGEgfSBmcm9tIFwiLi4vYXBpL2dldF9wcml6ZXNfZGF0YVwiXHJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxyXG5pbXBvcnQgdHlwZSB7IFN0YXJ0R2FtZURhdGEgfSBmcm9tIFwiLi4vYXBpL3N0YXJ0X2dhbWVfZGF0YVwiXHJcbmltcG9ydCBcIi4uL2VsZGFyeWEvanF1ZXJ5XCJcclxuaW1wb3J0IHsgZmxhcHB5IH0gZnJvbSBcIi4vZmxhcHB5XCJcclxuaW1wb3J0IHsgaGF0Y2hsaW5ncyB9IGZyb20gXCIuL2hhdGNobGluZ3NcIlxyXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxyXG5pbXBvcnQgeyBwZWdnbGUgfSBmcm9tIFwiLi9wZWdnbGVcIlxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlQZWdnbGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgcmV0dXJuIHBsYXkocGVnZ2xlKVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheUZsYXBweSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICByZXR1cm4gcGxheShmbGFwcHkpXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5SGF0Y2hsaW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICByZXR1cm4gcGxheShoYXRjaGxpbmdzKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwbGF5KG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gIC8vIERpc2FibGUgYnV0dG9uc1xyXG4gIGF3YWl0IG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xyXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PihcclxuICAgICAgICBcIi5taW5pZ2FtZXMtcnVsZXMgLmZsYXZyLWJ1dHRvblwiXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChidXR0b25zLmxlbmd0aCkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIGJ1dHRvbnMpIHtcclxuICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc29sdmUodHJ1ZSlcclxuICAgICAgfVxyXG4gICAgfSwgMjUwKVxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IGpzb24gPSBhd2FpdCBleGVjdXRlKG1pbmlnYW1lKVxyXG4gICQuZmxhdnJOb3RpZihgUGxheWluZyA8c3Ryb25nPiR7bWluaWdhbWUubmFtZX08L3N0cm9uZz4uLi5gKVxyXG5cclxuICBjb25zdCBnYW1lVG9rZW4gPSBqc29uLmRhdGFcclxuICBjb25zdCBzY29yZSA9IHJhbmRvbUludChtaW5pZ2FtZS5zY29yZU1pbiwgbWluaWdhbWUuc2NvcmVNYXgpXHJcbiAgY29uc3QgZW5jX3Rva2VuID0geG9yRW5jb2RlKGdhbWVUb2tlbiwgc2NvcmUudG9TdHJpbmcoKSlcclxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+XHJcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludChtaW5pZ2FtZS5kZWxheU1pbiwgbWluaWdhbWUuZGVsYXlNYXgpKVxyXG4gIClcclxuXHJcbiAgYXdhaXQgZ2V0UHJpemVzKG1pbmlnYW1lLCBnYW1lVG9rZW4sIHNjb3JlKVxyXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQoMTAwMCwgMzAwMCkpKVxyXG5cclxuICBhd2FpdCBzZW5kKGVuY190b2tlbiwgc2NvcmUsIG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSlcclxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSlcclxufVxyXG5cclxuZnVuY3Rpb24gcmFuZG9tSW50KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbilcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShtaW5pZ2FtZTogTWluaWdhbWUpOiBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGlmICh0eXBlb2YgUmVjYXB0Y2hhICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxyXG4gICAgICAgIGBtaW5pZ2FtZVN0YXJ0JHttaW5pZ2FtZS5uYW1lfWAsXHJcbiAgICAgICAgKHRva2VuKTogdm9pZCA9PlxyXG4gICAgICAgICAgdm9pZCBzdGFydEdhbWUobWluaWdhbWUsIHRva2VuKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcclxuICAgICAgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdm9pZCBzdGFydEdhbWUobWluaWdhbWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0R2FtZShcclxuICBtaW5pZ2FtZTogTWluaWdhbWUsXHJcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PihcclxuICAgIChyZXNvbHZlLCByZWplY3QpID0+XHJcbiAgICAgIHZvaWQgJC5hamF4KHtcclxuICAgICAgICB1cmw6IFwiL21pbmlnYW1lcy9hamF4X3N0YXJ0R2FtZVwiLFxyXG4gICAgICAgIHR5cGU6IFwicG9zdFwiLFxyXG4gICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcclxuICAgICAgICBkYXRhOiByZWNhcHRjaGFUb2tlblxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuOiByZWNhcHRjaGFUb2tlbixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIHN1Y2Nlc3M6IChqc29uOiBQYWNrZXQ8U3RhcnRHYW1lRGF0YT4pOiB2b2lkID0+IHtcclxuICAgICAgICAgIHJlc29sdmUoanNvbilcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICByZWplY3QoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRQcml6ZXMoXHJcbiAgbWluaWdhbWU6IE1pbmlnYW1lLFxyXG4gIGdhbWVUb2tlbjogc3RyaW5nLFxyXG4gIHNjb3JlOiBudW1iZXJcclxuKTogUHJvbWlzZTxQYWNrZXQ8R2V0UHJpemVzRGF0YT4+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PEdldFByaXplc0RhdGE+PihcclxuICAgIChyZXNvbHZlKTogdm9pZCA9PlxyXG4gICAgICB2b2lkICQucG9zdChcclxuICAgICAgICBcIi9taW5pZ2FtZXMvYWpheF9nZXRQcml6ZXNcIixcclxuICAgICAgICB7IGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSwgc2NvcmU6IHNjb3JlIH0sXHJcbiAgICAgICAgKGpzb246IFBhY2tldDxHZXRQcml6ZXNEYXRhPik6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShqc29uKVxyXG5cclxuICAgICAgICAgIGlmIChqc29uLnJlc3VsdCA9PT0gXCJzdWNjZXNzXCIpXHJcbiAgICAgICAgICAgICQuZmxhdnJOb3RpZihcclxuICAgICAgICAgICAgICBgUGxheWVkIDxzdHJvbmc+JHttaW5pZ2FtZS5uYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke2pzb24uZGF0YS5tYWFuYX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIGVsc2UgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwianNvblwiXHJcbiAgICAgICkuZmFpbCgoKSA9PlxyXG4gICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShnZXRQcml6ZXMobWluaWdhbWUsIGdhbWVUb2tlbiwgc2NvcmUpKVxyXG4gICAgICAgIH0sIHJhbmRvbUludCgxMDAwLCAzMDAwKSlcclxuICAgICAgKVxyXG4gIClcclxufVxyXG5cclxuLyoqXHJcbiAqIFPDqWN1cmlzYXRpb24gZGUgbCdlbnZvaSBkdSBzY29yZVxyXG4gKiBCYXPDqSBzdXIgbCdlbmNvZGFnZSBYT1IgOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hPUl9jaXBoZXJcclxuICogRWZmZWN0dWUgdW4gWE9SIGJpdCDDoCBiaXQgZW50cmUgdW5lIGNoYWluZSBldCB1bmUgY2zDqVxyXG4gKi9cclxuZnVuY3Rpb24geG9yRW5jb2RlKHN0cjogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgLy8gQXNzdXJlIHF1ZSBsZXMgZGV1eCBwYXJhbcOodHJlcyBzb2llbnQgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZVxyXG4gIHN0ciA9IHN0ci50b1N0cmluZygpXHJcbiAga2V5ID0ga2V5LnRvU3RyaW5nKClcclxuXHJcbiAgLyoqIEVuY29kYWdlIFhPUiAqL1xyXG4gIGxldCB4b3IgPSBcIlwiXHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBsZXQgdG1wID0gc3RyW2ldXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleS5sZW5ndGg7ICsraikge1xyXG4gICAgICB0bXAgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRtcCEuY2hhckNvZGVBdCgwKSBeIGtleS5jaGFyQ29kZUF0KGopKVxyXG4gICAgfVxyXG4gICAgeG9yICs9IHRtcFxyXG4gIH1cclxuXHJcbiAgLy8gUmVudm9pZSBsZSByw6lzdWx0YXQgZW4gZW5jb2RhbnQgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBwb3V2YW50IHBvc2VyIHByb2Jsw6htZSAoXFxuIHBhciBleGVtcGxlKVxyXG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoeG9yKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzZW5kKFxyXG4gIGVuY190b2tlbjogc3RyaW5nLFxyXG4gIHNjb3JlOiBudW1iZXIsXHJcbiAgZ2FtZTogc3RyaW5nXHJcbik6IFByb21pc2U8dm9pZD4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgIGlmICh0eXBlb2YgUmVjYXB0Y2hhICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxyXG4gICAgICAgIFwibWluaWdhbWVTYXZlXCIgKyBnYW1lLFxyXG4gICAgICAgIChyZWNhcHRjaGFUb2tlbik6IHZvaWQgPT5cclxuICAgICAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUsIHJlY2FwdGNoYVRva2VuKS50aGVuKHJlc29sdmUpXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpLnRoZW4ocmVzb2x2ZSlcclxuICAgIH1cclxuICB9KVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzYXZlU2NvcmUoXHJcbiAgZW5jX3Rva2VuOiBzdHJpbmcsXHJcbiAgc2NvcmU6IG51bWJlcixcclxuICBnYW1lOiBzdHJpbmcsXHJcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcclxuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgY29uc3QgdG9rZW4gPSBkZWNvZGVVUklDb21wb25lbnQoZW5jX3Rva2VuKVxyXG5cclxuICAgIHZvaWQgJC5hamF4KHtcclxuICAgICAgdHlwZTogXCJwb3N0XCIsXHJcbiAgICAgIHVybDogXCIvbWluaWdhbWVzL2FqYXhfc2F2ZVNjb3JlXCIsXHJcbiAgICAgIGRhdGE6IHJlY2FwdGNoYVRva2VuXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIHRva2VuOiB0b2tlbixcclxuICAgICAgICAgICAgc2NvcmU6IHNjb3JlLFxyXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxyXG4gICAgICAgICAgICByZWNhcHRjaGFUb2tlbjogcmVjYXB0Y2hhVG9rZW4sXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgIHRva2VuOiB0b2tlbixcclxuICAgICAgICAgICAgc2NvcmU6IHNjb3JlLFxyXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgc3VjY2VzczogKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcclxuICAgICAgICAgIHJlc29sdmUoc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpKVxyXG4gICAgICAgIH0sIHJhbmRvbUludCgxMDAwLCAzMDAwKSksXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXHJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiLi9jbGFzc2VzL2FjdGlvblwiXHJcbmltcG9ydCBidXlBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9idXlfYWN0aW9uXCJcclxuaW1wb3J0IGRhaWx5QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvZGFpbHlfYWN0aW9uXCJcclxuaW1wb3J0IGV4cGxvcmF0aW9uQWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvZXhwbG9yYXRpb25fYWN0aW9uXCJcclxuaW1wb3J0IG1pbmlnYW1lQWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvbWluaWdhbWVfYWN0aW9uXCJcclxuaW1wb3J0IHdhaXRBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy93YWl0X2FjdGlvblwiXHJcblxyXG4vKiogQXV0b21hdGVkIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRUYWtlb3ZlcigpOiB2b2lkIHtcclxuICBpZiAoU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHZvaWQgdGFrZW92ZXIoKVxyXG59XHJcblxyXG4vKiogTWFudWFsIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVRha2VvdmVyKCk6IHZvaWQge1xyXG4gIHJlc2V0VGFrZW92ZXIoKVxyXG5cclxuICBTZXNzaW9uU3RvcmFnZS50YWtlb3ZlciA9ICFTZXNzaW9uU3RvcmFnZS50YWtlb3ZlclxyXG4gIGlmIChTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcilcclxuICAgICQuZmxhdnJOb3RpZihcIlRha2VvdmVyIG1vZGUgZW5hYmxlZC4gUGxlYXNlIGRvIG5vdCBpbnRlcmFjdCB3aXRoIHRoaXMgdGFiLlwiKVxyXG4gIGVsc2UgJC5mbGF2ck5vdGlmKFwiVGFrZW92ZXIgbW9kZSBkaXNhYmxlZC5cIilcclxuXHJcbiAgdm9pZCB0YWtlb3ZlcigpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNldFRha2VvdmVyKCk6IHZvaWQge1xyXG4gIFNlc3Npb25TdG9yYWdlLmFjdGlvbiA9IG51bGxcclxuICBTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lID0gZmFsc2VcclxuICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gZmFsc2VcclxuICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxyXG4gIFNlc3Npb25TdG9yYWdlLndpc2hsaXN0ID0gW11cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gdGFrZW92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgaWYgKCFTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcikgcmV0dXJuXHJcbiAgaWYgKGRhaWx5QWN0aW9uLmNvbmRpdGlvbigpKSBhd2FpdCBkYWlseUFjdGlvbi5wZXJmb3JtKClcclxuXHJcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24ua2V5ID09PSBTZXNzaW9uU3RvcmFnZS5hY3Rpb24pXHJcbiAgaWYgKCFhY3Rpb24pIHtcclxuICAgIGNoYW5nZUFjdGlvbigpXHJcbiAgICB2b2lkIHRha2VvdmVyKClcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgQ29uc29sZS5pbmZvKFwiQWN0aW9uOlwiLCBhY3Rpb24ua2V5KVxyXG5cclxuICBpZiAoYWN0aW9uLmNvbmRpdGlvbigpICYmIChhd2FpdCBhY3Rpb24ucGVyZm9ybSgpKSkgcmV0dXJuXHJcbiAgZWxzZSB7XHJcbiAgICBjaGFuZ2VBY3Rpb24oKVxyXG4gICAgdm9pZCB0YWtlb3ZlcigpXHJcbiAgICByZXR1cm5cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGFjdGlvbnM6IEFjdGlvbltdID0gW1xyXG4gIG1pbmlnYW1lQWN0aW9uLFxyXG4gIGV4cGxvcmF0aW9uQWN0aW9uLFxyXG4gIGJ1eUFjdGlvbixcclxuICB3YWl0QWN0aW9uLFxyXG5dXHJcblxyXG5mdW5jdGlvbiBjaGFuZ2VBY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24ge1xyXG4gIGNvbnN0IG5leHQgPVxyXG4gICAgYWN0aW9ucy5maW5kSW5kZXgoYWN0aW9uID0+IGFjdGlvbi5rZXkgPT09IFNlc3Npb25TdG9yYWdlLmFjdGlvbikgKyAxXHJcblxyXG4gIHJldHVybiAoU2Vzc2lvblN0b3JhZ2UuYWN0aW9uID1cclxuICAgIGFjdGlvbnNbbmV4dCA+PSBhY3Rpb25zLmxlbmd0aCA/IDAgOiBuZXh0XSEua2V5KVxyXG59XHJcbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxyXG5pbXBvcnQgeyBwbGF5RmxhcHB5LCBwbGF5SGF0Y2hsaW5ncywgcGxheVBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvZW1pbGVcIlxyXG5pbXBvcnQgeyBmbGFwcHkgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2ZsYXBweVwiXHJcbmltcG9ydCB7IGhhdGNobGluZ3MgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2hhdGNobGluZ3NcIlxyXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9taW5pZ2FtZVwiXHJcbmltcG9ydCB7IHBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvcGVnZ2xlXCJcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXHJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXHJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcclxuaW1wb3J0IHsgY2xpY2sgfSBmcm9tIFwiLi4vY2xpY2tcIlxyXG5cclxuY2xhc3MgTWluaWdhbWVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLm1pbmlnYW1lc1xyXG5cclxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyAmJiAhU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZVxyXG4gIH1cclxuXHJcbiAgLyoqIERldGVybWluZXMgaWYgdGhlIG1pbmlnYW1lcyBzaG91bGQgYmUgcGxheWVkIHJpZ2h0IG5vdy5cclxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBtaW5pZ2FtZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQuXHJcbiAgICovXHJcbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHN3aXRjaCAobG9jYXRpb24ucGF0aG5hbWUpIHtcclxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXNcIjoge1xyXG4gICAgICAgIGNvbnN0IHBsYXlpbmcgPVxyXG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUocGVnZ2xlKSB8fFxyXG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUoZmxhcHB5KSB8fFxyXG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUoaGF0Y2hsaW5ncylcclxuXHJcbiAgICAgICAgaWYgKCFwbGF5aW5nKSB7XHJcbiAgICAgICAgICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gdHJ1ZVxyXG4gICAgICAgICAgZG9jdW1lbnRcclxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxyXG4gICAgICAgICAgICAgICcubWluaWdhbWVzLXJ1bGVzIFtyZWw9XCJidG4tY2FuY2VsXCJdJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgID8uY2xpY2soKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBsYXlpbmdcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvZ2VtYm9tYlwiOlxyXG4gICAgICAgIGF3YWl0IHBsYXlQZWdnbGUoKVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiOlxyXG4gICAgICAgIGF3YWl0IHBsYXlGbGFwcHkoKVxyXG4gICAgICAgIGJyZWFrXHJcblxyXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIjpcclxuICAgICAgICBhd2FpdCBwbGF5SGF0Y2hsaW5ncygpXHJcbiAgICAgICAgYnJlYWtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1taW5pZ2FtZXMgYVwiKVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1taW5pZ2FtZXMgYVwiKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIC8qKiBDbGljayBvbiBhIG1pbmlnYW1lJ3MgbGluay4gQHJldHVybnMgd2hldGhlciB0aGUgbWluaWdhbWUgd2FzIG9wZW5lZC4gKi9cclxuICBwcml2YXRlIG9wZW5NaW5pZ2FtZShtaW5pZ2FtZTogTWluaWdhbWUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFxyXG4gICAgICBtaW5pZ2FtZS5idXR0b25TZWxlY3RvclxyXG4gICAgKVxyXG4gICAgaWYgKCFzdGFydCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBzdGFydC5jbGljaygpXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IE1pbmlnYW1lQWN0aW9uKClcclxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi8uLi9jb25zb2xlXCJcclxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcclxuXHJcbmNsYXNzIFdhaXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xyXG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLndhaXRcclxuXHJcbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBDb25zb2xlLmxvZyhgV2FpdGluZyBmb3IgMTAgbWludXRlcy4uLmApXHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcclxuICAgICAgfSwgMTAgKiA2MCAqIDEwMDApXHJcbiAgICApXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgV2FpdEFjdGlvbigpXHJcbiIsImltcG9ydCB0eXBlIHsgUGFyc2FibGVJdGVtIH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9pbnRlcmZhY2VzL3BhcnNhYmxlX2l0ZW1cIlxyXG5pbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuL2VsZGFyeWEvYXZhdGFyXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRPdXRmaXQoc2VsZWN0b3I6IHN0cmluZywgbmFtZSA9IFwib3V0Zml0XCIpOiB2b2lkIHtcclxuICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tzZWxlY3Rvcl1cclxuICBpZiAoIWF2YXRhcikgcmV0dXJuXHJcblxyXG4gIGNvbnN0IG91dGZpdCA9IGdldEl0ZW1zVG9TYXZlKGF2YXRhcilcclxuXHJcbiAgY29uc3QgaHJlZiA9XHJcbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xyXG4gICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KG91dGZpdCwgbnVsbCwgXCJcXHRcIikpXHJcblxyXG4gIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxyXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxyXG4gIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYCR7bmFtZX0uanNvbmApXHJcbiAgYS5jbGljaygpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEl0ZW1zVG9TYXZlKGF2YXRhcjogQXZhdGFyKTogUGFyc2FibGVJdGVtW10ge1xyXG4gIHJldHVybiBhdmF0YXIuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcclxuICAgIGNvbnN0IGl0ZW0gPSBjaGlsZC5nZXRJdGVtKClcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlkOiBpdGVtLl9pZCxcclxuICAgICAgZ3JvdXA6IGl0ZW0uX2dyb3VwLFxyXG4gICAgICBuYW1lOiBpdGVtLl9uYW1lLFxyXG4gICAgICBpbWFnZTogaXRlbS5faW1hZ2UsXHJcbiAgICAgIHR5cGU6IGl0ZW0uX3R5cGUsXHJcbiAgICAgIGNhdGVnb3J5SWQ6IGl0ZW0uX2NhdGVnb3J5SWQsXHJcbiAgICAgIGhpZGRlbkNhdGVnb3JpZXM6IE9iamVjdC52YWx1ZXMoaXRlbS5faGlkZGVuQ2F0ZWdvcmllcyksXHJcbiAgICAgIGFuaW1hdGlvbkRhdGE6IGl0ZW0uX2FuaW1hdGlvbkRhdGEsXHJcbiAgICAgIGxvY2tlZDogaXRlbS5fbG9ja2VkLFxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBJdGVtIH0gZnJvbSBcIi4uL2VsZGFyeWEvaXRlbVwiXHJcbmltcG9ydCB7IGV4cG9ydE91dGZpdCB9IGZyb20gXCIuLi9vdXRmaXRcIlxyXG5pbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0UHJldmlldygpOiB2b2lkIHtcclxuICBleHBvcnRPdXRmaXQoXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRPdXRmaXQoKTogdm9pZCB7XHJcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcclxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiZmlsZVwiKVxyXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcclxuICBpbnB1dC5jbGljaygpXHJcblxyXG4gIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XHJcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXHJcbiAgICBjb25zdCBmaWxlcyA9ICg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLmZpbGVzXHJcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cclxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cclxuICAgIHZvaWQgZmlsZS50ZXh0KCkudGhlbihhc3luYyB2YWx1ZSA9PiB7XHJcbiAgICAgIGlmICghdmFsdWUpIHJldHVyblxyXG5cclxuICAgICAgY29uc3Qgb3V0Zml0OiBQYXJzYWJsZUl0ZW1bXSA9IEpTT04ucGFyc2UodmFsdWUpXHJcbiAgICAgIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxyXG4gICAgICBpZiAoIWF2YXRhcikgcmV0dXJuXHJcblxyXG4gICAgICAkLmZsYXZyTm90aWYoXCJJbXBvcnRpbmcgb3V0Zml0LiBQbGVhc2Ugd2FpdC4uLlwiKVxyXG5cclxuICAgICAgLy8gR2V0IGFsbCBjYXRlZ29yaWVzXHJcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxyXG4gICAgICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdCkge1xyXG4gICAgICAgIGNhdGVnb3JpZXMuYWRkKGNsb3RoaW5nLnR5cGUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE9wZW4gYWxsIGNhdGVnb3JpZXNcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgQXJyYXkuZnJvbShjYXRlZ29yaWVzLnZhbHVlcygpKS5tYXAoYXN5bmMgY2F0ZWdvcnkgPT5cclxuICAgICAgICAgIG9wZW5DYXRlZ29yeShjYXRlZ29yeSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuXHJcbiAgICAgIC8vIEdldCBhbGwgZ3JvdXBzXHJcbiAgICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBTZXQ8bnVtYmVyPigpXHJcbiAgICAgIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWdyb3VwPVwiJHtjbG90aGluZy5ncm91cH1cIl1gKSlcclxuICAgICAgICAgIGdyb3Vwcy5hZGQoY2xvdGhpbmcuZ3JvdXApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE9wZW4gYWxsIGdyb3Vwc1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkubWFwKGFzeW5jIGdyb3VwID0+IG9wZW5Hcm91cChncm91cCkpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIC8vIEdldCB0aGUgaXRlbXMgZnJvbSBgYXZhaWxhYmxlSXRlbXNgXHJcbiAgICAgIGNvbnN0IHdvcm5JdGVtczogSXRlbVtdID0gW11cclxuICAgICAgZm9yIChjb25zdCBjbG90aGluZyBvZiBvdXRmaXQpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gYXZhaWxhYmxlSXRlbXNbY2xvdGhpbmcuaWRdXHJcbiAgICAgICAgaWYgKGl0ZW0pIHdvcm5JdGVtcy5wdXNoKGl0ZW0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbW92ZUNsb3RoZXMoKVxyXG4gICAgICBhdmF0YXIuYWRkSXRlbXMod29ybkl0ZW1zKVxyXG4gICAgICBpbml0aWFsaXplU2VsZWN0ZWRJdGVtcygpXHJcbiAgICAgIGluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzKClcclxuXHJcbiAgICAgICQuZmxhdnJOb3RpZihcIkltcG9ydGVkIG91dGZpdCFcIilcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlQ2xvdGhlcygpOiB2b2lkIHtcclxuICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tcIiNhcHBlYXJhbmNlLXByZXZpZXdcIl1cclxuICBpZiAoIWF2YXRhcikgcmV0dXJuXHJcblxyXG4gIGZvciAobGV0IGkgPSBhdmF0YXIuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIGNvbnN0IGl0ZW1SZW5kZXIgPSBhdmF0YXIuY2hpbGRyZW5baV1cclxuICAgIGlmICghaXRlbVJlbmRlcikgY29udGludWVcclxuXHJcbiAgICBjb25zdCBpdGVtID0gaXRlbVJlbmRlci5nZXRJdGVtKClcclxuICAgIGlmIChTYWNoYS5BdmF0YXIucmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzKGl0ZW0pKSB7XHJcbiAgICAgICQoYCNhcHBlYXJhbmNlLWl0ZW0tJHtpdGVtLl9pZH1gKS5yZW1vdmVDbGFzcyhcInNlbGVjdGVkXCIpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBvcGVuR3JvdXAoZ3JvdXA6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuICAgIGNvbnN0IGNhdGVnb3J5Q29udGFpbmVyID0gJChcIiNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLVwiICsgZ3JvdXAudG9TdHJpbmcoKSlcclxuICAgIGlmIChjYXRlZ29yeUNvbnRhaW5lci5oYXNDbGFzcyhcImFjdGl2ZVwiKSkge1xyXG4gICAgICByZXNvbHZlKClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhdGVnb3J5Q29udGFpbmVyLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHZvaWQgJC5nZXQoXHJcbiAgICAgICAgXCIvcGxheWVyL29wZW5Hcm91cC9cIiArIGdyb3VwLnRvU3RyaW5nKCksXHJcbiAgICAgICAgKHZpZXc6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxyXG4gICAgICAgIH1cclxuICAgICAgKS5hbHdheXMoKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzb2x2ZSgpXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gb3BlbkNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XHJcbiAgICBjb25zdCBjYXRlZ29yeUNvbnRhaW5lciA9ICQoXCIjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1cIiArIGNhdGVnb3J5KVxyXG4gICAgaWYgKGNhdGVnb3J5Q29udGFpbmVyLmhhc0NsYXNzKFwiYWN0aXZlXCIpKSB7XHJcbiAgICAgIHJlc29sdmUoKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIubGVuZ3RoIDw9IDApIHtcclxuICAgICAgdm9pZCAkLnBvc3QoXCIvcGxheWVyL29wZW5DYXRlZ29yeS9cIiArIGNhdGVnb3J5LCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XHJcbiAgICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxyXG4gICAgICB9KS5hbHdheXMoKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzb2x2ZSgpXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG4iLCJmdW5jdGlvbiBkb3dubG9hZENhbnZhcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAvLyBNYWtlIGl0IGFuIGltYWdlXHJcbiAgY29uc3QgaW1hZ2UgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpXHJcblxyXG4gIC8vIENyZWF0ZSBhIGxpbmtcclxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcclxuICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaW1hZ2UpXHJcbiAgYS5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCBgJHtuYW1lfS5wbmdgKVxyXG5cclxuICAvLyBQbGFjZSBpdCBvbiB0aGUgYm9keVxyXG4gIGEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXHJcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKVxyXG5cclxuICAvLyBTdGFydCB0aGUgZG93bmxvYWRcclxuICBhLmNsaWNrKClcclxuXHJcbiAgLy8gUmVtb3ZlIHRoZSBsaW5rXHJcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGYWNlKCk6IHZvaWQge1xyXG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxyXG4gICAgXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyIGNhbnZhc1wiXHJcbiAgKVxyXG4gIGlmICghY2FudmFzKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbidzIGZhY2UuXCIpXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgXCJmYWNlXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEd1YXJkaWFuKCk6IHZvaWQge1xyXG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxyXG4gICAgXCIjaG9tZS1hdmF0YXItcGxheWVyIGNhbnZhc1wiXHJcbiAgKVxyXG4gIGlmICghY2FudmFzKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbi5cIilcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRBcHBlYXJhbmNlKCk6IHZvaWQge1xyXG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxyXG4gICAgXCIjYXBwZWFyYW5jZS1wcmV2aWV3IGNhbnZhc1wiXHJcbiAgKVxyXG4gIGlmICghY2FudmFzKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbi5cIilcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gIHJldHVybiAoXHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lci1vdXRlcj5wXCIpPy50ZXh0Q29udGVudCA/P1xyXG4gICAgbnVsbFxyXG4gIClcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcclxuaW1wb3J0IHsgZXhwb3J0UHJldmlldywgaW1wb3J0T3V0Zml0IH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvZmF2b3JpdGVzX2FjdGlvbnNcIlxyXG5pbXBvcnQgeyBkb3dubG9hZEFwcGVhcmFuY2UgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcclxuaW1wb3J0IHR5cGUgeyBGYXZvcml0ZXNBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvZmF2b3JpdGVzX2FjdGlvblwiXHJcblxyXG5sZXQgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFwcGVhcmFuY2UoKTogdm9pZCB7XHJcbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxyXG4gIG9ic2VydmVyID0gbnVsbFxyXG5cclxuICBjb25zdCBhcHBlYXJhbmNlSXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtaXRlbXNcIilcclxuICBpZiAoIWFwcGVhcmFuY2VJdGVtcykgcmV0dXJuXHJcblxyXG4gIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZEFwcGVhcmFuY2UpXHJcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShhcHBlYXJhbmNlSXRlbXMsIHtcclxuICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICB9KVxyXG5cclxuICBsb2FkRmF2b3JpdGVzQWN0aW9ucygpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRGYXZvcml0ZXNBY3Rpb25zKCk6IHZvaWQge1xyXG4gIGNvbnN0IGFjdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZhdm9yaXRlcy1hY3Rpb25zXCIpXHJcbiAgaWYgKCFhY3Rpb25zIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZmF2b3JpdGVzLWFjdGlvbi1lZVwiKSkgcmV0dXJuXHJcblxyXG4gIGNvbnN0IGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mYXZvcml0ZXNfYWN0aW9uLmh0bWxcIilcclxuXHJcbiAgY29uc3QgaW1wb3J0QWN0aW9uOiBGYXZvcml0ZXNBY3Rpb24gPSB7XHJcbiAgICBpZDogXCJpbXBvcnQtb3V0Zml0XCIsXHJcbiAgICB0ZXh0OiBcIkltcG9ydFwiLFxyXG4gIH1cclxuICBjb25zdCBleHBvcnRBY3Rpb246IEZhdm9yaXRlc0FjdGlvbiA9IHtcclxuICAgIGlkOiBcImV4cG9ydC1vdXRmaXRcIixcclxuICAgIHRleHQ6IFwiRXhwb3J0XCIsXHJcbiAgfVxyXG4gIGNvbnN0IGRvd25sb2FkQWN0aW9uOiBGYXZvcml0ZXNBY3Rpb24gPSB7XHJcbiAgICBpZDogXCJkb3dubG9hZC1vdXRmaXRcIixcclxuICAgIHRleHQ6IFwiRG93bmxvYWRcIixcclxuICB9XHJcblxyXG4gIGFjdGlvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxyXG4gICAgXCJiZWZvcmVlbmRcIixcclxuICAgIGFjdGlvblRlbXBsYXRlLnJlbmRlcihpbXBvcnRBY3Rpb24pICtcclxuICAgICAgYWN0aW9uVGVtcGxhdGUucmVuZGVyKGV4cG9ydEFjdGlvbikgK1xyXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZG93bmxvYWRBY3Rpb24pXHJcbiAgKVxyXG5cclxuICBkb2N1bWVudFxyXG4gICAgLmdldEVsZW1lbnRCeUlkKGltcG9ydEFjdGlvbi5pZClcclxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGltcG9ydE91dGZpdClcclxuXHJcbiAgZG9jdW1lbnRcclxuICAgIC5nZXRFbGVtZW50QnlJZChleHBvcnRBY3Rpb24uaWQpXHJcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcmV2aWV3KVxyXG5cclxuICBkb2N1bWVudFxyXG4gICAgLmdldEVsZW1lbnRCeUlkKGRvd25sb2FkQWN0aW9uLmlkKVxyXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRBcHBlYXJhbmNlKVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxyXG5cclxuZXhwb3J0IGNvbnN0IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXM6IENhcm91c2VsTmV3cyA9IHtcclxuICBiYWNrZ3JvdW5kSW1hZ2U6XHJcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXMucG5nXCIsXHJcbiAgaDQ6IFwiQmVlbW9vdiBBbm5veWFuY2VzXCIsXHJcbiAgaHJlZjogXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL0JlZW1vb3YtQW5ub3lhbmNlc1wiLFxyXG4gIGlkOiBcImNhcm91c2VsLWJlZW1vb3YtYW5ub3lhbmNlc1wiLFxyXG4gIHA6IFwiQmxvY2sgc29tZSBvZiBFbGRhcnlhJ3MgYW5ub3lhbmNlcy5cIixcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcclxuXHJcbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xyXG4gIGJhY2tncm91bmRJbWFnZTpcclxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2Rvd25sb2FkX2ZhY2UucG5nXCIsXHJcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxyXG4gIGg0OiBcIkRvd25sb2FkIHlvdXIgZmFjZSFcIixcclxuICBwOiBcIkNsaWNrIGhlcmUgdG8gZG93bmxvYWQgeW91ciBndWFyZGlhbidzIGZhY2UuXCIsXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXHJcblxyXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XHJcbiAgYmFja2dyb3VuZEltYWdlOlxyXG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZ3VhcmRpYW4ucG5nXCIsXHJcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcclxuICBoNDogXCJEb3dubG9hZCB5b3VyIGd1YXJkaWFuIVwiLFxyXG4gIHA6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuLlwiLFxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxyXG5cclxuZXhwb3J0IGNvbnN0IGNhcm91c2VsRUU6IENhcm91c2VsTmV3cyA9IHtcclxuICBiYWNrZ3JvdW5kSW1hZ2U6XHJcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50cy5wbmdcIixcclxuICBoNDogXCJFbGRhcnlhIEVuaGFuY2VtZW50c1wiLFxyXG4gIGhyZWY6IFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50c1wiLFxyXG4gIGlkOiBcImNhcm91c2VsLWVsZGFyeWEtZW5oYW5jZW1lbnRzXCIsXHJcbiAgcDogXCJFbmhhbmNlcyB0aGUgdXNlciBleHBlcmllbmNlIG9mIEVsZGFyeWEuXCIsXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXHJcblxyXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxUYWtlb3ZlcjogQ2Fyb3VzZWxOZXdzID0ge1xyXG4gIGJhY2tncm91bmRJbWFnZTpcclxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX3Rha2VvdmVyLnBuZ1wiLFxyXG4gIGlkOiBcImNhcm91c2VsLXRha2VvdmVyXCIsXHJcbiAgaDQ6IFwiVGFrZW92ZXJcIixcclxuICBwOiBcIkdpdmUgdXAgdGhpcyB0YWIgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgYWN0aW9ucy5cIixcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcclxuaW1wb3J0IHsgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXNcIlxyXG5pbXBvcnQgeyBjYXJvdXNlbERvd25sb2FkRmFjZSB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlXCJcclxuaW1wb3J0IHsgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuXCJcclxuaW1wb3J0IHsgY2Fyb3VzZWxFRSB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50c1wiXHJcbmltcG9ydCB7IGNhcm91c2VsVGFrZW92ZXIgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfdGFrZW92ZXJcIlxyXG5pbXBvcnQgeyBkb3dubG9hZEZhY2UsIGRvd25sb2FkR3VhcmRpYW4gfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxyXG5pbXBvcnQgeyB0b2dnbGVUYWtlb3ZlciB9IGZyb20gXCIuLi90YWtlb3Zlci9icmFpblwiXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZENhcm91c2VsKCk6IHZvaWQge1xyXG4gIGNvbnN0IGNhcm91c2VsSW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Nhcm91c2VsLWlubmVyXCIpXHJcbiAgaWYgKCFjYXJvdXNlbElubmVyIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2Fyb3VzZWwtZWVcIikpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgLy8gSW1wb3J0IGNhcm91c2VsIHRlbXBsYXRlXHJcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Nhcm91c2VsX25ld3MuaHRtbFwiKVxyXG5cclxuICBjb25zdCBjb250ZXh0cyA9IFtcclxuICAgIC8vIEludHJvXHJcbiAgICBjYXJvdXNlbEVFLFxyXG5cclxuICAgIC8vIEZlYXR1cmVzXHJcbiAgICAuLi4oTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyB8fFxyXG4gICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyB8fFxyXG4gICAgTG9jYWxTdG9yYWdlLm1hcmtldFxyXG4gICAgICA/IFtjYXJvdXNlbFRha2VvdmVyXVxyXG4gICAgICA6IFtdKSxcclxuICAgIGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbixcclxuICAgIGNhcm91c2VsRG93bmxvYWRGYWNlLFxyXG5cclxuICAgIC8vIEFkc1xyXG4gICAgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyxcclxuICBdXHJcblxyXG4gIC8vIEFkZCBlbnRyaWVzIHRvIHRoZSBjYXJvdXNlbFxyXG4gIGNhcm91c2VsSW5uZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxyXG4gICAgXCJiZWZvcmVlbmRcIixcclxuICAgIGNvbnRleHRzLm1hcChiYW5uZXIgPT4gdGVtcGxhdGUucmVuZGVyKGJhbm5lcikpLmpvaW4oXCJcXG5cIilcclxuICApXHJcblxyXG4gIC8vIEFkZCBsaW5rc1xyXG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY29udGV4dHMpIHtcclxuICAgIGlmICghY2Fyb3VzZWwuaHJlZikgY29udGludWVcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gY2Fyb3VzZWxJbm5lci5xdWVyeVNlbGVjdG9yKGAjJHtjYXJvdXNlbC5pZH1gKVxyXG4gICAgaWYgKCFlbGVtZW50KSBjb250aW51ZVxyXG5cclxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSBvcGVuKGNhcm91c2VsLmhyZWYsIFwiX2JsYW5rXCIpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xyXG5cclxuICBkb2N1bWVudFxyXG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRGYWNlLmlkKVxyXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRGYWNlKVxyXG5cclxuICBkb2N1bWVudFxyXG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbi5pZClcclxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkR3VhcmRpYW4pXHJcblxyXG4gIGNvbnN0IHRha2VvdmVyQW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxUYWtlb3Zlci5pZClcclxuICB0YWtlb3ZlckFuY2hvcj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIHRvZ2dsZVRha2VvdmVyKClcclxuICAgIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3IpXHJcbiAgfSlcclxuXHJcbiAgaWYgKHRha2VvdmVyQW5jaG9yKSB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yKVxyXG59XHJcblxyXG5mdW5jdGlvbiB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yOiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gIGNvbnN0IHRha2VvdmVySDQgPSB0YWtlb3ZlckFuY2hvci5xdWVyeVNlbGVjdG9yKFwiaDRcIilcclxuICBpZiAodGFrZW92ZXJINCkge1xyXG4gICAgdGFrZW92ZXJINC5pbm5lclRleHQgPSBgJHtcclxuICAgICAgU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIgPyBcIkRpc2FibGVcIiA6IFwiRW5hYmxlXCJcclxuICAgIH0gVGFrZW92ZXJgXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcclxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXHJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcclxuXHJcbmxldCBtYXJrZXRPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGxcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWFya2V0KCk6IHZvaWQge1xyXG4gIG1hcmtldE9ic2VydmVyPy5kaXNjb25uZWN0KClcclxuICBtYXJrZXRPYnNlcnZlciA9IG51bGxcclxuXHJcbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9tYXJrZXRwbGFjZVwiKSByZXR1cm5cclxuXHJcbiAgLy8gYC5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNgIGlzIHRoZSBjb250YWluZXIgd2hvc2UgSFRNTCBjb250ZW50IGlzIGJlaW5nXHJcbiAgLy8gcmVwbGFjZWQgb24gZXZlcnkgYWN0aW9uLlxyXG4gIGNvbnN0IHNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcclxuICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc1wiXHJcbiAgKVxyXG4gIGlmICghc2VhcmNoSXRlbXMpIHJldHVyblxyXG5cclxuICBtYXJrZXRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGxvYWRXaXNobGlzdClcclxuICBtYXJrZXRPYnNlcnZlci5vYnNlcnZlKHNlYXJjaEl0ZW1zLCB7XHJcbiAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgfSlcclxuXHJcbiAgbG9hZFdpc2hsaXN0KClcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFdpc2hsaXN0KCk6IHZvaWQge1xyXG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcclxuICAgIFwiLm1hcmtldHBsYWNlLWFic3RyYWN0XCJcclxuICApKSB7XHJcbiAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcclxuICAgICAgICAoXzogTXV0YXRpb25SZWNvcmRbXSwgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIpOiB2b2lkID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1hcmtldEVudHJ5ID0gZ2V0SXRlbURldGFpbHMobGkpXHJcbiAgICAgICAgICBpZiAoIW1hcmtldEVudHJ5KSByZXR1cm5cclxuXHJcbiAgICAgICAgICBhZGRXaXNoaXN0QnV0dG9uKG1hcmtldEVudHJ5LCBvYnNlcnZlcilcclxuICAgICAgICB9XHJcbiAgICAgICkub2JzZXJ2ZSg8Tm9kZT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLXpvb21cIiksIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYWRkV2lzaGlzdEJ1dHRvbihcclxuICBtYXJrZXRFbnRyeTogTWFya2V0RW50cnksXHJcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXHJcbik6IHZvaWQge1xyXG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcclxuICAgIFwiI21hcmtldHBsYWNlLWl0ZW1EZXRhaWxcIlxyXG4gIClcclxuICBpZiAoIWJ1dHRvbnNDb250YWluZXIpIHJldHVyblxyXG4gIG9ic2VydmVyPy5kaXNjb25uZWN0KClcclxuXHJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVwiKT8ucmVtb3ZlKClcclxuICBjb25zdCBidXR0b25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfYnV0dG9uLmh0bWxcIilcclxuICBidXR0b25zQ29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBidXR0b25UZW1wbGF0ZS5yZW5kZXIoe30pKVxyXG5cclxuICBidXR0b25zQ29udGFpbmVyXHJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjbWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcIilcclxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgYWRkVG9XaXNobGlzdEZsYXZyKG1hcmtldEVudHJ5KVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkVG9XaXNobGlzdEZsYXZyKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xyXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sXCIpXHJcblxyXG4gICQuZmxhdnIoe1xyXG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHt9KSxcclxuICAgIGJ1dHRvbnM6IHtcclxuICAgICAgY2xvc2U6IHsgc3R5bGU6IFwiY2xvc2VcIiB9LFxyXG4gICAgICBzYXZlOiB7XHJcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwcmljZSA9IE51bWJlcihcclxuICAgICAgICAgICAgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIilcclxuICAgICAgICAgICAgICA/LnZhbHVlLnRyaW0oKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XHJcbiAgICAgICAgICAgICQuZmxhdnJOb3RpZihcIlRoaXMgaXMgbm90IGEgdmFsaWQgcHJpY2UuXCIpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcclxuICAgICAgICAgICAgd2lzaGxpc3RFbnRyeSA9PiB3aXNobGlzdEVudHJ5Lmljb24gIT09IG1hcmtldEVudHJ5Lmljb25cclxuICAgICAgICAgIClcclxuICAgICAgICAgIHdpc2hsaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAuLi5tYXJrZXRFbnRyeSxcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gd2lzaGxpc3RcclxuICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBkaWFsb2c6IFwicHJvbXB0XCIsXHJcbiAgICBwcm9tcHQ6IHtcclxuICAgICAgdmFsdWU6IFwiXCIsXHJcbiAgICB9LFxyXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XHJcbiAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXHJcbiAgICB9LFxyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXHJcbmltcG9ydCB7IGNoYW5nZVJlZ2lvbiB9IGZyb20gXCIuLi9hamF4L2NoYW5nZV9yZWdpb25cIlxyXG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vYXBpL3Jlc3VsdC5lbnVtXCJcclxuaW1wb3J0IHR5cGUgeyBNYXBSZWdpb24gfSBmcm9tIFwiLi4vZWxkYXJ5YS9jdXJyZW50X3JlZ2lvblwiXHJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxyXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlQnV0dG9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2F1dG9fZXhwbG9yZV9idXR0b25cIlxyXG5cclxubGV0IHBldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQZXQoKTogdm9pZCB7XHJcbiAgcGV0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxyXG4gIHBldE9ic2VydmVyID0gbnVsbFxyXG5cclxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL3BldFwiKSByZXR1cm5cclxuXHJcbiAgLy8gYC5wYWdlLW1haW4tY29udGFpbmVyYCBjaGFuZ2VzIGJhY2tncm91bmQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50bHlcclxuICAvLyBzZWxlY3RlZCByZWdpb24uXHJcbiAgY29uc3QgbWFpbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxyXG4gICAgXCIucGFnZS1tYWluLWNvbnRhaW5lclwiXHJcbiAgKVxyXG4gIGlmICghbWFpbkNvbnRhaW5lcikgcmV0dXJuXHJcblxyXG4gIHBldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZFBldClcclxuICBwZXRPYnNlcnZlci5vYnNlcnZlKG1haW5Db250YWluZXIsIHtcclxuICAgIGF0dHJpYnV0ZXM6IHRydWUsXHJcbiAgfSlcclxuXHJcbiAgbG9hZEV4cGxvcmF0aW9ucygpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRFeHBsb3JhdGlvbnMoKTogdm9pZCB7XHJcbiAgY29uc3QgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcclxuXHJcbiAgZm9yIChjb25zdCBkaXYgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oXHJcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxyXG4gICkpIHtcclxuICAgIGNvbnN0IGxvY2F0aW9uSWQgPSBOdW1iZXIoZGl2LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIikpXHJcbiAgICBpZiAoIWxvY2F0aW9uSWQpIGNvbnRpbnVlXHJcblxyXG4gICAgbG9hZFBpY3RvTWFwKGF1dG9FeHBsb3JlTG9jYXRpb25zLCBkaXYpXHJcblxyXG4gICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKFxyXG4gICAgICAgIChfOiBNdXRhdGlvblJlY29yZFtdLCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcik6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgYWRkQXV0b0V4cGxvcmVCdXR0b24obG9jYXRpb25JZCwgb2JzZXJ2ZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICApLm9ic2VydmUoPE5vZGU+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXAtbG9jYXRpb24tcHJldmlld1wiKSwge1xyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYWRkQXV0b0V4cGxvcmVCdXR0b24oXHJcbiAgbG9jYXRpb25JZDogbnVtYmVyLFxyXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxyXG4pOiB2b2lkIHtcclxuICBjb25zdCBidXR0b25zQ29udGFpbmVyID1cclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2J1dHRvbnMtY29udGFpbmVyXCIpXHJcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cclxuICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpXHJcblxyXG4gIC8vIFBhcmFtZXRlcnMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdGVtcGxhdGVcclxuICBjb25zdCBjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbiA9IHtcclxuICAgIGxvY2F0aW9uSWQsXHJcbiAgICBhY3RpdmU6IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxyXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCA9PT0gbG9jYXRpb25JZC50b1N0cmluZygpXHJcbiAgICApLFxyXG4gICAgcmVnaW9uSWQ6IE51bWJlcihcclxuICAgICAgZG9jdW1lbnRcclxuICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5taW5pbWFwLmN1cnJlbnRbZGF0YS1tYXBpZF1cIilcclxuICAgICAgICA/LmdldEF0dHJpYnV0ZShcImRhdGEtbWFwaWRcIilcclxuICAgICksXHJcbiAgfVxyXG5cclxuICAvLyBBZGQgdGhlIGF1dG8gZXhwbG9yZSBidXR0b25cclxuICBidXR0b25zQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjYXV0by1leHBsb3JlLWJ1dHRvblwiKT8ucmVtb3ZlKClcclxuICBjb25zdCBhdXRvRXhwbG9yZVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2V4cGxvcmVfYnV0dG9uLmh0bWxcIilcclxuICBidXR0b25zQ29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcclxuICAgIFwiYmVmb3JlZW5kXCIsXHJcbiAgICBhdXRvRXhwbG9yZVRlbXBsYXRlLnJlbmRlcihjb250ZXh0KVxyXG4gIClcclxuXHJcbiAgLy8gQmluZCBgYXV0b0V4cGxvcmVgIGFuZCBgbG9hZFBpY3RvTWFwc2BcclxuICBidXR0b25zQ29udGFpbmVyXHJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXCIjYXV0by1leHBsb3JlLWJ1dHRvblwiKVxyXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICB2b2lkIGF1dG9FeHBsb3JlKGNvbnRleHQpLnRoZW4obG9hZFBpY3RvTWFwcylcclxuICAgIH0pXHJcblxyXG4gIHZvaWQgZGlzYWJsZUV4cGxvcmUoY29udGV4dClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUV4cGxvcmUoY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICBjb25zdCBlbnRyeSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoY29udGV4dC5yZWdpb25JZCwgY29udGV4dC5sb2NhdGlvbklkKVxyXG4gIGlmICghZW50cnkpIHJldHVyblxyXG5cclxuICBpZiAocGV0RW5lcmd5IDwgTnVtYmVyKGVudHJ5LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSlcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbG9yZS1idXR0b25cIik/LmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBhdXRvRXhwbG9yZShjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gIGlmIChjb250ZXh0LmFjdGl2ZSkge1xyXG4gICAgY29uc3QgZmlsdGVyZWRMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxyXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCAhPT0gY29udGV4dC5sb2NhdGlvbklkLnRvU3RyaW5nKClcclxuICAgIClcclxuICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IGZpbHRlcmVkTG9jYXRpb25zXHJcbiAgICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGNvbnN0IG5ld0F1dG9FeHBsb3JlID0gYXdhaXQgZ2V0QXV0b0V4cGxvcmVFbnRyeShcclxuICAgIGNvbnRleHQucmVnaW9uSWQsXHJcbiAgICBjb250ZXh0LmxvY2F0aW9uSWRcclxuICApXHJcbiAgaWYgKCFuZXdBdXRvRXhwbG9yZSkgcmV0dXJuXHJcblxyXG4gIGNvbnN0IG5ld0xvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xyXG4gIG5ld0xvY2F0aW9ucy5wdXNoKG5ld0F1dG9FeHBsb3JlKVxyXG4gIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IG5ld0xvY2F0aW9uc1xyXG4gIGFkZEF1dG9FeHBsb3JlQnV0dG9uKGNvbnRleHQubG9jYXRpb25JZClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b0V4cGxvcmVFbnRyeShcclxuICByZWdpb25JZDogbnVtYmVyLFxyXG4gIGxvY2F0aW9uSWQ6IG51bWJlclxyXG4pOiBQcm9taXNlPEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsPiB7XHJcbiAgY29uc3QgcmVnaW9uID0gYXdhaXQgZ2V0UmVnaW9uKHJlZ2lvbklkKVxyXG4gIGlmICghcmVnaW9uKSByZXR1cm4gbnVsbFxyXG5cclxuICBjb25zdCBsb2NhdGlvbiA9IHJlZ2lvbi5sb2NhdGlvbnMuZmluZChcclxuICAgIGxvY2F0aW9uID0+IGxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkLnRvU3RyaW5nKClcclxuICApXHJcbiAgaWYgKCFsb2NhdGlvbikgcmV0dXJuIG51bGxcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGxvY2F0aW9uLFxyXG4gICAgcmVnaW9uLFxyXG4gIH1cclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVnaW9uKGlkOiBudW1iZXIpOiBQcm9taXNlPE1hcFJlZ2lvbiB8IG51bGw+IHtcclxuICBpZiAoaWQudG9TdHJpbmcoKSA9PT0gY3VycmVudFJlZ2lvbi5pZCkgcmV0dXJuIGN1cnJlbnRSZWdpb25cclxuXHJcbiAgY29uc3QganNvbiA9IGF3YWl0IGNoYW5nZVJlZ2lvbihpZClcclxuICBpZiAoanNvbi5yZXN1bHQgPT09IFJlc3VsdC5zdWNjZXNzKSByZXR1cm4ganNvbi5kYXRhLmN1cnJlbnRSZWdpb25cclxuXHJcbiAgcmV0dXJuIG51bGxcclxufVxyXG5cclxuLy8gUGljdG8gbWFwXHJcblxyXG5mdW5jdGlvbiBsb2FkUGljdG9NYXBzKCk6IHZvaWQge1xyXG4gIGNvbnN0IGF1dG9FeHBsb3JlTG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXHJcbiAgZm9yIChjb25zdCBkaXYgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oXHJcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxyXG4gICkpIHtcclxuICAgIGxvYWRQaWN0b01hcChhdXRvRXhwbG9yZUxvY2F0aW9ucywgZGl2KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFBpY3RvTWFwKFxyXG4gIGF1dG9FeHBsb3JlTG9jYXRpb25zOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10sXHJcbiAgZGl2OiBIVE1MRGl2RWxlbWVudFxyXG4pOiB2b2lkIHtcclxuICBjb25zdCBtYXBMb2NhdGlvbiA9IGRpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpXHJcbiAgaWYgKCFtYXBMb2NhdGlvbikgcmV0dXJuXHJcblxyXG4gIGRpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBhdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxyXG4gICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IG1hcExvY2F0aW9uXHJcbiAgKVxyXG4gICAgPyBcInVybCgvc3RhdGljL2ltZy9uZXctbGF5b3V0L3BldC9pY29ucy9waWN0b19tYXBfZXhwbG8ucG5nKVwiXHJcbiAgICA6IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcC5wbmcpXCJcclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcclxuaW1wb3J0IHsgZXhwb3J0T3V0Zml0IH0gZnJvbSBcIi4uL291dGZpdFwiXHJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZUNvbnRhY3RBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvcHJvZmlsZV9jb250YWN0X2FjdGlvblwiXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFByb2ZpbGUoKTogdm9pZCB7XHJcbiAgY29uc3QgcHJvZmlsZUNvbnRhY3RBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICBcInByb2ZpbGUtY29udGFjdC1hY3Rpb25zXCJcclxuICApXHJcbiAgaWYgKFxyXG4gICAgIXByb2ZpbGVDb250YWN0QWN0aW9ucyB8fFxyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5wcm9maWxlLWNvbnRhY3QtYWN0aW9uLWVlXCIpXHJcbiAgKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9wcm9maWxlX2NvbnRhY3RfYWN0aW9uLmh0bWxcIilcclxuICBjb25zdCBwcm9maWxlQWN0aW9uRXhwb3J0OiBQcm9maWxlQ29udGFjdEFjdGlvbiA9IHtcclxuICAgIGlkOiBcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZXhwb3J0XCIsXHJcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogXCJFeHBvcnQgb3V0Zml0XCIsXHJcbiAgfVxyXG5cclxuICAvLyBBZGQgZW50cmllc1xyXG4gIHByb2ZpbGVDb250YWN0QWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXHJcbiAgICBcImJlZm9yZWVuZFwiLFxyXG4gICAgdGVtcGxhdGUucmVuZGVyKHByb2ZpbGVBY3Rpb25FeHBvcnQpXHJcbiAgKVxyXG5cclxuICAvLyBBZGQgY2xpY2sgZXZlbnRzXHJcbiAgZG9jdW1lbnRcclxuICAgIC5nZXRFbGVtZW50QnlJZChwcm9maWxlQWN0aW9uRXhwb3J0LmlkKVxyXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXhwb3J0UHJvZmlsZSlcclxufVxyXG5cclxuZnVuY3Rpb24gZXhwb3J0UHJvZmlsZSgpOiB2b2lkIHtcclxuICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEhlYWRpbmdFbGVtZW50PihcclxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXHJcbiAgKVxyXG5cclxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoU2FjaGEuQXZhdGFyLmF2YXRhcnMpLmZpbHRlcihrZXkgPT5cclxuICAgIGtleS5zdGFydHNXaXRoKFwiI3BsYXllclByb2ZpbGVBdmF0YXJcIilcclxuICApXHJcblxyXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgIGV4cG9ydE91dGZpdChrZXksIHRpdGxlPy50ZXh0Q29udGVudD8udHJpbSgpKVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFNldHRpbmdzKCk6IHZvaWQge1xyXG4gIGNvbnN0IGFjY291bnRSaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWNjb3VudC1yaWdodCBkaXZcIilcclxuICBpZiAoIWFjY291bnRSaWdodCB8fCBhY2NvdW50UmlnaHQucXVlcnlTZWxlY3RvcihcIi5hY2NvdW50LWVlLWJsb2NcIikpIHJldHVyblxyXG5cclxuICBjb25zdCBzZXR0aW5nc1RlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sXCIpXHJcblxyXG4gIGFjY291bnRSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXHJcbiAgICBcImJlZm9yZWVuZFwiLFxyXG4gICAgc2V0dGluZ3NUZW1wbGF0ZS5yZW5kZXIoTG9jYWxTdG9yYWdlLnNldHRpbmdzKVxyXG4gIClcclxuXHJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1kZWJ1Zy1lbmFibGVkXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgTG9jYWxTdG9yYWdlLmRlYnVnID0gIUxvY2FsU3RvcmFnZS5kZWJ1Z1xyXG4gICAgcmVsb2FkU2V0dGluZ3MoKVxyXG4gIH0pXHJcblxyXG4gIGRvY3VtZW50XHJcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFwiKVxyXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICBMb2NhbFN0b3JhZ2UubWluaWdhbWVzID0gIUxvY2FsU3RvcmFnZS5taW5pZ2FtZXNcclxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxyXG4gICAgfSlcclxuXHJcbiAgZG9jdW1lbnRcclxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXCIpXHJcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgPSAhTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uc1xyXG4gICAgICByZWxvYWRTZXR0aW5ncygpXHJcbiAgICB9KVxyXG5cclxuICBkb2N1bWVudFxyXG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtbWFya2V0LWVuYWJsZWRcIilcclxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgTG9jYWxTdG9yYWdlLm1hcmtldCA9ICFMb2NhbFN0b3JhZ2UubWFya2V0XHJcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcclxuICAgIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbG9hZFNldHRpbmdzKCk6IHZvaWQge1xyXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFjY291bnQtZWUtYmxvY1wiKT8ucmVtb3ZlKClcclxuICBsb2FkU2V0dGluZ3MoKVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcclxuaW1wb3J0IHR5cGUgeyBXaXNobGlzdFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3dpc2hsaXN0X3NldHRpbmdzXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkV2lzaGxpc3QoKTogdm9pZCB7XHJcbiAgY29uc3QgbWFya2V0cGxhY2VNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1tZW51XCIpXHJcbiAgaWYgKCFtYXJrZXRwbGFjZU1lbnUpIHJldHVyblxyXG5cclxuICBpZiAoIW1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKSkge1xyXG4gICAgZm9yIChjb25zdCBhIG9mIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKSkge1xyXG4gICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgcGFnZUxvYWQoYS5ocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3IoXCIjd2lzaGxpc3QtYnV0dG9uXCIpPy5yZW1vdmUoKVxyXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sXCIpXHJcbiAgbWFya2V0cGxhY2VNZW51Lmluc2VydEFkamFjZW50SFRNTChcclxuICAgIFwiYmVmb3JlZW5kXCIsXHJcbiAgICB3aXNobGlzdEJ1dHRvblRlbXBsYXRlLnJlbmRlcih7fSlcclxuICApXHJcblxyXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uID1cclxuICAgIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yPEhUTUxBbmNob3JFbGVtZW50PihcIiN3aXNobGlzdC1idXR0b25cIilcclxuICB3aXNobGlzdEJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIGluc2VydFdpc2hsaXN0KHdpc2hsaXN0QnV0dG9uKVxyXG4gIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc2VydFdpc2hsaXN0KGJ1dHRvbjogSFRNTEFuY2hvckVsZW1lbnQpOiB2b2lkIHtcclxuICAvLyBBc3Npc3RhbmNlXHJcbiAgY29uc3QgYXNzaXN0YW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubWFya2V0cGxhY2UtYXNzaXN0YW5jZVwiKVxyXG4gIGlmIChhc3Npc3RhbmNlKVxyXG4gICAgYXNzaXN0YW5jZS50ZXh0Q29udGVudCA9XHJcbiAgICAgIFwiT24gdGhpcyBwYWdlLCB5b3UgY2FuIG9yZ2FuaXplIHlvdXIgd2lzaGxpc3QgYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgeW91ciB3aXNoZWQgaXRlbXMuXCJcclxuXHJcbiAgLy8gTWVudVxyXG4gIGRvY3VtZW50XHJcbiAgICAucXVlcnlTZWxlY3RvcihcIiNtYXJrZXRwbGFjZS1tZW51IC5hY3RpdmVcIilcclxuICAgID8uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxyXG4gIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpXHJcblxyXG4gIC8vIEZpbHRlcnNcclxuICBjb25zdCBmaWx0ZXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1maWx0ZXJzXCIpXHJcbiAgaWYgKGZpbHRlcnMpIGZpbHRlcnMuaW5uZXJIVE1MID0gXCJcIlxyXG5cclxuICAvLyBDb250ZW50XHJcbiAgY29uc3Qgd2lzaGxpc3RUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvd2lzaGxpc3Rfc2V0dGluZ3MuaHRtbFwiKVxyXG4gIGNvbnN0IGNvbnRhaW5lciA9XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWNvbnRhaW5lclwiKSA/P1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1hY3RpdmUtYXVjdGlvbnNcIikgPz9cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbXNGb3JTYWxlXCIpXHJcbiAgaWYgKCFjb250YWluZXIpIHJldHVyblxyXG5cclxuICBjb25zdCB3aXNobGlzdENvbnRleHQ6IFdpc2hsaXN0U2V0dGluZ3MgPSB7XHJcbiAgICB3aXNobGlzdDogTG9jYWxTdG9yYWdlLndpc2hsaXN0LFxyXG4gIH1cclxuICBjb250YWluZXIuaW5uZXJIVE1MID0gd2lzaGxpc3RUZW1wbGF0ZS5yZW5kZXIod2lzaGxpc3RDb250ZXh0KVxyXG5cclxuICAvLyBCdXR0b25zXHJcbiAgZm9yIChjb25zdCB0ciBvZiBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcInRyXCIpKSB7XHJcbiAgICBjb25zdCB3ZWFyYWJsZWl0ZW1pZCA9IHRyLmRhdGFzZXQud2VhcmFibGVpdGVtaWRcclxuICAgIGlmICghd2VhcmFibGVpdGVtaWQpIGNvbnRpbnVlXHJcblxyXG4gICAgLy8gUmVzZXQgc3RhdHVzXHJcbiAgICBjb25zdCByZXNldCA9IHRyLnF1ZXJ5U2VsZWN0b3IoXCIucmVzZXQtaXRlbS1zdGF0dXNcIilcclxuICAgIGlmIChyZXNldClcclxuICAgICAgcmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICByZXNldFN0YXR1cyh3ZWFyYWJsZWl0ZW1pZClcclxuICAgICAgICBpbnNlcnRXaXNobGlzdChidXR0b24pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgLy8gRGVsZXRlIGl0ZW0gZnJvbSB3aXNobGlzdFxyXG4gICAgY29uc3QgZGVsZXRlQnV0dG9uID0gdHIucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtd2lzaGxpc3QtaXRlbVwiKVxyXG4gICAgaWYgKGRlbGV0ZUJ1dHRvbilcclxuICAgICAgZGVsZXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgZGVsZXRlSXRlbSh3ZWFyYWJsZWl0ZW1pZClcclxuICAgICAgICBpbnNlcnRXaXNobGlzdChidXR0b24pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgLy8gQ2hhbmdlIHByaWNlXHJcbiAgICBjb25zdCBlZGl0UHJpY2UgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtcHJpY2VcIilcclxuICAgIGlmIChlZGl0UHJpY2UpXHJcbiAgICAgIGVkaXRQcmljZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgIHZvaWQgY2hhbmdlUHJpY2Uod2VhcmFibGVpdGVtaWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXNldFN0YXR1cyh3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgY29uc3Qgd2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3RcclxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcclxuICAgIGl0ZW0gPT4gaXRlbS53ZWFyYWJsZWl0ZW1pZCA9PT0gd2VhcmFibGVpdGVtaWRcclxuICApXHJcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cclxuICBpZiAoIWVudHJ5KSByZXR1cm5cclxuXHJcbiAgZGVsZXRlIGVudHJ5LmVycm9yXHJcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xyXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXHJcbiAgICBlbnRyeSxcclxuICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcclxuICBdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZUl0ZW0od2VhcmFibGVpdGVtaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdC5maWx0ZXIoXHJcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgIT09IHdlYXJhYmxlaXRlbWlkXHJcbiAgKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBjaGFuZ2VQcmljZSh3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2NoYW5nZV9wcmljZV9mbGF2ci5odG1sXCIpXHJcblxyXG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XHJcbiAgY29uc3QgaW5kZXggPSB3aXNobGlzdC5maW5kSW5kZXgoXHJcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXHJcbiAgKVxyXG4gIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXHJcbiAgaWYgKCFlbnRyeSkgcmV0dXJuXHJcblxyXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICQuZmxhdnIoe1xyXG4gICAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoe30pLFxyXG4gICAgICBkaWFsb2c6IFwicHJvbXB0XCIsXHJcbiAgICAgIHByb21wdDoge1xyXG4gICAgICAgIHZhbHVlOiBlbnRyeS5wcmljZS50b1N0cmluZygpLFxyXG4gICAgICB9LFxyXG4gICAgICBidXR0b25zOiB7XHJcbiAgICAgICAgY2xvc2U6IHtcclxuICAgICAgICAgIHN0eWxlOiBcImNsb3NlXCIsXHJcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2F2ZToge1xyXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByaWNlID0gTnVtYmVyKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIilcclxuICAgICAgICAgICAgICAgID8udmFsdWUudHJpbSgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgJC5mbGF2ck5vdGlmKFwiVGhpcyBpcyBub3QgYSB2YWxpZCBwcmljZS5cIilcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZW50cnkucHJpY2UgPSBwcmljZVxyXG4gICAgICAgICAgICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXHJcbiAgICAgICAgICAgICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXHJcbiAgICAgICAgICAgICAgZW50cnksXHJcbiAgICAgICAgICAgICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxyXG4gICAgICAgICAgICBdXHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XHJcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBEdXJhdGlvblVuaXQgfSBmcm9tIFwiLi9kdXJhdGlvblwiXHJcbmltcG9ydCB7IGxvYWRUYWtlb3ZlciB9IGZyb20gXCIuL3Rha2VvdmVyL2JyYWluXCJcclxuaW1wb3J0IHsgbG9hZEFwcGVhcmFuY2UgfSBmcm9tIFwiLi91aS9hcHBlYXJhbmNlXCJcclxuaW1wb3J0IHsgbG9hZENhcm91c2VsIH0gZnJvbSBcIi4vdWkvY2Fyb3VzZWxcIlxyXG5pbXBvcnQgeyBsb2FkSG9tZUNvbnRlbnQgfSBmcm9tIFwiLi91aS9ob21lX2NvbnRlbnRcIlxyXG5pbXBvcnQgeyBsb2FkTWFya2V0IH0gZnJvbSBcIi4vdWkvbWFya2V0XCJcclxuaW1wb3J0IHsgbG9hZE1lbnUgfSBmcm9tIFwiLi91aS9tZW51XCJcclxuaW1wb3J0IHsgbG9hZFBldCB9IGZyb20gXCIuL3VpL3BldFwiXHJcbmltcG9ydCB7IGxvYWRQcm9maWxlIH0gZnJvbSBcIi4vdWkvcHJvZmlsZVwiXHJcbmltcG9ydCB7IGxvYWRTZXR0aW5ncyB9IGZyb20gXCIuL3VpL3NldHRpbmdzXCJcclxuaW1wb3J0IHsgbG9hZFdpc2hsaXN0IH0gZnJvbSBcIi4vdWkvd2lzaGxpc3RcIlxyXG5cclxuLy8gbG9hZEpTKFwiaHR0cHM6Ly91bnBrZy5jb20vaG9nYW4uanMvZGlzdC90ZW1wbGF0ZS0zLjAuMi5taW4uanNcIiwgdHJ1ZSk7XHJcblxyXG5mdW5jdGlvbiBsb2FkKCk6IHZvaWQge1xyXG4gIGxvYWRVSSgpXHJcbiAgbG9hZFRha2VvdmVyKClcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFVJKCk6IHZvaWQge1xyXG4gIGxvYWRNZW51KClcclxuICBsb2FkQ2Fyb3VzZWwoKVxyXG4gIGxvYWRIb21lQ29udGVudCgpXHJcbiAgbG9hZEFwcGVhcmFuY2UoKVxyXG4gIGxvYWRQcm9maWxlKClcclxuICBsb2FkU2V0dGluZ3MoKVxyXG4gIGxvYWRQZXQoKVxyXG4gIGxvYWRNYXJrZXQoKVxyXG4gIGxvYWRXaXNobGlzdCgpXHJcblxyXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcIi5tdXNpYy1oaWRkZW4tdm9pY2VcIik/LmNsaWNrKClcclxuICB9LCBEdXJhdGlvblVuaXQuc2Vjb25kKVxyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xyXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIubXVzaWMtaGlkZGVuLXZvaWNlXCIpPy5jbGljaygpXHJcbn0pXHJcblxyXG5uZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkKS5vYnNlcnZlKDxOb2RlPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29udGFpbmVyXCIpLCB7XHJcbiAgY2hpbGRMaXN0OiB0cnVlLFxyXG59KVxyXG5cclxubG9hZFVJKClcclxuY29uc29sZS5sb2coXCJFbGRhcnlhIEVuaGFuY2VtZW50cyBsb2FkZWQuXCIpXHJcbmxvYWRUYWtlb3ZlcigpXHJcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxyXG5pbXBvcnQgdHlwZSB7IE1haW5NZW51IH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL21haW5fbWVudVwiXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1lbnUoKTogdm9pZCB7XHJcbiAgY29uc3QgbWVudUlubmVyUmlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lbnUtaW5uZXItcmlnaHRcIilcclxuICBpZiAoIW1lbnVJbm5lclJpZ2h0IHx8IG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWVlXCIpKSByZXR1cm5cclxuXHJcbiAgLy8gUmVtb3ZlIGJhbmtcclxuICBtZW51SW5uZXJSaWdodC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1iYW5rXCIpPy5yZW1vdmUoKVxyXG5cclxuICAvLyBBZGQgRm9ydW1cclxuICBjb25zdCBtZW51VGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sXCIpXHJcbiAgY29uc3QgbWFpbk1lbnVGb3J1bTogTWFpbk1lbnUgPSB7XHJcbiAgICBjbGFzczogXCJmb3J1bVwiLFxyXG4gICAgaHJlZjogXCIvZm9ydW1cIixcclxuICAgIHRleHQ6IFwiRm9ydW1cIixcclxuICB9XHJcblxyXG4gIG1lbnVJbm5lclJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcclxuICAgIFwiYmVmb3JlZW5kXCIsXHJcbiAgICBtZW51VGVtcGxhdGUucmVuZGVyKG1haW5NZW51Rm9ydW0pXHJcbiAgKVxyXG59XHJcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxyXG5pbXBvcnQgdHlwZSB7IEhvbWVDb250ZW50U21hbGwgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvaG9tZV9jb250ZW50X3NtYWxsXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkSG9tZUNvbnRlbnQoKTogdm9pZCB7XHJcbiAgY29uc3QgaG9tZUNvbnRlbnRTbWFsbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhvbWUtY29udGVudC1zbWFsbHNcIilcclxuICBpZiAoXHJcbiAgICAhaG9tZUNvbnRlbnRTbWFsbHMgfHxcclxuICAgIGhvbWVDb250ZW50U21hbGxzLnF1ZXJ5U2VsZWN0b3IoXCIuaG9tZS1jb250ZW50LXNtYWxsLWVlXCIpXHJcbiAgKVxyXG4gICAgcmV0dXJuXHJcblxyXG4gIC8vIFJlbW92ZSBiYW5rXHJcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJob21lLWJhbmtcIik/LnJlbW92ZSgpXHJcblxyXG4gIC8vIEFkZCBmb3J1bVxyXG4gIGNvbnN0IHNtYWxsVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sXCIpXHJcbiAgY29uc3Qgc21hbGxDb250ZW50OiBIb21lQ29udGVudFNtYWxsID0ge1xyXG4gICAgYmFja2dyb3VuZEltYWdlOlxyXG4gICAgICBcIi9hc3NldHMvaW1nL21pbmlnYW1lcy90cmVhc3VyZWh1bnQvYTQ4YmJjNGU0ODQ5NzQ1ZWJlNmRiY2Y1MzEzZWIzZjAuanBnXCIsXHJcbiAgICBoNDogXCJGb3J1bVwiLFxyXG4gICAgaHJlZjogXCIvZm9ydW1cIixcclxuICAgIGlkOiBcImZvcnVtXCIsXHJcbiAgfVxyXG5cclxuICBob21lQ29udGVudFNtYWxscy5pbnNlcnRBZGphY2VudEhUTUwoXHJcbiAgICBcImJlZm9yZWVuZFwiLFxyXG4gICAgc21hbGxUZW1wbGF0ZS5yZW5kZXIoc21hbGxDb250ZW50KVxyXG4gIClcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9