ibp-max 1.1.13 → 1.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/onesearch.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var l=t();for(var a in l)("object"==typeof exports?exports:e)[a]=l[a]}}(self,(()=>(()=>{var e={803:()=>{var e;(e=jQuery).fn.extend({OneSearch:function(t){var l=e.extend({ServiceUrl:"",OneSearchName:"",OneSearchDS:null,MinCharLimit:3,EnableCurrentLocation:!1,EnablePreList:!1,AutoSelectFirstItem:!1,ResultLimit:10,EnableTouch:!1,DataSource:null,DataSourceControl:null,ContainerCss:"",ItemCss:"",HighlightItemCss:"",Region:"US",Locale:"NONE",HelpText:"",AnimatePlaceholderText:!1,MultiSelect:!1,MultiSelectBoxId:"",MultiSelectShowHelpText:!0,MultiKeywordDelimiter:"",LoadingImageUrl:"",ParentContainer:"",BeforeCall:null,AfterCall:null,OnSuccess:null,OnError:null,OnSelect:null,OnTextChange:null,OnSearch:null,OnIncrementalSearch:null,OnMultiSelectRemove:null,SearchMode:"Database",TestMode:!1,StickyMode:!1,EnableCategoryView:!1},t),a=null,n=null,r=null,o=null,s="",c="",d=null,u=null,h=[],p=0,m=!1,v=!1;return this.each((function(){!function(i){if(l.StickyMode&&!l.TestMode&&(l.TestMode=!0),a=i,l.AutoSelectFirstItem&&(n=e('input[id="'+e(a).attr("id")+'_AUTO_ITEM"]')),e(a).attr("autocomplete","nope"),e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},r=e("<div>").attr("id",e(a).attr("id")+"_OneSearch").css("position",l.EnableTouch?"relative":"absolute").css("top",b(e(a))).css("width",_(e(a))).css("display","none").addClass(l.ContainerCss).html(l.HelpText),""!=l.ParentContainer?e("#"+l.ParentContainer).append(r):r.insertAfter(e(a)),e(a).closest("div").click((function(t){"block"==e(a).css("display")&&""!=e(a).html()||"CloseArea"!=t.target.className&&setTimeout((function(){e(a).focus()}),500)})),l.MultiSelect&&(""!=l.MultiSelectBoxId&&(o=e("#"+l.MultiSelectBoxId)),null!=o&&""!=l.MultiSelectBoxCss&&o.addClass(l.MultiSelectBoxCss),l.MultiSelect&&e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){if(""!=e(this).val()){var t={},l=e(this).attr("id").split("_");t.rt=l[l.length-2],t.n=l[l.length-1],T(t,e(this).val(),!0)}}))),l.EnableCurrentLocation){var d=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(),g=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(),O=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val();void 0!==d&&void 0!==g&&void 0!==O&&""!=d&&""!=g&&""!=O&&(v=!0)}e(a).keydown((function(t){switch(t.keyCode){case 9:case 13:l.AutoSelectFirstItem&&e(a).val().length>0?(p>0?C():y(0,!1,!0),m=!1):(C(),m=!1);break;case 38:x(-1);break;case 39:l.AutoSelectFirstItem&&(y(0,!1,!0),e(r).hide(),e(n).val(""));break;case 40:x(1);break;case 27:e(r).hide(),u=null,h=[],p=0}})),e(a).keypress((function(t){parseInt(r.css("width"))!=_(e(a))&&r.css("width",_(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),13==t.keyCode&&t.preventDefault()})),e(a).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(a).val().length||(T(null,null),l.AutoSelectFirstItem&&n.val("")),13==t.keyCode&&e(a).val().length>0&&!m?l.OnSearch&&l.OnSearch():13==t.keyCode&&e(a).val().length>0&&l.AutoSelectFirstItem?p>0?C():y(0,!1,!0):l.OnIncrementalSearch&&l.OnIncrementalSearch(),e(a).val().length>=l.MinCharLimit||l.EnablePreList||l.EnableCurrentLocation?e(r).show():e(r).hide(),13==t.keyCode&&e(r).hide(),e(a).val().indexOf(s)<0&&e(r).html(""),8!=t.keyCode&&46!=t.keyCode||(s="",c=""),s!=e(a).val()&&(l.OnTextChange&&l.OnTextChange(e(a).val()),T(null,null),s=e(a).val(),"none"!=e(r).css("display")&&(""!=l.LoadingImageUrl&&e(a).val().length>=l.MinCharLimit&&e(r).html('<img src="'+l.LoadingImageUrl+'" />'),setTimeout((function(){S()}),500))))})),e(a).focus((function(){if(parseInt(r.css("width"))!=_(e(a))&&r.css("width",_(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),l.MultiSelect)if(o.find("a.agora-onesearch-multi-sel-item-close").length>0){var n=e("<div>").html(e(o.html()));e(n).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),l.MultiSelectShowHelpText?l.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(l.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(a).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+n.html()+"</div>":l.EnableCurrentLocation&&e(n).append(f())}else l.HelpText="",l.EnableCurrentLocation&&(0==e(r).find("[data-location-search]").length&&e(r).append(f()),e(r).show());l.EnablePreList?(S(),e(r).show()):!l.MultiSelect&&l.EnableCurrentLocation?(0==e(r).find("[data-location-search]").length&&e(r).append(f()),console.log(f()),e(r).show()):""!=l.HelpText&&""==e(a).val()&&(e(r).html(l.HelpText),parseInt(r.css("width"))!=_(e(a))&&r.css("width",_(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),e(r).show())})),e(a).blur((function(){l.AutoSelectFirstItem&&e(a).val().length>0&&!l.MultiSelect&&setTimeout((function(){var t=e(a).data("is-manual-select");void 0!==t&&0!=t||y(0,!0,!0),e(a).data("is-manual-select",!1)}),50),setTimeout((function(){l.TestMode?(e(r).find("[data-location-search]").length>0&&l.TestMode||l.StickyMode&&0==e(r).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(r).html(""),e(r).hide(),e(r).parent().removeClass("is-dirty")):(e(r).html(""),e(r).hide(),0==e(a).val().length&&e(r).parent().removeClass("is-dirty"))}),200)})),S(),1==l.AnimatePlaceholderText&&""==e(a).val()&&AnimatePlaceholderText(e(a),"",0)}(e(this))}));function f(){return l.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(a).attr("EnableCurrentLocationLabel")).css("display","block").css("width","100%").css("padding","3px").css("color","red").attr("idx",-1).addClass("get-my-direction").attr("data-location-search","").mouseover((function(){e(this).css("background-color:red"),e(this).addClass(l.HighlightItemCss)})).click((function(){g(e(this).attr("idx"))})).on("tap",(function(){g(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})):null}function g(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(null!=e(a).attr("DefaultSearchRadius")&&"0"!=e(a).attr("DefaultSearchRadius")?e(a).attr("DefaultSearchRadius"):"5"),v=!0,l.OnSelect&&l.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),l.OnSuccess&&l.OnSuccess()})),y(t)}function S(){(c!=e(a).val()||l.EnablePreList)&&(null!=d&&d.abort(),e(a).val().length<l.MinCharLimit?s="":c=e(a).val(),!l.EnablePreList&&e(a).val().length<l.MinCharLimit||(l.AutoSelectFirstItem&&(e(n).val(""),e(a).data("is-manual-select",!1)),d=e.ajax({type:"POST",url:l.ServiceUrl+"?Keyword="+(e(a).val().length<l.MinCharLimit?"":e(a).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),data:{Keyword:e(a).val().length<l.MinCharLimit?"":e(a).val(),SearchMode:l.SearchMode,OneSearchName:l.OneSearchName,Region:l.Region,Locale:l.Locale,AdditionalWhere:e(a).attr("AdditionalWhere")},dataType:"json",success:function(t){if(u=t,p=0,e(r).html(""),null!=t&&0!=t.length){var n="",o="",s=null,c="",d="";for(i=0;i<t.length;i++){if(n=L(t[i].l,e(a).val()),null!=(o=M(l.OneSearchDS,t[i].rt,t[i].n))&&null!=o.ItemTemplate&&""!=o.ItemTemplate)n=(n=o.ItemTemplate.replace("{$l}",L(t[i].l,e(a).val()))).replace("{$d}",t[i].d);else if(null!=o&&o.ItemTemplates.length>0)for(j=0;j<o.ItemTemplates.length;j++)o.ItemTemplates[j].Locale==l.Locale&&(n=(n=o.ItemTemplates[j].Template.replace("{$l}",L(t[i].l,e(a).val()))).Template.replace("{$d}",t[i].d));s=e("<a>").html(n).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(l.HighlightItemCss)})).mousedown((function(){e(a).data("is-manual-select",!0)})).click((function(){y(e(this).attr("idx"))})).on("tap",(function(){e(a).data("is-manual-select",!0),y(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})),0==i&&l.AutoSelectFirstItem&&O(i),l.EnableCategoryView?(d!=t[i].g&&((c=e("<div>").addClass("OneSearchBox-category-"+t[i].g)).append(e("<span>").html(t[i].g)),d=t[i].g),c.append(s),e(r).append(c),0==i&&e(r)[i].className.includes("OneSearchBox-")&&(e(r)[i].className=e(r)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(r).addClass("OneSearchBox-"+t[i].g)):e(r).append(s)}}else e(r).hide()},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function C(){if(!(null==u||u.length<p-1||p<=0)){var t,n="",i=M(l.OneSearchDS,u[p-1].rt,u[p-1].n);null!=i&&""!=i.ItemTemplate&&(n=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?u[p-1].k:u[p-1].l),t=u[p-1].l,l.MultiSelect?e(a).val(""):e(a).val(t),s=e(a).val(),T(u[p-1],n),l.AutoSelectFirstItem&&O(p-1),l.OnSelect&&l.OnSelect(u[p-1]),p=0,l.TestMode||e(r).html("")}}function y(t,i,o){var c="",d="";if(null!=i&&null!=i||(i=!1),null!=o&&null!=o||(o=!1),void 0!==u&&null!=u&&0!=u.length){var h=M(l.OneSearchDS,u[t].rt,u[t].n);null!=h&&""!=h.ItemTemplate&&(d=null!=h.Selector&&null!=h.Selector&&"k"==h.Selector?u[t].k:u[t].l),c=u[t].l,1!=o||c.toLowerCase().startsWith(e(a).val().toLowerCase())?(l.MultiSelect?(e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")):(null!=h&&1!=h.SkipSelect?e(a).val(c):e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")),s=e(a).val(),t>=0&&v&&(e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=h&&1!=h.SkipSelect&&T(u[t],d),l.OnSelect&&l.OnSelect(u[t]),l.TestMode||i||e(r).html(""),l.MultiSelect&&setTimeout((function(){e(a).focus()}),200)):e(n).val("")}}function O(t){var i="";if(void 0!==u&&null!=u&&0!=u.length){var r=M(l.OneSearchDS,u[t].rt,u[t].n);if(null!=r&&""!=r.ItemTemplate&&(null!=r.Selector&&null!=r.Selector&&"k"==r.Selector?u[t].k:u[t].l),(i=u[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(a).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(a).val(),"ig");e(n).val(i.replace(o,e(a).val())),s=e(a).val()}else e(n).val("")}}function T(t,n,r){if(l.MultiSelect){if(null==t)return;var s=e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n),c=n.split(";"),d=M(l.OneSearchDS,t.rt,t.n);for(i=0;i<c.length&&null!=d;i++)if(!(c[i].length<2)&&(-1==(";"+s.val().toLowerCase()+";").indexOf(";"+c[i].toLowerCase()+";")||r)){r||s.val(s.val()+";"+c[i]);var u=e("<div>").addClass("agora-onesearch-multi-sel-item-cont").attr("id","multiitem"+e(a).attr("id")+"_"+t.rt+"_"+t.n+c[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).append(e("<a>").addClass("agora-onesearch-multi-sel-item-close").attr("title","Click here to hide this area filter.").attr("id","multiitem_close_"+e(a).attr("id")+"_"+t.rt+"_"+t.n+c[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).attr("val",c[i]).html('<i class="aga aga-close"></i>').click((function(){I(e(this),t,e(this).attr("val"))}))).append(e("<a>").html(d.MultiItemTemplate.replace("{$l}",c[i]).replace("{$d}",c[i])));o.append(u)}!r&&l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}else{if(e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n).val(n)}}function I(t,n,i){var o=e("#"+e(a).attr("id")+"_"+n.rt+"_"+n.n);0!=o.val().indexOf(";")&&o.val(";"+o.val()),o.val(o.val().replace(";"+i,"")),e(t).parent().remove(),""!=o.val()&&0!=e(r).find("div.agora-onesearch-multi-sel-item-cont").length||(e(r).html(""),e(r).hide()),l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}function x(t){m=!0,t>0?p<e(r).find("a").length&&p++:p>1&&p--,e(r).find("a").each((function(){e(this).removeClass(l.HighlightItemCss)})),e(r).find(l.EnableCategoryView?"a[idx="+p+"]":"a:nth-child("+p+")").addClass(l.HighlightItemCss)}function _(e){if(null==e||0==e.length)return 0;var t=e.width();return t+=parseInt(e.css("padding-left"),10)+parseInt(e.css("padding-right"),10),t+=parseInt(e.css("borderLeftWidth"),10)+parseInt(e.css("borderRightWidth"),10),""!=l.ParentContainer&&(t+=e.offset().left),t}function b(e){if(null==e||0==e.length)return 0;var t=e.height();return t+=parseInt(e.css("padding-top"),10)+parseInt(e.css("padding-bottom"),10),t+=parseInt(e.css("borderTopWidth"),10)+parseInt(e.css("borderBottomWidth"),10),t+=e.position().top,""!=l.ParentContainer&&(t+=e.offset().top),t}function M(e,t,l){if(null!=h[t+"_"+l])return h[t+"_"+l];for(k=0;k<e.RecordTypes.length;k++)for(j=0;e.RecordTypes[k].Name==t&&j<e.RecordTypes[k].Fields.length;j++)if(e.RecordTypes[k].Fields[j].Name==l)return h[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function L(e,t){return e.replace(new RegExp("("+function(e){return(e+"").replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1")}(t)+")","gi"),"<strong>$1</strong>")}}})}},t={};function l(a){var n=t[a];if(void 0!==n)return n.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,l),i.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";l.r(a);l(803)})(),a})()));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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TixJQUNILG9CQUFYME4sUUFBMEJBLE9BQU9DLGFBQzFDVixPQUFPQyxlQUFlbE4sRUFBUzBOLE9BQU9DLFlBQWEsQ0FBRTNDLE1BQU8sV0FFN0RpQyxPQUFPQyxlQUFlbE4sRUFBUyxhQUFjLENBQUVnTCxPQUFPLEdBQU8sRSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4uLy4uL0Fnb3JhIDQuMC9JZGNHbG9iYWwuQWdvcmEuSmF2YVNjcmlwdC5QbHVnSW4vTWF4T25lU2VhcmNoLmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIu+7vyhmdW5jdGlvbiAoJCkge1xyXG5cclxuICAgIC8vQXR0YWNoIHRoaXMgbmV3IG1ldGhvZCB0byBqUXVlcnlcclxuICAgICQuZm4uZXh0ZW5kKHtcclxuXHJcbiAgICAgICAgLy9UaGlzIGlzIHdoZXJlIHlvdSB3cml0ZSB5b3VyIHBsdWdpbidzIG5hbWVcclxuICAgICAgICBPbmVTZWFyY2g6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgICAgICAvL1NldCB0aGUgZGVmYXVsdCB2YWx1ZXMsIHVzZSBjb21tYSB0byBzZXBhcmF0ZSB0aGUgc2V0dGluZ3MsIGV4YW1wbGU6XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgICAgICBTZXJ2aWNlVXJsOiAnJyxcclxuICAgICAgICAgICAgICAgIE9uZVNlYXJjaE5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgT25lU2VhcmNoRFM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBNaW5DaGFyTGltaXQ6IDMsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVDdXJyZW50TG9jYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlUHJlTGlzdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBBdXRvU2VsZWN0Rmlyc3RJdGVtOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIFJlc3VsdExpbWl0OiAxMCxcclxuICAgICAgICAgICAgICAgIEVuYWJsZVRvdWNoOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIERhdGFTb3VyY2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBEYXRhU291cmNlQ29udHJvbDogbnVsbCxcclxuICAgICAgICAgICAgICAgIENvbnRhaW5lckNzczogJycsXHJcbiAgICAgICAgICAgICAgICBJdGVtQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIEhpZ2hsaWdodEl0ZW1Dc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgUmVnaW9uOiAnVVMnLFxyXG4gICAgICAgICAgICAgICAgTG9jYWxlOiAnTk9ORScsXHJcbiAgICAgICAgICAgICAgICBIZWxwVGV4dDogJycsXHJcbiAgICAgICAgICAgICAgICBBbmltYXRlUGxhY2Vob2xkZXJUZXh0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIE11bHRpU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIE11bHRpU2VsZWN0Qm94SWQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3RTaG93SGVscFRleHQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBNdWx0aUtleXdvcmREZWxpbWl0ZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgTG9hZGluZ0ltYWdlVXJsOiAnJyxcclxuICAgICAgICAgICAgICAgIFBhcmVudENvbnRhaW5lcjogJycsXHJcbiAgICAgICAgICAgICAgICBCZWZvcmVDYWxsOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQWZ0ZXJDYWxsOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25TdWNjZXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25FcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uU2VsZWN0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25UZXh0Q2hhbmdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25TZWFyY2g6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbkluY3JlbWVudGFsU2VhcmNoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25NdWx0aVNlbGVjdFJlbW92ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIFNlYXJjaE1vZGU6ICdEYXRhYmFzZScsIC8vIENhY2hlLCBEYXRhYmFzZSwgU21hcnRcclxuICAgICAgICAgICAgICAgIFRlc3RNb2RlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIFN0aWNreU1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlQ2F0ZWdvcnlWaWV3OiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgX29wdGlvbnMgPSAkLmV4dGVuZChfZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB2YXIgX3RhcmdldENvbnRyb2wgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX3RhcmdldEF1dG9Db250cm9sID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9vbmVTZWFyY2hCb3ggPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX011bHRpU2VsZWN0Qm94ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHZhciBfbGFzdEtleXdvcmQgPSAnJztcclxuICAgICAgICAgICAgdmFyIF9sYXN0U2VhcmNod29yZCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9yZXF1ZXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIF9yZXNwb3NlQ2FjaGUgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX2l0ZW1UZXBsYXRlQ2FjaGUgPSBbXTtcclxuICAgICAgICAgICAgdmFyIF9oaWdobGlnaHRJZHggPSAwO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9pc09uQXJyb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy9JdGVyYXRlIG92ZXIgdGhlIGN1cnJlbnQgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHNcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBJbml0KCQodGhpcykpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIEluaXQob2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuU3RpY2t5TW9kZSAmJiAhX29wdGlvbnMuVGVzdE1vZGUpIF9vcHRpb25zLlRlc3RNb2RlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdGFyZ2V0Q29udHJvbCA9IG9iajtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRBdXRvQ29udHJvbCA9ICQoJ2lucHV0W2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0FVVE9fSVRFTVwiXScpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBicm93c2VyIGF1dG9jb21wbGV0ZSBvbiBpbnB1dFxyXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJpbmdfeW91cl9zaXRlL1R1cm5pbmdfb2ZmX2Zvcm1fYXV0b2NvbXBsZXRpb25cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2F1dG9jb21wbGV0ZScsICdub3BlJyk7XHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCduYW1lJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICdfJykgKyAobmV3IERhdGUoKSkudmFsdWVPZigpKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignbmFtZScsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwkL2dpLCAnXycpICsgKG5ldyBEYXRlKCkpLnZhbHVlT2YoKSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19PbmVTZWFyY2gnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jc3MoJ3Bvc2l0aW9uJywgKF9vcHRpb25zLkVuYWJsZVRvdWNoID8gJ3JlbGF0aXZlJyA6ICdhYnNvbHV0ZScpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSlcclxuICAgICAgICAgICAgICAgICAgICAuY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKF9vcHRpb25zLkNvbnRhaW5lckNzcylcclxuICAgICAgICAgICAgICAgICAgICAuaHRtbChfb3B0aW9ucy5IZWxwVGV4dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuUGFyZW50Q29udGFpbmVyKS5hcHBlbmQoX29uZVNlYXJjaEJveCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guaW5zZXJ0QWZ0ZXIoJChfdGFyZ2V0Q29udHJvbCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmNsb3Nlc3QoJ2RpdicpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLmNzcygnZGlzcGxheScpID09ICdibG9jaycgJiYgJChfdGFyZ2V0Q29udHJvbCkuaHRtbCgpICE9ICcnKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSA9PSAnQ2xvc2VBcmVhJykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3ggPSAkKCcjJyArIF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3ggIT0gbnVsbCAmJiBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveENzcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYWRkQ2xhc3MoX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkTXVsdGlTZWxlY3RPbkxvYWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvL2NoZWNrIGlzIGxvY2F0aW9uIHNlYXJjaCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhdCA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbG5nID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmRzID0gJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobGF0KSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKGxuZykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChyZHMpICE9ICd1bmRlZmluZWQnICYmIGxhdCAhPSAnJyAmJiBsbmcgIT0gJycgJiYgcmRzICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOSAvKiB0YWIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTMgLyogZW50ZXIgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYXNlIDM3IC8qIGxlZnQgKi86XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzggLyogdXAgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM5IC8qIHJpZ2h0ICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwIC8qIGRvd24gKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRJdGVtKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjcgLyogZXNjYXBlICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzcG9zZUNhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5cHJlc3MoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkua2V5dXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2IHx8IGUua2V5Q29kZSA9PSA4OCB8fCBlLmtleUNvZGUgPT0gODYpICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgX3RhcmdldEF1dG9Db250cm9sLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2lmIChlLmtleUNvZGUgPT0gMTMgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCAmJiAkKF9vbmVTZWFyY2hCb3gpLmNzcygnZGlzcGxheScpID09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9pc09uQXJyb3dTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VhcmNoKSBfb3B0aW9ucy5PblNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDApIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpOyBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpb25zLk9uSW5jcmVtZW50YWxTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0IHx8IF9vcHRpb25zLkVuYWJsZVByZUxpc3QgfHwgX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTsgZWxzZSAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKS5pbmRleE9mKF9sYXN0S2V5d29yZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDggfHwgZS5rZXlDb2RlID09IDQ2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdFNlYXJjaHdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNoYW5nZSB0aGUgbGFzdCBhbmQgY3VycmVudCB2YWx1ZSBpbiB0aGUga2V5d29yZCwgdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9sYXN0S2V5d29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25UZXh0Q2hhbmdlKSBfb3B0aW9ucy5PblRleHRDaGFuZ2UoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBhc3NvY2lhdGVkIGNvbnRyb2xzIHNpbmNlIHRoZSBrZXl3b3JkIGhhcyBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHRleHQgYm9veCBhcyBsYXN0IHZhbHVlL2tleXdvcmRcclxuICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHN1Z2dlc3Rpb24gYm94IGlzIGhpZGRlbiB0aGVuIG5vIG5lZWQgdG8gY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPj0gX29wdGlvbnMuTWluQ2hhckxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnPGltZyBzcmM9XCInICsgX29wdGlvbnMuTG9hZGluZ0ltYWdlVXJsICsgJ1wiIC8+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5mb2N1cyhmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RlbXBDb250TXVsdCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgkKF9NdWx0aVNlbGVjdEJveC5odG1sKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ29uY2xpY2snLCAnamF2YXNjcmlwdDokKFxcJyMnICsgb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkICsgJyAjJyArICQodGhpcykuYXR0cignaWQnKSArICdcXCcpLnRyaWdnZXIoXFwnY2xpY2tcXCcpJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0KSBfb3B0aW9ucy5IZWxwVGV4dCA9ICc8ZGl2IHN0eWxlPVwicGFkZGluZzo3cHhcIj48Zm9udCBzdHlsZT1cImNvbG9yOnJlZFwiPllvdSBoYXZlIGFscmVhZHkgc2VsZWN0ZWQ8L2ZvbnQ+JyArICgoX29wdGlvbnMuU3RpY2t5TW9kZSkgPyAnPGEgY2xhc3M9XCJDbG9zZUFyZWFcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRpdGxlPVwiQ2xpY2sgaGVyZSB0byBoaWRlIHNlbGVjdGVkIGZpbHRlcnMuXCIgb25jbGljaz1cIiQoXFwnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19PbmVTZWFyY2gnICsgJ1xcJykuaGlkZSgpO1wiPkNsb3NlPC9hPicgOiAnJykgKyAnPGhyIHN0eWxlPVwibWFyZ2luOjBweCAwcHggN3B4IDBweFwiIC8+JyArIF90ZW1wQ29udE11bHQuaHRtbCgpICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ3VycmVudExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RlbXBDb250TXVsdCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IZWxwVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5IZWxwVGV4dCAhPSAnJyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoX29wdGlvbnMuSGVscFRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcsIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmJsdXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTWFudWFsU2VsZWN0ID0gJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXNNYW51YWxTZWxlY3QpID09ICd1bmRlZmluZWQnIHx8IGlzTWFudWFsU2VsZWN0ID09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oMCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ1tkYXRhLWxvY2F0aW9uLXNlYXJjaF0nKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLlRlc3RNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdpcy1kaXJ0eScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9vcHRpb25zLlN0aWNreU1vZGUgJiYgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXl3b3JkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFuaW1hdGVQbGFjZWhvbGRlclRleHQgPT0gdHJ1ZSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQoJChfdGFyZ2V0Q29udHJvbCksICcnLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbiAmJiAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdodHRwcycpID4gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZignbG9jYWxob3N0JykgPiAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1sb2NhdGlvblwiPjwvaT4nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRW5hYmxlQ3VycmVudExvY2F0aW9uTGFiZWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywgJzNweCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2NvbG9yJywgJ3JlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCAtMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdnZXQtbXktZGlyZWN0aW9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtbG9jYXRpb24tc2VhcmNoJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcjpyZWQnKTsgJCh0aGlzKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgc2VhcmNoTmVhcmJ5KCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdXQoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhck5lYXJieSgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjZHJhd19zZWFyY2gnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hOZWFyYnkoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STE9OR1wiXScpLnZhbChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkRTXCJdJykudmFsKCgkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gbnVsbCAmJiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgIT0gJzAnKSA/ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0RlZmF1bHRTZWFyY2hSYWRpdXMnKSA6ICc1Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoeyBcImtcIjogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlICsgJ3wnICsgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgXCJuXCI6IFwiSURDTEFUSVRVREV8SURDTE9OR0lUVURFXCIsIFwicnRcIjogXCJMT0NBVElPTlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TdWNjZXNzKSBfb3B0aW9ucy5PblN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbShpZHgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hLZXl3b3JkKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9sYXN0U2VhcmNod29yZCA9PSAkKF90YXJnZXRDb250cm9sKS52YWwoKSAmJiAhX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFscmVhZHkgYSByZXF1ZXN0IG5vdCB5ZXQgY29tcGxldGVkIHRoZW4gdGhhdCBuZWVkIHRvIHN0b3AvYWJvcnQgYmVmb3JlIHN0YWFydGluZyBuZXcgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoX3JlcXVlc3QgIT0gbnVsbCkgX3JlcXVlc3QuYWJvcnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSBfbGFzdEtleXdvcmQgPSAnJzsgZWxzZSBfbGFzdFNlYXJjaHdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIV9vcHRpb25zLkVuYWJsZVByZUxpc3QgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9yZXF1ZXN0ID0gJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfb3B0aW9ucy5TZXJ2aWNlVXJsICsgXCI/S2V5d29yZD1cIiArICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkucmVwbGFjZSgvIy9nLCAnJTIzJykpICsgJyZ0PScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiAoeyBcIktleXdvcmRcIjogKCgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPCBfb3B0aW9ucy5NaW5DaGFyTGltaXQpID8gJycgOiAkKF90YXJnZXRDb250cm9sKS52YWwoKSksIFwiU2VhcmNoTW9kZVwiOiBfb3B0aW9ucy5TZWFyY2hNb2RlLCBcIk9uZVNlYXJjaE5hbWVcIjogX29wdGlvbnMuT25lU2VhcmNoTmFtZSwgXCJSZWdpb25cIjogX29wdGlvbnMuUmVnaW9uLCBcIkxvY2FsZVwiOiBfb3B0aW9ucy5Mb2NhbGUsIFwiQWRkaXRpb25hbFdoZXJlXCI6ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0FkZGl0aW9uYWxXaGVyZScpIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQgfHwgZGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlbURhdGEgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9maWVsZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVnb3J5aXRlbSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVvZ29yeW5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBkYXRhW2ldLnJ0LCBkYXRhW2ldLm4pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBfZmllbGQuSXRlbVRlbXBsYXRlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uTG9jYWxlID09IF9vcHRpb25zLkxvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2l0ZW1EYXRhLlRlbXBsYXRlLnJlcGxhY2UoJ3skZH0nLCBkYXRhW2ldLmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtID0gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfaXRlbURhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3RleHQtZGVjb3JhdGlvbicsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdibGFjaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkeCcsIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlZG93bihmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnLCB0cnVlKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soZnVuY3Rpb24gKCkgeyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbigndGFwJywgZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IHNlbGVjdEl0ZW0oJCh0aGlzKS5hdHRyKCdpZHgnKSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NlbGVjdEl0ZW0oaSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5Vmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY2F0ZW9nb3J5bmFtZSAhPSBkYXRhW2ldLmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbSA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC1jYXRlZ29yeS0nKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZCAoJCgnPHNwYW4+JykuaHRtbChkYXRhW2ldLmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVvZ29yeW5hbWUgPSBkYXRhW2ldLmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0uYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChfY2F0ZWdvcnlpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLmluY2x1ZGVzKCdPbmVTZWFyY2hCb3gtJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lID0gJChfb25lU2VhcmNoQm94KVtpXS5jbGFzc05hbWUucmVwbGFjZSgvXFxiT25lU2VhcmNoQm94LVtBLVphLXpdKlxcYi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hZGRDbGFzcygnT25lU2VhcmNoQm94LScgKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZXJ2aWNlIChhZ29yYU9uZVNlYXJjaCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCkge1xyXG4gICAgICAgIGlmIChfcmVzcG9zZUNhY2hlID09IG51bGwgfHwgX3Jlc3Bvc2VDYWNoZS5sZW5ndGggPCAoX2hpZ2hsaWdodElkeCAtIDEpIHx8IF9oaWdobGlnaHRJZHggPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ucnQsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIGF1dG9TZWxlY3RJdGVtKChfaGlnaGxpZ2h0SWR4IC0gMSkpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0pO1xyXG4gICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SXRlbShpZHgsIG5vY2xlYXIsIGF1dG9TZWxlY3QpIHtcclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKG5vY2xlYXIgPT0gdW5kZWZpbmVkIHx8IG5vY2xlYXIgPT0gbnVsbCkgbm9jbGVhciA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChhdXRvU2VsZWN0ID09IHVuZGVmaW5lZCB8fCBhdXRvU2VsZWN0ID09IG51bGwpIGF1dG9TZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB0cnVlICYmICFfbGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpICQoX3RhcmdldENvbnRyb2wpLnZhbChfbGFiZWwpOyBlbHNlICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIGNsZWFyTmVhcmJ5KCk7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmX2ZpZWxkLlNraXBTZWxlY3QgIT0gdHJ1ZSkgYmluZEFzc29jaWF0ZUNvbnRyb2woX3Jlc3Bvc2VDYWNoZVtpZHhdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VsZWN0KSBfb3B0aW9ucy5PblNlbGVjdChfcmVzcG9zZUNhY2hlW2lkeF0pO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUgJiYgIW5vY2xlYXIpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoKTsgfSwgMjAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXV0b1NlbGVjdEl0ZW0oaWR4KSB7XHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoIV9sYWJlbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLC9nLCAnJykuc3RhcnRzV2l0aCgkKF90YXJnZXRDb250cm9sKS52YWwoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLC9nLCAnJykpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cCgkKF90YXJnZXRDb250cm9sKS52YWwoKSwgXCJpZ1wiKTtcclxuICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKF9sYWJlbC5yZXBsYWNlKHJlZ0V4LCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZWxvYWRNdWx0aVNlbGVjdE9uTG9hZCgpIHtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSByZXR1cm47XHJcblxyXG4gICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSB7fTsgLy9beyBcImtcIjogXCJDaGFybG90dGVcIiwgXCJsXCI6IFwiQ2hhcmxvdHRlLCBOQ1wiLCBcIm5cIjogXCJDSVRZXCIsIFwicnRcIjogXCJDTU5DTU5cIiB9XVxyXG4gICAgICAgICAgICAgICAgdmFyIF9pdGVtVmFsdWUgPSAkKHRoaXMpLmF0dHIoJ2lkJykuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgICAgIF9pdGVtLnJ0ID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ubiA9IF9pdGVtVmFsdWVbX2l0ZW1WYWx1ZS5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9pdGVtLCAkKHRoaXMpLnZhbCgpLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJpbmRBc3NvY2lhdGVDb250cm9sKGl0ZW0sIHZhbHVlLCBpbml0aWFsTG9hZCkge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVJdGVtcyA9IHZhbHVlLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgaXRlbS5ydCwgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfdmFsdWVJdGVtcy5sZW5ndGggJiYgX2ZpZWxkICE9IG51bGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKF92YWx1ZUl0ZW1zW2ldLmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCgnOycgKyBfY3RybE11bHRpRmllbGQudmFsKCkudG9Mb3dlckNhc2UoKSArICc7JykuaW5kZXhPZignOycgKyBfdmFsdWVJdGVtc1tpXS50b0xvd2VyQ2FzZSgpICsgJzsnKSA9PSAtMSB8fCBpbml0aWFsTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5pdGlhbExvYWQpIF9jdHJsTXVsdGlGaWVsZC52YWwoX2N0cmxNdWx0aUZpZWxkLnZhbCgpICsgJzsnICsgX3ZhbHVlSXRlbXNbaV0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgX211bHRpU2VsZWN0SXRlbSA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdhZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdtdWx0aWl0ZW0nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyBfdmFsdWVJdGVtc1tpXS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9bXkEtejAtOV0vZywgJ18nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8YT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdhZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgJ0NsaWNrIGhlcmUgdG8gaGlkZSB0aGlzIGFyZWEgZmlsdGVyLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnbXVsdGlpdGVtX2Nsb3NlXycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIF92YWx1ZUl0ZW1zW2ldLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1teQS16MC05XS9nLCAnXycpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3ZhbCcsIF92YWx1ZUl0ZW1zW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiYWdhIGFnYS1jbG9zZVwiPjwvaT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVGcm9tTXVsdGlTZWxlY3QoJCh0aGlzKSwgaXRlbSwgJCh0aGlzKS5hdHRyKCd2YWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKF9maWVsZC5NdWx0aUl0ZW1UZW1wbGF0ZS5yZXBsYWNlKCd7JGx9JywgX3ZhbHVlSXRlbXNbaV0pLnJlcGxhY2UoJ3skZH0nLCBfdmFsdWVJdGVtc1tpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94LmFwcGVuZChfbXVsdGlTZWxlY3RJdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpbml0aWFsTG9hZCAmJiBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKSBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhhc011bHRpU2VsZWN0ZWRJdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gKF9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9NdWx0aVNlbGVjdEJveC5maW5kKCdhLmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jbG9zZScpLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbW92ZUZyb21NdWx0aVNlbGVjdChtZSwgaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgX2N0cmxNdWx0aUZpZWxkID0gJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubik7XHJcbiAgICAgICAgaWYgKF9jdHJsTXVsdGlGaWVsZC52YWwoKS5pbmRleE9mKCc7JykgIT0gMCkgX2N0cmxNdWx0aUZpZWxkLnZhbCgnOycgKyBfY3RybE11bHRpRmllbGQudmFsKCkpO1xyXG4gICAgICAgIF9jdHJsTXVsdGlGaWVsZC52YWwoX2N0cmxNdWx0aUZpZWxkLnZhbCgpLnJlcGxhY2UoJzsnICsgdmFsdWUsICcnKSk7XHJcblxyXG4gICAgICAgIC8vJCgnI211bHRpaXRlbScgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIHZhbHVlLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpKS5yZW1vdmUoKTtcclxuICAgICAgICAkKG1lKS5wYXJlbnQoKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgaWYgKF9jdHJsTXVsdGlGaWVsZC52YWwoKSA9PSBcIlwiIHx8ICQoX29uZVNlYXJjaEJveCkuZmluZCgnZGl2LmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSkgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBoaWdobGlnaHRJdGVtKGRpcmVjdGlvbikge1xyXG4gICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkgLypkb3duKi8ge1xyXG4gICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA8ICQoX29uZVNlYXJjaEJveCkuZmluZCgnYScpLmxlbmd0aCkgX2hpZ2hsaWdodElkeCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIC8qdXAqLyB7XHJcbiAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4ID4gMSkgX2hpZ2hsaWdodElkeC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2EnKS5lYWNoKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcbiAgICAgICAgJChfb25lU2VhcmNoQm94KS5maW5kKChfb3B0aW9ucy5FbmFibGVDYXRlZ29yeVZpZXcpID8gJ2FbaWR4PScgKyBfaGlnaGxpZ2h0SWR4ICsgJ10nIDogJ2E6bnRoLWNoaWxkKCcgKyBfaGlnaGxpZ2h0SWR4ICsgJyknKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKG9iamVjdCkge1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0ID09IG51bGwgfHwgb2JqZWN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0LndpZHRoKCk7XHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctbGVmdFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctcmlnaHRcIiksIDEwKTsgLy9Ub3RhbCBQYWRkaW5nIFdpZHRoXHJcbiAgICAgICAgLy92YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLWxlZnRcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tcmlnaHRcIiksIDEwKTsgLy9Ub3RhbCBNYXJnaW4gV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyUmlnaHRXaWR0aFwiKSwgMTApOyAvL1RvdGFsIEJvcmRlciBXaWR0aFxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IG9iamVjdC5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKG9iamVjdCkge1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0ID09IG51bGwgfHwgb2JqZWN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0LmhlaWdodCgpO1xyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLXRvcFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7IC8vVG90YWwgUGFkZGluZyBXaWR0aFxyXG4gICAgICAgIC8vdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi10b3BcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7IC8vVG90YWwgTWFyZ2luIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksIDEwKTsgLy9Ub3RhbCBCb3JkZXIgV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBvYmplY3QucG9zaXRpb24oKS50b3A7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gb2JqZWN0Lm9mZnNldCgpLnRvcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRGaWVsZEpzb24ob2JqLCBydCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgaWYgKF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXSAhPSBudWxsKSByZXR1cm4gX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgb2JqLlJlY29yZFR5cGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IG9iai5SZWNvcmRUeXBlc1trXS5OYW1lID09IHJ0ICYmIGogPCBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXS5OYW1lID09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXSA9IG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcHJlZ19xdW90ZShzdHIpIHtcclxuICAgICAgICByZXR1cm4gKHN0ciArICcnKS5yZXBsYWNlKC8oW1xcXFxcXC5cXCtcXCpcXD9cXFtcXF5cXF1cXCRcXChcXClcXHtcXH1cXD1cXCFcXDxcXD5cXHxcXDpdKS9nLCBcIlxcXFwkMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoaWdobGlnaHRLZXl3b3JkKHN0ciwga2V5d29yZCkge1xyXG4gICAgICAgIC8vcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAocHJlZ19xdW90ZSh0byksICdnaScpLCBieSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgcHJlZ19xdW90ZShrZXl3b3JkKSArIFwiKVwiLCAnZ2knKSwgXCI8c3Ryb25nPiQxPC9zdHJvbmc+XCIpO1xyXG4gICAgfVxyXG59XHJcbn0pO1xyXG59KShqUXVlcnkpO1xyXG5cclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJhIiwiaSIsInNlbGYiLCIkIiwialF1ZXJ5IiwiZm4iLCJleHRlbmQiLCJPbmVTZWFyY2giLCJvcHRpb25zIiwiX29wdGlvbnMiLCJTZXJ2aWNlVXJsIiwiT25lU2VhcmNoTmFtZSIsIk9uZVNlYXJjaERTIiwiTWluQ2hhckxpbWl0IiwiRW5hYmxlQ3VycmVudExvY2F0aW9uIiwiRW5hYmxlUHJlTGlzdCIsIkF1dG9TZWxlY3RGaXJzdEl0ZW0iLCJSZXN1bHRMaW1pdCIsIkVuYWJsZVRvdWNoIiwiRGF0YVNvdXJjZSIsIkRhdGFTb3VyY2VDb250cm9sIiwiQ29udGFpbmVyQ3NzIiwiSXRlbUNzcyIsIkhpZ2hsaWdodEl0ZW1Dc3MiLCJSZWdpb24iLCJMb2NhbGUiLCJIZWxwVGV4dCIsIkFuaW1hdGVQbGFjZWhvbGRlclRleHQiLCJNdWx0aVNlbGVjdCIsIk11bHRpU2VsZWN0Qm94SWQiLCJNdWx0aVNlbGVjdFNob3dIZWxwVGV4dCIsIk11bHRpS2V5d29yZERlbGltaXRlciIsIkxvYWRpbmdJbWFnZVVybCIsIlBhcmVudENvbnRhaW5lciIsIkJlZm9yZUNhbGwiLCJBZnRlckNhbGwiLCJPblN1Y2Nlc3MiLCJPbkVycm9yIiwiT25TZWxlY3QiLCJPblRleHRDaGFuZ2UiLCJPblNlYXJjaCIsIk9uSW5jcmVtZW50YWxTZWFyY2giLCJPbk11bHRpU2VsZWN0UmVtb3ZlIiwiU2VhcmNoTW9kZSIsIlRlc3RNb2RlIiwiU3RpY2t5TW9kZSIsIkVuYWJsZUNhdGVnb3J5VmlldyIsIl90YXJnZXRDb250cm9sIiwiX3RhcmdldEF1dG9Db250cm9sIiwiX29uZVNlYXJjaEJveCIsIl9NdWx0aVNlbGVjdEJveCIsIl9sYXN0S2V5d29yZCIsIl9sYXN0U2VhcmNod29yZCIsIl9yZXF1ZXN0IiwiX3Jlc3Bvc2VDYWNoZSIsIl9pdGVtVGVwbGF0ZUNhY2hlIiwiX2hpZ2hsaWdodElkeCIsIl9pc09uQXJyb3dTZWxlY3Rpb24iLCJfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQiLCJ0aGlzIiwiZWFjaCIsIm9iaiIsImF0dHIiLCJyZXBsYWNlIiwiRGF0ZSIsInZhbHVlT2YiLCJ3aW5kb3ciLCJvbnBvcHN0YXRlIiwiZXZlbnQiLCJjc3MiLCJnZXRUb3RhbEhlaWdodE9mQ29udHJvbCIsImdldFRvdGFsV2lkdGhPZkNvbnRyb2wiLCJhZGRDbGFzcyIsImh0bWwiLCJhcHBlbmQiLCJpbnNlcnRBZnRlciIsImNsb3Nlc3QiLCJjbGljayIsImUiLCJ0YXJnZXQiLCJjbGFzc05hbWUiLCJzZXRUaW1lb3V0IiwiZm9jdXMiLCJNdWx0aVNlbGVjdEJveENzcyIsInZhbCIsIl9pdGVtIiwiX2l0ZW1WYWx1ZSIsInNwbGl0IiwicnQiLCJsZW5ndGgiLCJuIiwiYmluZEFzc29jaWF0ZUNvbnRyb2wiLCJsYXQiLCJsbmciLCJyZHMiLCJrZXlkb3duIiwia2V5Q29kZSIsInNlbGVjdEhpZ2hsaWdodGVkSXRlbSIsInNlbGVjdEl0ZW0iLCJoaWdobGlnaHRJdGVtIiwiaGlkZSIsImtleXByZXNzIiwicGFyc2VJbnQiLCJwcmV2ZW50RGVmYXVsdCIsImtleXVwIiwic2hvdyIsImluZGV4T2YiLCJzZWFyY2hLZXl3b3JkIiwiZmluZCIsIl90ZW1wQ29udE11bHQiLCJnZXRDdXJyZW50TG9jYXRpb25PYmplY3QiLCJjb25zb2xlIiwibG9nIiwiYmx1ciIsImlzTWFudWFsU2VsZWN0IiwiZGF0YSIsInBhcmVudCIsInJlbW92ZUNsYXNzIiwiSW5pdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJwcm90b2NvbCIsInRvTG93ZXJDYXNlIiwiaG9zdG5hbWUiLCJtb3VzZW92ZXIiLCJzZWFyY2hOZWFyYnkiLCJvbiIsIm1vdXNlb3V0IiwiaWR4IiwibmF2aWdhdG9yIiwiZ2VvbG9jYXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJwb3NpdGlvbiIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiYWJvcnQiLCJhamF4IiwidHlwZSIsInVybCIsImdldFRpbWUiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ1bmRlZmluZWQiLCJfaXRlbURhdGEiLCJfZmllbGQiLCJfY2F0ZWdvcnlpdGVtIiwiX2NhdGVvZ29yeW5hbWUiLCJoaWdobGlnaHRLZXl3b3JkIiwibCIsImdldEZpZWxkSnNvbiIsIkl0ZW1UZW1wbGF0ZSIsImQiLCJJdGVtVGVtcGxhdGVzIiwiaiIsIlRlbXBsYXRlIiwibW91c2Vkb3duIiwiYXV0b1NlbGVjdEl0ZW0iLCJnIiwiaW5jbHVkZXMiLCJzdGF0dXNDb2RlIiwiX2xhYmVsIiwiX3NlbGVjdGVkVmFsdWUiLCJTZWxlY3RvciIsImsiLCJub2NsZWFyIiwiYXV0b1NlbGVjdCIsInN0YXJ0c1dpdGgiLCJTa2lwU2VsZWN0IiwicmVnRXgiLCJSZWdFeHAiLCJpdGVtIiwidmFsdWUiLCJpbml0aWFsTG9hZCIsIl9jdHJsTXVsdGlGaWVsZCIsIl92YWx1ZUl0ZW1zIiwiX211bHRpU2VsZWN0SXRlbSIsInJlbW92ZUZyb21NdWx0aVNlbGVjdCIsIk11bHRpSXRlbVRlbXBsYXRlIiwibWUiLCJyZW1vdmUiLCJkaXJlY3Rpb24iLCJvYmplY3QiLCJ3aWR0aCIsIm9mZnNldCIsImxlZnQiLCJoZWlnaHQiLCJ0b3AiLCJmaWVsZE5hbWUiLCJSZWNvcmRUeXBlcyIsIk5hbWUiLCJGaWVsZHMiLCJzdHIiLCJrZXl3b3JkIiwicHJlZ19xdW90ZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sInNvdXJjZVJvb3QiOiIifQ==
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var l=t();for(var a in l)("object"==typeof exports?exports:e)[a]=l[a]}}(self,(()=>(()=>{var e={803:()=>{var e;(e=jQuery).fn.extend({OneSearch:function(t){var l=e.extend({ServiceUrl:"",OneSearchName:"",OneSearchDS:null,MinCharLimit:3,EnableCurrentLocation:!1,EnablePreList:!1,AutoSelectFirstItem:!1,ResultLimit:10,EnableTouch:!1,DataSource:null,DataSourceControl:null,ContainerCss:"",ItemCss:"",HighlightItemCss:"",Region:"US",Locale:"NONE",HelpText:"",AnimatePlaceholderText:!1,MultiSelect:!1,MultiSelectBoxId:"",MultiSelectShowHelpText:!0,MultiKeywordDelimiter:"",LoadingImageUrl:"",ParentContainer:"",BeforeCall:null,AfterCall:null,OnSuccess:null,OnError:null,OnSelect:null,OnTextChange:null,OnSearch:null,OnIncrementalSearch:null,OnMultiSelectRemove:null,SearchMode:"Database",TestMode:!1,StickyMode:!1,EnableCategoryView:!1},t),a=null,n=null,r=null,o=null,s="",c="",d=null,u=null,h=[],p=0,m=!1,v=!1;return this.each((function(){!function(i){if(l.StickyMode&&!l.TestMode&&(l.TestMode=!0),a=i,l.AutoSelectFirstItem&&(n=e('input[id="'+e(a).attr("id")+'_AUTO_ITEM"]')),e(a).attr("autocomplete","nope"),e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},r=e("<div>").attr("id",e(a).attr("id")+"_OneSearch").css("position",l.EnableTouch?"relative":"absolute").css("top",_(e(a))).css("width",b(e(a))).css("display","none").addClass(l.ContainerCss).html(l.HelpText),""!=l.ParentContainer?e("#"+l.ParentContainer).append(r):r.insertAfter(e(a)),e(a).closest("div").click((function(t){"block"==e(a).css("display")&&""!=e(a).html()||"CloseArea"!=t.target.className&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),500))})),l.MultiSelect&&(""!=l.MultiSelectBoxId&&(o=e("#"+l.MultiSelectBoxId)),null!=o&&""!=l.MultiSelectBoxCss&&o.addClass(l.MultiSelectBoxCss),l.MultiSelect&&e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){if(""!=e(this).val()){var t={},l=e(this).attr("id").split("_");t.rt=l[l.length-2],t.n=l[l.length-1],T(t,e(this).val(),!0)}}))),l.EnableCurrentLocation){var d=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(),g=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(),O=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val();void 0!==d&&void 0!==g&&void 0!==O&&""!=d&&""!=g&&""!=O&&(v=!0)}e(a).keydown((function(t){switch(t.keyCode){case 9:case 13:l.AutoSelectFirstItem&&e(a).val().length>0?(p>0?C():y(0,!1,!0),m=!1):(C(),m=!1);break;case 38:x(-1);break;case 39:l.AutoSelectFirstItem&&(y(0,!1,!0),e(r).hide(),e(n).val(""));break;case 40:x(1);break;case 27:e(r).hide(),u=null,h=[],p=0}})),e(a).keypress((function(t){parseInt(r.css("width"))!=b(e(a))&&r.css("width",b(e(a))),parseInt(r.css("top"))!=_(e(a))&&r.css("top",_(e(a))),13==t.keyCode&&t.preventDefault()})),e(a).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(a).val().length||(T(null,null),l.AutoSelectFirstItem&&n.val("")),13==t.keyCode&&e(a).val().length>0&&!m?l.OnSearch&&l.OnSearch():13==t.keyCode&&e(a).val().length>0&&l.AutoSelectFirstItem?p>0?C():y(0,!1,!0):l.OnIncrementalSearch&&l.OnIncrementalSearch(),e(a).val().length>=l.MinCharLimit||l.EnablePreList||l.EnableCurrentLocation?e(r).show():e(r).hide(),13==t.keyCode&&e(r).hide(),e(a).val().indexOf(s)<0&&e(r).html(""),8!=t.keyCode&&46!=t.keyCode||(s="",c=""),s!=e(a).val()&&(l.OnTextChange&&l.OnTextChange(e(a).val()),T(null,null),s=e(a).val(),"none"!=e(r).css("display")&&(""!=l.LoadingImageUrl&&e(a).val().length>=l.MinCharLimit&&e(r).html('<img src="'+l.LoadingImageUrl+'" />'),setTimeout((function(){S()}),500))))})),e(a).focus((function(){if(parseInt(r.css("width"))!=b(e(a))&&r.css("width",b(e(a))),parseInt(r.css("top"))!=_(e(a))&&r.css("top",_(e(a))),l.MultiSelect)if(o.find("a.agora-onesearch-multi-sel-item-close").length>0){var n=e("<div>").html(e(o.html()));e(n).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),l.MultiSelectShowHelpText?l.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(l.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(a).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+n.html()+"</div>":l.EnableCurrentLocation&&e(n).append(f())}else l.HelpText="",l.EnableCurrentLocation&&(0==e(r).find("[data-location-search]").length&&e(r).append(f()),e(r).show());l.EnablePreList?(S(),e(r).show()):!l.MultiSelect&&l.EnableCurrentLocation?(0==e(r).find("[data-location-search]").length&&e(r).append(f()),console.log(f()),e(r).show()):""!=l.HelpText&&""==e(a).val()&&(e(r).html(l.HelpText),parseInt(r.css("width"))!=b(e(a))&&r.css("width",b(e(a))),parseInt(r.css("top"))!=_(e(a))&&r.css("top",_(e(a))),e(r).show())})),e(a).blur((function(){l.AutoSelectFirstItem&&e(a).val().length>0&&!l.MultiSelect&&setTimeout((function(){var t=e(a).data("is-manual-select");void 0!==t&&0!=t||y(0,!0,!0),e(a).data("is-manual-select",!1)}),50),setTimeout((function(){l.TestMode?(e(r).find("[data-location-search]").length>0&&l.TestMode||l.StickyMode&&0==e(r).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(r).html(""),e(r).hide(),e(r).parent().removeClass("is-dirty")):(e(r).html(""),e(r).hide(),0==e(a).val().length&&e(r).parent().removeClass("is-dirty"))}),200)})),S(),1==l.AnimatePlaceholderText&&""==e(a).val()&&AnimatePlaceholderText(e(a),"",0)}(e(this))}));function f(){return l.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(a).attr("EnableCurrentLocationLabel")).css("display","block").css("width","100%").css("padding","3px").css("color","red").attr("idx",-1).addClass("get-my-direction").attr("data-location-search","").mouseover((function(){e(this).css("background-color:red"),e(this).addClass(l.HighlightItemCss)})).click((function(){g(e(this).attr("idx"))})).on("tap",(function(){g(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})):null}function g(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(null!=e(a).attr("DefaultSearchRadius")&&"0"!=e(a).attr("DefaultSearchRadius")?e(a).attr("DefaultSearchRadius"):"5"),v=!0,l.OnSelect&&l.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),l.OnSuccess&&l.OnSuccess()})),y(t)}function S(){(c!=e(a).val()||l.EnablePreList)&&(null!=d&&d.abort(),e(a).val().length<l.MinCharLimit?s="":c=e(a).val(),!l.EnablePreList&&e(a).val().length<l.MinCharLimit||(l.AutoSelectFirstItem&&(e(n).val(""),e(a).data("is-manual-select",!1)),d=e.ajax({type:"POST",url:l.ServiceUrl+"?Keyword="+(e(a).val().length<l.MinCharLimit?"":e(a).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),data:{Keyword:e(a).val().length<l.MinCharLimit?"":e(a).val(),SearchMode:l.SearchMode,OneSearchName:l.OneSearchName,Region:l.Region,Locale:l.Locale,AdditionalWhere:e(a).attr("AdditionalWhere")},dataType:"json",success:function(t){if(u=t,p=0,e(r).html(""),null!=t&&0!=t.length){var n="",o="",s=null,c="",d="";for(i=0;i<t.length;i++){if(n=L(t[i].l,e(a).val()),null!=(o=M(l.OneSearchDS,t[i].rt,t[i].n))&&null!=o.ItemTemplate&&""!=o.ItemTemplate)n=(n=o.ItemTemplate.replace("{$l}",L(t[i].l,e(a).val()))).replace("{$d}",t[i].d);else if(null!=o&&o.ItemTemplates.length>0)for(j=0;j<o.ItemTemplates.length;j++)o.ItemTemplates[j].Locale==l.Locale&&(n=(n=o.ItemTemplates[j].Template.replace("{$l}",L(t[i].l,e(a).val()))).Template.replace("{$d}",t[i].d));s=e("<a>").html(n).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(l.HighlightItemCss)})).mousedown((function(){e(a).data("is-manual-select",!0)})).click((function(){y(e(this).attr("idx"))})).on("tap",(function(){e(a).data("is-manual-select",!0),y(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})),0==i&&l.AutoSelectFirstItem&&O(i),l.EnableCategoryView?(d!=t[i].g&&((c=e("<div>").addClass("OneSearchBox-category-"+t[i].g)).append(e("<span>").html(t[i].g)),d=t[i].g),c.append(s),e(r).append(c),0==i&&e(r)[i].className.includes("OneSearchBox-")&&(e(r)[i].className=e(r)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(r).addClass("OneSearchBox-"+t[i].g)):e(r).append(s)}}else e(r).hide()},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function C(){if(!(null==u||u.length<p-1||p<=0)){var t,n="",i=M(l.OneSearchDS,u[p-1].rt,u[p-1].n);null!=i&&""!=i.ItemTemplate&&(n=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?u[p-1].k:u[p-1].l),t=u[p-1].l,l.MultiSelect?e(a).val(""):e(a).val(t),s=e(a).val(),T(u[p-1],n),l.AutoSelectFirstItem&&O(p-1),l.OnSelect&&l.OnSelect(u[p-1]),p=0,l.TestMode||e(r).html("")}}function y(t,i,o){var c="",d="";if(null!=i&&null!=i||(i=!1),null!=o&&null!=o||(o=!1),void 0!==u&&null!=u&&0!=u.length){var h=M(l.OneSearchDS,u[t].rt,u[t].n);null!=h&&""!=h.ItemTemplate&&(d=null!=h.Selector&&null!=h.Selector&&"k"==h.Selector?u[t].k:u[t].l),c=u[t].l,1!=o||c.toLowerCase().startsWith(e(a).val().toLowerCase())?(l.MultiSelect?(e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")):(null!=h&&1!=h.SkipSelect?e(a).val(c):e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")),s=e(a).val(),t>=0&&v&&(e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=h&&1!=h.SkipSelect&&T(u[t],d),l.OnSelect&&l.OnSelect(u[t]),l.TestMode||i||e(r).html(""),l.MultiSelect&&setTimeout((function(){e(a).focus()}),200)):e(n).val("")}}function O(t){var i="";if(void 0!==u&&null!=u&&0!=u.length){var r=M(l.OneSearchDS,u[t].rt,u[t].n);if(null!=r&&""!=r.ItemTemplate&&(null!=r.Selector&&null!=r.Selector&&"k"==r.Selector?u[t].k:u[t].l),(i=u[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(a).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(a).val(),"ig");e(n).val(i.replace(o,e(a).val())),s=e(a).val()}else e(n).val("")}}function T(t,n,r){if(l.MultiSelect){if(null==t)return;var s=e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n),c=n.split(";"),d=M(l.OneSearchDS,t.rt,t.n);for(i=0;i<c.length&&null!=d;i++)if(!(c[i].length<2)&&(-1==(";"+s.val().toLowerCase()+";").indexOf(";"+c[i].toLowerCase()+";")||r)){r||s.val(s.val()+";"+c[i]);var u=e("<div>").addClass("agora-onesearch-multi-sel-item-cont").attr("id","multiitem"+e(a).attr("id")+"_"+t.rt+"_"+t.n+c[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).append(e("<a>").addClass("agora-onesearch-multi-sel-item-close").attr("title","Click here to hide this area filter.").attr("id","multiitem_close_"+e(a).attr("id")+"_"+t.rt+"_"+t.n+c[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).attr("val",c[i]).html('<i class="aga aga-close"></i>').click((function(){I(e(this),t,e(this).attr("val"))}))).append(e("<a>").html(d.MultiItemTemplate.replace("{$l}",c[i]).replace("{$d}",c[i])));o.append(u)}!r&&l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}else{if(e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n).val(n)}}function I(t,n,i){var o=e("#"+e(a).attr("id")+"_"+n.rt+"_"+n.n);0!=o.val().indexOf(";")&&o.val(";"+o.val()),o.val(o.val().replace(";"+i,"")),e(t).parent().remove(),""!=o.val()&&0!=e(r).find("div.agora-onesearch-multi-sel-item-cont").length||(e(r).html(""),e(r).hide()),l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}function x(t){m=!0,t>0?p<e(r).find("a").length&&p++:p>1&&p--,e(r).find("a").each((function(){e(this).removeClass(l.HighlightItemCss)})),e(r).find(l.EnableCategoryView?"a[idx="+p+"]":"a:nth-child("+p+")").addClass(l.HighlightItemCss)}function b(e){if(null==e||0==e.length)return 0;var t=e.width();return t+=parseInt(e.css("padding-left"),10)+parseInt(e.css("padding-right"),10),t+=parseInt(e.css("borderLeftWidth"),10)+parseInt(e.css("borderRightWidth"),10),""!=l.ParentContainer&&(t+=e.offset().left),t}function _(e){if(null==e||0==e.length)return 0;var t=e.height();return t+=parseInt(e.css("padding-top"),10)+parseInt(e.css("padding-bottom"),10),t+=parseInt(e.css("borderTopWidth"),10)+parseInt(e.css("borderBottomWidth"),10),t+=e.position().top,""!=l.ParentContainer&&(t+=e.offset().top),t}function M(e,t,l){if(null!=h[t+"_"+l])return h[t+"_"+l];for(k=0;k<e.RecordTypes.length;k++)for(j=0;e.RecordTypes[k].Name==t&&j<e.RecordTypes[k].Fields.length;j++)if(e.RecordTypes[k].Fields[j].Name==l)return h[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function L(e,t){return e.replace(new RegExp("("+function(e){return(e+"").replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1")}(t)+")","gi"),"<strong>$1</strong>")}}})}},t={};function l(a){var n=t[a];if(void 0!==n)return n.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,l),i.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";l.r(a);l(803)})(),a})()));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQW9CaUIsRUFBS3pOLElBQ0gsb0JBQVgwTixRQUEwQkEsT0FBT0MsYUFDMUNWLE9BQU9DLGVBQWVsTixFQUFTME4sT0FBT0MsWUFBYSxDQUFFM0MsTUFBTyxXQUU3RGlDLE9BQU9DLGVBQWVsTixFQUFTLGFBQWMsQ0FBRWdMLE9BQU8sR0FBTyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhPbmVTZWFyY2guanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwi77u/KGZ1bmN0aW9uICgkKSB7XHJcblxyXG4gICAgLy9BdHRhY2ggdGhpcyBuZXcgbWV0aG9kIHRvIGpRdWVyeVxyXG4gICAgJC5mbi5leHRlbmQoe1xyXG5cclxuICAgICAgICAvL1RoaXMgaXMgd2hlcmUgeW91IHdyaXRlIHlvdXIgcGx1Z2luJ3MgbmFtZVxyXG4gICAgICAgIE9uZVNlYXJjaDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vU2V0IHRoZSBkZWZhdWx0IHZhbHVlcywgdXNlIGNvbW1hIHRvIHNlcGFyYXRlIHRoZSBzZXR0aW5ncywgZXhhbXBsZTpcclxuICAgICAgICAgICAgdmFyIF9kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgICAgIFNlcnZpY2VVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgT25lU2VhcmNoTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hEUzogbnVsbCxcclxuICAgICAgICAgICAgICAgIE1pbkNoYXJMaW1pdDogMyxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUN1cnJlbnRMb2NhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVQcmVMaXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEF1dG9TZWxlY3RGaXJzdEl0ZW06IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgUmVzdWx0TGltaXQ6IDEwLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlVG91Y2g6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIERhdGFTb3VyY2VDb250cm9sOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQ29udGFpbmVyQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIEl0ZW1Dc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0SXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBSZWdpb246ICdVUycsXHJcbiAgICAgICAgICAgICAgICBMb2NhbGU6ICdOT05FJyxcclxuICAgICAgICAgICAgICAgIEhlbHBUZXh0OiAnJyxcclxuICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3RCb3hJZDogJycsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdFNob3dIZWxwVGV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIE11bHRpS2V5d29yZERlbGltaXRlcjogJycsXHJcbiAgICAgICAgICAgICAgICBMb2FkaW5nSW1hZ2VVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgUGFyZW50Q29udGFpbmVyOiAnJyxcclxuICAgICAgICAgICAgICAgIEJlZm9yZUNhbGw6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBBZnRlckNhbGw6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblN1Y2Nlc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbkVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25TZWxlY3Q6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblRleHRDaGFuZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uSW5jcmVtZW50YWxTZWFyY2g6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbk11bHRpU2VsZWN0UmVtb3ZlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgU2VhcmNoTW9kZTogJ0RhdGFiYXNlJywgLy8gQ2FjaGUsIERhdGFiYXNlLCBTbWFydFxyXG4gICAgICAgICAgICAgICAgVGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgU3RpY2t5TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVDYXRlZ29yeVZpZXc6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBfb3B0aW9ucyA9ICQuZXh0ZW5kKF9kZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHZhciBfdGFyZ2V0Q29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfdGFyZ2V0QXV0b0NvbnRyb2wgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX29uZVNlYXJjaEJveCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfTXVsdGlTZWxlY3RCb3ggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICB2YXIgX2xhc3RTZWFyY2h3b3JkID0gJyc7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3JlcXVlc3QgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX3Jlc3Bvc2VDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfaXRlbVRlcGxhdGVDYWNoZSA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgX2hpZ2hsaWdodElkeCA9IDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2lzT25BcnJvd1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvL0l0ZXJhdGUgb3ZlciB0aGUgY3VycmVudCBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50c1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIEluaXQoJCh0aGlzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gSW5pdChvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5TdGlja3lNb2RlICYmICFfb3B0aW9ucy5UZXN0TW9kZSkgX29wdGlvbnMuVGVzdE1vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIF90YXJnZXRDb250cm9sID0gb2JqO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RhcmdldEF1dG9Db250cm9sID0gJCgnaW5wdXRbaWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfQVVUT19JVEVNXCJdJylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGJyb3dzZXIgYXV0b2NvbXBsZXRlIG9uIGlucHV0XHJcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmluZ195b3VyX3NpdGUvVHVybmluZ19vZmZfZm9ybV9hdXRvY29tcGxldGlvblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignYXV0b2NvbXBsZXRlJywgJ25vcGUnKTtcclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCduYW1lJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICdfJykgKyAobmV3IERhdGUoKSkudmFsdWVPZigpKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94ID0gJCgnPGRpdj4nKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX09uZVNlYXJjaCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygncG9zaXRpb24nLCAoX29wdGlvbnMuRW5hYmxlVG91Y2ggPyAncmVsYXRpdmUnIDogJ2Fic29sdXRlJykpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygndG9wJywgZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoX29wdGlvbnMuQ29udGFpbmVyQ3NzKVxyXG4gICAgICAgICAgICAgICAgICAgIC5odG1sKF9vcHRpb25zLkhlbHBUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5QYXJlbnRDb250YWluZXIpLmFwcGVuZChfb25lU2VhcmNoQm94KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5pbnNlcnRBZnRlcigkKF90YXJnZXRDb250cm9sKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuY2xvc2VzdCgnZGl2JykuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkuY3NzKCdkaXNwbGF5JykgPT0gJ2Jsb2NrJyAmJiAkKF90YXJnZXRDb250cm9sKS5odG1sKCkgIT0gJycpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lID09ICdDbG9zZUFyZWEnKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgLy9NZGxSZWxvYWRDb250cm9sU3RhdGUoJCh0aGlzKSwgJCh0aGlzKS5jbG9zZXN0KCdbZGF0YS1zZWFyY2hdJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94ID0gJCgnIycgKyBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX011bHRpU2VsZWN0Qm94ICE9IG51bGwgJiYgX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94LmFkZENsYXNzKF9vcHRpb25zLk11bHRpU2VsZWN0Qm94Q3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9jaGVjayBpcyBsb2NhdGlvbiBzZWFyY2ggZW5hYmxlZFxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXQgPSAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxuZyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMT05HXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJkcyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGxhdCkgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChsbmcpICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiAocmRzKSAhPSAndW5kZWZpbmVkJyAmJiBsYXQgIT0gJycgJiYgbG5nICE9ICcnICYmIHJkcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkgLyogdGFiICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzIC8qIGVudGVyICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0gJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4ID4gMCkgc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCk7IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lzT25BcnJvd1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FzZSAzNyAvKiBsZWZ0ICovOlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4IC8qIHVwICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0SXRlbSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOSAvKiByaWdodCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSgwLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MCAvKiBkb3duICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0SXRlbSgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI3IC8qIGVzY2FwZSAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbVRlcGxhdGVDYWNoZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2hpZ2hsaWdodElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94LmNzcygndG9wJywgZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleXVwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0NiB8fCBlLmtleUNvZGUgPT0gODggfHwgZS5rZXlDb2RlID09IDg2KSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIF90YXJnZXRBdXRvQ29udHJvbC52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBpZiAoX29wdGlvbnMuT25TZWFyY2gpIF9vcHRpb25zLk9uU2VhcmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmICFfaXNPbkFycm93U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSAxMyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuT25JbmNyZW1lbnRhbFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID49IF9vcHRpb25zLk1pbkNoYXJMaW1pdCB8fCBfb3B0aW9ucy5FbmFibGVQcmVMaXN0IHx8IF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikgJChfb25lU2VhcmNoQm94KS5zaG93KCk7IGVsc2UgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkuaW5kZXhPZihfbGFzdEtleXdvcmQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0Nikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2xhc3RTZWFyY2h3b3JkID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBjaGFuZ2UgdGhlIGxhc3QgYW5kIGN1cnJlbnQgdmFsdWUgaW4gdGhlIGtleXdvcmQsIHRoZW4gbm8gbmVlZCB0byBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfbGFzdEtleXdvcmQgPT0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uVGV4dENoYW5nZSkgX29wdGlvbnMuT25UZXh0Q2hhbmdlKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgYXNzb2NpYXRlZCBjb250cm9scyBzaW5jZSB0aGUga2V5d29yZCBoYXMgYmVlbiBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2wobnVsbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBjdXJyZW50IHZhbHVlIG9mIHRoZSB0ZXh0IGJvb3ggYXMgbGFzdCB2YWx1ZS9rZXl3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdWdnZXN0aW9uIGJveCBpcyBoaWRkZW4gdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoX29uZVNlYXJjaEJveCkuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5Mb2FkaW5nSW1hZ2VVcmwgIT0gJycgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID49IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJzxpbWcgc3JjPVwiJyArIF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCArICdcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX011bHRpU2VsZWN0Qm94LmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90ZW1wQ29udE11bHQgPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJChfTXVsdGlTZWxlY3RCb3guaHRtbCgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90ZW1wQ29udE11bHQpLmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6JChcXCcjJyArIG9wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCArICcgIycgKyAkKHRoaXMpLmF0dHIoJ2lkJykgKyAnXFwnKS50cmlnZ2VyKFxcJ2NsaWNrXFwnKScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdFNob3dIZWxwVGV4dCkgX29wdGlvbnMuSGVscFRleHQgPSAnPGRpdiBzdHlsZT1cInBhZGRpbmc6N3B4XCI+PGZvbnQgc3R5bGU9XCJjb2xvcjpyZWRcIj5Zb3UgaGF2ZSBhbHJlYWR5IHNlbGVjdGVkPC9mb250PicgKyAoKF9vcHRpb25zLlN0aWNreU1vZGUpID8gJzxhIGNsYXNzPVwiQ2xvc2VBcmVhXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0aXRsZT1cIkNsaWNrIGhlcmUgdG8gaGlkZSBzZWxlY3RlZCBmaWx0ZXJzLlwiIG9uY2xpY2s9XCIkKFxcJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJyArICdcXCcpLmhpZGUoKTtcIj5DbG9zZTwvYT4nIDogJycpICsgJzxociBzdHlsZT1cIm1hcmdpbjowcHggMHB4IDdweCAwcHhcIiAvPicgKyBfdGVtcENvbnRNdWx0Lmh0bWwoKSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90ZW1wQ29udE11bHQpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGlvbnMuSGVscFRleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCAmJiBfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoX29uZVNlYXJjaEJveCkuZmluZCgnW2RhdGEtbG9jYXRpb24tc2VhcmNoXScpLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuSGVscFRleHQgIT0gJycgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKF9vcHRpb25zLkhlbHBUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5ibHVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmICFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc01hbnVhbFNlbGVjdCA9ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGlzTWFudWFsU2VsZWN0KSA9PSAndW5kZWZpbmVkJyB8fCBpc01hbnVhbFNlbGVjdCA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5UZXN0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID4gMCAmJiBfb3B0aW9ucy5UZXN0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfb3B0aW9ucy5TdGlja3lNb2RlICYmICQoX29uZVNlYXJjaEJveCkuZmluZCgnZGl2LmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2lzLWRpcnR5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BbmltYXRlUGxhY2Vob2xkZXJUZXh0ID09IHRydWUgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KCQoX3RhcmdldENvbnRyb2wpLCAnJywgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24gJiYgKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaHR0cHMnKSA+IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lLmluZGV4T2YoJ2xvY2FsaG9zdCcpID4gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtbG9jYXRpb25cIj48L2k+JyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0VuYWJsZUN1cnJlbnRMb2NhdGlvbkxhYmVsJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdyZWQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWR4JywgLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnZ2V0LW15LWRpcmVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLWxvY2F0aW9uLXNlYXJjaCcsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdmVyKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3I6cmVkJyk7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7IHNlYXJjaE5lYXJieSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCd0YXAnLCBmdW5jdGlvbiAoKSB7IHNlYXJjaE5lYXJieSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXJOZWFyYnkoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnI2RyYXdfc2VhcmNoJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoTmVhcmJ5KGlkeCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwocG9zaXRpb24uY29vcmRzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwocG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgoJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRGVmYXVsdFNlYXJjaFJhZGl1cycpICE9IG51bGwgJiYgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRGVmYXVsdFNlYXJjaFJhZGl1cycpICE9ICcwJykgPyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgOiAnNScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KHsgXCJrXCI6IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSArICd8JyArIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIFwiblwiOiBcIklEQ0xBVElUVURFfElEQ0xPTkdJVFVERVwiLCBcInJ0XCI6IFwiTE9DQVRJT05cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU3VjY2VzcykgX29wdGlvbnMuT25TdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oaWR4KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoS2V5d29yZCgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfbGFzdFNlYXJjaHdvcmQgPT0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgJiYgIV9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhbHJlYWR5IGEgcmVxdWVzdCBub3QgeWV0IGNvbXBsZXRlZCB0aGVuIHRoYXQgbmVlZCB0byBzdG9wL2Fib3J0IGJlZm9yZSBzdGFhcnRpbmcgbmV3IG9uZVxyXG4gICAgICAgICAgICAgICAgaWYgKF9yZXF1ZXN0ICE9IG51bGwpIF9yZXF1ZXN0LmFib3J0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgX2xhc3RLZXl3b3JkID0gJyc7IGVsc2UgX2xhc3RTZWFyY2h3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5FbmFibGVQcmVMaXN0ICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfcmVxdWVzdCA9ICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogX29wdGlvbnMuU2VydmljZVVybCArIFwiP0tleXdvcmQ9XCIgKyAoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgPyAnJyA6ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnJlcGxhY2UoLyMvZywgJyUyMycpKSArICcmdD0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogKHsgXCJLZXl3b3JkXCI6ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpLCBcIlNlYXJjaE1vZGVcIjogX29wdGlvbnMuU2VhcmNoTW9kZSwgXCJPbmVTZWFyY2hOYW1lXCI6IF9vcHRpb25zLk9uZVNlYXJjaE5hbWUsIFwiUmVnaW9uXCI6IF9vcHRpb25zLlJlZ2lvbiwgXCJMb2NhbGVcIjogX29wdGlvbnMuTG9jYWxlLCBcIkFkZGl0aW9uYWxXaGVyZVwiOiAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdBZGRpdGlvbmFsV2hlcmUnKSB9KSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNwb3NlQ2FjaGUgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkIHx8IGRhdGEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW1EYXRhID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZmllbGQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jYXRlZ29yeWl0ZW0gPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jYXRlb2dvcnluYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gaGlnaGxpZ2h0S2V5d29yZChkYXRhW2ldLmwsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgZGF0YVtpXS5ydCwgZGF0YVtpXS5uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfZmllbGQuSXRlbVRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfaXRlbURhdGEucmVwbGFjZSgneyRkfScsIGRhdGFbaV0uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maWVsZC5JdGVtVGVtcGxhdGVzW2pdLkxvY2FsZSA9PSBfb3B0aW9ucy5Mb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGVzW2pdLlRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5UZW1wbGF0ZS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbSA9ICQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoX2l0ZW1EYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3BhZGRpbmcnLCAnM3B4JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd0ZXh0LWRlY29yYXRpb24nLCAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnY29sb3InLCAnYmxhY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZHgnLCBpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmFkZENsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZWRvd24oZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsgc2VsZWN0SXRlbSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub24oJ3RhcCcsIGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIHRydWUpOyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb3VzZW91dChmdW5jdGlvbiAoKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgJiYgX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9TZWxlY3RJdGVtKGksIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDYXRlZ29yeVZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NhdGVvZ29yeW5hbWUgIT0gZGF0YVtpXS5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0gPSAkKCc8ZGl2PicpLmFkZENsYXNzKCdPbmVTZWFyY2hCb3gtY2F0ZWdvcnktJysgZGF0YVtpXS5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbS5hcHBlbmQgKCQoJzxzcGFuPicpLmh0bWwoZGF0YVtpXS5nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlb2dvcnluYW1lID0gZGF0YVtpXS5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZChfaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2NhdGVnb3J5aXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZS5pbmNsdWRlcygnT25lU2VhcmNoQm94LScpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZSA9ICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLnJlcGxhY2UoL1xcYk9uZVNlYXJjaEJveC1bQS1aYS16XSpcXGIvZywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC0nICsgZGF0YVtpXS5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2VydmljZSAoYWdvcmFPbmVTZWFyY2gpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSgpIHtcclxuICAgICAgICBpZiAoX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoIDwgKF9oaWdobGlnaHRJZHggLSAxKSB8fCBfaGlnaGxpZ2h0SWR4IDw9IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLnJ0LCBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLmw7XHJcblxyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKF9sYWJlbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXSwgX3NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSBhdXRvU2VsZWN0SXRlbSgoX2hpZ2hsaWdodElkeCAtIDEpKTtcclxuICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdKTtcclxuICAgICAgICBfaGlnaGxpZ2h0SWR4ID0gMDtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlKSAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNlbGVjdEl0ZW0oaWR4LCBub2NsZWFyLCBhdXRvU2VsZWN0KSB7XHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChub2NsZWFyID09IHVuZGVmaW5lZCB8fCBub2NsZWFyID09IG51bGwpIG5vY2xlYXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB1bmRlZmluZWQgfHwgYXV0b1NlbGVjdCA9PSBudWxsKSBhdXRvU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbaWR4XS5ydCwgX3Jlc3Bvc2VDYWNoZVtpZHhdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbGFiZWwgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuXHJcbiAgICAgICAgaWYgKGF1dG9TZWxlY3QgPT0gdHJ1ZSAmJiAhX2xhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgkKF90YXJnZXRDb250cm9sKS52YWwoKS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiZfZmllbGQuU2tpcFNlbGVjdCAhPSB0cnVlKSAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTsgZWxzZSAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSBjbGVhck5lYXJieSgpO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbaWR4XSwgX3NlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtpZHhdKTtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLlRlc3RNb2RlICYmICFub2NsZWFyKSAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmZvY3VzKCk7IH0sIDIwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGF1dG9TZWxlY3RJdGVtKGlkeCkge1xyXG4gICAgICAgIHZhciBfbGFiZWwgPSAnJztcclxuICAgICAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgICBpZiAodHlwZW9mIChfcmVzcG9zZUNhY2hlKSA9PSAndW5kZWZpbmVkJyB8fCBfcmVzcG9zZUNhY2hlID09IG51bGwgfHwgX3Jlc3Bvc2VDYWNoZS5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIF9yZXNwb3NlQ2FjaGVbaWR4XS5ydCwgX3Jlc3Bvc2VDYWNoZVtpZHhdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5rO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbGFiZWwgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuXHJcbiAgICAgICAgaWYgKCFfbGFiZWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXCwvZywgJycpLnN0YXJ0c1dpdGgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXCwvZywgJycpKSkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgIHZhciByZWdFeCA9IG5ldyBSZWdFeHAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCksIFwiaWdcIik7XHJcbiAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbChfbGFiZWwucmVwbGFjZShyZWdFeCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpKTtcclxuXHJcbiAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVsb2FkTXVsdGlTZWxlY3RPbkxvYWQoKSB7XHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkXj1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ1wiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9pdGVtID0ge307IC8vW3sgXCJrXCI6IFwiQ2hhcmxvdHRlXCIsIFwibFwiOiBcIkNoYXJsb3R0ZSwgTkNcIiwgXCJuXCI6IFwiQ0lUWVwiLCBcInJ0XCI6IFwiQ01OQ01OXCIgfV1cclxuICAgICAgICAgICAgICAgIHZhciBfaXRlbVZhbHVlID0gJCh0aGlzKS5hdHRyKCdpZCcpLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgICAgICAgICBfaXRlbS5ydCA9IF9pdGVtVmFsdWVbX2l0ZW1WYWx1ZS5sZW5ndGggLSAyXTtcclxuICAgICAgICAgICAgICAgIF9pdGVtLm4gPSBfaXRlbVZhbHVlW19pdGVtVmFsdWUubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgJCh0aGlzKS52YWwoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBiaW5kQXNzb2NpYXRlQ29udHJvbChpdGVtLCB2YWx1ZSwgaW5pdGlhbExvYWQpIHtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pLnZhbCh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgX2N0cmxNdWx0aUZpZWxkID0gJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubik7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlSXRlbXMgPSB2YWx1ZS5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIGl0ZW0ucnQsIGl0ZW0ubik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3ZhbHVlSXRlbXMubGVuZ3RoICYmIF9maWVsZCAhPSBudWxsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChfdmFsdWVJdGVtc1tpXS5sZW5ndGggPCAyKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGlmICgoJzsnICsgX2N0cmxNdWx0aUZpZWxkLnZhbCgpLnRvTG93ZXJDYXNlKCkgKyAnOycpLmluZGV4T2YoJzsnICsgX3ZhbHVlSXRlbXNbaV0udG9Mb3dlckNhc2UoKSArICc7JykgPT0gLTEgfHwgaW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxMb2FkKSBfY3RybE11bHRpRmllbGQudmFsKF9jdHJsTXVsdGlGaWVsZC52YWwoKSArICc7JyArIF92YWx1ZUl0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9tdWx0aVNlbGVjdEl0ZW0gPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnbXVsdGlpdGVtJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgX3ZhbHVlSXRlbXNbaV0ucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvW15BLXowLTldL2csICdfJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsICdDbGljayBoZXJlIHRvIGhpZGUgdGhpcyBhcmVhIGZpbHRlci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJ211bHRpaXRlbV9jbG9zZV8nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyBfdmFsdWVJdGVtc1tpXS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9bXkEtejAtOV0vZywgJ18nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd2YWwnLCBfdmFsdWVJdGVtc1tpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtY2xvc2VcIj48L2k+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbU11bHRpU2VsZWN0KCQodGhpcyksIGl0ZW0sICQodGhpcykuYXR0cigndmFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfZmllbGQuTXVsdGlJdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIF92YWx1ZUl0ZW1zW2ldKS5yZXBsYWNlKCd7JGR9JywgX3ZhbHVlSXRlbXNbaV0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF9NdWx0aVNlbGVjdEJveC5hcHBlbmQoX211bHRpU2VsZWN0SXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5pdGlhbExvYWQgJiYgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSkgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYXNNdWx0aVNlbGVjdGVkSXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIChfb3B0aW9ucy5NdWx0aVNlbGVjdCAmJiBfTXVsdGlTZWxlY3RCb3guZmluZCgnYS5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKS5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZW1vdmVGcm9tTXVsdGlTZWxlY3QobWUsIGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9jdHJsTXVsdGlGaWVsZCA9ICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pO1xyXG4gICAgICAgIGlmIChfY3RybE11bHRpRmllbGQudmFsKCkuaW5kZXhPZignOycpICE9IDApIF9jdHJsTXVsdGlGaWVsZC52YWwoJzsnICsgX2N0cmxNdWx0aUZpZWxkLnZhbCgpKTtcclxuICAgICAgICBfY3RybE11bHRpRmllbGQudmFsKF9jdHJsTXVsdGlGaWVsZC52YWwoKS5yZXBsYWNlKCc7JyArIHZhbHVlLCAnJykpO1xyXG5cclxuICAgICAgICAvLyQoJyNtdWx0aWl0ZW0nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyB2YWx1ZS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKSkucmVtb3ZlKCk7XHJcbiAgICAgICAgJChtZSkucGFyZW50KCkucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgIGlmIChfY3RybE11bHRpRmllbGQudmFsKCkgPT0gXCJcIiB8fCAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2Rpdi5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUpIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gaGlnaGxpZ2h0SXRlbShkaXJlY3Rpb24pIHtcclxuICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA+IDApIC8qZG93biovIHtcclxuICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPCAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2EnKS5sZW5ndGgpIF9oaWdobGlnaHRJZHgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSAvKnVwKi8ge1xyXG4gICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA+IDEpIF9oaWdobGlnaHRJZHgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChfb25lU2VhcmNoQm94KS5maW5kKCdhJykuZWFjaChmdW5jdGlvbiAoKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pO1xyXG4gICAgICAgICQoX29uZVNlYXJjaEJveCkuZmluZCgoX29wdGlvbnMuRW5hYmxlQ2F0ZWdvcnlWaWV3KSA/ICdhW2lkeD0nICsgX2hpZ2hsaWdodElkeCArICddJyA6ICdhOm50aC1jaGlsZCgnICsgX2hpZ2hsaWdodElkeCArICcpJykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VG90YWxXaWR0aE9mQ29udHJvbChvYmplY3QpIHtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdC53aWR0aCgpO1xyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLWxlZnRcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIpLCAxMCk7IC8vVG90YWwgUGFkZGluZyBXaWR0aFxyXG4gICAgICAgIC8vdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1sZWZ0XCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLXJpZ2h0XCIpLCAxMCk7IC8vVG90YWwgTWFyZ2luIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIiksIDEwKTsgLy9Ub3RhbCBCb3JkZXIgV2lkdGhcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBvYmplY3Qub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUb3RhbEhlaWdodE9mQ29udHJvbChvYmplY3QpIHtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsIHx8IG9iamVjdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdC5oZWlnaHQoKTtcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy10b3BcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwgMTApOyAvL1RvdGFsIFBhZGRpbmcgV2lkdGhcclxuICAgICAgICAvL3ZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tdG9wXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApOyAvL1RvdGFsIE1hcmdpbiBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLCAxMCk7IC8vVG90YWwgQm9yZGVyIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gb2JqZWN0LnBvc2l0aW9uKCkudG9wO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IG9iamVjdC5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmllbGRKc29uKG9iaiwgcnQsIGZpZWxkTmFtZSkge1xyXG4gICAgICAgIGlmIChfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV0gIT0gbnVsbCkgcmV0dXJuIF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXTtcclxuXHJcbiAgICAgICAgZm9yIChrID0gMDsgayA8IG9iai5SZWNvcmRUeXBlcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBvYmouUmVjb3JkVHlwZXNba10uTmFtZSA9PSBydCAmJiBqIDwgb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal0uTmFtZSA9PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV0gPSBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHByZWdfcXVvdGUoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIChzdHIgKyAnJykucmVwbGFjZSgvKFtcXFxcXFwuXFwrXFwqXFw/XFxbXFxeXFxdXFwkXFwoXFwpXFx7XFx9XFw9XFwhXFw8XFw+XFx8XFw6XSkvZywgXCJcXFxcJDFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGlnaGxpZ2h0S2V5d29yZChzdHIsIGtleXdvcmQpIHtcclxuICAgICAgICAvL3JldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKHByZWdfcXVvdGUodG8pLCAnZ2knKSwgYnkpO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcIiArIHByZWdfcXVvdGUoa2V5d29yZCkgKyBcIilcIiwgJ2dpJyksIFwiPHN0cm9uZz4kMTwvc3Ryb25nPlwiKTtcclxuICAgIH1cclxufVxyXG59KTtcclxufSkoalF1ZXJ5KTtcclxuXHJcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwiYSIsImkiLCJzZWxmIiwiJCIsImpRdWVyeSIsImZuIiwiZXh0ZW5kIiwiT25lU2VhcmNoIiwib3B0aW9ucyIsIl9vcHRpb25zIiwiU2VydmljZVVybCIsIk9uZVNlYXJjaE5hbWUiLCJPbmVTZWFyY2hEUyIsIk1pbkNoYXJMaW1pdCIsIkVuYWJsZUN1cnJlbnRMb2NhdGlvbiIsIkVuYWJsZVByZUxpc3QiLCJBdXRvU2VsZWN0Rmlyc3RJdGVtIiwiUmVzdWx0TGltaXQiLCJFbmFibGVUb3VjaCIsIkRhdGFTb3VyY2UiLCJEYXRhU291cmNlQ29udHJvbCIsIkNvbnRhaW5lckNzcyIsIkl0ZW1Dc3MiLCJIaWdobGlnaHRJdGVtQ3NzIiwiUmVnaW9uIiwiTG9jYWxlIiwiSGVscFRleHQiLCJBbmltYXRlUGxhY2Vob2xkZXJUZXh0IiwiTXVsdGlTZWxlY3QiLCJNdWx0aVNlbGVjdEJveElkIiwiTXVsdGlTZWxlY3RTaG93SGVscFRleHQiLCJNdWx0aUtleXdvcmREZWxpbWl0ZXIiLCJMb2FkaW5nSW1hZ2VVcmwiLCJQYXJlbnRDb250YWluZXIiLCJCZWZvcmVDYWxsIiwiQWZ0ZXJDYWxsIiwiT25TdWNjZXNzIiwiT25FcnJvciIsIk9uU2VsZWN0IiwiT25UZXh0Q2hhbmdlIiwiT25TZWFyY2giLCJPbkluY3JlbWVudGFsU2VhcmNoIiwiT25NdWx0aVNlbGVjdFJlbW92ZSIsIlNlYXJjaE1vZGUiLCJUZXN0TW9kZSIsIlN0aWNreU1vZGUiLCJFbmFibGVDYXRlZ29yeVZpZXciLCJfdGFyZ2V0Q29udHJvbCIsIl90YXJnZXRBdXRvQ29udHJvbCIsIl9vbmVTZWFyY2hCb3giLCJfTXVsdGlTZWxlY3RCb3giLCJfbGFzdEtleXdvcmQiLCJfbGFzdFNlYXJjaHdvcmQiLCJfcmVxdWVzdCIsIl9yZXNwb3NlQ2FjaGUiLCJfaXRlbVRlcGxhdGVDYWNoZSIsIl9oaWdobGlnaHRJZHgiLCJfaXNPbkFycm93U2VsZWN0aW9uIiwiX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkIiwidGhpcyIsImVhY2giLCJvYmoiLCJhdHRyIiwicmVwbGFjZSIsIkRhdGUiLCJ2YWx1ZU9mIiwid2luZG93Iiwib25wb3BzdGF0ZSIsImV2ZW50IiwiY3NzIiwiZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2wiLCJnZXRUb3RhbFdpZHRoT2ZDb250cm9sIiwiYWRkQ2xhc3MiLCJodG1sIiwiYXBwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJjbG9zZXN0IiwiY2xpY2siLCJlIiwidGFyZ2V0IiwiY2xhc3NOYW1lIiwic2V0VGltZW91dCIsImZvY3VzIiwiTXVsdGlTZWxlY3RCb3hDc3MiLCJ2YWwiLCJfaXRlbSIsIl9pdGVtVmFsdWUiLCJzcGxpdCIsInJ0IiwibGVuZ3RoIiwibiIsImJpbmRBc3NvY2lhdGVDb250cm9sIiwibGF0IiwibG5nIiwicmRzIiwia2V5ZG93biIsImtleUNvZGUiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzZWxlY3RJdGVtIiwiaGlnaGxpZ2h0SXRlbSIsImhpZGUiLCJrZXlwcmVzcyIsInBhcnNlSW50IiwicHJldmVudERlZmF1bHQiLCJrZXl1cCIsInNob3ciLCJpbmRleE9mIiwic2VhcmNoS2V5d29yZCIsImZpbmQiLCJfdGVtcENvbnRNdWx0IiwiZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0IiwiY29uc29sZSIsImxvZyIsImJsdXIiLCJpc01hbnVhbFNlbGVjdCIsImRhdGEiLCJwYXJlbnQiLCJyZW1vdmVDbGFzcyIsIkluaXQiLCJkb2N1bWVudCIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJ0b0xvd2VyQ2FzZSIsImhvc3RuYW1lIiwibW91c2VvdmVyIiwic2VhcmNoTmVhcmJ5Iiwib24iLCJtb3VzZW91dCIsImlkeCIsIm5hdmlnYXRvciIsImdlb2xvY2F0aW9uIiwiZ2V0Q3VycmVudFBvc2l0aW9uIiwicG9zaXRpb24iLCJjb29yZHMiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImFib3J0IiwiYWpheCIsInR5cGUiLCJ1cmwiLCJnZXRUaW1lIiwiZGF0YVR5cGUiLCJzdWNjZXNzIiwidW5kZWZpbmVkIiwiX2l0ZW1EYXRhIiwiX2ZpZWxkIiwiX2NhdGVnb3J5aXRlbSIsIl9jYXRlb2dvcnluYW1lIiwiaGlnaGxpZ2h0S2V5d29yZCIsImwiLCJnZXRGaWVsZEpzb24iLCJJdGVtVGVtcGxhdGUiLCJkIiwiSXRlbVRlbXBsYXRlcyIsImoiLCJUZW1wbGF0ZSIsIm1vdXNlZG93biIsImF1dG9TZWxlY3RJdGVtIiwiZyIsImluY2x1ZGVzIiwic3RhdHVzQ29kZSIsIl9sYWJlbCIsIl9zZWxlY3RlZFZhbHVlIiwiU2VsZWN0b3IiLCJrIiwibm9jbGVhciIsImF1dG9TZWxlY3QiLCJzdGFydHNXaXRoIiwiU2tpcFNlbGVjdCIsInJlZ0V4IiwiUmVnRXhwIiwiaXRlbSIsInZhbHVlIiwiaW5pdGlhbExvYWQiLCJfY3RybE11bHRpRmllbGQiLCJfdmFsdWVJdGVtcyIsIl9tdWx0aVNlbGVjdEl0ZW0iLCJyZW1vdmVGcm9tTXVsdGlTZWxlY3QiLCJNdWx0aUl0ZW1UZW1wbGF0ZSIsIm1lIiwicmVtb3ZlIiwiZGlyZWN0aW9uIiwib2JqZWN0Iiwid2lkdGgiLCJvZmZzZXQiLCJsZWZ0IiwiaGVpZ2h0IiwidG9wIiwiZmllbGROYW1lIiwiUmVjb3JkVHlwZXMiLCJOYW1lIiwiRmllbGRzIiwic3RyIiwia2V5d29yZCIsInByZWdfcXVvdGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJzb3VyY2VSb290IjoiIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ibp-max",
3
- "version": "1.1.13",
3
+ "version": "1.1.14",
4
4
  "description": "Style & JS optimized",
5
5
  "main": "index.js",
6
6
  "scripts": {