AzuraCast/web/static/dist/app-0bd230d4a5.min.js

3 lines
52 KiB
JavaScript

function notify(e,a,t){var o={type:a,allow_dismiss:!0,label:"Cancel",className:"btn-xs btn-inverse align-right",placement:{from:"top",align:"right"},delay:1e4,z_index:8,animate:{enter:"animated fadeIn",exit:"animated fadeOut"},offset:{x:20,y:85}};t&&(o.placement.from="top",o.placement.align="center",o.offset.y=20),$.notify({message:e},o)}$(document).ready(function(){$("body").on("click","[data-ma-action]",function(e){e.preventDefault();var a,t=$(this);switch($(this).data("ma-action")){case"sidebar-open":var o=t.data("ma-target");$("body").addClass("sidebar-toggled"),$("#header, #header-alt, #main").append('<div data-ma-action="sidebar-close" class="ma-backdrop" />'),t.addClass("toggled"),$(o).addClass("toggled");break;case"sidebar-close":$("body").removeClass("sidebar-toggled"),$(".ma-backdrop").remove(),$(".sidebar, .ma-trigger").removeClass("toggled");break;case"submenu-toggle":t.next().slideToggle(200),t.parent().toggleClass("toggled");break;case"search-open":$("#header").addClass("search-toggled"),$("#top-search-wrap input").focus();break;case"search-close":$("#header").removeClass("search-toggled");break;case"clear-notification":var n=t.closest(".list-group"),i=n.find(".list-group-item"),s=i.size();t.parent().fadeOut(),n.find(".list-group").prepend('<i class="grid-loading hide-it"></i>'),n.find(".grid-loading").fadeIn(1500);var l=0;i.each(function(){var e=$(this);setTimeout(function(){e.addClass("animated fadeOutRightBig").delay(1e3).queue(function(){e.remove()})},l+=150)}),setTimeout(function(){$("#notifications").addClass("empty")},150*s+200);break;case"fullscreen":;(a=document.documentElement).requestFullscreen?a.requestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen?a.webkitRequestFullscreen():a.msRequestFullscreen&&a.msRequestFullscreen();break;case"clear-localstorage":swal({title:"Are you sure?",text:"All your saved localStorage values will be removed",type:"warning",showCancelButton:!0,confirmButtonText:"Yes, delete it!",closeOnConfirm:!1},function(){localStorage.clear(),swal("Done!","localStorage is cleared","success")});break;case"print":window.print();break;case"login-switch":var r=t.data("ma-block");t.closest(".lc-block").removeClass("toggled"),setTimeout(function(){$(r).addClass("toggled")});break;case"profile-edit":t.closest(".pmb-block").toggleClass("toggled");break;case"profile-edit-cancel":$(this).closest(".pmb-block").removeClass("toggled");break;case"action-header-open":ahParent=t.closest(".action-header").find(".ah-search"),ahParent.fadeIn(300),ahParent.find(".ahs-input").focus();break;case"action-header-close":ahParent.fadeOut(300),setTimeout(function(){ahParent.find(".ahs-input").val("")},350);break;case"wall-comment-open":t.closest(".wic-form").hasClass("toggled")||t.closest(".wic-form").addClass("toggled");break;case"wall-comment-close":t.closest(".wic-form").find("textarea").val(""),t.closest(".wic-form").removeClass("toggled");break;case"todo-form-open":t.closest(".t-add").addClass("toggled");break;case"todo-form-close":t.closest(".t-add").removeClass("toggled"),t.closest(".t-add").find("textarea").val("")}})}),$(function(){$("a.btn-danger").on("click",function(e){e.preventDefault();var a=$(this).attr("href");return swal({title:"Are you sure?",type:"warning",showCancelButton:!0,confirmButtonColor:"#3085d6",cancelButtonColor:"#d33",confirmButtonText:"Yes",closeOnConfirm:!1,showLoaderOnConfirm:!0},function(){window.location.href=a}),!1})}),$(function(){$("form.form").each(function(){var e=$(this);e.addClass("fa-form-engine fa-form"),e.find(".form-group > label").addClass("control-label"),e.find("input:not(input[type=button],input[type=submit],input[type=reset],input[type=radio],input[type=checkbox]),textarea,select").addClass("form-control"),e.find("select").wrap('<div class="select" />'),autosize(e.find("textarea")),e.find("input[type=radio]").each(function(){$(this).closest(".form-field").addClass("radio-group"),$(this).next("label").addBack().wrapAll('<div class="radio m-b-15" />')}),e.find("input[type=checkbox]").each(function(){$(this).closest(".form-field").addClass("checkbox-group"),$(this).next("label").addBack().wrapAll('<div class="checkbox m-b-15" />')}),e.find("input[type=checkbox],input[type=radio]").after('<i class="input-helper"></i>'),e.find("input[type=checkbox].inline").removeClass("inline").closest("div.checkbox").addClass("checkbox-inline"),e.find("input[type=radio].inline").removeClass("inline").closest("div.radio").addClass("radio-inline"),e.find("div.checkbox:not(.checkbox-inline)").addClass("m-b-15"),e.find("div.radio:not(.radio-inline)").addClass("m-b-15"),e.find(".help-block.form-error").parent().addClass("has-error"),e.find(".help-block.form-success").parent().addClass("has-success"),e.find(".help-block.form-warning").parent().addClass("has-warning"),e.find("input[type=button],input[type=submit],input[type=reset]").addClass("btn m-t-10")})}),/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&$("html").addClass("ismobile"),$(document).ready(function(){var e,a;if($("html").hasClass("ismobile")||$(".c-overflow")[0]&&(e="minimal-dark",a="y",$(".c-overflow").mCustomScrollbar({theme:e,scrollInertia:100,axis:"mousewheelaxis",mouseWheel:{enable:!0,axis:a,preventDefault:!0}})),$(".dropdown")[0]&&($("body").on("click",".dropdown.open .dropdown-menu",function(e){e.stopPropagation()}),$(".dropdown").on("shown.bs.dropdown",function(e){$(this).attr("data-animation")&&($animArray=[],$animation=$(this).data("animation"),$animArray=$animation.split(","),$animationIn="animated "+$animArray[0],$animationOut="animated "+$animArray[1],$animationDuration="",$animArray[2]?$animationDuration=$animArray[2]:$animationDuration=500,$(this).find(".dropdown-menu").removeClass($animationOut),$(this).find(".dropdown-menu").addClass($animationIn))}),$(".dropdown").on("hide.bs.dropdown",function(e){$(this).attr("data-animation")&&(e.preventDefault(),$this=$(this),$dropdownMenu=$this.find(".dropdown-menu"),$dropdownMenu.addClass($animationOut),setTimeout(function(){$this.removeClass("open")},$animationDuration))})),$(".auto-size")[0]&&autosize($(".auto-size")),$(".fg-line")[0]&&($("body").on("focus",".fg-line .form-control",function(){$(this).closest(".fg-line").addClass("fg-toggled")}),$("body").on("blur",".form-control",function(){var e=$(this).closest(".form-group, .input-group"),a=e.find(".form-control").val();e.hasClass("fg-float")?0==a.length&&$(this).closest(".fg-line").removeClass("fg-toggled"):$(this).closest(".fg-line").removeClass("fg-toggled")})),$(".fg-float")[0]&&$(".fg-float .form-control").each(function(){0==!$(this).val().length&&$(this).closest(".fg-line").addClass("fg-toggled")}),$("#input-slider")[0]){var t=document.getElementById("input-slider");noUiSlider.create(t,{start:[20],connect:"lower",range:{min:0,max:100}})}if($("#input-slider-range")[0]){var o=document.getElementById("input-slider-range");noUiSlider.create(o,{start:[40,70],connect:!0,range:{min:0,max:100}})}if($("#input-slider-value")[0]){var n=document.getElementById("input-slider-value");noUiSlider.create(n,{start:[10,50],connect:!0,range:{min:0,max:100}}),n.noUiSlider.on("update",function(e,a){document.getElementById("input-slider-value-output").innerHTML=e[a]})}$("input-mask")[0]&&$(".input-mask").mask(),$(".html-editor")[0]&&$(".html-editor").summernote({height:150}),$(".html-editor-click")[0]&&($("body").on("click",".hec-button",function(){$(".html-editor-click").summernote({focus:!0}),$(".hec-save").show()}),$("body").on("click",".hec-save",function(){$(".html-editor-click").code(),$(".html-editor-click").destroy(),$(".hec-save").hide()})),$(".html-editor-airmod")[0]&&$(".html-editor-airmod").summernote({airMode:!0}),$(".date-time-picker")[0]&&$(".date-time-picker").datetimepicker(),$(".time-picker")[0]&&$(".time-picker").datetimepicker({format:"LT"}),$(".date-picker")[0]&&$(".date-picker").datetimepicker({format:"DD/MM/YYYY"}),$(".date-picker").on("dp.hide",function(){$(this).closest(".dtp-container").removeClass("fg-toggled"),$(this).blur()}),$(".lightbox")[0]&&$(".lightbox").lightGallery({enableTouch:!0}),$("body").on("click",".a-prevent",function(e){e.preventDefault()}),$(".collapse")[0]&&($(".collapse").on("show.bs.collapse",function(e){$(this).closest(".panel").find(".panel-heading").addClass("active")}),$(".collapse").on("hide.bs.collapse",function(e){$(this).closest(".panel").find(".panel-heading").removeClass("active")}),$(".collapse.in").each(function(){$(this).closest(".panel").find(".panel-heading").addClass("active")})),$('[data-toggle="tooltip"]')[0]&&$('[data-toggle="tooltip"]').tooltip(),$('[data-toggle="popover"]')[0]&&$('[data-toggle="popover"]').popover(),$("html").hasClass("ie9")&&$("input, textarea").placeholder({customClass:"ie9-placeholder"})}),$(document).ready(function(){"function"==typeof zxcvbn&&$("input[type=password].strength").on("keyup",function(e){var a=zxcvbn($(this).val()),t=a.score,o=$(this).closest(".form-group");o.length||(o=$(this).closest("div"));var n=o.find(".help-block.password-explanation");if(!n.length){n=$('<small class="help-block password-explanation" />');var i=o.find("label");i.length?i.after(n):$(this).after(n),n=o.find(".help-block.password-explanation")}switch(a.feedback.warning?n.text(a.feedback.warning).show():n.hide(),o.removeClass("has-success has-warning has-error"),t){case 0:case 1:o.addClass("has-error");break;case 2:case 3:o.addClass("has-warning");break;case 4:o.addClass("has-success")}})});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vdGlmeS5qcyIsImFjdGlvbnMuanMiLCJjb25maXJtLWRhbmdlci5qcyIsImZvcm1zLmpzIiwiZnVuY3Rpb25zLmpzIiwicGFzc3dvcmQtc2VjdXJpdHkuanMiXSwibmFtZXMiOlsibm90aWZ5IiwibWVzc2FnZSIsInR5cGUiLCJtaW5pbWFsX2xheW91dCIsImdyb3dsU2V0dGluZ3MiLCJhbGxvd19kaXNtaXNzIiwibGFiZWwiLCJjbGFzc05hbWUiLCJwbGFjZW1lbnQiLCJmcm9tIiwiYWxpZ24iLCJkZWxheSIsInpfaW5kZXgiLCJhbmltYXRlIiwiZW50ZXIiLCJleGl0Iiwib2Zmc2V0IiwieCIsInkiLCIkIiwiZG9jdW1lbnQiLCJyZWFkeSIsIm9uIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZWxlbWVudCIsIiR0aGlzIiwidGhpcyIsImRhdGEiLCJ0YXJnZXQiLCJhZGRDbGFzcyIsImFwcGVuZCIsInJlbW92ZUNsYXNzIiwicmVtb3ZlIiwibmV4dCIsInNsaWRlVG9nZ2xlIiwicGFyZW50IiwidG9nZ2xlQ2xhc3MiLCJmb2N1cyIsImNsb3Nlc3QiLCJmaW5kIiwieiIsInNpemUiLCJmYWRlT3V0IiwicHJlcGVuZCIsImZhZGVJbiIsInciLCJlYWNoIiwic2V0VGltZW91dCIsInF1ZXVlIiwiZG9jdW1lbnRFbGVtZW50IiwicmVxdWVzdEZ1bGxzY3JlZW4iLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsInN3YWwiLCJ0aXRsZSIsInRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvblRleHQiLCJjbG9zZU9uQ29uZmlybSIsImxvY2FsU3RvcmFnZSIsImNsZWFyIiwid2luZG93IiwicHJpbnQiLCJsb2dpbmJsb2NrIiwiYWhQYXJlbnQiLCJ2YWwiLCJoYXNDbGFzcyIsImxpbmtVcmwiLCJhdHRyIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJzaG93TG9hZGVyT25Db25maXJtIiwibG9jYXRpb24iLCJocmVmIiwiJGZvcm0iLCJ3cmFwIiwiYXV0b3NpemUiLCJhZGRCYWNrIiwid3JhcEFsbCIsImFmdGVyIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInRoZW1lIiwibW91c2V3aGVlbGF4aXMiLCJtQ3VzdG9tU2Nyb2xsYmFyIiwic2Nyb2xsSW5lcnRpYSIsImF4aXMiLCJtb3VzZVdoZWVsIiwiZW5hYmxlIiwic3RvcFByb3BhZ2F0aW9uIiwiJGFuaW1BcnJheSIsIiRhbmltYXRpb24iLCJzcGxpdCIsIiRhbmltYXRpb25JbiIsIiRhbmltYXRpb25PdXQiLCIkYW5pbWF0aW9uRHVyYXRpb24iLCIkZHJvcGRvd25NZW51IiwicCIsImkiLCJsZW5ndGgiLCJzbGlkZXIiLCJnZXRFbGVtZW50QnlJZCIsIm5vVWlTbGlkZXIiLCJjcmVhdGUiLCJzdGFydCIsImNvbm5lY3QiLCJyYW5nZSIsIm1pbiIsIm1heCIsInNsaWRlclJhbmdlIiwic2xpZGVyUmFuZ2VWYWx1ZSIsInZhbHVlcyIsImhhbmRsZSIsImlubmVySFRNTCIsIm1hc2siLCJzdW1tZXJub3RlIiwiaGVpZ2h0Iiwic2hvdyIsImNvZGUiLCJkZXN0cm95IiwiaGlkZSIsImFpck1vZGUiLCJkYXRldGltZXBpY2tlciIsImZvcm1hdCIsImJsdXIiLCJsaWdodEdhbGxlcnkiLCJlbmFibGVUb3VjaCIsInRvb2x0aXAiLCJwb3BvdmVyIiwicGxhY2Vob2xkZXIiLCJjdXN0b21DbGFzcyIsInp4Y3ZibiIsInJlc3VsdCIsInNjb3JlIiwiZ3JvdXAiLCJleHBsYW5hdGlvbiIsImZlZWRiYWNrIiwid2FybmluZyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBQUEsT0FBQUMsRUFBQUMsRUFBQUMsR0FFQSxJQUFBQyxHQUNBRixLQUFBQSxFQUNBRyxlQUFBLEVBQ0FDLE1BQUEsU0FDQUMsVUFBQSxpQ0FDQUMsV0FDQUMsS0FBQSxNQUNBQyxNQUFBLFNBRUFDLE1BQUEsSUFD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QUNBMkcsRUFBQTNHLFNBQUEsZUFDQSxNQUVBLEtBQUEsRUFDQTJHLEVBQUEzRyxTQUFBIiwiZmlsZSI6ImFwcC5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBub3RpZnkobWVzc2FnZSwgdHlwZSwgbWluaW1hbF9sYXlvdXQpIHtcclxuXHJcbiAgICB2YXIgZ3Jvd2xTZXR0aW5ncyA9IHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIGFsbG93X2Rpc21pc3M6IHRydWUsXHJcbiAgICAgICAgbGFiZWw6ICdDYW5jZWwnLFxyXG4gICAgICAgIGNsYXNzTmFtZTogJ2J0bi14cyBidG4taW52ZXJzZSBhbGlnbi1yaWdodCcsXHJcbiAgICAgICAgcGxhY2VtZW50OiB7XHJcbiAgICAgICAgICAgIGZyb206ICd0b3AnLFxyXG4gICAgICAgICAgICBhbGlnbjogJ3JpZ2h0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsYXk6IDEwMDAwLFxyXG4gICAgICAgIHpfaW5kZXg6IDgsXHJcbiAgICAgICAgYW5pbWF0ZToge1xyXG4gICAgICAgICAgICBlbnRlcjogJ2FuaW1hdGVkIGZhZGVJbicsXHJcbiAgICAgICAgICAgIGV4aXQ6ICdhbmltYXRlZCBmYWRlT3V0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb2Zmc2V0OiB7XHJcbiAgICAgICAgICAgIHg6IDIwLFxyXG4gICAgICAgICAgICB5OiA4NVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaWYgKG1pbmltYWxfbGF5b3V0KSB7XHJcbiAgICAgICAgZ3Jvd2xTZXR0aW5ncy5wbGFjZW1lbnQuZnJvbSA9ICd0b3AnO1xyXG4gICAgICAgIGdyb3dsU2V0dGluZ3MucGxhY2VtZW50LmFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgZ3Jvd2xTZXR0aW5ncy5vZmZzZXQueSA9IDIwO1xyXG4gICAgfVxyXG5cclxuICAgICQubm90aWZ5KHsgbWVzc2FnZTogbWVzc2FnZSB9LCBncm93bFNldHRpbmdzKTtcclxuXHJcbn0iLCIkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJ1tkYXRhLW1hLWFjdGlvbl0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcclxuICAgICAgICB2YXIgYWN0aW9uID0gJCh0aGlzKS5kYXRhKCdtYS1hY3Rpb24nKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcclxuXHJcbiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgICAgU2lkZWJhciAmIENoYXQgT3Blbi9DbG9zZVxyXG4gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgICAgICAgICBjYXNlICdzaWRlYmFyLW9wZW4nOlxyXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICR0aGlzLmRhdGEoJ21hLXRhcmdldCcpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJhY2tkcm9wID0gJzxkaXYgZGF0YS1tYS1hY3Rpb249XCJzaWRlYmFyLWNsb3NlXCIgY2xhc3M9XCJtYS1iYWNrZHJvcFwiIC8+JztcclxuXHJcbiAgICAgICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ3NpZGViYXItdG9nZ2xlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCgnI2hlYWRlciwgI2hlYWRlci1hbHQsICNtYWluJykuYXBwZW5kKGJhY2tkcm9wKTtcclxuICAgICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKCd0b2dnbGVkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRhcmdldCkuYWRkQ2xhc3MoJ3RvZ2dsZWQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3NpZGViYXItY2xvc2UnOlxyXG4gICAgICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdzaWRlYmFyLXRvZ2dsZWQnKTtcclxuICAgICAgICAgICAgICAgICQoJy5tYS1iYWNrZHJvcCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgJCgnLnNpZGViYXIsIC5tYS10cmlnZ2VyJykucmVtb3ZlQ2xhc3MoJ3RvZ2dsZWQnKVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgICAgTWFpbm1lbnUgU3VibWVudSBUb2dnbGVcclxuICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgY2FzZSAnc3VibWVudS10b2dnbGUnOlxyXG4gICAgICAgICAgICAgICAgJHRoaXMubmV4dCgpLnNsaWRlVG9nZ2xlKDIwMCk7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS50b2dnbGVDbGFzcygndG9nZ2xlZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgICAgVG9wIFNlYXJjaCBPcGVuL0Nsb3NlXHJcbiAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgIC8vT3BlblxyXG4gICAgICAgICAgICBjYXNlICdzZWFyY2gtb3Blbic6XHJcbiAgICAgICAgICAgICAgICAkKCcjaGVhZGVyJykuYWRkQ2xhc3MoJ3NlYXJjaC10b2dnbGVkJyk7XHJcbiAgICAgICAgICAgICAgICAkKCcjdG9wLXNlYXJjaC13cmFwIGlucHV0JykuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIC8vQ2xvc2VcclxuICAgICAgICAgICAgY2FzZSAnc2VhcmNoLWNsb3NlJzpcclxuICAgICAgICAgICAgICAgICQoJyNoZWFkZXInKS5yZW1vdmVDbGFzcygnc2VhcmNoLXRvZ2dsZWQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAgIEhlYWRlciBOb3RpZmljYXRpb24gQ2xlYXJcclxuICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgY2FzZSAnY2xlYXItbm90aWZpY2F0aW9uJzpcclxuICAgICAgICAgICAgICAgIHZhciB4ID0gJHRoaXMuY2xvc2VzdCgnLmxpc3QtZ3JvdXAnKTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0geC5maW5kKCcubGlzdC1ncm91cC1pdGVtJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeiA9IHkuc2l6ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLmZhZGVPdXQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB4LmZpbmQoJy5saXN0LWdyb3VwJykucHJlcGVuZCgnPGkgY2xhc3M9XCJncmlkLWxvYWRpbmcgaGlkZS1pdFwiPjwvaT4nKTtcclxuICAgICAgICAgICAgICAgIHguZmluZCgnLmdyaWQtbG9hZGluZycpLmZhZGVJbigxNTAwKTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHcgPSAwO1xyXG4gICAgICAgICAgICAgICAgeS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHogPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgei5hZGRDbGFzcygnYW5pbWF0ZWQgZmFkZU91dFJpZ2h0QmlnJykuZGVsYXkoMTAwMCkucXVldWUoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHoucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHcrPTE1MCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIC8vUG9wdXAgZW1wdHkgbWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyNub3RpZmljYXRpb25zJykuYWRkQ2xhc3MoJ2VtcHR5Jyk7XHJcbiAgICAgICAgICAgICAgICB9LCAoeioxNTApKzIwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgICBGdWxsc2NyZWVuIEJyb3dzaW5nXHJcbiAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgIGNhc2UgJ2Z1bGxzY3JlZW4nOlxyXG4gICAgICAgICAgICAgICAgLy9MYXVuY2hcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxhdW5jaEludG9GdWxsc2NyZWVuKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihlbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vRXhpdFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhpdEZ1bGxzY3JlZW4oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXVuY2hJbnRvRnVsbHNjcmVlbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgICAgQ2xlYXIgTG9jYWwgU3RvcmFnZVxyXG4gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgICAgICAgICBjYXNlICdjbGVhci1sb2NhbHN0b3JhZ2UnOlxyXG4gICAgICAgICAgICAgICAgc3dhbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQXJlIHlvdSBzdXJlP1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiQWxsIHlvdXIgc2F2ZWQgbG9jYWxTdG9yYWdlIHZhbHVlcyB3aWxsIGJlIHJlbW92ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIndhcm5pbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIlllcywgZGVsZXRlIGl0IVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlT25Db25maXJtOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBzd2FsKFwiRG9uZSFcIiwgXCJsb2NhbFN0b3JhZ2UgaXMgY2xlYXJlZFwiLCBcInN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAgIFByaW50XHJcbiAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgIGNhc2UgJ3ByaW50JzpcclxuXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucHJpbnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAgIExvZ2luIFdpbmRvdyBTd2l0Y2hcclxuICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgY2FzZSAnbG9naW4tc3dpdGNoJzpcclxuICAgICAgICAgICAgICAgIHZhciBsb2dpbmJsb2NrID0gJHRoaXMuZGF0YSgnbWEtYmxvY2snKTtcclxuICAgICAgICAgICAgICAgIHZhciBsb2dpblBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5sYy1ibG9jaycpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2luUGFyZW50LnJlbW92ZUNsYXNzKCd0b2dnbGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICQobG9naW5ibG9jaykuYWRkQ2xhc3MoJ3RvZ2dsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgICAgUHJvZmlsZSBFZGl0L0VkaXQgQ2FuY2VsXHJcbiAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgIC8vRWRpdFxyXG4gICAgICAgICAgICBjYXNlICdwcm9maWxlLWVkaXQnOlxyXG4gICAgICAgICAgICAgICAgJHRoaXMuY2xvc2VzdCgnLnBtYi1ibG9jaycpLnRvZ2dsZUNsYXNzKCd0b2dnbGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdwcm9maWxlLWVkaXQtY2FuY2VsJzpcclxuICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnBtYi1ibG9jaycpLnJlbW92ZUNsYXNzKCd0b2dnbGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgICBBY3Rpb24gSGVhZGVyIE9wZW4vQ2xvc2VcclxuICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgLy9PcGVuXHJcbiAgICAgICAgICAgIGNhc2UgJ2FjdGlvbi1oZWFkZXItb3Blbic6XHJcbiAgICAgICAgICAgICAgICBhaFBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5hY3Rpb24taGVhZGVyJykuZmluZCgnLmFoLXNlYXJjaCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGFoUGFyZW50LmZhZGVJbigzMDApO1xyXG4gICAgICAgICAgICAgICAgYWhQYXJlbnQuZmluZCgnLmFocy1pbnB1dCcpLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvL0Nsb3NlXHJcbiAgICAgICAgICAgIGNhc2UgJ2FjdGlvbi1oZWFkZXItY2xvc2UnOlxyXG4gICAgICAgICAgICAgICAgYWhQYXJlbnQuZmFkZU91dCgzMDApO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgIGFoUGFyZW50LmZpbmQoJy5haHMtaW5wdXQnKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgfSwgMzUwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAgIFdhbGwgQ29tbWVudCBPcGVuL0Nsb3NlXHJcbiAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgIC8vT3BlblxyXG4gICAgICAgICAgICBjYXNlICd3YWxsLWNvbW1lbnQtb3Blbic6XHJcbiAgICAgICAgICAgICAgICBpZighKCR0aGlzKS5jbG9zZXN0KCcud2ljLWZvcm0nKS5oYXNDbGFzcygndG9nZ2xlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuY2xvc2VzdCgnLndpYy1mb3JtJykuYWRkQ2xhc3MoJ3RvZ2dsZWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIC8vQ2xvc2VcclxuICAgICAgICAgICAgY2FzZSAnd2FsbC1jb21tZW50LWNsb3NlJzpcclxuICAgICAgICAgICAgICAgICR0aGlzLmNsb3Nlc3QoJy53aWMtZm9ybScpLmZpbmQoJ3RleHRhcmVhJykudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICR0aGlzLmNsb3Nlc3QoJy53aWMtZm9ybScpLnJlbW92ZUNsYXNzKCd0b2dnbGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgICBUb2RvIEZvcm0gT3Blbi9DbG9zZVxyXG4gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgICAgICAgICAvL09wZW5cclxuICAgICAgICAgICAgY2FzZSAndG9kby1mb3JtLW9wZW4nOlxyXG4gICAgICAgICAgICAgICAgJHRoaXMuY2xvc2VzdCgnLnQtYWRkJykuYWRkQ2xhc3MoJ3RvZ2dsZWQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIC8vQ2xvc2VcclxuICAgICAgICAgICAgY2FzZSAndG9kby1mb3JtLWNsb3NlJzpcclxuICAgICAgICAgICAgICAgICR0aGlzLmNsb3Nlc3QoJy50LWFkZCcpLnJlbW92ZUNsYXNzKCd0b2dnbGVkJyk7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5jbG9zZXN0KCcudC1hZGQnKS5maW5kKCd0ZXh0YXJlYScpLnZhbCgnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG4iLCIkKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICQoJ2EuYnRuLWRhbmdlcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICB2YXIgbGlua1VybCA9ICQodGhpcykuYXR0cignaHJlZicpO1xyXG5cclxuICAgICAgICBzd2FsKHtcclxuICAgICAgICAgICAgdGl0bGU6ICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICcjMzA4NWQ2JyxcclxuICAgICAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6ICcjZDMzJyxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdZZXMnLFxyXG4gICAgICAgICAgICBjbG9zZU9uQ29uZmlybTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dMb2FkZXJPbkNvbmZpcm06IHRydWVcclxuICAgICAgICB9LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsaW5rVXJsO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgfSk7XHJcblxyXG59KTtcclxuXHJcbiIsIiQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgJCgnZm9ybS5mb3JtJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgJGZvcm0gPSAkKHRoaXMpO1xyXG5cclxuICAgICAgICAkZm9ybS5hZGRDbGFzcygnZmEtZm9ybS1lbmdpbmUgZmEtZm9ybScpO1xyXG5cclxuICAgICAgICAkZm9ybS5maW5kKCcuZm9ybS1ncm91cCA+IGxhYmVsJykuYWRkQ2xhc3MoJ2NvbnRyb2wtbGFiZWwnKTtcclxuXHJcbiAgICAgICAgJGZvcm0uZmluZCgnaW5wdXQ6bm90KGlucHV0W3R5cGU9YnV0dG9uXSxpbnB1dFt0eXBlPXN1Ym1pdF0saW5wdXRbdHlwZT1yZXNldF0saW5wdXRbdHlwZT1yYWRpb10saW5wdXRbdHlwZT1jaGVja2JveF0pLHRleHRhcmVhLHNlbGVjdCcpLmFkZENsYXNzKCdmb3JtLWNvbnRyb2wnKTtcclxuICAgICAgICAkZm9ybS5maW5kKCdzZWxlY3QnKS53cmFwKCc8ZGl2IGNsYXNzPVwic2VsZWN0XCIgLz4nKTtcclxuXHJcbiAgICAgICAgYXV0b3NpemUoJGZvcm0uZmluZCgndGV4dGFyZWEnKSk7XHJcblxyXG4gICAgICAgICRmb3JtLmZpbmQoJ2lucHV0W3R5cGU9cmFkaW9dJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpLmFkZENsYXNzKCdyYWRpby1ncm91cCcpO1xyXG4gICAgICAgICAgICAkKHRoaXMpLm5leHQoJ2xhYmVsJykuYWRkQmFjaygpLndyYXBBbGwoJzxkaXYgY2xhc3M9XCJyYWRpbyBtLWItMTVcIiAvPicpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICRmb3JtLmZpbmQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZm9ybS1maWVsZCcpLmFkZENsYXNzKCdjaGVja2JveC1ncm91cCcpO1xyXG4gICAgICAgICAgICAkKHRoaXMpLm5leHQoJ2xhYmVsJykuYWRkQmFjaygpLndyYXBBbGwoJzxkaXYgY2xhc3M9XCJjaGVja2JveCBtLWItMTVcIiAvPicpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkZm9ybS5maW5kKCdpbnB1dFt0eXBlPWNoZWNrYm94XSxpbnB1dFt0eXBlPXJhZGlvXScpLmFmdGVyKCc8aSBjbGFzcz1cImlucHV0LWhlbHBlclwiPjwvaT4nKTtcclxuXHJcbiAgICAgICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0uaW5saW5lJykucmVtb3ZlQ2xhc3MoJ2lubGluZScpLmNsb3Nlc3QoJ2Rpdi5jaGVja2JveCcpLmFkZENsYXNzKCdjaGVja2JveC1pbmxpbmUnKTtcclxuICAgICAgICAkZm9ybS5maW5kKCdpbnB1dFt0eXBlPXJhZGlvXS5pbmxpbmUnKS5yZW1vdmVDbGFzcygnaW5saW5lJykuY2xvc2VzdCgnZGl2LnJhZGlvJykuYWRkQ2xhc3MoJ3JhZGlvLWlubGluZScpO1xyXG5cclxuICAgICAgICAkZm9ybS5maW5kKCdkaXYuY2hlY2tib3g6bm90KC5jaGVja2JveC1pbmxpbmUpJykuYWRkQ2xhc3MoJ20tYi0xNScpO1xyXG4gICAgICAgICRmb3JtLmZpbmQoJ2Rpdi5yYWRpbzpub3QoLnJhZGlvLWlubGluZSknKS5hZGRDbGFzcygnbS1iLTE1Jyk7XHJcblxyXG4gICAgICAgICRmb3JtLmZpbmQoJy5oZWxwLWJsb2NrLmZvcm0tZXJyb3InKS5wYXJlbnQoKS5hZGRDbGFzcygnaGFzLWVycm9yJyk7XHJcbiAgICAgICAgJGZvcm0uZmluZCgnLmhlbHAtYmxvY2suZm9ybS1zdWNjZXNzJykucGFyZW50KCkuYWRkQ2xhc3MoJ2hhcy1zdWNjZXNzJyk7XHJcbiAgICAgICAgJGZvcm0uZmluZCgnLmhlbHAtYmxvY2suZm9ybS13YXJuaW5nJykucGFyZW50KCkuYWRkQ2xhc3MoJ2hhcy13YXJuaW5nJyk7XHJcblxyXG4gICAgICAgICRmb3JtLmZpbmQoJ2lucHV0W3R5cGU9YnV0dG9uXSxpbnB1dFt0eXBlPXN1Ym1pdF0saW5wdXRbdHlwZT1yZXNldF0nKS5hZGRDbGFzcygnYnRuIG0tdC0xMCcpO1xyXG4gICAgfSk7XHJcblxyXG59KTsiLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIERldGVjdCBNb2JpbGUgQnJvd3NlclxyXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5pZiAoL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XHJcbiAgICAkKCdodG1sJykuYWRkQ2xhc3MoJ2lzbW9iaWxlJyk7XHJcbn1cclxuXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICBTY3JvbGxiYXJcclxuICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBmdW5jdGlvbiBzY3JvbGxCYXIoc2VsZWN0b3IsIHRoZW1lLCBtb3VzZXdoZWVsYXhpcykge1xyXG4gICAgICAgICQoc2VsZWN0b3IpLm1DdXN0b21TY3JvbGxiYXIoe1xyXG4gICAgICAgICAgICB0aGVtZTogdGhlbWUsXHJcbiAgICAgICAgICAgIHNjcm9sbEluZXJ0aWE6IDEwMCxcclxuICAgICAgICAgICAgYXhpczogJ21vdXNld2hlZWxheGlzJyxcclxuICAgICAgICAgICAgbW91c2VXaGVlbDoge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYXhpczogbW91c2V3aGVlbGF4aXMsXHJcbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEkKCdodG1sJykuaGFzQ2xhc3MoJ2lzbW9iaWxlJykpIHtcclxuICAgICAgICAvL09uIEN1c3RvbSBDbGFzc1xyXG4gICAgICAgIGlmICgkKCcuYy1vdmVyZmxvdycpWzBdKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbEJhcignLmMtb3ZlcmZsb3cnLCAnbWluaW1hbC1kYXJrJywgJ3knKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgRHJvcGRvd24gTWVudVxyXG4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICgkKCcuZHJvcGRvd24nKVswXSkge1xyXG4gICAgICAgIC8vUHJvcGFnYXRlXHJcbiAgICAgICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tbWVudScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJy5kcm9wZG93bicpLm9uKCdzaG93bi5icy5kcm9wZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtYW5pbWF0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgICRhbmltQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgICAgICRhbmltYXRpb24gPSAkKHRoaXMpLmRhdGEoJ2FuaW1hdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgJGFuaW1BcnJheSA9ICRhbmltYXRpb24uc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICRhbmltYXRpb25JbiA9ICdhbmltYXRlZCAnICsgJGFuaW1BcnJheVswXTtcclxuICAgICAgICAgICAgICAgICRhbmltYXRpb25PdXQgPSAnYW5pbWF0ZWQgJyArICRhbmltQXJyYXlbMV07XHJcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uRHVyYXRpb24gPSAnJ1xyXG4gICAgICAgICAgICAgICAgaWYgKCEkYW5pbUFycmF5WzJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGFuaW1hdGlvbkR1cmF0aW9uID0gNTAwOyAvL2lmIGR1cmF0aW9uIGlzIG5vdCBkZWZpbmVkLCBkZWZhdWx0IGlzIHNldCB0byA1MDBtc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGFuaW1hdGlvbkR1cmF0aW9uID0gJGFuaW1BcnJheVsyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5kcm9wZG93bi1tZW51JykucmVtb3ZlQ2xhc3MoJGFuaW1hdGlvbk91dClcclxuICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLmRyb3Bkb3duLW1lbnUnKS5hZGRDbGFzcygkYW5pbWF0aW9uSW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJy5kcm9wZG93bicpLm9uKCdoaWRlLmJzLmRyb3Bkb3duJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignZGF0YS1hbmltYXRpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgJGRyb3Bkb3duTWVudSA9ICR0aGlzLmZpbmQoJy5kcm9wZG93bi1tZW51Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgJGRyb3Bkb3duTWVudS5hZGRDbGFzcygkYW5pbWF0aW9uT3V0KTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICR0aGlzLnJlbW92ZUNsYXNzKCdvcGVuJylcclxuXHJcbiAgICAgICAgICAgICAgICB9LCAkYW5pbWF0aW9uRHVyYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgQXV0byBTaXplIFRleHRhcmVcclxuICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAoJCgnLmF1dG8tc2l6ZScpWzBdKSB7XHJcbiAgICAgICAgYXV0b3NpemUoJCgnLmF1dG8tc2l6ZScpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgVGV4dCBGaWVsZFxyXG4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8vQWRkIGJsdWUgYW5pbWF0ZWQgYm9yZGVyIGFuZCByZW1vdmUgd2l0aCBjb25kaXRpb24gd2hlbiBmb2N1cyBhbmQgYmx1clxyXG4gICAgaWYgKCQoJy5mZy1saW5lJylbMF0pIHtcclxuICAgICAgICAkKCdib2R5Jykub24oJ2ZvY3VzJywgJy5mZy1saW5lIC5mb3JtLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLmZnLWxpbmUnKS5hZGRDbGFzcygnZmctdG9nZ2xlZCcpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgICQoJ2JvZHknKS5vbignYmx1cicsICcuZm9ybS1jb250cm9sJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcCA9ICQodGhpcykuY2xvc2VzdCgnLmZvcm0tZ3JvdXAsIC5pbnB1dC1ncm91cCcpO1xyXG4gICAgICAgICAgICB2YXIgaSA9IHAuZmluZCgnLmZvcm0tY29udHJvbCcpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHAuaGFzQ2xhc3MoJ2ZnLWZsb2F0JykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZmctbGluZScpLnJlbW92ZUNsYXNzKCdmZy10b2dnbGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5mZy1saW5lJykucmVtb3ZlQ2xhc3MoJ2ZnLXRvZ2dsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQWRkIGJsdWUgYm9yZGVyIGZvciBwcmUtdmFsdWVkIGZnLWZsb3QgdGV4dCBmZWlsZHNcclxuICAgIGlmICgkKCcuZmctZmxvYXQnKVswXSkge1xyXG4gICAgICAgICQoJy5mZy1mbG9hdCAuZm9ybS1jb250cm9sJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpID0gJCh0aGlzKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZmctbGluZScpLmFkZENsYXNzKCdmZy10b2dnbGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgTm9VaVNsaWRlciAoSW5wdXQgU2xpZGVyKVxyXG4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8vQmFzaWNcclxuICAgIGlmICgkKCcjaW5wdXQtc2xpZGVyJylbMF0pIHtcclxuICAgICAgICB2YXIgc2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0LXNsaWRlcicpO1xyXG5cclxuICAgICAgICBub1VpU2xpZGVyLmNyZWF0ZShzbGlkZXIsIHtcclxuICAgICAgICAgICAgc3RhcnQ6IFsyMF0sXHJcbiAgICAgICAgICAgIGNvbm5lY3Q6ICdsb3dlcicsXHJcbiAgICAgICAgICAgIHJhbmdlOiB7XHJcbiAgICAgICAgICAgICAgICAnbWluJzogMCxcclxuICAgICAgICAgICAgICAgICdtYXgnOiAxMDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vUmFuZ2VcclxuICAgIGlmICgkKCcjaW5wdXQtc2xpZGVyLXJhbmdlJylbMF0pIHtcclxuICAgICAgICB2YXIgc2xpZGVyUmFuZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXQtc2xpZGVyLXJhbmdlJyk7XHJcblxyXG4gICAgICAgIG5vVWlTbGlkZXIuY3JlYXRlKHNsaWRlclJhbmdlLCB7XHJcbiAgICAgICAgICAgIHN0YXJ0OiBbNDAsIDcwXSxcclxuICAgICAgICAgICAgY29ubmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgcmFuZ2U6IHtcclxuICAgICAgICAgICAgICAgICdtaW4nOiAwLFxyXG4gICAgICAgICAgICAgICAgJ21heCc6IDEwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9SYW5nZSB3aXRoIHZhbHVlXHJcbiAgICBpZiAoJCgnI2lucHV0LXNsaWRlci12YWx1ZScpWzBdKSB7XHJcbiAgICAgICAgdmFyIHNsaWRlclJhbmdlVmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXQtc2xpZGVyLXZhbHVlJyk7XHJcblxyXG4gICAgICAgIG5vVWlTbGlkZXIuY3JlYXRlKHNsaWRlclJhbmdlVmFsdWUsIHtcclxuICAgICAgICAgICAgc3RhcnQ6IFsxMCwgNTBdLFxyXG4gICAgICAgICAgICBjb25uZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICByYW5nZToge1xyXG4gICAgICAgICAgICAgICAgJ21pbic6IDAsXHJcbiAgICAgICAgICAgICAgICAnbWF4JzogMTAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2xpZGVyUmFuZ2VWYWx1ZS5ub1VpU2xpZGVyLm9uKCd1cGRhdGUnLCBmdW5jdGlvbiAodmFsdWVzLCBoYW5kbGUpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0LXNsaWRlci12YWx1ZS1vdXRwdXQnKS5pbm5lckhUTUwgPSB2YWx1ZXNbaGFuZGxlXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICBJbnB1dCBNYXNrXHJcbiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKCQoJ2lucHV0LW1hc2snKVswXSkge1xyXG4gICAgICAgICQoJy5pbnB1dC1tYXNrJykubWFzaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICBTdW1tZXJub3RlIEhUTUwgRWRpdG9yXHJcbiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKCQoJy5odG1sLWVkaXRvcicpWzBdKSB7XHJcbiAgICAgICAgJCgnLmh0bWwtZWRpdG9yJykuc3VtbWVybm90ZSh7XHJcbiAgICAgICAgICAgIGhlaWdodDogMTUwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCQoJy5odG1sLWVkaXRvci1jbGljaycpWzBdKSB7XHJcbiAgICAgICAgLy9FZGl0XHJcbiAgICAgICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuaGVjLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnLmh0bWwtZWRpdG9yLWNsaWNrJykuc3VtbWVybm90ZSh7XHJcbiAgICAgICAgICAgICAgICBmb2N1czogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJCgnLmhlYy1zYXZlJykuc2hvdygpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC8vU2F2ZVxyXG4gICAgICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLmhlYy1zYXZlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAkKCcuaHRtbC1lZGl0b3ItY2xpY2snKS5jb2RlKCk7XHJcbiAgICAgICAgICAgICQoJy5odG1sLWVkaXRvci1jbGljaycpLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgJCgnLmhlYy1zYXZlJykuaGlkZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQWlyIE1vZGVcclxuICAgIGlmICgkKCcuaHRtbC1lZGl0b3ItYWlybW9kJylbMF0pIHtcclxuICAgICAgICAkKCcuaHRtbC1lZGl0b3ItYWlybW9kJykuc3VtbWVybm90ZSh7XHJcbiAgICAgICAgICAgIGFpck1vZGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgRGF0ZSBUaW1lIFBpY2tlclxyXG4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8vRGF0ZSBUaW1lIFBpY2tlclxyXG4gICAgaWYgKCQoJy5kYXRlLXRpbWUtcGlja2VyJylbMF0pIHtcclxuICAgICAgICAkKCcuZGF0ZS10aW1lLXBpY2tlcicpLmRhdGV0aW1lcGlja2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9UaW1lXHJcbiAgICBpZiAoJCgnLnRpbWUtcGlja2VyJylbMF0pIHtcclxuICAgICAgICAkKCcudGltZS1waWNrZXInKS5kYXRldGltZXBpY2tlcih7XHJcbiAgICAgICAgICAgIGZvcm1hdDogJ0xUJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vRGF0ZVxyXG4gICAgaWYgKCQoJy5kYXRlLXBpY2tlcicpWzBdKSB7XHJcbiAgICAgICAgJCgnLmRhdGUtcGlja2VyJykuZGF0ZXRpbWVwaWNrZXIoe1xyXG4gICAgICAgICAgICBmb3JtYXQ6ICdERC9NTS9ZWVlZJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgICQoJy5kYXRlLXBpY2tlcicpLm9uKCdkcC5oaWRlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuY2xvc2VzdCgnLmR0cC1jb250YWluZXInKS5yZW1vdmVDbGFzcygnZmctdG9nZ2xlZCcpO1xyXG4gICAgICAgICQodGhpcykuYmx1cigpO1xyXG4gICAgfSlcclxuXHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgIFdhdmVzXHJcbiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAoZnVuY3Rpb24oKXtcclxuICAgICBXYXZlcy5hdHRhY2goJy5idG46bm90KC5idG4taWNvbik6bm90KC5idG4tZmxvYXQpJyk7XHJcbiAgICAgV2F2ZXMuYXR0YWNoKCcuYnRuLWljb24sIC5idG4tZmxvYXQnLCBbJ3dhdmVzLWNpcmNsZScsICd3YXZlcy1mbG9hdCddKTtcclxuICAgICBXYXZlcy5pbml0KCk7XHJcbiAgICAgfSkoKTtcclxuICAgICAqL1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgIExpZ2h0Ym94XHJcbiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKCQoJy5saWdodGJveCcpWzBdKSB7XHJcbiAgICAgICAgJCgnLmxpZ2h0Ym94JykubGlnaHRHYWxsZXJ5KHtcclxuICAgICAgICAgICAgZW5hYmxlVG91Y2g6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgTGluayBwcmV2ZW50XHJcbiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuYS1wcmV2ZW50JywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICBCb290c3RyYXAgQWNjb3JkaW9uIEZpeFxyXG4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICgkKCcuY29sbGFwc2UnKVswXSkge1xyXG5cclxuICAgICAgICAvL0FkZCBhY3RpdmUgY2xhc3MgZm9yIG9wZW5lZCBpdGVtc1xyXG4gICAgICAgICQoJy5jb2xsYXBzZScpLm9uKCdzaG93LmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5maW5kKCcucGFuZWwtaGVhZGluZycpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnLmNvbGxhcHNlJykub24oJ2hpZGUuYnMuY29sbGFwc2UnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5wYW5lbCcpLmZpbmQoJy5wYW5lbC1oZWFkaW5nJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL0FkZCBhY3RpdmUgY2xhc3MgZm9yIHByZSBvcGVuZWQgaXRlbXNcclxuICAgICAgICAkKCcuY29sbGFwc2UuaW4nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcucGFuZWwnKS5maW5kKCcucGFuZWwtaGVhZGluZycpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgVG9vbHRpcHNcclxuICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAoJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpWzBdKSB7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgUG9wb3ZlclxyXG4gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICgkKCdbZGF0YS10b2dnbGU9XCJwb3BvdmVyXCJdJylbMF0pIHtcclxuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJwb3BvdmVyXCJdJykucG9wb3ZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICBJRSA5IFBsYWNlaG9sZGVyXHJcbiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKCQoJ2h0bWwnKS5oYXNDbGFzcygnaWU5JykpIHtcclxuICAgICAgICAkKCdpbnB1dCwgdGV4dGFyZWEnKS5wbGFjZWhvbGRlcih7XHJcbiAgICAgICAgICAgIGN1c3RvbUNsYXNzOiAnaWU5LXBsYWNlaG9sZGVyJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufSk7XHJcbiIsIlxyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLy8gU2hvdyBwYXNzd29yZCBzdHJlbmd0aCBtZXRlci5cclxuICAgIGlmICh0eXBlb2YgenhjdmJuID09PSAnZnVuY3Rpb24nKSB7XHJcblxyXG4gICAgICAgICQoJ2lucHV0W3R5cGU9cGFzc3dvcmRdLnN0cmVuZ3RoJykub24oJ2tleXVwJywgZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCAgPSB6eGN2Ym4oJCh0aGlzKS52YWwoKSksXHJcbiAgICAgICAgICAgICAgICBzY29yZSAgID0gcmVzdWx0LnNjb3JlO1xyXG5cclxuICAgICAgICAgICAgdmFyIGdyb3VwID0gJCh0aGlzKS5jbG9zZXN0KCcuZm9ybS1ncm91cCcpO1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAgPSAkKHRoaXMpLmNsb3Nlc3QoJ2RpdicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZXhwbGFuYXRpb24gPSBncm91cC5maW5kKCcuaGVscC1ibG9jay5wYXNzd29yZC1leHBsYW5hdGlvbicpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFleHBsYW5hdGlvbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gJCgnPHNtYWxsIGNsYXNzPVwiaGVscC1ibG9jayBwYXNzd29yZC1leHBsYW5hdGlvblwiIC8+Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gZ3JvdXAuZmluZCgnbGFiZWwnKTtcclxuICAgICAgICAgICAgICAgIGlmIChsYWJlbC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbC5hZnRlcihleHBsYW5hdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWZ0ZXIoZXhwbGFuYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gZ3JvdXAuZmluZCgnLmhlbHAtYmxvY2sucGFzc3dvcmQtZXhwbGFuYXRpb24nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5mZWVkYmFjay53YXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbi50ZXh0KHJlc3VsdC5mZWVkYmFjay53YXJuaW5nKS5zaG93KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbi5oaWRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdyb3VwLnJlbW92ZUNsYXNzKCdoYXMtc3VjY2VzcyBoYXMtd2FybmluZyBoYXMtZXJyb3InKTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoc2NvcmUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBncm91cC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwLmFkZENsYXNzKCdoYXMtd2FybmluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICBncm91cC5hZGRDbGFzcygnaGFzLXN1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbn0pOyJdfQ==